2024-05-15 18:16:40 -04:00
|
|
|
# Copyright (c) 2024 Cisco and/or its affiliates.
|
2018-09-21 12:27:45 +02:00
|
|
|
# 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)
|
2024-09-13 14:29:24 -04:00
|
|
|
$1_config_log ?= $(L)/$1.config.log
|
|
|
|
$1_build_log ?= $(L)/$1.build.log
|
|
|
|
$1_install_log ?= $(L)/$1.install.log
|
2018-09-21 12:27:45 +02:00
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
# Download
|
|
|
|
##############################################################################
|
2024-05-15 18:16:40 -04:00
|
|
|
$(D)/$($1_tarball):
|
|
|
|
mkdir -p $(D)
|
2018-09-21 12:27:45 +02:00
|
|
|
@if [ -e $(DL_CACHE_DIR)/$($1_tarball) ] ; \
|
2019-03-25 11:41:34 +01:00
|
|
|
then cp $(DL_CACHE_DIR)/$($1_tarball) $$@ ; \
|
2018-09-21 12:27:45 +02:00
|
|
|
else \
|
|
|
|
echo "Downloading $($1_url)" ; \
|
2019-03-25 11:41:34 +01:00
|
|
|
curl -o $$@ -LO $($1_url) ; \
|
2018-09-21 12:27:45 +02:00
|
|
|
fi
|
2019-03-25 11:41:34 +01:00
|
|
|
@rm -f $(B)/.$1.download.ok
|
2018-09-21 12:27:45 +02:00
|
|
|
|
2024-05-15 18:16:40 -04:00
|
|
|
$(B)/.$1.download.ok: $(D)/$($1_tarball)
|
2018-09-21 12:27:45 +02:00
|
|
|
@mkdir -p $(B)
|
|
|
|
$$(call h1,"validating $1 $($1_version) checksum")
|
2024-06-17 20:22:11 +02:00
|
|
|
@SHA256SUM=$$(shell openssl sha256 $$< | cut -f 2 -d " " -) ; \
|
|
|
|
(([ "$$$${SHA256SUM}" = "$($1_tarball_sha256sum)" ] && echo "SHA256 OK") || \
|
2018-09-21 12:27:45 +02:00
|
|
|
( echo "==========================================================" && \
|
|
|
|
echo "Bad Checksum!" && \
|
2024-06-17 20:22:11 +02:00
|
|
|
echo "Expected SHA256: $($1_tarball_sha256)" && \
|
|
|
|
echo "Calculated SHA256: $$$${SHA256SUM}" && \
|
2018-09-21 12:27:45 +02:00
|
|
|
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) \
|
2024-05-15 18:16:40 -04:00
|
|
|
--file $(D)/$($1_tarball)
|
2018-09-21 12:27:45 +02:00
|
|
|
@touch $$@
|
|
|
|
|
|
|
|
.PHONY: $1-extract
|
|
|
|
$1-extract: $(B)/.$1.extract.ok
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
# Patch
|
|
|
|
##############################################################################
|
2019-03-29 21:22:09 +01:00
|
|
|
$(B)/.$1.patch.ok: $(B)/.$1.extract.ok
|
2018-09-21 12:27:45 +02:00
|
|
|
$$(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
|
|
|
|
|
2023-02-02 13:29:28 +01:00
|
|
|
ifneq ($(filter $1,$(VPP_SKIP_EXTERNAL)), $1)
|
2023-02-24 16:40:58 +08:00
|
|
|
$(B)/.$1.config.ok: $(B)/.$1.patch.ok $(addprefix $(B)/.,$(addsuffix .install.ok,$($1_depends)))
|
2018-09-21 12:27:45 +02:00
|
|
|
$$(call h1,"configuring $1 $($1_version) - log: $$($1_config_log)")
|
|
|
|
@mkdir -p $$($1_build_dir)
|
|
|
|
$$(call $1_config_cmds)
|
|
|
|
@touch $$@
|
2023-02-02 13:29:28 +01:00
|
|
|
else
|
|
|
|
$(B)/.$1.config.ok:
|
|
|
|
$$(call h1,"Skipping $1 $($1_version)")
|
|
|
|
@mkdir -p $(B)
|
|
|
|
@touch $$@
|
|
|
|
endif
|
2018-09-21 12:27:45 +02:00
|
|
|
|
|
|
|
.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
|
|
|
|
|
2023-02-02 13:29:28 +01:00
|
|
|
ifneq ($(filter $1,$(VPP_SKIP_EXTERNAL)), $1)
|
2018-09-21 12:27:45 +02:00
|
|
|
$(B)/.$1.build.ok: $(B)/.$1.config.ok
|
|
|
|
$$(call h1,"building $1 $($1_version) - log: $$($1_build_log)")
|
|
|
|
$$(call $1_build_cmds)
|
|
|
|
@touch $$@
|
2023-02-02 13:29:28 +01:00
|
|
|
else
|
|
|
|
$(B)/.$1.build.ok:
|
|
|
|
$$(call h1,"Skipping $1 $($1_version)")
|
|
|
|
@mkdir -p $(B)
|
|
|
|
@touch $$@
|
|
|
|
endif
|
2018-09-21 12:27:45 +02:00
|
|
|
|
|
|
|
.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
|
|
|
|
|
2023-02-02 13:29:28 +01:00
|
|
|
ifneq ($(filter $1,$(VPP_SKIP_EXTERNAL)), $1)
|
2018-09-21 12:27:45 +02:00
|
|
|
$(B)/.$1.install.ok: $(B)/.$1.build.ok
|
|
|
|
$$(call h1,"installing $1 $($1_version) - log: $$($1_install_log)")
|
|
|
|
$$(call $1_install_cmds)
|
|
|
|
@touch $$@
|
2023-02-02 13:29:28 +01:00
|
|
|
else
|
|
|
|
$(B)/.$1.install.ok:
|
|
|
|
$$(call h1,"Skipping $1 $($1_version)")
|
|
|
|
@mkdir -p $(B)
|
|
|
|
@touch $$@
|
|
|
|
endif
|
2018-09-21 12:27:45 +02:00
|
|
|
|
|
|
|
.PHONY: $1-install
|
|
|
|
$1-install: $(B)/.$1.install.ok
|
|
|
|
|
2022-09-19 16:26:25 +02:00
|
|
|
.PHONY: $1-show-%
|
|
|
|
$1-show-%:
|
|
|
|
@echo $$($$*)
|
|
|
|
|
2018-09-21 12:27:45 +02:00
|
|
|
ALL_TARGETS += $1-install
|
|
|
|
endef
|