blob: b969d8fc5e7a4a3048a59e58ee6842af38f9cd34 [file] [log] [blame]
# Copyright (c) 2018 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
define h1
@echo "--- $(1)"
endef
define package
$1_tarball_strip_dirs ?= 0
$1_src_dir ?= $(B)/src-$1
$1_patch_dir ?= $(CURDIR)/patches/$1_$($1_version)
$1_build_dir ?= $(B)/build-$1
$1_install_dir ?= $(I)
$1_config_log ?= $(B)/$1.config.log
$1_build_log ?= $(B)/$1.build.log
$1_install_log ?= $(B)/$1.install.log
##############################################################################
# Download
##############################################################################
downloads/$($1_tarball):
mkdir -p downloads
@if [ -e $(DL_CACHE_DIR)/$($1_tarball) ] ; \
then cp $(DL_CACHE_DIR)/$($1_tarball) $$@ ; \
else \
echo "Downloading $($1_url)" ; \
curl -o $$@ -LO $($1_url) ; \
fi
@rm -f $(B)/.$1.download.ok
$(B)/.$1.download.ok: downloads/$($1_tarball)
@mkdir -p $(B)
$$(call h1,"validating $1 $($1_version) checksum")
@SUM=$$(shell openssl md5 $$< | cut -f 2 -d " " -) ; \
([ "$$$${SUM}" = "$($1_tarball_md5sum)" ] || \
( echo "==========================================================" && \
echo "Bad Checksum!" && \
echo "Expected: $($1_tarball_md5sum)" && \
echo "Calculated: $$$${SUM}" && \
echo "Please remove $$< and retry" && \
echo "==========================================================" && \
false ))
@touch $$@
.PHONY: $1-download
$1-download: $(B)/.$1.download.ok
##############################################################################
# Extract
##############################################################################
$(B)/.$1.extract.ok: $(B)/.$1.download.ok
$$(call h1,"extracting $1 $($1_version)")
@mkdir -p $$($1_src_dir)
@tar \
--directory $$($1_src_dir) \
--extract \
--strip-components=$$($1_tarball_strip_dirs) \
--file downloads/$($1_tarball)
@touch $$@
.PHONY: $1-extract
$1-extract: $(B)/.$1.extract.ok
##############################################################################
# Patch
##############################################################################
$(B)/.$1.patch.ok: $(B)/.$1.extract.ok
$$(call h1,"patching $1 $($1_version)")
ifneq ($$(wildcard $$($1_patch_dir)/*.patch),)
@for f in $$($1_patch_dir)/*.patch ; do \
echo "Applying patch: $$$$(basename $$$$f)" ; \
patch -p1 -d $$($1_src_dir) < $$$$f ; \
done
endif
@touch $$@
.PHONY: $1-patch
$1-patch: $(B)/.$1.patch.ok
##############################################################################
# Config
##############################################################################
ifeq ($$(call $1_config_cmds),)
define $1_config_cmds
@cd $$($1_build_dir) && \
CFLAGS="$$($1_cflags)" \
$$($1_src_dir)/configure \
--prefix=$$($1_install_dir) \
$$($1_configure_args) > $$($1_config_log)
endef
endif
ifneq ($(filter $1,$(VPP_SKIP_EXTERNAL)), $1)
$(B)/.$1.config.ok: $(B)/.$1.patch.ok $(addsuffix -install,$($1_depends))
$$(call h1,"configuring $1 $($1_version) - log: $$($1_config_log)")
@mkdir -p $$($1_build_dir)
$$(call $1_config_cmds)
@touch $$@
else
$(B)/.$1.config.ok:
$$(call h1,"Skipping $1 $($1_version)")
@mkdir -p $(B)
@touch $$@
endif
.PHONY: $1-config
$1-config: $(B)/.$1.config.ok
##############################################################################
# Build
##############################################################################
ifeq ($$(call $1_build_cmds),)
define $1_build_cmds
@$(MAKE) $(MAKE_ARGS) -C $$($1_build_dir) > $$($1_build_log)
endef
endif
ifneq ($(filter $1,$(VPP_SKIP_EXTERNAL)), $1)
$(B)/.$1.build.ok: $(B)/.$1.config.ok
$$(call h1,"building $1 $($1_version) - log: $$($1_build_log)")
$$(call $1_build_cmds)
@touch $$@
else
$(B)/.$1.build.ok:
$$(call h1,"Skipping $1 $($1_version)")
@mkdir -p $(B)
@touch $$@
endif
.PHONY: $1-build
$1-build: $(B)/.$1.build.ok
##############################################################################
# Install
##############################################################################
ifeq ($$(call $1_install_cmds),)
define $1_install_cmds
@$(MAKE) $(MAKE_ARGS) -C $$($1_build_dir) install > $$($1_install_log)
endef
endif
ifneq ($(filter $1,$(VPP_SKIP_EXTERNAL)), $1)
$(B)/.$1.install.ok: $(B)/.$1.build.ok
$$(call h1,"installing $1 $($1_version) - log: $$($1_install_log)")
$$(call $1_install_cmds)
@touch $$@
else
$(B)/.$1.install.ok:
$$(call h1,"Skipping $1 $($1_version)")
@mkdir -p $(B)
@touch $$@
endif
.PHONY: $1-install
$1-install: $(B)/.$1.install.ok
.PHONY: $1-show-%
$1-show-%:
@echo $$($$*)
ALL_TARGETS += $1-install
endef