/branches/18.06.1/include/download.mk |
@@ -0,0 +1,324 @@ |
# |
# Copyright (C) 2006-2012 OpenWrt.org |
# Copyright (C) 2016 LEDE project |
# |
# This is free software, licensed under the GNU General Public License v2. |
# See /LICENSE for more information. |
# |
|
PROJECT_GIT = https://git.openwrt.org |
|
OPENWRT_GIT = $(PROJECT_GIT) |
LEDE_GIT = $(PROJECT_GIT) |
|
ifdef PKG_SOURCE_VERSION |
PKG_VERSION ?= $(if $(PKG_SOURCE_DATE),$(PKG_SOURCE_DATE)-)$(call version_abbrev,$(PKG_SOURCE_VERSION)) |
PKG_SOURCE_SUBDIR ?= $(PKG_NAME)-$(PKG_VERSION) |
PKG_SOURCE ?= $(PKG_SOURCE_SUBDIR).tar.xz |
endif |
|
DOWNLOAD_RDEP=$(STAMP_PREPARED) $(HOST_STAMP_PREPARED) |
|
define dl_method_git |
$(if $(filter https://github.com/% git://github.com/%,$(1)),github_archive,git) |
endef |
|
# Try to guess the download method from the URL |
define dl_method |
$(strip \ |
$(if $(filter git,$(2)),$(call dl_method_git,$(1),$(2)), |
$(if $(2),$(2), \ |
$(if $(filter @APACHE/% @GITHUB/% @GNOME/% @GNU/% @KERNEL/% @SF/% @SAVANNAH/% ftp://% http://% https://% file://%,$(1)),default, \ |
$(if $(filter git://%,$(1)),$(call dl_method_git,$(1),$(2)), \ |
$(if $(filter svn://%,$(1)),svn, \ |
$(if $(filter cvs://%,$(1)),cvs, \ |
$(if $(filter hg://%,$(1)),hg, \ |
$(if $(filter sftp://%,$(1)),bzr, \ |
unknown \ |
) \ |
) \ |
) \ |
) \ |
) \ |
) \ |
) \ |
) \ |
) |
endef |
|
# code for creating tarballs from cvs/svn/git/bzr/hg/darcs checkouts - useful for mirror support |
dl_pack/bz2=bzip2 -c > $(1) |
dl_pack/gz=gzip -nc > $(1) |
dl_pack/xz=xz -zc -7e > $(1) |
dl_pack/unknown=$(error ERROR: Unknown pack format for file $(1)) |
define dl_pack |
$(if $(dl_pack/$(call ext,$(1))),$(dl_pack/$(call ext,$(1))),$(dl_pack/unknown)) |
endef |
define dl_tar_pack |
$(TAR) --numeric-owner --owner=0 --group=0 --sort=name $$$${TAR_TIMESTAMP:+--mtime="$$$$TAR_TIMESTAMP"} -c $(2) | $(call dl_pack,$(1)) |
endef |
|
ifdef CHECK |
check_escape=$(subst ','\'',$(1)) |
#') |
|
# $(1): suffix of the F_, C_ variables, e.g. hash_deprecated, hash_mismatch, etc. |
# $(2): filename |
# $(3): expected hash value |
# $(4): var name of the the form: {PKG_,Download/<name>:}{,MIRROR_}{HASH,MIRROR_HASH} |
check_warn_nofix = $(info $(shell printf "$(_R)WARNING: %s$(_N)" '$(call check_escape,$(call C_$(1),$(2),$(3),$(4)))')) |
ifndef FIXUP |
check_warn = $(check_warn_nofix) |
else |
check_warn = $(if $(filter-out undefined,$(origin F_$(1))),$(filter ,$(shell $(call F_$(1),$(2),$(3),$(4)) >&2)),$(check_warn_nofix)) |
endif |
|
gen_sha256sum = $(shell mkhash sha256 $(DL_DIR)/$(1)) |
|
ifdef FIXUP |
F_hash_deprecated = $(SCRIPT_DIR)/fixup-makefile.pl $(CURDIR)/Makefile fix-hash $(3) $(call gen_sha256sum,$(1)) $(2) |
F_hash_mismatch = $(F_hash_deprecated) |
F_hash_missing = $(SCRIPT_DIR)/fixup-makefile.pl $(CURDIR)/Makefile add-hash $(3) $(call gen_sha256sum,$(1)) |
endif |
|
# $(1): filename |
# $(2): expected hash value |
# $(3): var name of the the form: {PKG_,Download/<name>:}{,MIRROR_}{HASH,MIRROR_HASH} |
C_download_missing = $(1) is missing, please run make download before re-running this check |
C_hash_mismatch = $(3) does not match $(1) hash $(call gen_sha256sum,$(1)) |
C_hash_deprecated = $(3) uses deprecated hash, set to $(call gen_sha256sum,$(1)) |
C_hash_missing = $(3) is missing, set to $(call gen_sha256sum,$(1)) |
|
# $(1): filename |
# $(2): expected hash value |
# $(3): var name of the the form: {PKG_,Download/<name>:}{,MIRROR_}{HASH,MIRROR_HASH} |
check_hash = \ |
$(if $(wildcard $(DL_DIR)/$(1)), \ |
$(if $(filter-out x,$(2)), \ |
$(if $(filter 64,$(shell printf '%s' '$(2)' | wc -c)), \ |
$(if $(filter $(2),$(call gen_sha256sum,$(1))),, \ |
$(call check_warn,hash_mismatch,$(1),$(2),$(3)) \ |
), \ |
$(call check_warn,hash_deprecated,$(1),$(2),$(3)), \ |
), \ |
$(call check_warn,hash_missing,$(1),$(2),$(3)) \ |
), \ |
$(call check_warn,download_missing,$(1),$(2),$(3)) \ |
) |
|
ifdef FIXUP |
F_md5_deprecated = $(SCRIPT_DIR)/fixup-makefile.pl $(CURDIR)/Makefile rename-var $(2) $(3) |
endif |
|
C_md5_deprecated = Use of $(2) is deprecated, switch to $(3) |
|
check_md5 = \ |
$(if $(filter-out x,$(1)), \ |
$(call check_warn,md5_deprecated,$(1),$(2),$(3)) \ |
) |
|
hash_var = $(if $(filter-out x,$(1)),MD5SUM,HASH) |
endif |
|
define DownloadMethod/unknown |
echo "ERROR: No download method available"; false |
endef |
|
define DownloadMethod/default |
$(SCRIPT_DIR)/download.pl "$(DL_DIR)" "$(FILE)" "$(HASH)" "$(URL_FILE)" $(foreach url,$(URL),"$(url)") \ |
$(if $(filter check,$(1)), \ |
$(call check_hash,$(FILE),$(HASH),$(2)$(call hash_var,$(MD5SUM))) \ |
$(call check_md5,$(MD5SUM),$(2)MD5SUM,$(2)HASH) \ |
) |
endef |
|
# $(1): "check" |
# $(2): "PKG_" if <name> as in Download/<name> is "default", otherwise "Download/<name>:" |
# $(3): shell command sequence to do the download |
define wrap_mirror |
$(if $(if $(MIRROR),$(filter-out x,$(MIRROR_HASH))),$(SCRIPT_DIR)/download.pl "$(DL_DIR)" "$(FILE)" "$(MIRROR_HASH)" "" || ( $(3) ),$(3)) \ |
$(if $(filter check,$(1)), \ |
$(call check_hash,$(FILE),$(MIRROR_HASH),$(2)MIRROR_$(call hash_var,$(MIRROR_MD5SUM))) \ |
$(call check_md5,$(MIRROR_MD5SUM),$(2)MIRROR_MD5SUM,$(2)MIRROR_HASH) \ |
) |
endef |
|
define DownloadMethod/cvs |
$(call wrap_mirror,$(1),$(2), \ |
echo "Checking out files from the cvs repository..."; \ |
mkdir -p $(TMP_DIR)/dl && \ |
cd $(TMP_DIR)/dl && \ |
rm -rf $(SUBDIR) && \ |
[ \! -d $(SUBDIR) ] && \ |
cvs -d $(URL) export $(VERSION) $(SUBDIR) && \ |
echo "Packing checkout..." && \ |
$(call dl_tar_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \ |
mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \ |
rm -rf $(SUBDIR); \ |
) |
endef |
|
define DownloadMethod/svn |
$(call wrap_mirror,$(1),$(2), \ |
echo "Checking out files from the svn repository..."; \ |
mkdir -p $(TMP_DIR)/dl && \ |
cd $(TMP_DIR)/dl && \ |
rm -rf $(SUBDIR) && \ |
[ \! -d $(SUBDIR) ] && \ |
( svn help export | grep -q trust-server-cert && \ |
svn export --non-interactive --trust-server-cert -r$(VERSION) $(URL) $(SUBDIR) || \ |
svn export --non-interactive -r$(VERSION) $(URL) $(SUBDIR) ) && \ |
echo "Packing checkout..." && \ |
export TAR_TIMESTAMP="" && \ |
$(call dl_tar_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \ |
mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \ |
rm -rf $(SUBDIR); \ |
) |
endef |
|
define DownloadMethod/git |
$(call wrap_mirror,$(1),$(2), \ |
$(call DownloadMethod/rawgit) \ |
) |
endef |
|
define DownloadMethod/github_archive |
$(call wrap_mirror,$(1),$(2), \ |
$(SCRIPT_DIR)/dl_github_archive.py \ |
--dl-dir="$(DL_DIR)" \ |
--url="$(URL)" \ |
--version="$(VERSION)" \ |
--subdir="$(SUBDIR)" \ |
--source="$(FILE)" \ |
--hash="$(MIRROR_HASH)" \ |
|| ( $(call DownloadMethod/rawgit) ); \ |
) |
endef |
|
# Only intends to be called as a submethod from other DownloadMethod |
define DownloadMethod/rawgit |
echo "Checking out files from the git repository..."; \ |
mkdir -p $(TMP_DIR)/dl && \ |
cd $(TMP_DIR)/dl && \ |
rm -rf $(SUBDIR) && \ |
[ \! -d $(SUBDIR) ] && \ |
git clone $(OPTS) $(URL) $(SUBDIR) && \ |
(cd $(SUBDIR) && git checkout $(VERSION) && \ |
git submodule update --init --recursive) && \ |
echo "Packing checkout..." && \ |
export TAR_TIMESTAMP=`cd $(SUBDIR) && git log -1 --format='@%ct'` && \ |
rm -rf $(SUBDIR)/.git && \ |
$(call dl_tar_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \ |
mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \ |
rm -rf $(SUBDIR); |
endef |
|
define DownloadMethod/bzr |
$(call wrap_mirror,$(1),$(2), \ |
echo "Checking out files from the bzr repository..."; \ |
mkdir -p $(TMP_DIR)/dl && \ |
cd $(TMP_DIR)/dl && \ |
rm -rf $(SUBDIR) && \ |
[ \! -d $(SUBDIR) ] && \ |
bzr export --per-file-timestamps -r$(VERSION) $(SUBDIR) $(URL) && \ |
echo "Packing checkout..." && \ |
export TAR_TIMESTAMP="" && \ |
$(call dl_tar_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \ |
mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \ |
rm -rf $(SUBDIR); \ |
) |
endef |
|
define DownloadMethod/hg |
$(call wrap_mirror,$(1),$(2), \ |
echo "Checking out files from the hg repository..."; \ |
mkdir -p $(TMP_DIR)/dl && \ |
cd $(TMP_DIR)/dl && \ |
rm -rf $(SUBDIR) && \ |
[ \! -d $(SUBDIR) ] && \ |
hg clone -r $(VERSION) $(URL) $(SUBDIR) && \ |
export TAR_TIMESTAMP=`cd $(SUBDIR) && hg log --template '@{date}' -l 1` && \ |
find $(SUBDIR) -name .hg | xargs rm -rf && \ |
echo "Packing checkout..." && \ |
$(call dl_tar_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \ |
mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \ |
rm -rf $(SUBDIR); \ |
) |
endef |
|
define DownloadMethod/darcs |
$(call wrap_mirror, $(1), $(2), \ |
echo "Checking out files from the darcs repository..."; \ |
mkdir -p $(TMP_DIR)/dl && \ |
cd $(TMP_DIR)/dl && \ |
rm -rf $(SUBDIR) && \ |
[ \! -d $(SUBDIR) ] && \ |
darcs get -t $(VERSION) $(URL) $(SUBDIR) && \ |
export TAR_TIMESTAMP=`cd $(SUBDIR) && LC_ALL=C darcs log --last 1 | sed -ne 's!^Date: \+!!p'` && \ |
find $(SUBDIR) -name _darcs | xargs rm -rf && \ |
echo "Packing checkout..." && \ |
$(call dl_tar_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \ |
mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \ |
rm -rf $(SUBDIR); \ |
) |
endef |
|
Validate/cvs=VERSION SUBDIR |
Validate/svn=VERSION SUBDIR |
Validate/git=VERSION SUBDIR |
Validate/bzr=VERSION SUBDIR |
Validate/hg=VERSION SUBDIR |
Validate/darcs=VERSION SUBDIR |
|
define Download/Defaults |
URL:= |
FILE:= |
URL_FILE:= |
PROTO:= |
HASH=$$(MD5SUM) |
MD5SUM:=x |
SUBDIR:= |
MIRROR:=1 |
MIRROR_HASH=$$(MIRROR_MD5SUM) |
MIRROR_MD5SUM:=x |
VERSION:= |
OPTS:= |
endef |
|
define Download/default |
FILE:=$(PKG_SOURCE) |
URL:=$(PKG_SOURCE_URL) |
SUBDIR:=$(PKG_SOURCE_SUBDIR) |
PROTO:=$(PKG_SOURCE_PROTO) |
$(if $(PKG_SOURCE_MIRROR),MIRROR:=$(filter 1,$(PKG_MIRROR))) |
$(if $(PKG_MIRROR_MD5SUM),MIRROR_MD5SUM:=$(PKG_MIRROR_MD5SUM)) |
$(if $(PKG_MIRROR_HASH),MIRROR_HASH:=$(PKG_MIRROR_HASH)) |
VERSION:=$(PKG_SOURCE_VERSION) |
$(if $(PKG_MD5SUM),MD5SUM:=$(PKG_MD5SUM)) |
$(if $(PKG_HASH),HASH:=$(PKG_HASH)) |
endef |
|
define Download |
$(eval $(Download/Defaults)) |
$(eval $(Download/$(1))) |
$(foreach FIELD,URL FILE $(Validate/$(call dl_method,$(URL),$(PROTO))), |
ifeq ($($(FIELD)),) |
$$(error Download/$(1) is missing the $(FIELD) field.) |
endif |
) |
|
$(foreach dep,$(DOWNLOAD_RDEP), |
$(dep): $(DL_DIR)/$(FILE) |
) |
download: $(DL_DIR)/$(FILE) |
|
$(DL_DIR)/$(FILE): |
mkdir -p $(DL_DIR) |
$(call locked, \ |
$(if $(DownloadMethod/$(call dl_method,$(URL),$(PROTO))), \ |
$(call DownloadMethod/$(call dl_method,$(URL),$(PROTO)),check,$(if $(filter default,$(1)),PKG_,Download/$(1):)), \ |
$(DownloadMethod/unknown) \ |
),\ |
$(FILE)) |
|
endef |
/branches/18.06.1/include/host-build.mk |
@@ -0,0 +1,211 @@ |
# |
# Copyright (C) 2006-2010 OpenWrt.org |
# |
# This is free software, licensed under the GNU General Public License v2. |
# See /LICENSE for more information. |
# |
|
include $(INCLUDE_DIR)/download.mk |
|
HOST_BUILD_DIR ?= $(BUILD_DIR_HOST)/$(PKG_NAME)$(if $(PKG_VERSION),-$(PKG_VERSION)) |
HOST_INSTALL_DIR ?= $(HOST_BUILD_DIR)/host-install |
HOST_BUILD_PARALLEL ?= |
|
HOST_MAKE_J:=$(if $(MAKE_JOBSERVER),$(MAKE_JOBSERVER) $(if $(filter 3.% 4.0 4.1,$(MAKE_VERSION)),-j)) |
|
ifeq ($(strip $(HOST_BUILD_PARALLEL)),0) |
HOST_JOBS?=-j1 |
else |
HOST_JOBS?=$(if $(HOST_BUILD_PARALLEL),$(HOST_MAKE_J),-j1) |
endif |
|
include $(INCLUDE_DIR)/unpack.mk |
include $(INCLUDE_DIR)/depends.mk |
include $(INCLUDE_DIR)/quilt.mk |
|
BUILD_TYPES += host |
HOST_STAMP_PREPARED=$(HOST_BUILD_DIR)/.prepared$(if $(HOST_QUILT)$(DUMP),,$(shell $(call find_md5,${CURDIR} $(PKG_FILE_DEPENDS),))_$(call confvar,CONFIG_AUTOREMOVE $(HOST_PREPARED_DEPENDS))) |
HOST_STAMP_CONFIGURED:=$(HOST_BUILD_DIR)/.configured |
HOST_STAMP_BUILT:=$(HOST_BUILD_DIR)/.built |
HOST_BUILD_PREFIX?=$(if $(IS_PACKAGE_BUILD),$(STAGING_DIR_HOSTPKG),$(STAGING_DIR_HOST)) |
HOST_STAMP_INSTALLED:=$(HOST_BUILD_PREFIX)/stamp/.$(PKG_NAME)_installed |
|
override MAKEFLAGS= |
|
include $(INCLUDE_DIR)/autotools.mk |
|
_host_target:=$(if $(HOST_QUILT),,.) |
|
Host/Patch:=$(Host/Patch/Default) |
ifneq ($(strip $(HOST_UNPACK)),) |
define Host/Prepare/Default |
$(HOST_UNPACK) |
[ ! -d ./src/ ] || $(CP) ./src/* $(HOST_BUILD_DIR) |
$(Host/Patch) |
endef |
endif |
|
define Host/Prepare |
$(call Host/Prepare/Default) |
endef |
|
HOST_CONFIGURE_VARS = \ |
CC="$(HOSTCC)" \ |
CFLAGS="$(HOST_CFLAGS)" \ |
CXX="$(HOSTCXX)" \ |
CPPFLAGS="$(HOST_CPPFLAGS)" \ |
LDFLAGS="$(HOST_LDFLAGS)" \ |
CONFIG_SHELL="$(SHELL)" |
|
HOST_CONFIGURE_ARGS = \ |
--target=$(GNU_HOST_NAME) \ |
--host=$(GNU_HOST_NAME) \ |
--build=$(GNU_HOST_NAME) \ |
--program-prefix="" \ |
--program-suffix="" \ |
--prefix=$(HOST_BUILD_PREFIX) \ |
--exec-prefix=$(HOST_BUILD_PREFIX) \ |
--sysconfdir=$(HOST_BUILD_PREFIX)/etc \ |
--localstatedir=$(HOST_BUILD_PREFIX)/var \ |
--sbindir=$(HOST_BUILD_PREFIX)/bin |
|
HOST_MAKE_VARS = \ |
CFLAGS="$(HOST_CFLAGS)" \ |
CPPFLAGS="$(HOST_CPPFLAGS)" \ |
CXXFLAGS="$(HOST_CXXFLAGS)" \ |
LDFLAGS="$(HOST_LDFLAGS)" |
|
HOST_MAKE_FLAGS = |
|
HOST_CONFIGURE_CMD = $(BASH) ./configure |
|
ifeq ($(HOST_OS),Darwin) |
HOST_CONFIG_SITE:=$(INCLUDE_DIR)/site/darwin |
endif |
|
define Host/Configure/Default |
$(if $(HOST_CONFIGURE_PARALLEL),+)(cd $(HOST_BUILD_DIR)/$(3); \ |
if [ -x configure ]; then \ |
$(CP) $(SCRIPT_DIR)/config.{guess,sub} $(HOST_BUILD_DIR)/$(3)/ && \ |
$(HOST_CONFIGURE_VARS) \ |
$(2) \ |
$(HOST_CONFIGURE_CMD) \ |
$(HOST_CONFIGURE_ARGS) \ |
$(1); \ |
fi \ |
) |
endef |
|
define Host/Configure |
$(call Host/Configure/Default) |
endef |
|
define Host/Compile/Default |
+$(HOST_MAKE_VARS) \ |
$(MAKE) $(HOST_JOBS) -C $(HOST_BUILD_DIR) \ |
$(HOST_MAKE_FLAGS) \ |
$(1) |
endef |
|
define Host/Compile |
$(call Host/Compile/Default) |
endef |
|
define Host/Install/Default |
$(call Host/Compile/Default,install) |
endef |
|
define Host/Install |
$(call Host/Install/Default,$(HOST_BUILD_PREFIX)) |
endef |
|
|
ifneq ($(if $(HOST_QUILT),,$(CONFIG_AUTOREBUILD)),) |
define HostHost/Autoclean |
$(call rdep,${CURDIR} $(PKG_FILE_DEPENDS),$(HOST_STAMP_PREPARED)) |
$(if $(if $(Host/Compile),$(filter prepare,$(MAKECMDGOALS)),1),,$(call rdep,$(HOST_BUILD_DIR),$(HOST_STAMP_BUILT))) |
endef |
endif |
|
define Host/Exports/Default |
$(1) : export ACLOCAL_INCLUDE=$$(foreach p,$$(wildcard $$(STAGING_DIR_HOST)/share/aclocal $$(STAGING_DIR_HOST)/share/aclocal-* $(if $(IS_PACKAGE_BUILD),$$(STAGING_DIR)/host/share/aclocal $$(STAGING_DIR_HOSTPKG)/share/aclocal $$(STAGING_DIR)/host/share/aclocal-*)),-I $$(p)) |
$(1) : export STAGING_PREFIX=$$(HOST_BUILD_PREFIX) |
$(1) : export PKG_CONFIG_PATH=$$(STAGING_DIR_HOST)/lib/pkgconfig:$$(HOST_BUILD_PREFIX)/lib/pkgconfig |
$(1) : export PKG_CONFIG_LIBDIR=$$(HOST_BUILD_PREFIX)/lib/pkgconfig |
$(if $(CONFIG_CCACHE),$(1) : export CCACHE_DIR:=$(STAGING_DIR_HOST)/ccache) |
$(if $(HOST_CONFIG_SITE),$(1) : export CONFIG_SITE:=$(HOST_CONFIG_SITE)) |
$(if $(IS_PACKAGE_BUILD),$(1) : export PATH=$$(TARGET_PATH_PKG)) |
endef |
Host/Exports=$(Host/Exports/Default) |
|
.NOTPARALLEL: |
|
ifndef DUMP |
define HostBuild/Core |
$(if $(HOST_QUILT),$(Host/Quilt)) |
$(if $(DUMP),,$(call HostHost/Autoclean)) |
|
$(HOST_STAMP_PREPARED): |
@-rm -rf $(HOST_BUILD_DIR) |
@mkdir -p $(HOST_BUILD_DIR) |
$(foreach hook,$(Hooks/HostPrepare/Pre),$(call $(hook))$(sep)) |
$(call Host/Prepare) |
$(foreach hook,$(Hooks/HostPrepare/Post),$(call $(hook))$(sep)) |
touch $$@ |
|
$(call Host/Exports,$(HOST_STAMP_CONFIGURED)) |
$(HOST_STAMP_CONFIGURED): $(HOST_STAMP_PREPARED) |
$(foreach hook,$(Hooks/HostConfigure/Pre),$(call $(hook))$(sep)) |
$(call Host/Configure) |
$(foreach hook,$(Hooks/HostConfigure/Post),$(call $(hook))$(sep)) |
touch $$@ |
|
$(call Host/Exports,$(HOST_STAMP_BUILT)) |
$(HOST_STAMP_BUILT): $(HOST_STAMP_CONFIGURED) |
$(foreach hook,$(Hooks/HostCompile/Pre),$(call $(hook))$(sep)) |
$(call Host/Compile) |
$(foreach hook,$(Hooks/HostCompile/Post),$(call $(hook))$(sep)) |
touch $$@ |
|
$(call Host/Exports,$(HOST_STAMP_INSTALLED)) |
$(HOST_STAMP_INSTALLED): $(HOST_STAMP_BUILT) $(if $(FORCE_HOST_INSTALL),FORCE) |
$(call Host/Install,$(HOST_BUILD_PREFIX)) |
$(foreach hook,$(Hooks/HostInstall/Post),$(call $(hook))$(sep)) |
mkdir -p $$(shell dirname $$@) |
touch $(HOST_STAMP_BUILT) |
touch $$@ |
|
$(call DefaultTargets,$(patsubst %,host-%,$(DEFAULT_SUBDIR_TARGETS))) |
ifndef STAMP_BUILT |
$(foreach t,$(DEFAULT_SUBDIR_TARGETS), |
$(t): host-$(t) |
.$(t): .host-$(t) |
) |
clean-build: host-clean-build |
endif |
|
$(_host_target)host-prepare: $(HOST_STAMP_PREPARED) |
$(_host_target)host-configure: $(HOST_STAMP_CONFIGURED) |
$(_host_target)host-compile: $(HOST_STAMP_BUILT) $(HOST_STAMP_INSTALLED) |
host-install: host-compile |
|
host-clean-build: FORCE |
rm -rf $(HOST_BUILD_DIR) $(HOST_STAMP_BUILT) |
|
host-clean: host-clean-build |
$(call Host/Clean) |
$(call Host/Uninstall) |
rm -rf $(HOST_STAMP_INSTALLED) |
|
ifneq ($(CONFIG_AUTOREMOVE),) |
host-compile: |
$(FIND) $(HOST_BUILD_DIR) -mindepth 1 -maxdepth 1 -not '(' -type f -and -name '.*' -and -size 0 ')' | \ |
$(XARGS) rm -rf |
endif |
endef |
endif |
|
define HostBuild |
$(HostBuild/Core) |
$(if $(if $(PKG_HOST_ONLY),,$(STAMP_PREPARED)),,$(if $(strip $(PKG_SOURCE_URL)),$(call Download,default))) |
endef |
/branches/18.06.1/include/image-commands.mk |
@@ -0,0 +1,380 @@ |
# Build commands that can be called from Device/* templates |
|
IMAGE_KERNEL = $(word 1,$^) |
IMAGE_ROOTFS = $(word 2,$^) |
|
define Build/uImage |
mkimage -A $(LINUX_KARCH) \ |
-O linux -T kernel \ |
-C $(1) -a $(KERNEL_LOADADDR) -e $(if $(KERNEL_ENTRY),$(KERNEL_ENTRY),$(KERNEL_LOADADDR)) \ |
-n '$(if $(UIMAGE_NAME),$(UIMAGE_NAME),$(call toupper,$(LINUX_KARCH)) $(VERSION_DIST) Linux-$(LINUX_VERSION))' -d $@ $@.new |
mv $@.new $@ |
endef |
|
define Build/buffalo-enc |
$(eval product=$(word 1,$(1))) |
$(eval version=$(word 2,$(1))) |
$(eval args=$(wordlist 3,$(words $(1)),$(1))) |
$(STAGING_DIR_HOST)/bin/buffalo-enc \ |
-p $(product) -v $(version) $(args) \ |
-i $@ -o $@.new |
mv $@.new $@ |
endef |
|
define Build/buffalo-enc-tag |
$(call Build/buffalo-enc,'' '' -S 152 $(1)) |
endef |
|
define Build/buffalo-tag-dhp |
$(eval product=$(word 1,$(1))) |
$(eval region=$(word 2,$(1))) |
$(eval language=$(word 3,$(1))) |
$(STAGING_DIR_HOST)/bin/buffalo-tag \ |
-d 0x01000000 -w 1 \ |
-a $(BUFFALO_TAG_PLATFORM) \ |
-v $(BUFFALO_TAG_VERSION) -m $(BUFFALO_TAG_MINOR) \ |
-b $(product) -p $(product) \ |
-r $(region) -r $(region) -l $(language) \ |
-I $@ -o $@.new |
mv $@.new $@ |
endef |
|
define Build/buffalo-dhp-image |
$(STAGING_DIR_HOST)/bin/mkdhpimg $@ $@.new |
mv $@.new $@ |
endef |
|
define Build/eva-image |
$(STAGING_DIR_HOST)/bin/lzma2eva $(KERNEL_LOADADDR) $(KERNEL_LOADADDR) $@ $@.new |
mv $@.new $@ |
endef |
|
define Build/seama |
$(STAGING_DIR_HOST)/bin/seama -i $@ \ |
-m "dev=/dev/mtdblock/$(SEAMA_MTDBLOCK)" -m "type=firmware" |
mv $@.seama $@ |
endef |
|
define Build/seama-seal |
$(STAGING_DIR_HOST)/bin/seama -i $@ -s $@.seama \ |
-m "signature=$(SEAMA_SIGNATURE)" |
mv $@.seama $@ |
endef |
|
define Build/zyxel-ras-image |
let \ |
newsize="$(subst k,* 1024,$(RAS_ROOTFS_SIZE))"; \ |
$(STAGING_DIR_HOST)/bin/mkrasimage \ |
-b $(RAS_BOARD) \ |
-v $(RAS_VERSION) \ |
-r $@ \ |
-s $$newsize \ |
-o $@.new \ |
$(if $(findstring separate-kernel,$(word 1,$(1))),-k $(IMAGE_KERNEL)) \ |
&& mv $@.new $@ |
endef |
|
define Build/netgear-chk |
$(STAGING_DIR_HOST)/bin/mkchkimg \ |
-o $@.new \ |
-k $@ \ |
-b $(NETGEAR_BOARD_ID) \ |
$(if $(NETGEAR_REGION),-r $(NETGEAR_REGION),) |
mv $@.new $@ |
endef |
|
define Build/netgear-dni |
$(STAGING_DIR_HOST)/bin/mkdniimg \ |
-B $(NETGEAR_BOARD_ID) -v $(VERSION_DIST).$(firstword $(subst -, ,$(REVISION))) \ |
$(if $(NETGEAR_HW_ID),-H $(NETGEAR_HW_ID)) \ |
-r "$(1)" \ |
-i $@ -o $@.new |
mv $@.new $@ |
endef |
|
define Build/append-squashfs-fakeroot-be |
rm -rf $@.fakefs $@.fakesquashfs |
mkdir $@.fakefs |
$(STAGING_DIR_HOST)/bin/mksquashfs-lzma \ |
$@.fakefs $@.fakesquashfs \ |
-noappend -root-owned -be -nopad -b 65536 \ |
$(if $(SOURCE_DATE_EPOCH),-fixed-time $(SOURCE_DATE_EPOCH)) |
cat $@.fakesquashfs >> $@ |
endef |
|
define Build/append-string |
echo -n $(1) >> $@ |
endef |
|
# append a fake/empty uImage header, to fool bootloaders rootfs integrity check |
# for example |
define Build/append-uImage-fakehdr |
touch $@.fakehdr |
$(STAGING_DIR_HOST)/bin/mkimage \ |
-A $(LINUX_KARCH) -O linux -T $(1) -C none \ |
-n '$(VERSION_DIST) fake $(1)' \ |
-d $@.fakehdr \ |
-s \ |
$@.fakehdr |
cat $@.fakehdr >> $@ |
endef |
|
define Build/tplink-safeloader |
-$(STAGING_DIR_HOST)/bin/tplink-safeloader \ |
-B $(TPLINK_BOARD_ID) \ |
-V $(REVISION) \ |
-k $(IMAGE_KERNEL) \ |
-r $@ \ |
-o $@.new \ |
-j \ |
$(wordlist 2,$(words $(1)),$(1)) \ |
$(if $(findstring sysupgrade,$(word 1,$(1))),-S) && mv $@.new $@ || rm -f $@ |
endef |
|
define Build/append-dtb |
cat $(KDIR)/image-$(firstword $(DEVICE_DTS)).dtb >> $@ |
endef |
|
define Build/install-dtb |
$(foreach dts,$(DEVICE_DTS), \ |
$(CP) \ |
$(DTS_DIR)/$(dts).dtb \ |
$(BIN_DIR)/$(IMG_PREFIX)-$(dts).dtb; \ |
) |
endef |
|
define Build/fit |
$(TOPDIR)/scripts/mkits.sh \ |
-D $(DEVICE_NAME) -o $@.its -k $@ \ |
$(if $(word 2,$(1)),-d $(word 2,$(1))) -C $(word 1,$(1)) \ |
-a $(KERNEL_LOADADDR) -e $(if $(KERNEL_ENTRY),$(KERNEL_ENTRY),$(KERNEL_LOADADDR)) \ |
-c $(if $(DEVICE_DTS_CONFIG),$(DEVICE_DTS_CONFIG),"config@1") \ |
-A $(LINUX_KARCH) -v $(LINUX_VERSION) |
PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage -f $@.its $@.new |
@mv $@.new $@ |
endef |
|
define Build/lzma |
$(call Build/lzma-no-dict,-lc1 -lp2 -pb2 $(1)) |
endef |
|
define Build/lzma-no-dict |
$(STAGING_DIR_HOST)/bin/lzma e $@ $(1) $@.new |
@mv $@.new $@ |
endef |
|
define Build/gzip |
gzip -f -9n -c $@ $(1) > $@.new |
@mv $@.new $@ |
endef |
|
define Build/zip |
mkdir $@.tmp |
mv $@ $@.tmp/$(1) |
|
zip -j -X \ |
$(if $(SOURCE_DATE_EPOCH),--mtime="$(SOURCE_DATE_EPOCH)") \ |
$@ $@.tmp/$(if $(1),$(1),$@) |
rm -rf $@.tmp |
endef |
|
define Build/jffs2 |
rm -rf $(KDIR_TMP)/$(DEVICE_NAME)/jffs2 && \ |
mkdir -p $(KDIR_TMP)/$(DEVICE_NAME)/jffs2/$$(dirname $(1)) && \ |
cp $@ $(KDIR_TMP)/$(DEVICE_NAME)/jffs2/$(1) && \ |
$(STAGING_DIR_HOST)/bin/mkfs.jffs2 --pad \ |
$(if $(CONFIG_BIG_ENDIAN),--big-endian,--little-endian) \ |
--squash-uids -v -e $(patsubst %k,%KiB,$(BLOCKSIZE)) \ |
-o $@.new \ |
-d $(KDIR_TMP)/$(DEVICE_NAME)/jffs2 \ |
2>&1 1>/dev/null | awk '/^.+$$$$/' && \ |
$(STAGING_DIR_HOST)/bin/padjffs2 $@.new -J $(patsubst %k,,$(BLOCKSIZE)) |
-rm -rf $(KDIR_TMP)/$(DEVICE_NAME)/jffs2/ |
@mv $@.new $@ |
endef |
|
define Build/kernel-bin |
rm -f $@ |
cp $< $@ |
endef |
|
define Build/patch-cmdline |
$(STAGING_DIR_HOST)/bin/patch-cmdline $@ '$(CMDLINE)' |
endef |
|
define Build/append-kernel |
dd if=$(IMAGE_KERNEL) >> $@ |
endef |
|
define Build/append-rootfs |
dd if=$(IMAGE_ROOTFS) >> $@ |
endef |
|
define Build/append-ubi |
sh $(TOPDIR)/scripts/ubinize-image.sh \ |
$(if $(UBOOTENV_IN_UBI),--uboot-env) \ |
$(if $(KERNEL_IN_UBI),--kernel $(IMAGE_KERNEL)) \ |
$(foreach part,$(UBINIZE_PARTS),--part $(part)) \ |
$(IMAGE_ROOTFS) \ |
$@.tmp \ |
-p $(BLOCKSIZE:%k=%KiB) -m $(PAGESIZE) \ |
$(if $(SUBPAGESIZE),-s $(SUBPAGESIZE)) \ |
$(if $(VID_HDR_OFFSET),-O $(VID_HDR_OFFSET)) \ |
$(UBINIZE_OPTS) |
cat $@.tmp >> $@ |
rm $@.tmp |
endef |
|
define Build/append-uboot |
dd if=$(UBOOT_PATH) >> $@ |
endef |
|
define Build/pad-to |
dd if=$@ of=$@.new bs=$(1) conv=sync |
mv $@.new $@ |
endef |
|
define Build/pad-extra |
dd if=/dev/zero bs=$(1) count=1 >> $@ |
endef |
|
define Build/pad-rootfs |
$(STAGING_DIR_HOST)/bin/padjffs2 $@ $(1) \ |
$(if $(BLOCKSIZE),$(BLOCKSIZE:%k=%),4 8 16 64 128 256) |
endef |
|
define Build/pad-offset |
let \ |
size="$$(stat -c%s $@)" \ |
pad="$(subst k,* 1024,$(word 1, $(1)))" \ |
offset="$(subst k,* 1024,$(word 2, $(1)))" \ |
pad="(pad - ((size + offset) % pad)) % pad" \ |
newsize='size + pad'; \ |
dd if=$@ of=$@.new bs=$$newsize count=1 conv=sync |
mv $@.new $@ |
endef |
|
define Build/xor-image |
$(STAGING_DIR_HOST)/bin/xorimage -i $@ -o $@.xor $(1) |
mv $@.xor $@ |
endef |
|
define Build/check-size |
@[ $$(($(subst k,* 1024,$(subst m, * 1024k,$(1))))) -ge "$$(stat -c%s $@)" ] || { \ |
echo "WARNING: Image file $@ is too big" >&2; \ |
rm -f $@; \ |
} |
endef |
|
define Build/combined-image |
-sh $(TOPDIR)/scripts/combined-image.sh \ |
"$(IMAGE_KERNEL)" \ |
"$@" \ |
"$@.new" |
@mv $@.new $@ |
endef |
|
define Build/linksys-image |
$(TOPDIR)/scripts/linksys-image.sh \ |
"$(call param_get_default,type,$(1),$(DEVICE_NAME))" \ |
$@ $@.new |
mv $@.new $@ |
endef |
|
define Build/openmesh-image |
$(TOPDIR)/scripts/om-fwupgradecfg-gen.sh \ |
"$(call param_get_default,ce_type,$(1),$(DEVICE_NAME))" \ |
"$@-fwupgrade.cfg" \ |
"$(call param_get_default,kernel,$(1),$(IMAGE_KERNEL))" \ |
"$(call param_get_default,rootfs,$(1),$@)" |
$(TOPDIR)/scripts/combined-ext-image.sh \ |
"$(call param_get_default,ce_type,$(1),$(DEVICE_NAME))" "$@" \ |
"$@-fwupgrade.cfg" "fwupgrade.cfg" \ |
"$(call param_get_default,kernel,$(1),$(IMAGE_KERNEL))" "kernel" \ |
"$(call param_get_default,rootfs,$(1),$@)" "rootfs" |
endef |
|
define Build/qsdk-ipq-factory-nand |
$(TOPDIR)/scripts/mkits-qsdk-ipq-image.sh \ |
$@.its ubi $@ |
PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage -f $@.its $@.new |
@mv $@.new $@ |
endef |
|
define Build/qsdk-ipq-factory-nor |
$(TOPDIR)/scripts/mkits-qsdk-ipq-image.sh \ |
$@.its hlos $(IMAGE_KERNEL) rootfs $(IMAGE_ROOTFS) |
PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage -f $@.its $@.new |
@mv $@.new $@ |
endef |
|
define Build/senao-header |
$(STAGING_DIR_HOST)/bin/mksenaofw $(1) -e $@ -o $@.new |
mv $@.new $@ |
endef |
|
define Build/sysupgrade-tar |
sh $(TOPDIR)/scripts/sysupgrade-tar.sh \ |
--board $(if $(BOARD_NAME),$(BOARD_NAME),$(DEVICE_NAME)) \ |
--kernel $(call param_get_default,kernel,$(1),$(IMAGE_KERNEL)) \ |
--rootfs $(call param_get_default,rootfs,$(1),$(IMAGE_ROOTFS)) \ |
$@ |
endef |
|
define Build/tplink-v1-header |
$(STAGING_DIR_HOST)/bin/mktplinkfw \ |
-c -H $(TPLINK_HWID) -W $(TPLINK_HWREV) -L $(KERNEL_LOADADDR) \ |
-E $(if $(KERNEL_ENTRY),$(KERNEL_ENTRY),$(KERNEL_LOADADDR)) \ |
-m $(TPLINK_HEADER_VERSION) -N "$(VERSION_DIST)" -V $(REVISION) \ |
-k $@ -o $@.new $(1) |
@mv $@.new $@ |
endef |
|
define Build/tplink-v2-header |
$(STAGING_DIR_HOST)/bin/mktplinkfw2 \ |
-c -H $(TPLINK_HWID) -W $(TPLINK_HWREV) -L $(KERNEL_LOADADDR) \ |
-E $(if $(KERNEL_ENTRY),$(KERNEL_ENTRY),$(KERNEL_LOADADDR)) \ |
-w $(TPLINK_HWREVADD) -F "$(TPLINK_FLASHLAYOUT)" \ |
-T $(TPLINK_HVERSION) -V "ver. 2.0" \ |
-k $@ -o $@.new $(1) |
@mv $@.new $@ |
endef |
|
define Build/tplink-v2-image |
$(STAGING_DIR_HOST)/bin/mktplinkfw2 \ |
-H $(TPLINK_HWID) -W $(TPLINK_HWREV) \ |
-w $(TPLINK_HWREVADD) -F "$(TPLINK_FLASHLAYOUT)" \ |
-T $(TPLINK_HVERSION) -V "ver. 2.0" -a 0x4 -j \ |
-k $(IMAGE_KERNEL) -r $(IMAGE_ROOTFS) -o $@.new $(1) |
cat $@.new >> $@ |
rm -rf $@.new |
endef |
|
json_quote=$(subst ','\'',$(subst ",\",$(1))) |
#")') |
metadata_devices=$(if $(1),$(subst "$(space)","$(comma)",$(strip $(foreach v,$(1),"$(call json_quote,$(v))")))) |
metadata_json = \ |
'{ $(if $(IMAGE_METADATA),$(IMAGE_METADATA)$(comma)) \ |
"supported_devices":[$(call metadata_devices,$(1))], \ |
"version": { \ |
"dist": "$(call json_quote,$(VERSION_DIST))", \ |
"version": "$(call json_quote,$(VERSION_NUMBER))", \ |
"revision": "$(call json_quote,$(REVISION))", \ |
"board": "$(call json_quote,$(BOARD))" \ |
} \ |
}' |
|
define Build/append-metadata |
$(if $(SUPPORTED_DEVICES),-echo $(call metadata_json,$(SUPPORTED_DEVICES)) | fwtool -I - $@) |
[ ! -s "$(BUILD_KEY)" -o ! -s "$(BUILD_KEY).ucert" -o ! -s "$@" ] || { \ |
cp "$(BUILD_KEY).ucert" "$@.ucert" ;\ |
usign -S -m "$@" -s "$(BUILD_KEY)" -x "$@.sig" ;\ |
ucert -A -c "$@.ucert" -x "$@.sig" ;\ |
fwtool -S "$@.ucert" "$@" ;\ |
} |
endef |
|
define Build/kernel2minor |
kernel2minor -k $@ -r $@.new $(1) |
mv $@.new $@ |
endef |
/branches/18.06.1/include/image.mk |
@@ -0,0 +1,638 @@ |
# |
# Copyright (C) 2006-2010 OpenWrt.org |
# |
# This is free software, licensed under the GNU General Public License v2. |
# See /LICENSE for more information. |
# |
|
override TARGET_BUILD= |
include $(INCLUDE_DIR)/prereq.mk |
include $(INCLUDE_DIR)/kernel.mk |
include $(INCLUDE_DIR)/version.mk |
include $(INCLUDE_DIR)/image-commands.mk |
|
ifndef IB |
ifdef CONFIG_TARGET_PER_DEVICE_ROOTFS |
TARGET_PER_DEVICE_ROOTFS := 1 |
endif |
endif |
|
include $(INCLUDE_DIR)/image-legacy.mk |
include $(INCLUDE_DIR)/feeds.mk |
include $(INCLUDE_DIR)/rootfs.mk |
|
override MAKE:=$(_SINGLE)$(SUBMAKE) |
override NO_TRACE_MAKE:=$(_SINGLE)$(NO_TRACE_MAKE) |
|
target_params = $(subst +,$(space),$*) |
param_get = $(patsubst $(1)=%,%,$(filter $(1)=%,$(2))) |
param_get_default = $(firstword $(call param_get,$(1),$(2)) $(3)) |
param_mangle = $(subst $(space),_,$(strip $(1))) |
param_unmangle = $(subst _,$(space),$(1)) |
|
mkfs_packages_id = $(shell echo $(sort $(1)) | mkhash md5 | head -c 8) |
mkfs_target_dir = $(if $(call param_get,pkg,$(1)),$(KDIR)/target-dir-$(call param_get,pkg,$(1)),$(TARGET_DIR)) |
|
KDIR=$(KERNEL_BUILD_DIR) |
KDIR_TMP=$(KDIR)/tmp |
DTS_DIR:=$(LINUX_DIR)/arch/$(LINUX_KARCH)/boot/dts |
|
IMG_PREFIX_EXTRA:=$(if $(EXTRA_IMAGE_NAME),$(call sanitize,$(EXTRA_IMAGE_NAME))-) |
IMG_PREFIX_VERNUM:=$(if $(CONFIG_VERSION_FILENAMES),$(call sanitize,$(VERSION_NUMBER))-) |
IMG_PREFIX_VERCODE:=$(if $(CONFIG_VERSION_CODE_FILENAMES),$(call sanitize,$(VERSION_CODE))-) |
|
IMG_PREFIX:=$(VERSION_DIST_SANITIZED)-$(IMG_PREFIX_VERNUM)$(IMG_PREFIX_VERCODE)$(IMG_PREFIX_EXTRA)$(BOARD)$(if $(SUBTARGET),-$(SUBTARGET)) |
|
MKFS_DEVTABLE_OPT := -D $(INCLUDE_DIR)/device_table.txt |
|
ifneq ($(CONFIG_BIG_ENDIAN),) |
JFFS2OPTS := --big-endian --squash-uids -v |
else |
JFFS2OPTS := --little-endian --squash-uids -v |
endif |
|
ifeq ($(CONFIG_JFFS2_RTIME),y) |
JFFS2OPTS += -X rtime |
endif |
ifeq ($(CONFIG_JFFS2_ZLIB),y) |
JFFS2OPTS += -X zlib |
endif |
ifeq ($(CONFIG_JFFS2_LZMA),y) |
JFFS2OPTS += -X lzma --compression-mode=size |
endif |
ifneq ($(CONFIG_JFFS2_RTIME),y) |
JFFS2OPTS += -x rtime |
endif |
ifneq ($(CONFIG_JFFS2_ZLIB),y) |
JFFS2OPTS += -x zlib |
endif |
ifneq ($(CONFIG_JFFS2_LZMA),y) |
JFFS2OPTS += -x lzma |
endif |
|
JFFS2OPTS += $(MKFS_DEVTABLE_OPT) |
|
SQUASHFS_BLOCKSIZE := $(CONFIG_TARGET_SQUASHFS_BLOCK_SIZE)k |
SQUASHFSOPT := -b $(SQUASHFS_BLOCKSIZE) |
SQUASHFSOPT += -p '/dev d 755 0 0' -p '/dev/console c 600 0 0 5 1' |
SQUASHFSCOMP := gzip |
LZMA_XZ_OPTIONS := -Xpreset 9 -Xe -Xlc 0 -Xlp 2 -Xpb 2 |
ifeq ($(CONFIG_SQUASHFS_XZ),y) |
ifneq ($(filter arm x86 powerpc sparc,$(LINUX_KARCH)),) |
BCJ_FILTER:=-Xbcj $(LINUX_KARCH) |
endif |
SQUASHFSCOMP := xz $(LZMA_XZ_OPTIONS) $(BCJ_FILTER) |
endif |
|
JFFS2_BLOCKSIZE ?= 64k 128k |
|
fs-types-$(CONFIG_TARGET_ROOTFS_SQUASHFS) += squashfs |
fs-types-$(CONFIG_TARGET_ROOTFS_JFFS2) += $(addprefix jffs2-,$(JFFS2_BLOCKSIZE)) |
fs-types-$(CONFIG_TARGET_ROOTFS_JFFS2_NAND) += $(addprefix jffs2-nand-,$(NAND_BLOCKSIZE)) |
fs-types-$(CONFIG_TARGET_ROOTFS_EXT4FS) += ext4 |
fs-types-$(CONFIG_TARGET_ROOTFS_ISO) += iso |
fs-types-$(CONFIG_TARGET_ROOTFS_UBIFS) += ubifs |
fs-subtypes-$(CONFIG_TARGET_ROOTFS_JFFS2) += $(addsuffix -raw,$(addprefix jffs2-,$(JFFS2_BLOCKSIZE))) |
|
TARGET_FILESYSTEMS := $(fs-types-y) |
|
FS_64K := $(filter-out jffs2-%,$(TARGET_FILESYSTEMS)) jffs2-64k |
FS_128K := $(filter-out jffs2-%,$(TARGET_FILESYSTEMS)) jffs2-128k |
FS_256K := $(filter-out jffs2-%,$(TARGET_FILESYSTEMS)) jffs2-256k |
|
define add_jffs2_mark |
echo -ne '\xde\xad\xc0\xde' >> $(1) |
endef |
|
PROFILE_SANITIZED := $(call sanitize,$(PROFILE)) |
|
define split_args |
$(foreach data, \ |
$(subst |,$(space),\ |
$(subst $(space),^,$(1))), \ |
$(call $(2),$(strip $(subst ^,$(space),$(data))))) |
endef |
|
define build_cmd |
$(if $(Build/$(word 1,$(1))),,$(error Missing Build/$(word 1,$(1)))) |
$(call Build/$(word 1,$(1)),$(wordlist 2,$(words $(1)),$(1))) |
|
endef |
|
define concat_cmd |
$(call split_args,$(1),build_cmd) |
endef |
|
# pad to 4k, 8k, 16k, 64k, 128k, 256k and add jffs2 end-of-filesystem mark |
define prepare_generic_squashfs |
$(STAGING_DIR_HOST)/bin/padjffs2 $(1) 4 8 16 64 128 256 |
endef |
|
define Image/BuildKernel/Initramfs |
$(call Image/Build/Initramfs) |
endef |
|
define Image/BuildKernel/MkuImage |
mkimage -A $(ARCH) -O linux -T kernel -C $(1) -a $(2) -e $(3) \ |
-n '$(call toupper,$(ARCH)) $(VERSION_DIST) Linux-$(LINUX_VERSION)' -d $(4) $(5) |
endef |
|
define Image/BuildKernel/MkFIT |
$(TOPDIR)/scripts/mkits.sh \ |
-D $(1) -o $(KDIR)/fit-$(1).its -k $(2) $(if $(3),-d $(3)) -C $(4) -a $(5) -e $(6) \ |
-c $(if $(DEVICE_DTS_CONFIG),$(DEVICE_DTS_CONFIG),"config@1") \ |
-A $(LINUX_KARCH) -v $(LINUX_VERSION) |
PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage -f $(KDIR)/fit-$(1).its $(KDIR)/fit-$(1)$(7).itb |
endef |
|
ifdef CONFIG_TARGET_IMAGES_GZIP |
define Image/Gzip |
rm -f $(1).gz |
gzip -9n $(1) |
endef |
endif |
|
|
# Disable noisy checks by default as in upstream |
ifeq ($(strip $(call kernel_patchver_ge,4.6.0)),1) |
DTC_FLAGS += -Wno-unit_address_vs_reg |
endif |
ifeq ($(strip $(call kernel_patchver_ge,4.11.0)),1) |
DTC_FLAGS += \ |
-Wno-unit_address_vs_reg \ |
-Wno-simple_bus_reg \ |
-Wno-unit_address_format \ |
-Wno-pci_bridge \ |
-Wno-pci_device_bus_num \ |
-Wno-pci_device_reg |
endif |
ifeq ($(strip $(call kernel_patchver_ge,4.16.0)),1) |
DTC_FLAGS += \ |
-Wno-avoid_unnecessary_addr_size \ |
-Wno-alias_paths |
endif |
ifeq ($(strip $(call kernel_patchver_ge,4.17.0)),1) |
DTC_FLAGS += \ |
-Wno-graph_child_address \ |
-Wno-graph_port \ |
-Wno-unique_unit_address |
endif |
|
# $(1) source dts file |
# $(2) target dtb file |
# $(3) extra CPP flags |
# $(4) extra DTC flags |
define Image/BuildDTB |
$(TARGET_CROSS)cpp -nostdinc -x assembler-with-cpp \ |
-I$(DTS_DIR) \ |
-I$(DTS_DIR)/include \ |
-I$(LINUX_DIR)/include/ \ |
-undef -D__DTS__ $(3) \ |
-o $(2).tmp $(1) |
$(LINUX_DIR)/scripts/dtc/dtc -O dtb \ |
-i$(dir $(1)) $(DTC_FLAGS) $(4) \ |
-o $(2) $(2).tmp |
$(RM) $(2).tmp |
endef |
|
define Image/mkfs/jffs2/sub-raw |
$(STAGING_DIR_HOST)/bin/mkfs.jffs2 \ |
$(2) \ |
-e $(patsubst %k,%KiB,$(1)) \ |
-o $@ -d $(call mkfs_target_dir,$(3)) \ |
-v 2>&1 1>/dev/null | awk '/^.+$$$$/' |
endef |
|
define Image/mkfs/jffs2/sub |
$(call Image/mkfs/jffs2/sub-raw,$(1),--pad $(2),$(3)) |
$(call add_jffs2_mark,$@) |
endef |
|
define Image/mkfs/jffs2/template |
Image/mkfs/jffs2-$(1) = $$(call Image/mkfs/jffs2/sub,$(1),$(JFFS2OPTS),$$(1)) |
Image/mkfs/jffs2-$(1)-raw = $$(call Image/mkfs/jffs2/sub-raw,$(1),$(JFFS2OPTS),$$(1)) |
|
endef |
|
define Image/mkfs/jffs2-nand/template |
Image/mkfs/jffs2-nand-$(1) = \ |
$$(call Image/mkfs/jffs2/sub, \ |
$(word 2,$(subst -, ,$(1))), \ |
$(JFFS2OPTS) --no-cleanmarkers --pagesize=$(word 1,$(subst -, ,$(1))),$$(1)) |
|
endef |
|
$(eval $(foreach S,$(JFFS2_BLOCKSIZE),$(call Image/mkfs/jffs2/template,$(S)))) |
$(eval $(foreach S,$(NAND_BLOCKSIZE),$(call Image/mkfs/jffs2-nand/template,$(S)))) |
|
define Image/mkfs/squashfs |
$(STAGING_DIR_HOST)/bin/mksquashfs4 $(call mkfs_target_dir,$(1)) $@ \ |
-nopad -noappend -root-owned \ |
-comp $(SQUASHFSCOMP) $(SQUASHFSOPT) \ |
-processors 1 |
endef |
|
# $(1): board name |
# $(2): rootfs type |
# $(3): kernel image |
# $(4): compat string |
ifneq ($(CONFIG_NAND_SUPPORT),) |
define Image/Build/SysupgradeNAND |
mkdir -p "$(KDIR_TMP)/sysupgrade-$(if $(4),$(4),$(1))/" |
echo "BOARD=$(if $(4),$(4),$(1))" > "$(KDIR_TMP)/sysupgrade-$(if $(4),$(4),$(1))/CONTROL" |
[ -z "$(2)" ] || $(CP) "$(KDIR)/root.$(2)" "$(KDIR_TMP)/sysupgrade-$(if $(4),$(4),$(1))/root" |
[ -z "$(3)" ] || $(CP) "$(3)" "$(KDIR_TMP)/sysupgrade-$(if $(4),$(4),$(1))/kernel" |
(cd "$(KDIR_TMP)"; $(TAR) cvf \ |
"$(BIN_DIR)/$(IMG_PREFIX)-$(1)-$(2)-sysupgrade.tar" sysupgrade-$(if $(4),$(4),$(1)) \ |
$(if $(SOURCE_DATE_EPOCH),--mtime="@$(SOURCE_DATE_EPOCH)") \ |
) |
endef |
|
# $(1) board name |
# $(2) ubinize-image options (e.g. --uboot-env and/or --kernel kernelimage) |
# $(3) rootfstype (e.g. squashfs or ubifs) |
# $(4) options to pass-through to ubinize (i.e. $($(PROFILE)_UBI_OPTS))) |
define Image/Build/UbinizeImage |
sh $(TOPDIR)/scripts/ubinize-image.sh $(2) \ |
"$(KDIR)/root.$(3)" \ |
"$(KDIR)/$(IMG_PREFIX)-$(1)-$(3)-ubinized.bin" \ |
$(4) |
endef |
|
endif |
|
define Image/mkfs/ubifs |
$(STAGING_DIR_HOST)/bin/mkfs.ubifs \ |
$(UBIFS_OPTS) $(call param_unmangle,$(call param_get,fs,$(1))) \ |
$(if $(CONFIG_TARGET_UBIFS_FREE_SPACE_FIXUP),--space-fixup) \ |
$(if $(CONFIG_TARGET_UBIFS_COMPRESSION_NONE),--compr=none) \ |
$(if $(CONFIG_TARGET_UBIFS_COMPRESSION_LZO),--compr=lzo) \ |
$(if $(CONFIG_TARGET_UBIFS_COMPRESSION_ZLIB),--compr=zlib) \ |
$(if $(shell echo $(CONFIG_TARGET_UBIFS_JOURNAL_SIZE)),--jrn-size=$(CONFIG_TARGET_UBIFS_JOURNAL_SIZE)) \ |
--squash-uids \ |
-o $@ -d $(call mkfs_target_dir,$(1)) |
endef |
|
E2SIZE=$(shell echo $$(($(CONFIG_TARGET_ROOTFS_PARTSIZE)*1024*1024))) |
|
define Image/mkfs/ext4 |
$(STAGING_DIR_HOST)/bin/make_ext4fs \ |
-l $(E2SIZE) -b $(CONFIG_TARGET_EXT4_BLOCKSIZE) \ |
$(if $(CONFIG_TARGET_EXT4_RESERVED_PCT),-m $(CONFIG_TARGET_EXT4_RESERVED_PCT)) \ |
$(if $(CONFIG_TARGET_EXT4_JOURNAL),,-J) \ |
$(if $(SOURCE_DATE_EPOCH),-T $(SOURCE_DATE_EPOCH)) \ |
$@ $(call mkfs_target_dir,$(1))/ |
endef |
|
define Image/Manifest |
$(call opkg,$(TARGET_DIR_ORIG)) list-installed > \ |
$(BIN_DIR)/$(IMG_PREFIX)$(if $(PROFILE_SANITIZED),-$(PROFILE_SANITIZED)).manifest |
endef |
|
ifdef CONFIG_TARGET_ROOTFS_TARGZ |
define Image/Build/targz |
$(TAR) -cp --numeric-owner --owner=0 --group=0 --sort=name \ |
$(if $(SOURCE_DATE_EPOCH),--mtime="@$(SOURCE_DATE_EPOCH)") \ |
-C $(TARGET_DIR)/ . | gzip -9n > $(BIN_DIR)/$(IMG_PREFIX)$(if $(PROFILE_SANITIZED),-$(PROFILE_SANITIZED))-rootfs.tar.gz |
endef |
endif |
|
ifdef CONFIG_TARGET_ROOTFS_CPIOGZ |
define Image/Build/cpiogz |
( cd $(TARGET_DIR); find . | cpio -o -H newc -R root:root | gzip -9n >$(BIN_DIR)/$(IMG_PREFIX)-rootfs.cpio.gz ) |
endef |
endif |
|
mkfs_packages = $(filter-out @%,$(PACKAGES_$(call param_get,pkg,pkg=$(target_params)))) |
mkfs_packages_add = $(foreach pkg,$(filter-out -%,$(mkfs_packages)),$(pkg)$(call GetABISuffix,$(pkg))) |
mkfs_packages_remove = $(foreach pkg,$(patsubst -%,%,$(filter -%,$(mkfs_packages))),$(pkg)$(call GetABISuffix,$(pkg))) |
mkfs_cur_target_dir = $(call mkfs_target_dir,pkg=$(target_params)) |
|
opkg_target = \ |
$(call opkg,$(mkfs_cur_target_dir)) \ |
-f $(mkfs_cur_target_dir).conf |
|
target-dir-%: FORCE |
rm -rf $(mkfs_cur_target_dir) $(mkfs_cur_target_dir).opkg |
$(CP) $(TARGET_DIR_ORIG) $(mkfs_cur_target_dir) |
-mv $(mkfs_cur_target_dir)/etc/opkg $(mkfs_cur_target_dir).opkg |
echo 'src default file://$(PACKAGE_DIR_ALL)' > $(mkfs_cur_target_dir).conf |
$(if $(mkfs_packages_remove), \ |
-$(call opkg,$(mkfs_cur_target_dir)) remove \ |
$(mkfs_packages_remove)) |
$(if $(call opkg_package_files,$(mkfs_packages_add)), \ |
$(opkg_target) update && \ |
$(opkg_target) install \ |
$(call opkg_package_files,$(mkfs_packages_add))) |
-$(CP) -T $(mkfs_cur_target_dir).opkg/ $(mkfs_cur_target_dir)/etc/opkg/ |
rm -rf $(mkfs_cur_target_dir).opkg $(mkfs_cur_target_dir).conf |
$(call prepare_rootfs,$(mkfs_cur_target_dir),$(TOPDIR)/files) |
|
$(KDIR)/root.%: kernel_prepare |
$(call Image/mkfs/$(word 1,$(target_params)),$(target_params)) |
|
define Device/InitProfile |
PROFILES := $(PROFILE) |
DEVICE_TITLE := |
DEVICE_PACKAGES := |
DEVICE_DESCRIPTION = Build firmware images for $$(DEVICE_TITLE) |
endef |
|
define Device/Init |
DEVICE_NAME := $(1) |
KERNEL:= |
KERNEL_INITRAMFS = $$(KERNEL) |
KERNEL_SIZE:= |
CMDLINE:= |
|
IMAGES := |
ARTIFACTS := |
IMAGE_PREFIX := $(IMG_PREFIX)-$(1) |
IMAGE_NAME = $$(IMAGE_PREFIX)-$$(1)-$$(2) |
KERNEL_PREFIX = $$(IMAGE_PREFIX) |
KERNEL_SUFFIX := -kernel.bin |
KERNEL_INITRAMFS_SUFFIX = $$(KERNEL_SUFFIX) |
KERNEL_IMAGE = $$(KERNEL_PREFIX)$$(KERNEL_SUFFIX) |
KERNEL_INITRAMFS_PREFIX = $$(IMAGE_PREFIX)-initramfs |
KERNEL_INITRAMFS_IMAGE = $$(KERNEL_INITRAMFS_PREFIX)$$(KERNEL_INITRAMFS_SUFFIX) |
KERNEL_INITRAMFS_NAME = $$(KERNEL_NAME)-initramfs |
KERNEL_INSTALL := |
KERNEL_NAME := vmlinux |
KERNEL_DEPENDS := |
KERNEL_SIZE := |
|
UBOOTENV_IN_UBI := |
KERNEL_IN_UBI := |
BLOCKSIZE := |
PAGESIZE := |
SUBPAGESIZE := |
VID_HDR_OFFSET := |
UBINIZE_OPTS := |
UBINIZE_PARTS := |
MKUBIFS_OPTS := |
|
FS_OPTIONS/ubifs = $$(MKUBIFS_OPTS) |
|
DEVICE_DTS := |
DEVICE_DTS_CONFIG := |
DEVICE_DTS_DIR := |
|
BOARD_NAME := |
UIMAGE_NAME := |
SUPPORTED_DEVICES := |
IMAGE_METADATA := |
|
FILESYSTEMS := $(TARGET_FILESYSTEMS) |
endef |
|
DEFAULT_DEVICE_VARS := \ |
DEVICE_NAME KERNEL KERNEL_INITRAMFS KERNEL_INITRAMFS_IMAGE KERNEL_SIZE \ |
CMDLINE UBOOTENV_IN_UBI KERNEL_IN_UBI BLOCKSIZE PAGESIZE SUBPAGESIZE \ |
VID_HDR_OFFSET UBINIZE_OPTS UBINIZE_PARTS MKUBIFS_OPTS DEVICE_DTS \ |
DEVICE_DTS_CONFIG DEVICE_DTS_DIR BOARD_NAME UIMAGE_NAME SUPPORTED_DEVICES \ |
IMAGE_METADATA KERNEL_ENTRY KERNEL_LOADADDR |
|
define Device/ExportVar |
$(1) : $(2):=$$($(2)) |
|
endef |
define Device/Export |
$(foreach var,$(DEVICE_VARS) $(DEFAULT_DEVICE_VARS),$(call Device/ExportVar,$(1),$(var))) |
$(1) : FILESYSTEM:=$(2) |
endef |
|
ifdef IB |
DEVICE_CHECK_PROFILE = $(filter $(1),DEVICE_$(PROFILE) $(PROFILE)) |
else |
DEVICE_CHECK_PROFILE = $(CONFIG_TARGET_$(if $(CONFIG_TARGET_MULTI_PROFILE),DEVICE_)$(call target_conf,$(BOARD)$(if $(SUBTARGET),_$(SUBTARGET)))_$(1)) |
endif |
|
DEVICE_EXTRA_PACKAGES = $(call qstrip,$(CONFIG_TARGET_DEVICE_PACKAGES_$(call target_conf,$(BOARD)$(if $(SUBTARGET),_$(SUBTARGET)))_DEVICE_$(1))) |
|
define merge_packages |
$(1) := |
$(foreach pkg,$(2), |
$(1) := $$(strip $$(filter-out -$$(patsubst -%,%,$(pkg)) $$(patsubst -%,%,$(pkg)),$$($(1))) $(pkg)) |
) |
endef |
|
define Device/Check/Common |
_PROFILE_SET = $$(strip $$(foreach profile,$$(PROFILES) DEVICE_$(1),$$(call DEVICE_CHECK_PROFILE,$$(profile)))) |
DEVICE_PACKAGES += $$(call extra_packages,$$(DEVICE_PACKAGES)) |
ifdef TARGET_PER_DEVICE_ROOTFS |
$$(eval $$(call merge_packages,_PACKAGES,$$(DEVICE_PACKAGES) $$(call DEVICE_EXTRA_PACKAGES,$(1)))) |
ROOTFS_ID/$(1) := $$(if $$(_PROFILE_SET),$$(call mkfs_packages_id,$$(_PACKAGES))) |
PACKAGES_$$(ROOTFS_ID/$(1)) := $$(_PACKAGES) |
endif |
endef |
|
define Device/Check |
$(Device/Check/Common) |
KDIR_KERNEL_IMAGE := $(KDIR)/$(1)$$(KERNEL_SUFFIX) |
_TARGET := $$(if $$(_PROFILE_SET),install-images,install-disabled) |
ifndef IB |
_COMPILE_TARGET := $$(if $(CONFIG_IB)$$(_PROFILE_SET),compile,compile-disabled) |
endif |
endef |
|
ifndef IB |
define Device/Build/initramfs |
$(call Device/Export,$(KDIR)/tmp/$$(KERNEL_INITRAMFS_IMAGE),$(1)) |
$$(_TARGET): $$(if $$(KERNEL_INITRAMFS),$(BIN_DIR)/$$(KERNEL_INITRAMFS_IMAGE)) |
|
$(KDIR)/$$(KERNEL_INITRAMFS_NAME):: image_prepare |
$(BIN_DIR)/$$(KERNEL_INITRAMFS_IMAGE): $(KDIR)/tmp/$$(KERNEL_INITRAMFS_IMAGE) |
cp $$^ $$@ |
|
$(KDIR)/tmp/$$(KERNEL_INITRAMFS_IMAGE): $(KDIR)/$$(KERNEL_INITRAMFS_NAME) $(CURDIR)/Makefile $$(KERNEL_DEPENDS) image_prepare |
@rm -f $$@ |
$$(call concat_cmd,$$(KERNEL_INITRAMFS)) |
endef |
endif |
|
define Device/Build/compile |
$$(_COMPILE_TARGET): $(KDIR)/$(1) |
$(eval $(call Device/Export,$(KDIR)/$(1))) |
$(KDIR)/$(1): |
$$(call concat_cmd,$(COMPILE/$(1))) |
|
endef |
|
ifndef IB |
define Device/Build/dtb |
ifndef BUILD_DTS_$(1) |
BUILD_DTS_$(1) := 1 |
$(KDIR)/image-$(1).dtb: FORCE |
$(call Image/BuildDTB,$(strip $(2))/$(strip $(3)).dts,$$@) |
|
image_prepare: $(KDIR)/image-$(1).dtb |
endif |
|
endef |
endif |
|
define Device/Build/kernel |
$$(eval $$(foreach dts,$$(DEVICE_DTS), \ |
$$(call Device/Build/dtb,$$(notdir $$(dts)), \ |
$$(if $$(DEVICE_DTS_DIR),$$(DEVICE_DTS_DIR),$$(DTS_DIR)), \ |
$$(dts) \ |
) \ |
)) |
|
$(KDIR)/$$(KERNEL_NAME):: image_prepare |
$$(_TARGET): $$(if $$(KERNEL_INSTALL),$(BIN_DIR)/$$(KERNEL_IMAGE)) |
$(call Device/Export,$$(KDIR_KERNEL_IMAGE),$(1)) |
$(BIN_DIR)/$$(KERNEL_IMAGE): $$(KDIR_KERNEL_IMAGE) |
cp $$^ $$@ |
ifndef IB |
ifdef CONFIG_IB |
install: $$(KDIR_KERNEL_IMAGE) |
endif |
$$(KDIR_KERNEL_IMAGE): $(KDIR)/$$(KERNEL_NAME) $(CURDIR)/Makefile $$(KERNEL_DEPENDS) image_prepare |
@rm -f $$@ |
$$(call concat_cmd,$$(KERNEL)) |
$$(if $$(KERNEL_SIZE),$$(call Build/check-size,$$(KERNEL_SIZE))) |
endif |
endef |
|
define Device/Build/image |
GZ_SUFFIX := $(if $(filter %dtb %gz,$(2)),,$(if $(and $(findstring ext4,$(1)),$(CONFIG_TARGET_IMAGES_GZIP)),.gz)) |
$$(_TARGET): $(BIN_DIR)/$(call IMAGE_NAME,$(1),$(2))$$(GZ_SUFFIX) |
$(eval $(call Device/Export,$(KDIR)/tmp/$(call IMAGE_NAME,$(1),$(2)),$(1))) |
ROOTFS/$(1)/$(3) := \ |
$(KDIR)/root.$(1)$$(strip \ |
$$(if $$(FS_OPTIONS/$(1)),+fs=$$(call param_mangle,$$(FS_OPTIONS/$(1)))) \ |
)$$(strip \ |
$(if $(TARGET_PER_DEVICE_ROOTFS),+pkg=$$(ROOTFS_ID/$(3))) \ |
) |
ifndef IB |
$$(ROOTFS/$(1)/$(3)): $(if $(TARGET_PER_DEVICE_ROOTFS),target-dir-$$(ROOTFS_ID/$(3))) |
endif |
$(KDIR)/tmp/$(call IMAGE_NAME,$(1),$(2)): $$(KDIR_KERNEL_IMAGE) $$(ROOTFS/$(1)/$(3)) |
@rm -f $$@ |
[ -f $$(word 1,$$^) -a -f $$(word 2,$$^) ] |
$$(call concat_cmd,$(if $(IMAGE/$(2)/$(1)),$(IMAGE/$(2)/$(1)),$(IMAGE/$(2)))) |
|
.IGNORE: $(BIN_DIR)/$(call IMAGE_NAME,$(1),$(2)) |
|
$(BIN_DIR)/$(call IMAGE_NAME,$(1),$(2)).gz: $(KDIR)/tmp/$(call IMAGE_NAME,$(1),$(2)) |
gzip -c -9n $$^ > $$@ |
|
$(BIN_DIR)/$(call IMAGE_NAME,$(1),$(2)): $(KDIR)/tmp/$(call IMAGE_NAME,$(1),$(2)) |
cp $$^ $$@ |
|
endef |
|
define Device/Build/artifact |
$$(_TARGET): $(BIN_DIR)/$(IMAGE_PREFIX)-$(1) |
$(eval $(call Device/Export,$(KDIR)/tmp/$(IMAGE_PREFIX)-$(1))) |
$(KDIR)/tmp/$(IMAGE_PREFIX)-$(1): $$(KDIR_KERNEL_IMAGE) |
@rm -f $$@ |
$$(call concat_cmd,$(ARTIFACT/$(1))) |
|
.IGNORE: $(BIN_DIR)/$(IMAGE_PREFIX)-$(1) |
|
$(BIN_DIR)/$(IMAGE_PREFIX)-$(1): $(KDIR)/tmp/$(IMAGE_PREFIX)-$(1) |
cp $$^ $$@ |
|
endef |
|
define Device/Build |
$(if $(CONFIG_TARGET_ROOTFS_INITRAMFS),$(call Device/Build/initramfs,$(1))) |
$(call Device/Build/kernel,$(1)) |
|
$$(eval $$(foreach compile,$$(COMPILE), \ |
$$(call Device/Build/compile,$$(compile),$(1)))) |
|
$$(eval $$(foreach image,$$(IMAGES), \ |
$$(foreach fs,$$(filter $(TARGET_FILESYSTEMS),$$(FILESYSTEMS)), \ |
$$(call Device/Build/image,$$(fs),$$(image),$(1))))) |
|
$$(eval $$(foreach artifact,$$(ARTIFACTS), \ |
$$(call Device/Build/artifact,$$(artifact)))) |
|
endef |
|
define Device/DumpInfo |
Target-Profile: DEVICE_$(1) |
Target-Profile-Name: $(DEVICE_TITLE) |
Target-Profile-Packages: $(DEVICE_PACKAGES) |
Target-Profile-Description: |
$(DEVICE_DESCRIPTION) |
@@ |
|
endef |
|
define Device/Dump |
$$(eval $$(if $$(DEVICE_TITLE),$$(info $$(call Device/DumpInfo,$(1))))) |
endef |
|
define Device |
$(call Device/InitProfile,$(1)) |
$(call Device/Init,$(1)) |
$(call Device/Default,$(1)) |
$(call Device/$(1),$(1)) |
$(call Device/Check,$(1)) |
$(call Device/$(if $(DUMP),Dump,Build),$(1)) |
|
endef |
|
define BuildImage |
|
ifneq ($(DUMP),) |
all: dumpinfo |
dumpinfo: FORCE |
@true |
endif |
|
download: |
prepare: |
compile: |
clean: |
legacy-images-prepare: |
legacy-images: |
image_prepare: |
|
ifeq ($(IB),) |
.PHONY: download prepare compile clean image_prepare kernel_prepare install install-images |
compile: |
$(call Build/Compile) |
|
clean: |
$(call Build/Clean) |
|
image_prepare: compile |
mkdir -p $(BIN_DIR) $(KDIR)/tmp |
$(call Image/Prepare) |
|
legacy-images-prepare-make: image_prepare |
$(MAKE) legacy-images-prepare BIN_DIR="$(BIN_DIR)" |
|
else |
image_prepare: |
mkdir -p $(BIN_DIR) $(KDIR)/tmp |
endif |
|
kernel_prepare: image_prepare |
$(call Image/Build/targz) |
$(call Image/Build/cpiogz) |
$(call Image/BuildKernel) |
$(if $(CONFIG_TARGET_ROOTFS_INITRAMFS),$(if $(IB),,$(call Image/BuildKernel/Initramfs))) |
$(call Image/InstallKernel) |
|
$(foreach device,$(TARGET_DEVICES),$(call Device,$(device))) |
$(foreach device,$(LEGACY_DEVICES),$(call LegacyDevice,$(device))) |
|
install-images: kernel_prepare $(foreach fs,$(filter-out $(if $(UBIFS_OPTS),,ubifs),$(TARGET_FILESYSTEMS) $(fs-subtypes-y)),$(KDIR)/root.$(fs)) |
$(foreach fs,$(TARGET_FILESYSTEMS), |
$(call Image/Build,$(fs)) |
) |
|
legacy-images-make: install-images |
$(call Image/mkfs/ubifs/legacy) |
$(MAKE) legacy-images BIN_DIR="$(BIN_DIR)" |
|
install: install-images |
$(call Image/Manifest) |
|
endef |
/branches/18.06.1/include/kernel.mk |
@@ -0,0 +1,297 @@ |
# |
# Copyright (C) 2006-2015 OpenWrt.org |
# |
# This is free software, licensed under the GNU General Public License v2. |
# See /LICENSE for more information. |
# |
|
ifneq ($(filter check,$(MAKECMDGOALS)),) |
CHECK:=1 |
DUMP:=1 |
endif |
|
ifneq ($(SOURCE_DATE_EPOCH),) |
ifndef DUMP |
KBUILD_BUILD_TIMESTAMP:=$(shell perl -e 'print scalar gmtime($(SOURCE_DATE_EPOCH))') |
endif |
endif |
|
ifeq ($(__target_inc),) |
ifndef CHECK |
include $(INCLUDE_DIR)/target.mk |
endif |
endif |
|
ifeq ($(DUMP),1) |
KERNEL?=<KERNEL> |
BOARD?=<BOARD> |
LINUX_VERSION?=<LINUX_VERSION> |
LINUX_VERMAGIC?=<LINUX_VERMAGIC> |
else |
ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) |
export GCC_HONOUR_COPTS=s |
endif |
|
LINUX_KMOD_SUFFIX=ko |
|
ifneq (,$(findstring uml,$(BOARD))) |
KERNEL_CC?=$(HOSTCC) |
KERNEL_CROSS?= |
else |
KERNEL_CC?=$(TARGET_CC) |
KERNEL_CROSS?=$(TARGET_CROSS) |
endif |
|
ifeq ($(TARGET_BUILD),1) |
PATCH_DIR ?= $(CURDIR)/patches$(if $(wildcard ./patches-$(KERNEL_PATCHVER)),-$(KERNEL_PATCHVER)) |
FILES_DIR ?= $(foreach dir,$(wildcard $(CURDIR)/files $(CURDIR)/files-$(KERNEL_PATCHVER)),"$(dir)") |
endif |
KERNEL_BUILD_DIR ?= $(BUILD_DIR)/linux-$(BOARD)$(if $(SUBTARGET),_$(SUBTARGET)) |
LINUX_DIR ?= $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION) |
LINUX_UAPI_DIR=uapi/ |
LINUX_VERMAGIC:=$(strip $(shell cat $(LINUX_DIR)/.vermagic 2>/dev/null)) |
LINUX_VERMAGIC:=$(if $(LINUX_VERMAGIC),$(LINUX_VERMAGIC),unknown) |
|
LINUX_UNAME_VERSION:=$(KERNEL_BASE) |
ifneq ($(findstring -rc,$(LINUX_VERSION)),) |
LINUX_UNAME_VERSION:=$(LINUX_UNAME_VERSION)-$(strip $(lastword $(subst -, ,$(LINUX_VERSION)))) |
endif |
|
LINUX_KERNEL:=$(KERNEL_BUILD_DIR)/vmlinux |
|
ifneq (,$(findstring -rc,$(LINUX_VERSION))) |
LINUX_SOURCE:=linux-$(LINUX_VERSION).tar.gz |
else |
LINUX_SOURCE:=linux-$(LINUX_VERSION).tar.xz |
endif |
|
ifneq (,$(findstring -rc,$(LINUX_VERSION))) |
LINUX_SITE:=https://git.kernel.org/torvalds/t |
else ifeq ($(call qstrip,$(CONFIG_EXTERNAL_KERNEL_TREE))$(call qstrip,$(CONFIG_KERNEL_GIT_CLONE_URI)),) |
LINUX_SITE:=@KERNEL/linux/kernel/v$(word 1,$(subst ., ,$(KERNEL_BASE))).x |
else |
LINUX_UNAME_VERSION:=$(strip $(shell cat $(LINUX_DIR)/include/config/kernel.release 2>/dev/null)) |
endif |
|
MODULES_SUBDIR:=lib/modules/$(LINUX_UNAME_VERSION) |
TARGET_MODULES_DIR:=$(LINUX_TARGET_DIR)/$(MODULES_SUBDIR) |
|
ifneq ($(TARGET_BUILD),1) |
PKG_BUILD_DIR ?= $(KERNEL_BUILD_DIR)/$(PKG_NAME)$(if $(PKG_VERSION),-$(PKG_VERSION)) |
endif |
endif |
|
ifneq (,$(findstring uml,$(BOARD))) |
LINUX_KARCH=um |
else ifneq (,$(findstring $(ARCH) , aarch64 aarch64_be )) |
LINUX_KARCH := arm64 |
else ifneq (,$(findstring $(ARCH) , arceb )) |
LINUX_KARCH := arc |
else ifneq (,$(findstring $(ARCH) , armeb )) |
LINUX_KARCH := arm |
else ifneq (,$(findstring $(ARCH) , mipsel mips64 mips64el )) |
LINUX_KARCH := mips |
else ifneq (,$(findstring $(ARCH) , powerpc64 )) |
LINUX_KARCH := powerpc |
else ifneq (,$(findstring $(ARCH) , sh2 sh3 sh4 )) |
LINUX_KARCH := sh |
else ifneq (,$(findstring $(ARCH) , i386 x86_64 )) |
LINUX_KARCH := x86 |
else |
LINUX_KARCH := $(ARCH) |
endif |
|
KERNEL_MAKE = $(MAKE) $(KERNEL_MAKEOPTS) |
|
KERNEL_MAKE_FLAGS = \ |
HOSTCFLAGS="$(HOST_CFLAGS) -Wall -Wmissing-prototypes -Wstrict-prototypes" \ |
CROSS_COMPILE="$(KERNEL_CROSS)" \ |
ARCH="$(LINUX_KARCH)" \ |
KBUILD_HAVE_NLS=no \ |
KBUILD_BUILD_USER="$(call qstrip,$(CONFIG_KERNEL_BUILD_USER))" \ |
KBUILD_BUILD_HOST="$(call qstrip,$(CONFIG_KERNEL_BUILD_DOMAIN))" \ |
KBUILD_BUILD_TIMESTAMP="$(KBUILD_BUILD_TIMESTAMP)" \ |
KBUILD_BUILD_VERSION="0" \ |
HOST_LOADLIBES="-L$(STAGING_DIR_HOST)/lib" \ |
CONFIG_SHELL="$(BASH)" \ |
$(if $(findstring c,$(OPENWRT_VERBOSE)),V=1,V='') \ |
$(if $(PKG_BUILD_ID),LDFLAGS_MODULE=--build-id=0x$(PKG_BUILD_ID)) \ |
cmd_syscalls= |
|
ifeq ($(call qstrip,$(CONFIG_EXTERNAL_KERNEL_TREE))$(call qstrip,$(CONFIG_KERNEL_GIT_CLONE_URI)),) |
KERNEL_MAKE_FLAGS += \ |
KERNELRELEASE=$(LINUX_VERSION) |
endif |
|
KERNEL_MAKEOPTS := -C $(LINUX_DIR) $(KERNEL_MAKE_FLAGS) |
|
ifdef CONFIG_USE_SPARSE |
KERNEL_MAKEOPTS += C=1 CHECK=$(STAGING_DIR_HOST)/bin/sparse |
endif |
|
PKG_EXTMOD_SUBDIRS ?= . |
|
define populate_module_symvers |
@mkdir -p $(PKG_INFO_DIR) |
cat /dev/null > $(PKG_INFO_DIR)/$(PKG_NAME).symvers; \ |
for subdir in $(PKG_EXTMOD_SUBDIRS); do \ |
cat $(PKG_INFO_DIR)/*.symvers 2>/dev/null > $(PKG_BUILD_DIR)/$$$$subdir/Module.symvers; \ |
done |
endef |
|
define collect_module_symvers |
for subdir in $(PKG_EXTMOD_SUBDIRS); do \ |
grep -F $$$$(readlink -f $(PKG_BUILD_DIR)) $(PKG_BUILD_DIR)/$$$$subdir/Module.symvers >> $(PKG_BUILD_DIR)/Module.symvers.tmp; \ |
done; \ |
sort -u $(PKG_BUILD_DIR)/Module.symvers.tmp > $(PKG_BUILD_DIR)/Module.symvers; \ |
mv $(PKG_BUILD_DIR)/Module.symvers $(PKG_INFO_DIR)/$(PKG_NAME).symvers |
endef |
|
define KernelPackage/hooks |
ifneq ($(PKG_NAME),kernel) |
Hooks/Compile/Pre += populate_module_symvers |
Hooks/Compile/Post += collect_module_symvers |
endif |
define KernelPackage/hooks |
endef |
endef |
|
define KernelPackage/Defaults |
FILES:= |
AUTOLOAD:= |
MODPARAMS:= |
PKGFLAGS+=nonshared |
endef |
|
# 1: name |
# 2: install prefix |
# 3: module priority prefix |
# 4: required for boot |
# 5: module list |
define ModuleAutoLoad |
$(if $(5), \ |
mkdir -p $(2)/etc/modules.d; \ |
($(foreach mod,$(5), \ |
echo "$(mod)$(if $(MODPARAMS.$(mod)), $(MODPARAMS.$(mod)),$(if $(MODPARAMS), $(MODPARAMS)))"; )) > $(2)/etc/modules.d/$(3)$(1); \ |
$(if $(4), \ |
mkdir -p $(2)/etc/modules-boot.d; \ |
ln -sf ../modules.d/$(3)$(1) $(2)/etc/modules-boot.d/;)) |
endef |
|
ifeq ($(DUMP)$(TARGET_BUILD),) |
-include $(LINUX_DIR)/.config |
endif |
|
define KernelPackage/depends |
$(STAMP_BUILT): $(LINUX_DIR)/.config |
define KernelPackage/depends |
endef |
endef |
|
define KernelPackage |
NAME:=$(1) |
$(eval $(call Package/Default)) |
$(eval $(call KernelPackage/Defaults)) |
$(eval $(call KernelPackage/$(1))) |
$(eval $(call KernelPackage/$(1)/$(BOARD))) |
$(eval $(call KernelPackage/$(1)/$(BOARD)/$(if $(SUBTARGET),$(SUBTARGET),generic))) |
|
define Package/kmod-$(1) |
TITLE:=$(TITLE) |
SECTION:=kernel |
CATEGORY:=Kernel modules |
DESCRIPTION:=$(DESCRIPTION) |
EXTRA_DEPENDS:=kernel (=$(LINUX_VERSION)-$(LINUX_RELEASE)-$(LINUX_VERMAGIC)) |
VERSION:=$(LINUX_VERSION)$(if $(PKG_VERSION),+$(PKG_VERSION))-$(if $(PKG_RELEASE),$(PKG_RELEASE),$(LINUX_RELEASE)) |
PKGFLAGS:=$(PKGFLAGS) |
$(call KernelPackage/$(1)) |
$(call KernelPackage/$(1)/$(BOARD)) |
$(call KernelPackage/$(1)/$(BOARD)/$(if $(SUBTARGET),$(SUBTARGET),generic)) |
endef |
|
ifdef KernelPackage/$(1)/conffiles |
define Package/kmod-$(1)/conffiles |
$(call KernelPackage/$(1)/conffiles) |
endef |
endif |
|
ifdef KernelPackage/$(1)/description |
define Package/kmod-$(1)/description |
$(call KernelPackage/$(1)/description) |
endef |
endif |
|
ifdef KernelPackage/$(1)/config |
define Package/kmod-$(1)/config |
$(call KernelPackage/$(1)/config) |
endef |
endif |
|
$(call KernelPackage/depends) |
$(call KernelPackage/hooks) |
|
ifneq ($(if $(filter-out %=y %=n %=m,$(KCONFIG)),$(filter m y,$(foreach c,$(filter-out %=y %=n %=m,$(KCONFIG)),$($(c)))),.),) |
define Package/kmod-$(1)/install |
@for mod in $$(call version_filter,$$(FILES)); do \ |
if grep -q "$$$$$$$${mod##$(LINUX_DIR)/}" "$(LINUX_DIR)/modules.builtin"; then \ |
echo "NOTICE: module '$$$$$$$$mod' is built-in."; \ |
elif [ -e $$$$$$$$mod ]; then \ |
mkdir -p $$(1)/$(MODULES_SUBDIR) ; \ |
$(CP) -L $$$$$$$$mod $$(1)/$(MODULES_SUBDIR)/ ; \ |
else \ |
echo "ERROR: module '$$$$$$$$mod' is missing." >&2; \ |
exit 1; \ |
fi; \ |
done; |
$(call ModuleAutoLoad,$(1),$$(1),$(filter-out 0-,$(word 1,$(AUTOLOAD))-),$(filter-out 0,$(word 2,$(AUTOLOAD))),$(sort $(wordlist 3,99,$(AUTOLOAD)))) |
$(call KernelPackage/$(1)/install,$$(1)) |
endef |
$(if $(CONFIG_PACKAGE_kmod-$(1)), |
else |
compile: $(1)-disabled |
$(1)-disabled: |
@echo "WARNING: kmod-$(1) is not available in the kernel config - generating empty package" >&2 |
|
define Package/kmod-$(1)/install |
true |
endef |
) |
endif |
$$(eval $$(call BuildPackage,kmod-$(1))) |
|
$$(IPKG_kmod-$(1)): $$(wildcard $$(call version_filter,$$(FILES))) |
|
endef |
|
version_filter=$(if $(findstring @,$(1)),$(shell $(SCRIPT_DIR)/package-metadata.pl version_filter $(KERNEL_PATCHVER) $(1)),$(1)) |
|
# 1: priority (optional) |
# 2: module list |
# 3: boot flag |
define AutoLoad |
$(if $(1),$(1),0) $(if $(3),1,0) $(call version_filter,$(2)) |
endef |
|
# 1: module list |
# 2: boot flag |
define AutoProbe |
$(call AutoLoad,,$(1),$(2)) |
endef |
|
version_field=$(if $(word $(1),$(2)),$(word $(1),$(2)),0) |
kernel_version_merge=$$(( ($(call version_field,1,$(1)) << 24) + ($(call version_field,2,$(1)) << 16) + ($(call version_field,3,$(1)) << 8) + $(call version_field,4,$(1)) )) |
|
ifdef DUMP |
kernel_version_cmp= |
else |
kernel_version_cmp=$(shell [ $(call kernel_version_merge,$(call split_version,$(2))) $(1) $(call kernel_version_merge,$(call split_version,$(3))) ] && echo 1 ) |
endif |
|
CompareKernelPatchVer=$(if $(call kernel_version_cmp,-$(2),$(1),$(3)),1,0) |
|
kernel_patchver_gt=$(call kernel_version_cmp,-gt,$(KERNEL_PATCHVER),$(1)) |
kernel_patchver_ge=$(call kernel_version_cmp,-ge,$(KERNEL_PATCHVER),$(1)) |
kernel_patchver_eq=$(call kernel_version_cmp,-eq,$(KERNEL_PATCHVER),$(1)) |
kernel_patchver_le=$(call kernel_version_cmp,-le,$(KERNEL_PATCHVER),$(1)) |
kernel_patchver_lt=$(call kernel_version_cmp,-lt,$(KERNEL_PATCHVER),$(1)) |
|
/branches/18.06.1/include/netfilter.mk |
@@ -0,0 +1,414 @@ |
# |
# Copyright (C) 2006-2014 OpenWrt.org |
# |
# This is free software, licensed under the GNU General Public License v2. |
# See /LICENSE for more information. |
# |
|
ifneq ($(__inc_netfilter),1) |
__inc_netfilter:=1 |
|
ifeq ($(NF_KMOD),1) |
P_V4:=ipv4/netfilter/ |
P_V6:=ipv6/netfilter/ |
P_XT:=netfilter/ |
P_EBT:=bridge/netfilter/ |
endif |
|
# 1: variable |
# 2: kconfig symbols |
# 3: file list |
# 4: version dependency |
define nf_add |
$(if $(4),ifeq ($$(strip $$(call CompareKernelPatchVer,$$(KERNEL_PATCHVER),$(firstword $(4)),$(lastword $(4)))),1)) |
$(1)-$$($(2)) += $(3) |
$(if $(4),endif) |
KCONFIG_$(1) = $(filter-out $(2),$(KCONFIG_$(1))) $(2) |
endef |
|
|
# core |
|
# kernel only |
$(eval $(if $(NF_KMOD),$(call nf_add,NF_REJECT,CONFIG_NF_REJECT_IPV4, $(P_V4)nf_reject_ipv4),)) |
|
$(eval $(if $(NF_KMOD),$(call nf_add,NF_IPT,CONFIG_IP_NF_IPTABLES, $(P_V4)ip_tables),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NF_IPT,CONFIG_NETFILTER_XTABLES, $(P_XT)x_tables),)) |
|
$(eval $(if $(NF_KMOD),$(call nf_add,IPT_CORE,CONFIG_NETFILTER_XTABLES, $(P_XT)xt_tcpudp),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,IPT_CORE,CONFIG_IP_NF_FILTER, $(P_V4)iptable_filter),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,IPT_CORE,CONFIG_IP_NF_MANGLE, $(P_V4)iptable_mangle),)) |
|
# userland only |
$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_CORE,CONFIG_IP_NF_IPTABLES, xt_standard ipt_icmp xt_tcp xt_udp xt_comment xt_set xt_SET))) |
|
$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MATCH_LIMIT, $(P_XT)xt_limit)) |
$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MATCH_MAC, $(P_XT)xt_mac)) |
$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MATCH_MULTIPORT, $(P_XT)xt_multiport)) |
$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MATCH_COMMENT, $(P_XT)xt_comment)) |
|
#cluster |
$(eval $(call nf_add,IPT_CLUSTER,CONFIG_NETFILTER_XT_MATCH_CLUSTER, $(P_XT)xt_cluster)) |
|
$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_TARGET_LOG, $(P_XT)xt_LOG)) |
$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_TARGET_LOG, $(P_XT)nf_log_common)) |
$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_TARGET_LOG, $(P_V4)nf_log_ipv4)) |
$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_TARGET_TCPMSS, $(P_XT)xt_TCPMSS)) |
$(eval $(call nf_add,IPT_CORE,CONFIG_IP_NF_TARGET_REJECT, $(P_V4)ipt_REJECT)) |
$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MATCH_TIME, $(P_XT)xt_time)) |
$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MARK, $(P_XT)xt_mark)) |
|
# kernel has xt_MARK.ko merged into xt_mark.ko, userspace is still separate |
# userland: xt_MARK.so |
$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MARK, $(P_XT)xt_MARK))) |
|
|
# conntrack |
|
# kernel only |
$(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNTRACK,CONFIG_NF_CONNTRACK, $(P_XT)nf_conntrack),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNTRACK,CONFIG_NF_CONNTRACK_RTCACHE, $(P_XT)nf_conntrack_rtcache),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNTRACK,CONFIG_NF_DEFRAG_IPV4, $(P_V4)nf_defrag_ipv4),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNTRACK,CONFIG_NF_CONNTRACK_IPV4, $(P_V4)nf_conntrack_ipv4),)) |
|
$(eval $(call nf_add,IPT_CONNTRACK,CONFIG_NETFILTER_XT_MATCH_STATE, $(P_XT)xt_state)) |
$(eval $(call nf_add,IPT_CONNTRACK,CONFIG_NETFILTER_XT_TARGET_CT, $(P_XT)xt_CT)) |
$(eval $(call nf_add,IPT_CONNTRACK,CONFIG_NETFILTER_XT_MATCH_CONNTRACK, $(P_XT)xt_conntrack)) |
|
|
# conntrack-extra |
|
$(eval $(call nf_add,IPT_CONNTRACK_EXTRA,CONFIG_NETFILTER_XT_MATCH_CONNBYTES, $(P_XT)xt_connbytes)) |
$(eval $(call nf_add,IPT_CONNTRACK_EXTRA,CONFIG_NETFILTER_XT_MATCH_CONNLIMIT, $(P_XT)xt_connlimit)) |
$(eval $(call nf_add,IPT_CONNTRACK_EXTRA,CONFIG_NETFILTER_CONNCOUNT, $(P_XT)nf_conncount)) |
$(eval $(call nf_add,IPT_CONNTRACK_EXTRA,CONFIG_NETFILTER_XT_CONNMARK, $(P_XT)xt_connmark)) |
$(eval $(call nf_add,IPT_CONNTRACK_EXTRA,CONFIG_NETFILTER_XT_MATCH_HELPER, $(P_XT)xt_helper)) |
$(eval $(call nf_add,IPT_CONNTRACK_EXTRA,CONFIG_NETFILTER_XT_MATCH_RECENT, $(P_XT)xt_recent)) |
|
$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_CONNTRACK_EXTRA,CONFIG_NETFILTER_XT_CONNMARK, $(P_XT)xt_CONNMARK))) |
|
#conntrack-label |
|
$(eval $(call nf_add,IPT_CONNTRACK_LABEL,CONFIG_NETFILTER_XT_MATCH_CONNLABEL, $(P_XT)xt_connlabel)) |
|
# extra |
|
$(eval $(call nf_add,IPT_EXTRA,CONFIG_NETFILTER_XT_MATCH_ADDRTYPE, $(if $(NF_KMOD),$(P_XT)xt_addrtype,$(P_XT)ipt_addrtype))) |
$(eval $(call nf_add,IPT_EXTRA,CONFIG_NETFILTER_XT_MATCH_OWNER, $(P_XT)xt_owner)) |
$(eval $(call nf_add,IPT_EXTRA,CONFIG_NETFILTER_XT_MATCH_PKTTYPE, $(P_XT)xt_pkttype)) |
$(eval $(call nf_add,IPT_EXTRA,CONFIG_NETFILTER_XT_MATCH_QUOTA, $(P_XT)xt_quota)) |
|
#$(eval $(call nf_add,IPT_EXTRA,CONFIG_IP_NF_TARGET_ROUTE, $(P_V4)ipt_ROUTE)) |
|
# physdev |
|
$(eval $(call nf_add,IPT_PHYSDEV,CONFIG_NETFILTER_XT_MATCH_PHYSDEV, $(P_XT)xt_physdev)) |
|
# filter |
|
$(eval $(call nf_add,IPT_FILTER,CONFIG_NETFILTER_XT_MATCH_STRING, $(P_XT)xt_string)) |
$(eval $(call nf_add,IPT_FILTER,CONFIG_NETFILTER_XT_MATCH_BPF, $(P_XT)xt_bpf)) |
|
|
# ipopt |
|
$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_DSCP, $(P_XT)xt_dscp)) |
$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_TARGET_DSCP, $(P_XT)xt_DSCP)) |
$(eval $(call nf_add,IPT_HASHLIMIT,CONFIG_NETFILTER_XT_MATCH_HASHLIMIT, $(P_XT)xt_hashlimit)) |
$(eval $(call nf_add,IPT_RPFILTER,CONFIG_IP_NF_MATCH_RPFILTER, $(P_V4)ipt_rpfilter)) |
$(eval $(call nf_add,IPT_RPFILTER,CONFIG_IP6_NF_MATCH_RPFILTER, $(P_V6)ip6t_rpfilter)) |
$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_LENGTH, $(P_XT)xt_length)) |
$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_STATISTIC, $(P_XT)xt_statistic)) |
$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_TCPMSS, $(P_XT)xt_tcpmss)) |
|
$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_TARGET_CLASSIFY, $(P_XT)xt_CLASSIFY)) |
$(eval $(call nf_add,IPT_IPOPT,CONFIG_IP_NF_MATCH_DSCP, $(P_V4)ipt_dscp)) |
$(eval $(call nf_add,IPT_IPOPT,CONFIG_IP_NF_TARGET_ECN, $(P_V4)ipt_ECN)) |
|
$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_ECN, $(P_XT)xt_ecn)) |
|
# userland only |
$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_DSCP, xt_tos))) |
$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_TARGET_DSCP, xt_TOS))) |
$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_HL, ipt_ttl))) |
$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_TARGET_HL, ipt_TTL))) |
|
$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_HL, $(P_XT)xt_hl)) |
$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_TARGET_HL, $(P_XT)xt_HL)) |
|
# iprange |
$(eval $(call nf_add,IPT_IPRANGE,CONFIG_NETFILTER_XT_MATCH_IPRANGE, $(P_XT)xt_iprange)) |
|
#clusterip |
$(eval $(call nf_add,IPT_CLUSTERIP,CONFIG_IP_NF_TARGET_CLUSTERIP, $(P_V4)ipt_CLUSTERIP)) |
|
# ipsec |
$(eval $(call nf_add,IPT_IPSEC,CONFIG_IP_NF_MATCH_AH, $(P_V4)ipt_ah)) |
$(eval $(call nf_add,IPT_IPSEC,CONFIG_NETFILTER_XT_MATCH_ESP, $(P_XT)xt_esp)) |
$(eval $(call nf_add,IPT_IPSEC,CONFIG_NETFILTER_XT_MATCH_POLICY, $(P_XT)xt_policy)) |
|
# flow offload support |
$(eval $(call nf_add,IPT_FLOW,CONFIG_NETFILTER_XT_TARGET_FLOWOFFLOAD, $(P_XT)xt_FLOWOFFLOAD)) |
|
# IPv6 |
|
# kernel only |
$(eval $(if $(NF_KMOD),$(call nf_add,NF_REJECT6,CONFIG_NF_REJECT_IPV6, $(P_V6)nf_reject_ipv6),)) |
|
$(eval $(if $(NF_KMOD),$(call nf_add,NF_IPT6,CONFIG_IP6_NF_IPTABLES, $(P_V6)ip6_tables),)) |
|
$(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNTRACK,CONFIG_NF_DEFRAG_IPV6, $(P_V6)nf_defrag_ipv6, ge 4.19),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNTRACK6,CONFIG_NF_DEFRAG_IPV6, $(P_V6)nf_defrag_ipv6, lt 4.19),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNTRACK6,CONFIG_NF_CONNTRACK_IPV6, $(P_V6)nf_conntrack_ipv6),)) |
|
$(eval $(if $(NF_KMOD),$(call nf_add,IPT_IPV6,CONFIG_IP6_NF_FILTER, $(P_V6)ip6table_filter),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,IPT_IPV6,CONFIG_IP6_NF_MANGLE, $(P_V6)ip6table_mangle),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,IPT_IPV6,CONFIG_IP6_NF_QUEUE, $(P_V6)ip6_queue),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,IPT_IPV6,CONFIG_NF_LOG_IPV6, $(P_V6)nf_log_ipv6),)) |
|
$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_IPV6,CONFIG_IP6_NF_IPTABLES, ip6t_icmp6))) |
|
|
$(eval $(call nf_add,IPT_IPV6,CONFIG_IP6_NF_TARGET_LOG, $(P_V6)ip6t_LOG)) |
$(eval $(call nf_add,IPT_IPV6,CONFIG_IP6_NF_TARGET_REJECT, $(P_V6)ip6t_REJECT)) |
|
# ipv6 extra |
$(eval $(call nf_add,IPT_IPV6_EXTRA,CONFIG_IP6_NF_MATCH_IPV6HEADER, $(P_V6)ip6t_ipv6header)) |
$(eval $(call nf_add,IPT_IPV6_EXTRA,CONFIG_IP6_NF_MATCH_AH, $(P_V6)ip6t_ah)) |
$(eval $(call nf_add,IPT_IPV6_EXTRA,CONFIG_IP6_NF_MATCH_MH, $(P_V6)ip6t_mh)) |
$(eval $(call nf_add,IPT_IPV6_EXTRA,CONFIG_IP6_NF_MATCH_EUI64, $(P_V6)ip6t_eui64)) |
$(eval $(call nf_add,IPT_IPV6_EXTRA,CONFIG_IP6_NF_MATCH_OPTS, $(P_V6)ip6t_hbh)) |
$(eval $(call nf_add,IPT_IPV6_EXTRA,CONFIG_IP6_NF_MATCH_FRAG, $(P_V6)ip6t_frag)) |
$(eval $(call nf_add,IPT_IPV6_EXTRA,CONFIG_IP6_NF_MATCH_RT, $(P_V6)ip6t_rt)) |
|
# nat |
|
# kernel only |
$(eval $(if $(NF_KMOD),$(call nf_add,NF_NAT,CONFIG_NF_NAT, $(P_XT)nf_nat),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NF_NAT,CONFIG_NF_NAT_REDIRECT, $(P_XT)nf_nat_redirect, ge 3.19.0),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NF_NAT,CONFIG_NF_NAT_IPV4, $(P_V4)nf_nat_ipv4),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NF_NAT,CONFIG_NF_NAT_MASQUERADE_IPV4, $(P_V4)nf_nat_masquerade_ipv4, lt 4.18),)) |
|
$(eval $(if $(NF_KMOD),$(call nf_add,NF_NAT6,CONFIG_NF_NAT_IPV6, $(P_V6)nf_nat_ipv6),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NF_NAT6,CONFIG_NF_NAT_MASQUERADE_IPV6, $(P_V6)nf_nat_masquerade_ipv6, lt 4.18),)) |
|
$(eval $(if $(NF_KMOD),$(call nf_add,IPT_NAT,CONFIG_NETFILTER_XT_NAT, $(P_XT)xt_nat),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,IPT_NAT,CONFIG_IP_NF_NAT, $(P_V4)iptable_nat),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,IPT_NAT6,CONFIG_IP6_NF_NAT, $(P_V6)ip6table_nat),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,IPT_NAT6,CONFIG_IP6_NF_TARGET_MASQUERADE, $(P_V6)ip6t_MASQUERADE),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,IPT_NAT6,CONFIG_IP6_NF_TARGET_NPT, $(P_V6)ip6t_NPT),)) |
|
# userland only |
$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_NAT,CONFIG_NF_NAT, ipt_SNAT ipt_DNAT))) |
$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_NAT6,CONFIG_IP6_NF_TARGET_NPT, ip6t_DNPT ip6t_SNPT))) |
|
$(eval $(call nf_add,IPT_NAT,CONFIG_IP_NF_TARGET_MASQUERADE, $(P_V4)ipt_MASQUERADE)) |
$(eval $(call nf_add,IPT_NAT,CONFIG_IP_NF_TARGET_REDIRECT, $(P_XT)xt_REDIRECT)) |
|
|
# nat-extra |
|
$(eval $(call nf_add,IPT_NAT_EXTRA,CONFIG_IP_NF_TARGET_NETMAP, $(P_XT)xt_NETMAP)) |
|
|
# nathelper |
|
$(eval $(call nf_add,NF_NATHELPER,CONFIG_NF_CONNTRACK_FTP, $(P_XT)nf_conntrack_ftp)) |
$(eval $(call nf_add,NF_NATHELPER,CONFIG_NF_NAT_FTP, $(P_XT)nf_nat_ftp)) |
|
|
# nathelper-extra |
|
$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_BROADCAST, $(P_XT)nf_conntrack_broadcast)) |
$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_AMANDA, $(P_XT)nf_conntrack_amanda)) |
$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_NAT_AMANDA, $(P_XT)nf_nat_amanda)) |
$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CT_PROTO_GRE, $(P_XT)nf_conntrack_proto_gre)) |
$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_NAT_PROTO_GRE, $(P_V4)nf_nat_proto_gre)) |
$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_H323, $(P_XT)nf_conntrack_h323)) |
$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_NAT_H323, $(P_V4)nf_nat_h323)) |
$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_PPTP, $(P_XT)nf_conntrack_pptp)) |
$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_NAT_PPTP, $(P_V4)nf_nat_pptp)) |
$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_SIP, $(P_XT)nf_conntrack_sip)) |
$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_NAT_SIP, $(P_XT)nf_nat_sip)) |
$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_SNMP, $(P_XT)nf_conntrack_snmp)) |
$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_NAT_SNMP_BASIC, $(P_V4)nf_nat_snmp_basic)) |
$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_TFTP, $(P_XT)nf_conntrack_tftp)) |
$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_NAT_TFTP, $(P_XT)nf_nat_tftp)) |
$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_IRC, $(P_XT)nf_conntrack_irc)) |
$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_NAT_IRC, $(P_XT)nf_nat_irc)) |
|
|
# ulog |
|
$(eval $(call nf_add,IPT_ULOG,CONFIG_IP_NF_TARGET_ULOG, $(P_V4)ipt_ULOG)) |
|
|
# nflog |
|
$(eval $(call nf_add,IPT_NFLOG,CONFIG_NETFILTER_XT_TARGET_NFLOG, $(P_XT)xt_NFLOG)) |
|
|
# nfqueue |
|
$(eval $(call nf_add,IPT_NFQUEUE,CONFIG_NETFILTER_XT_TARGET_NFQUEUE, $(P_XT)xt_NFQUEUE)) |
|
|
# debugging |
|
$(eval $(call nf_add,IPT_DEBUG,CONFIG_NETFILTER_XT_TARGET_TRACE, $(P_XT)xt_TRACE)) |
|
# tproxy |
|
$(eval $(call nf_add,IPT_TPROXY,CONFIG_NETFILTER_XT_MATCH_SOCKET, $(P_XT)xt_socket)) |
$(eval $(call nf_add,IPT_TPROXY,CONFIG_NF_SOCKET_IPV4, $(P_V4)nf_socket_ipv4, ge 4.10)) |
$(eval $(call nf_add,IPT_TPROXY,CONFIG_NF_SOCKET_IPV6, $(P_V6)nf_socket_ipv6, ge 4.10)) |
$(eval $(call nf_add,IPT_TPROXY,CONFIG_NETFILTER_XT_TARGET_TPROXY, $(P_XT)xt_TPROXY)) |
$(eval $(call nf_add,IPT_TPROXY,CONFIG_NF_TPROXY_IPV4, $(P_V4)nf_tproxy_ipv4, ge 4.18)) |
$(eval $(call nf_add,IPT_TPROXY,CONFIG_NF_TPROXY_IPV6, $(P_V6)nf_tproxy_ipv6, ge 4.18)) |
|
# led |
$(eval $(call nf_add,IPT_LED,CONFIG_NETFILTER_XT_TARGET_LED, $(P_XT)xt_LED)) |
|
# tee |
|
$(eval $(call nf_add,IPT_TEE,CONFIG_NETFILTER_XT_TARGET_TEE, $(P_XT)xt_TEE)) |
$(eval $(if $(NF_KMOD),$(call nf_add,IPT_TEE,CONFIG_NF_DUP_IPV4, $(P_V4)nf_dup_ipv4, ge 4.3),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,IPT_TEE,CONFIG_NF_DUP_IPV6, $(P_V6)nf_dup_ipv6, ge 4.3),)) |
|
# u32 |
|
$(eval $(call nf_add,IPT_U32,CONFIG_NETFILTER_XT_MATCH_U32, $(P_XT)xt_u32)) |
|
# checksum |
|
$(eval $(call nf_add,IPT_CHECKSUM,CONFIG_NETFILTER_XT_TARGET_CHECKSUM, $(P_XT)xt_CHECKSUM)) |
|
|
# netlink |
|
$(eval $(call nf_add,NFNETLINK,CONFIG_NETFILTER_NETLINK, $(P_XT)nfnetlink)) |
|
# nflog |
|
$(eval $(call nf_add,NFNETLINK_LOG,CONFIG_NETFILTER_NETLINK_LOG, $(P_XT)nfnetlink_log)) |
|
# nfqueue |
|
$(eval $(call nf_add,NFNETLINK_QUEUE,CONFIG_NETFILTER_NETLINK_QUEUE, $(P_XT)nfnetlink_queue)) |
|
# |
# ebtables |
# |
|
$(eval $(if $(NF_KMOD),$(call nf_add,EBTABLES,CONFIG_BRIDGE_NF_EBTABLES, $(P_EBT)ebtables),)) |
|
# ebtables: tables |
$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_BROUTE, $(P_EBT)ebtable_broute)) |
$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_T_FILTER, $(P_EBT)ebtable_filter)) |
$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_T_NAT, $(P_EBT)ebtable_nat)) |
|
# ebtables: matches |
$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_802_3, $(P_EBT)ebt_802_3)) |
$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_AMONG, $(P_EBT)ebt_among)) |
$(eval $(call nf_add,EBTABLES_IP4,CONFIG_BRIDGE_EBT_ARP, $(P_EBT)ebt_arp)) |
$(eval $(call nf_add,EBTABLES_IP4,CONFIG_BRIDGE_EBT_IP, $(P_EBT)ebt_ip)) |
$(eval $(call nf_add,EBTABLES_IP6,CONFIG_BRIDGE_EBT_IP6, $(P_EBT)ebt_ip6)) |
$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_LIMIT, $(P_EBT)ebt_limit)) |
$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_MARK, $(P_EBT)ebt_mark_m)) |
$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_PKTTYPE, $(P_EBT)ebt_pkttype)) |
$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_STP, $(P_EBT)ebt_stp)) |
$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_VLAN, $(P_EBT)ebt_vlan)) |
|
# targets |
$(eval $(call nf_add,EBTABLES_IP4,CONFIG_BRIDGE_EBT_ARPREPLY, $(P_EBT)ebt_arpreply)) |
$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_MARK_T, $(P_EBT)ebt_mark)) |
$(eval $(call nf_add,EBTABLES_IP4,CONFIG_BRIDGE_EBT_DNAT, $(P_EBT)ebt_dnat)) |
$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_REDIRECT, $(P_EBT)ebt_redirect)) |
$(eval $(call nf_add,EBTABLES_IP4,CONFIG_BRIDGE_EBT_SNAT, $(P_EBT)ebt_snat)) |
|
# watchers |
$(eval $(call nf_add,EBTABLES_WATCHERS,CONFIG_BRIDGE_EBT_LOG, $(P_EBT)ebt_log)) |
$(eval $(call nf_add,EBTABLES_WATCHERS,CONFIG_BRIDGE_EBT_ULOG, $(P_EBT)ebt_ulog)) |
$(eval $(call nf_add,EBTABLES_WATCHERS,CONFIG_BRIDGE_EBT_NFLOG, $(P_EBT)ebt_nflog)) |
$(eval $(call nf_add,EBTABLES_WATCHERS,CONFIG_BRIDGE_EBT_NFQUEUE, $(P_EBT)ebt_nfqueue)) |
|
# nftables |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NF_TABLES, $(P_XT)nf_tables),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NF_TABLES_INET, $(P_XT)nf_tables_inet, lt 4.17),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_EXTHDR, $(P_XT)nft_exthdr),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_META, $(P_XT)nft_meta),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_NUMGEN, $(P_XT)nft_numgen, ge 4.9.0),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_CT, $(P_XT)nft_ct),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_SET_RBTREE, $(P_XT)nft_set_rbtree, ge 4.9.0),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_RBTREE, $(P_XT)nft_rbtree, lt 4.9.0),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_SET_HASH, $(P_XT)nft_set_hash, ge 4.9.0),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_HASH, $(P_XT)nft_hash, lt 4.9.0),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_COUNTER, $(P_XT)nft_counter),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_LOG, $(P_XT)nft_log),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_LIMIT, $(P_XT)nft_limit),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_REJECT, $(P_XT)nft_reject $(P_V4)nft_reject_ipv4 $(P_V6)nft_reject_ipv6),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_REJECT_INET, $(P_XT)nft_reject_inet),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NF_TABLES_IPV4, $(P_V4)nf_tables_ipv4, lt 4.17),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_CHAIN_ROUTE_IPV4, $(P_V4)nft_chain_route_ipv4),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NF_TABLES_IPV6, $(P_V6)nf_tables_ipv6, lt 4.17),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_CHAIN_ROUTE_IPV6, $(P_V6)nft_chain_route_ipv6),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_REDIR, $(P_XT)nft_redir, ge 3.19.0),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_QUOTA, $(P_XT)nft_quota, ge 4.9.0),)) |
|
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_ARP,CONFIG_NF_TABLES_ARP, $(P_V4)nf_tables_arp, lt 4.17),)) |
|
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_BRIDGE,CONFIG_NF_TABLES_BRIDGE, $(P_EBT)nf_tables_bridge, lt 4.17),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_BRIDGE,CONFIG_NFT_BRIDGE_META, $(P_EBT)nft_meta_bridge),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_BRIDGE,CONFIG_NFT_BRIDGE_REJECT, $(P_EBT)nft_reject_bridge),)) |
|
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_NAT,CONFIG_NFT_NAT, $(P_XT)nft_nat),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_NAT,CONFIG_NFT_CHAIN_NAT_IPV4, $(P_V4)nft_chain_nat_ipv4),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_NAT,CONFIG_NFT_REDIR_IPV4, $(P_V4)nft_redir_ipv4, ge 3.19.0),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_NAT,CONFIG_NFT_MASQ, $(P_XT)nft_masq),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_NAT,CONFIG_NFT_MASQ_IPV4, $(P_V4)nft_masq_ipv4),)) |
|
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_NAT6,CONFIG_NFT_REDIR_IPV6, $(P_V6)nft_redir_ipv6, ge 3.19.0),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_NAT6,CONFIG_NFT_CHAIN_NAT_IPV6, $(P_V6)nft_chain_nat_ipv6),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_NAT6,CONFIG_NFT_MASQ_IPV6, $(P_V6)nft_masq_ipv6),)) |
|
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_FIB,CONFIG_NFT_FIB, $(P_XT)nft_fib),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_FIB,CONFIG_NFT_FIB_INET, $(P_XT)nft_fib_inet),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_FIB,CONFIG_NFT_FIB_IPV4, $(P_V4)nft_fib_ipv4),)) |
$(eval $(if $(NF_KMOD),$(call nf_add,NFT_FIB,CONFIG_NFT_FIB_IPV6, $(P_V6)nft_fib_ipv6),)) |
|
|
# userland only |
IPT_BUILTIN += $(NF_IPT-y) $(NF_IPT-m) |
IPT_BUILTIN += $(IPT_CORE-y) $(IPT_CORE-m) |
IPT_BUILTIN += $(NF_CONNTRACK-y) |
IPT_BUILTIN += $(NF_CONNTRACK6-y) |
IPT_BUILTIN += $(IPT_CONNTRACK-y) |
IPT_BUILTIN += $(IPT_CONNTRACK_EXTRA-y) |
IPT_BUILTIN += $(IPT_EXTRA-y) |
IPT_BUILTIN += $(IPT_PHYSDEV-y) |
IPT_BUILTIN += $(IPT_FILTER-y) |
IPT_BUILTIN += $(IPT_FLOW-y) $(IPT_FLOW-m) |
IPT_BUILTIN += $(IPT_IPOPT-y) |
IPT_BUILTIN += $(IPT_IPRANGE-y) |
IPT_BUILTIN += $(IPT_CLUSTER-y) |
IPT_BUILTIN += $(IPT_CLUSTERIP-y) |
IPT_BUILTIN += $(IPT_IPSEC-y) |
IPT_BUILTIN += $(IPT_IPV6-y) $(IPT_IPV6-m) |
IPT_BUILTIN += $(NF_NAT-y) |
IPT_BUILTIN += $(NF_NAT6-y) |
IPT_BUILTIN += $(IPT_NAT-y) |
IPT_BUILTIN += $(IPT_NAT6-y) |
IPT_BUILTIN += $(IPT_NAT_EXTRA-y) |
IPT_BUILTIN += $(NF_NATHELPER-y) |
IPT_BUILTIN += $(NF_NATHELPER_EXTRA-y) |
IPT_BUILTIN += $(IPT_ULOG-y) |
IPT_BUILTIN += $(IPT_TPROXY-y) |
IPT_BUILTIN += $(NFNETLINK-y) |
IPT_BUILTIN += $(NFNETLINK_LOG-y) |
IPT_BUILTIN += $(NFNETLINK_QUEUE-y) |
IPT_BUILTIN += $(EBTABLES-y) |
IPT_BUILTIN += $(EBTABLES_IP4-y) |
IPT_BUILTIN += $(EBTABLES_IP6-y) |
IPT_BUILTIN += $(EBTABLES_WATCHERS-y) |
|
endif # __inc_netfilter |
/branches/18.06.1/include/package-ipkg.mk |
@@ -0,0 +1,257 @@ |
# |
# Copyright (C) 2006-2014 OpenWrt.org |
# |
# This is free software, licensed under the GNU General Public License v2. |
# See /LICENSE for more information. |
# |
|
ifndef DUMP |
include $(INCLUDE_DIR)/feeds.mk |
endif |
|
# invoke ipkg-build with some default options |
IPKG_BUILD:= \ |
$(SCRIPT_DIR)/ipkg-build -c -o 0 -g 0 |
|
IPKG_REMOVE:= \ |
$(SCRIPT_DIR)/ipkg-remove |
|
IPKG_STATE_DIR:=$(TARGET_DIR)/usr/lib/opkg |
|
# 1: package name |
# 2: variable name |
# 3: variable suffix |
# 4: file is a script |
define BuildIPKGVariable |
ifdef Package/$(1)/$(2) |
$$(IPKG_$(1)) : VAR_$(2)$(3)=$$(Package/$(1)/$(2)) |
$(call shexport,Package/$(1)/$(2)) |
$(1)_COMMANDS += echo "$$$$$$$$$(call shvar,Package/$(1)/$(2))" > $(2)$(3); $(if $(4),chmod 0755 $(2)$(3);) |
endif |
endef |
|
PARENL :=( |
PARENR :=) |
|
dep_split=$(subst :,$(space),$(1)) |
dep_rem=$(subst !,,$(subst $(strip $(PARENL)),,$(subst $(strip $(PARENR)),,$(word 1,$(call dep_split,$(1)))))) |
dep_confvar=$(strip $(foreach cond,$(subst ||, ,$(call dep_rem,$(1))),$(CONFIG_$(cond)))) |
dep_pos=$(if $(call dep_confvar,$(1)),$(call dep_val,$(1))) |
dep_neg=$(if $(call dep_confvar,$(1)),,$(call dep_val,$(1))) |
dep_if=$(if $(findstring !,$(1)),$(call dep_neg,$(1)),$(call dep_pos,$(1))) |
dep_val=$(word 2,$(call dep_split,$(1))) |
strip_deps=$(strip $(subst +,,$(filter-out @%,$(1)))) |
filter_deps=$(foreach dep,$(call strip_deps,$(1)),$(if $(findstring :,$(dep)),$(call dep_if,$(dep)),$(dep))) |
|
define AddDependency |
$$(if $(1),$$(if $(2),$$(foreach pkg,$(1),$$(IPKG_$$(pkg))): $$(foreach pkg,$(2),$$(IPKG_$$(pkg))))) |
endef |
|
define FixupReverseDependencies |
DEPS := $$(filter %:$(1),$$(IDEPEND)) |
DEPS := $$(patsubst %:$(1),%,$$(DEPS)) |
DEPS := $$(filter $$(DEPS),$$(IPKGS)) |
$(call AddDependency,$$(DEPS),$(1)) |
endef |
|
define FixupDependencies |
DEPS := $$(filter $(1):%,$$(IDEPEND)) |
DEPS := $$(patsubst $(1):%,%,$$(DEPS)) |
DEPS := $$(filter $$(DEPS),$$(IPKGS)) |
$(call AddDependency,$(1),$$(DEPS)) |
endef |
|
ifneq ($(PKG_NAME),toolchain) |
define CheckDependencies |
@( \ |
rm -f $(PKG_INFO_DIR)/$(1).missing; \ |
( \ |
export \ |
READELF=$(TARGET_CROSS)readelf \ |
OBJCOPY=$(TARGET_CROSS)objcopy \ |
XARGS="$(XARGS)"; \ |
$(SCRIPT_DIR)/gen-dependencies.sh "$$(IDIR_$(1))"; \ |
) | while read FILE; do \ |
grep -qxF "$$$$FILE" $(PKG_INFO_DIR)/$(1).provides || \ |
echo "$$$$FILE" >> $(PKG_INFO_DIR)/$(1).missing; \ |
done; \ |
if [ -f "$(PKG_INFO_DIR)/$(1).missing" ]; then \ |
echo "Package $(1) is missing dependencies for the following libraries:" >&2; \ |
cat "$(PKG_INFO_DIR)/$(1).missing" >&2; \ |
false; \ |
fi; \ |
) |
endef |
endif |
|
_addsep=$(word 1,$(1))$(foreach w,$(wordlist 2,$(words $(1)),$(1)),$(strip $(2) $(w))) |
_cleansep=$(subst $(space)$(2)$(space),$(2)$(space),$(1)) |
mergelist=$(call _cleansep,$(call _addsep,$(1),$(comma)),$(comma)) |
addfield=$(if $(strip $(2)),$(1): $(2)) |
_define=define |
_endef=endef |
|
ifeq ($(DUMP),) |
define BuildTarget/ipkg |
ABIV_$(1):=$(call GetABISuffix,$(1)) |
PDIR_$(1):=$(call FeedPackageDir,$(1)) |
IPKG_$(1):=$$(PDIR_$(1))/$(1)$$(ABIV_$(1))_$(VERSION)_$(PKGARCH).ipk |
IDIR_$(1):=$(PKG_BUILD_DIR)/ipkg-$(PKGARCH)/$(1) |
KEEP_$(1):=$(strip $(call Package/$(1)/conffiles)) |
|
ifeq ($(BUILD_VARIANT),$$(if $$(VARIANT),$$(VARIANT),$(BUILD_VARIANT))) |
do_install= |
ifdef Package/$(1)/install |
do_install=yes |
endif |
ifdef Package/$(1)/install-overlay |
do_install=yes |
endif |
ifdef do_install |
ifneq ($(CONFIG_PACKAGE_$(1))$(DEVELOPER),) |
IPKGS += $(1) |
$(_pkg_target)compile: $$(IPKG_$(1)) $(PKG_INFO_DIR)/$(1).provides $(PKG_BUILD_DIR)/.pkgdir/$(1).installed |
prepare-package-install: $$(IPKG_$(1)) |
compile: $(STAGING_DIR_ROOT)/stamp/.$(1)_installed |
else |
$(if $(CONFIG_PACKAGE_$(1)),$$(info WARNING: skipping $(1) -- package not selected)) |
endif |
|
.PHONY: $(PKG_INSTALL_STAMP).$(1) |
ifeq ($(CONFIG_PACKAGE_$(1)),y) |
compile: $(PKG_INSTALL_STAMP).$(1) |
endif |
$(PKG_INSTALL_STAMP).$(1): prepare-package-install |
echo "$(1)" >> $(PKG_INSTALL_STAMP) |
endif |
endif |
|
DEPENDS:=$(call PKG_FIXUP_DEPENDS,$(1),$(DEPENDS)) |
IDEPEND_$(1):=$$(call filter_deps,$$(DEPENDS)) |
IDEPEND += $$(patsubst %,$(1):%,$$(IDEPEND_$(1))) |
$(FixupDependencies) |
$(FixupReverseDependencies) |
|
$(eval $(call BuildIPKGVariable,$(1),conffiles)) |
$(eval $(call BuildIPKGVariable,$(1),preinst,,1)) |
$(eval $(call BuildIPKGVariable,$(1),postinst,-pkg,1)) |
$(eval $(call BuildIPKGVariable,$(1),prerm,-pkg,1)) |
$(eval $(call BuildIPKGVariable,$(1),postrm,,1)) |
|
$(PKG_BUILD_DIR)/.pkgdir/$(1).installed : export PATH=$$(TARGET_PATH_PKG) |
$(PKG_BUILD_DIR)/.pkgdir/$(1).installed: $(STAMP_BUILT) |
rm -rf $$@ $(PKG_BUILD_DIR)/.pkgdir/$(1) |
mkdir -p $(PKG_BUILD_DIR)/.pkgdir/$(1) |
$(call Package/$(1)/install,$(PKG_BUILD_DIR)/.pkgdir/$(1)) |
$(call Package/$(1)/install_lib,$(PKG_BUILD_DIR)/.pkgdir/$(1)) |
touch $$@ |
|
$(STAGING_DIR_ROOT)/stamp/.$(1)_installed: $(PKG_BUILD_DIR)/.pkgdir/$(1).installed |
mkdir -p $(STAGING_DIR_ROOT)/stamp |
$(if $(ABI_VERSION),echo '$(ABI_VERSION)' | cmp -s - $(PKG_INFO_DIR)/$(1).version || echo '$(ABI_VERSION)' > $(PKG_INFO_DIR)/$(1).version) |
$(call locked,$(CP) $(PKG_BUILD_DIR)/.pkgdir/$(1)/. $(STAGING_DIR_ROOT)/,root-copy) |
touch $$@ |
|
Package/$(1)/DEPENDS := $$(call mergelist,$$(foreach dep,$$(filter-out @%,$$(IDEPEND_$(1))),$$(dep)$$(call GetABISuffix,$$(dep)))) |
ifneq ($$(EXTRA_DEPENDS),) |
Package/$(1)/DEPENDS := $$(EXTRA_DEPENDS)$$(if $$(Package/$(1)/DEPENDS),$$(comma) $$(Package/$(1)/DEPENDS)) |
endif |
|
$(_define) Package/$(1)/CONTROL |
Package: $(1)$$(ABIV_$(1)) |
Version: $(VERSION) |
$$(call addfield,Depends,$$(Package/$(1)/DEPENDS) |
)$$(call addfield,Conflicts,$$(call mergelist,$(CONFLICTS)) |
)$$(call addfield,Provides,$$(call mergelist,$$(filter-out $(1)$$(ABIV_$(1)),$(PROVIDES)$$(if $$(ABIV_$(1)), $(1) $(foreach provide,$(PROVIDES),$(provide)$$(call GetABISuffix,$(provide)))))) |
)$$(call addfield,Alternatives,$$(call mergelist,$(ALTERNATIVES)) |
)$$(call addfield,Source,$(SOURCE) |
)$$(call addfield,SourceName,$(1) |
)$$(call addfield,License,$(LICENSE) |
)$$(call addfield,LicenseFiles,$(LICENSE_FILES) |
)$$(call addfield,Section,$(SECTION) |
)$$(call addfield,Require-User,$(USERID) |
)$(if $(filter hold,$(PKG_FLAGS)),Status: unknown hold not-installed |
)$(if $(filter essential,$(PKG_FLAGS)),Essential: yes |
)$(if $(MAINTAINER),Maintainer: $(MAINTAINER) |
)Architecture: $(PKGARCH) |
Installed-Size: 0 |
$(_endef) |
|
$$(IPKG_$(1)) : export CONTROL=$$(Package/$(1)/CONTROL) |
$$(IPKG_$(1)) : export DESCRIPTION=$$(Package/$(1)/description) |
$$(IPKG_$(1)) : export PATH=$$(TARGET_PATH_PKG) |
$(PKG_INFO_DIR)/$(1).provides $$(IPKG_$(1)): $(STAMP_BUILT) $(INCLUDE_DIR)/package-ipkg.mk |
@rm -rf $$(IDIR_$(1)) $$(if $$(call opkg_package_files,$(1)*),; $$(IPKG_REMOVE) $(1) $$(call opkg_package_files,$(1)*)) |
mkdir -p $(PACKAGE_DIR) $$(IDIR_$(1))/CONTROL $(PKG_INFO_DIR) |
$(call Package/$(1)/install,$$(IDIR_$(1))) |
$(if $(Package/$(1)/install-overlay),mkdir -p $(PACKAGE_DIR) $$(IDIR_$(1))/rootfs-overlay) |
$(call Package/$(1)/install-overlay,$$(IDIR_$(1))/rootfs-overlay) |
-find $$(IDIR_$(1)) -name 'CVS' -o -name '.svn' -o -name '.#*' -o -name '*~'| $(XARGS) rm -rf |
@( \ |
find $$(IDIR_$(1)) -name lib\*.so\* -or -name \*.ko | awk -F/ '{ print $$$$NF }'; \ |
for file in $$(patsubst %,$(PKG_INFO_DIR)/%.provides,$$(IDEPEND_$(1))); do \ |
if [ -f "$$$$file" ]; then \ |
cat $$$$file; \ |
fi; \ |
done; $(Package/$(1)/extra_provides) \ |
) | sort -u > $(PKG_INFO_DIR)/$(1).provides |
$(if $(PROVIDES),@for pkg in $(filter-out $(1),$(PROVIDES)); do cp $(PKG_INFO_DIR)/$(1).provides $(PKG_INFO_DIR)/$$$$pkg.provides; done) |
$(CheckDependencies) |
|
$(RSTRIP) $$(IDIR_$(1)) |
|
ifneq ($$(CONFIG_IPK_FILES_CHECKSUMS),) |
(cd $$(IDIR_$(1)); \ |
( \ |
find . -type f \! -path ./CONTROL/\* -exec sha256sum \{\} \; 2> /dev/null | \ |
sed 's|\([[:blank:]]\)\./|\1/|' > $$(IDIR_$(1))/CONTROL/files-sha256 \ |
) || true \ |
) |
endif |
(cd $$(IDIR_$(1))/CONTROL; \ |
( \ |
echo "$$$$CONTROL"; \ |
printf "Description: "; echo "$$$$DESCRIPTION" | sed -e 's,^[[:space:]]*, ,g'; \ |
) > control; \ |
chmod 644 control; \ |
( \ |
echo "#!/bin/sh"; \ |
echo "[ \"\$$$${IPKG_NO_SCRIPT}\" = \"1\" ] && exit 0"; \ |
echo "[ -x "\$$$${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; \ |
echo ". \$$$${IPKG_INSTROOT}/lib/functions.sh"; \ |
echo "default_postinst \$$$$0 \$$$$@"; \ |
) > postinst; \ |
( \ |
echo "#!/bin/sh"; \ |
echo "[ -x "\$$$${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; \ |
echo ". \$$$${IPKG_INSTROOT}/lib/functions.sh"; \ |
echo "default_prerm \$$$$0 \$$$$@"; \ |
) > prerm; \ |
chmod 0755 postinst prerm; \ |
$($(1)_COMMANDS) \ |
) |
|
ifneq ($$(KEEP_$(1)),) |
@( \ |
keepfiles=""; \ |
for x in $$(KEEP_$(1)); do \ |
[ -f "$$(IDIR_$(1))/$$$$x" ] || keepfiles="$$$${keepfiles:+$$$$keepfiles }$$$$x"; \ |
done; \ |
[ -z "$$$$keepfiles" ] || { \ |
mkdir -p $$(IDIR_$(1))/lib/upgrade/keep.d; \ |
for x in $$$$keepfiles; do echo $$$$x >> $$(IDIR_$(1))/lib/upgrade/keep.d/$(1); done; \ |
}; \ |
) |
endif |
|
$(INSTALL_DIR) $$(PDIR_$(1)) |
$(IPKG_BUILD) $$(IDIR_$(1)) $$(PDIR_$(1)) |
@[ -f $$(IPKG_$(1)) ] |
|
$(1)-clean: |
$$(if $$(call opkg_package_files,$(1)*),$$(IPKG_REMOVE) $(1) $$(call opkg_package_files,$(1)*)) |
|
clean: $(1)-clean |
|
endef |
endif |
/branches/18.06.1/include/package.mk |
@@ -0,0 +1,325 @@ |
# |
# Copyright (C) 2006-2008 OpenWrt.org |
# |
# This is free software, licensed under the GNU General Public License v2. |
# See /LICENSE for more information. |
# |
|
__package_mk:=1 |
|
all: $(if $(DUMP),dumpinfo,$(if $(CHECK),check,compile)) |
|
include $(INCLUDE_DIR)/download.mk |
|
PKG_BUILD_DIR ?= $(BUILD_DIR)/$(PKG_NAME)$(if $(PKG_VERSION),-$(PKG_VERSION)) |
PKG_INSTALL_DIR ?= $(PKG_BUILD_DIR)/ipkg-install |
PKG_BUILD_PARALLEL ?= |
PKG_USE_MIPS16 ?= 1 |
PKG_IREMAP ?= 1 |
|
MAKE_J:=$(if $(MAKE_JOBSERVER),$(MAKE_JOBSERVER) $(if $(filter 3.% 4.0 4.1,$(MAKE_VERSION)),-j)) |
|
ifeq ($(strip $(PKG_BUILD_PARALLEL)),0) |
PKG_JOBS?=-j1 |
else |
PKG_JOBS?=$(if $(PKG_BUILD_PARALLEL),$(MAKE_J),-j1) |
endif |
ifdef CONFIG_USE_MIPS16 |
ifeq ($(strip $(PKG_USE_MIPS16)),1) |
TARGET_ASFLAGS_DEFAULT = $(filter-out -mips16 -minterlink-mips16,$(TARGET_CFLAGS)) |
TARGET_CFLAGS += -mips16 -minterlink-mips16 |
endif |
endif |
ifeq ($(strip $(PKG_IREMAP)),1) |
IREMAP_CFLAGS = $(call iremap,$(PKG_BUILD_DIR),$(notdir $(PKG_BUILD_DIR))) |
TARGET_CFLAGS += $(IREMAP_CFLAGS) |
endif |
|
include $(INCLUDE_DIR)/hardening.mk |
include $(INCLUDE_DIR)/prereq.mk |
include $(INCLUDE_DIR)/unpack.mk |
include $(INCLUDE_DIR)/depends.mk |
|
ifneq ($(if $(CONFIG_SRC_TREE_OVERRIDE),$(wildcard ./git-src)),) |
USE_GIT_TREE:=1 |
QUILT:=1 |
endif |
ifdef USE_SOURCE_DIR |
QUILT:=1 |
endif |
ifneq ($(wildcard $(PKG_BUILD_DIR)/.source_dir),) |
QUILT:=1 |
endif |
|
include $(INCLUDE_DIR)/quilt.mk |
|
find_library_dependencies = $(wildcard $(patsubst %,$(STAGING_DIR)/pkginfo/%.version, \ |
$(filter-out $(BUILD_PACKAGES),$(foreach dep, \ |
$(filter-out @%, $(patsubst +%,%,$(1))), \ |
$(if $(findstring :,$(dep)), \ |
$(word 2,$(subst :,$(space),$(dep))), \ |
$(dep) \ |
) \ |
)))) |
|
PKG_DIR_NAME:=$(lastword $(subst /,$(space),$(CURDIR))) |
STAMP_NO_AUTOREBUILD=$(wildcard $(PKG_BUILD_DIR)/.no_autorebuild) |
PREV_STAMP_PREPARED:=$(if $(STAMP_NO_AUTOREBUILD),$(wildcard $(PKG_BUILD_DIR)/.prepared*)) |
ifneq ($(PREV_STAMP_PREPARED),) |
STAMP_PREPARED:=$(PREV_STAMP_PREPARED) |
CONFIG_AUTOREBUILD:= |
else |
STAMP_PREPARED=$(PKG_BUILD_DIR)/.prepared$(if $(QUILT)$(DUMP),,_$(shell $(call find_md5,${CURDIR} $(PKG_FILE_DEPENDS),))_$(call confvar,CONFIG_AUTOREMOVE $(PKG_PREPARED_DEPENDS))) |
endif |
STAMP_CONFIGURED=$(PKG_BUILD_DIR)/.configured$(if $(DUMP),,_$(call confvar,$(PKG_CONFIG_DEPENDS))) |
STAMP_CONFIGURED_WILDCARD=$(PKG_BUILD_DIR)/.configured_* |
STAMP_BUILT:=$(PKG_BUILD_DIR)/.built |
STAMP_INSTALLED:=$(STAGING_DIR)/stamp/.$(PKG_DIR_NAME)$(if $(BUILD_VARIANT),.$(BUILD_VARIANT),)_installed |
|
STAGING_FILES_LIST:=$(PKG_DIR_NAME)$(if $(BUILD_VARIANT),.$(BUILD_VARIANT),).list |
|
define CleanStaging |
rm -f $(STAMP_INSTALLED) |
@-(\ |
if [ -f $(STAGING_DIR)/packages/$(STAGING_FILES_LIST) ]; then \ |
$(SCRIPT_DIR)/clean-package.sh \ |
"$(STAGING_DIR)/packages/$(STAGING_FILES_LIST)" \ |
"$(STAGING_DIR)"; \ |
fi; \ |
) |
endef |
|
|
PKG_INSTALL_STAMP:=$(PKG_INFO_DIR)/$(PKG_DIR_NAME).$(if $(BUILD_VARIANT),$(BUILD_VARIANT),default).install |
|
include $(INCLUDE_DIR)/package-defaults.mk |
include $(INCLUDE_DIR)/package-dumpinfo.mk |
include $(INCLUDE_DIR)/package-ipkg.mk |
include $(INCLUDE_DIR)/package-bin.mk |
include $(INCLUDE_DIR)/autotools.mk |
|
_pkg_target:=$(if $(QUILT),,.) |
|
override MAKEFLAGS= |
CONFIG_SITE:=$(INCLUDE_DIR)/site/$(ARCH) |
CUR_MAKEFILE:=$(filter-out Makefile,$(firstword $(MAKEFILE_LIST))) |
SUBMAKE:=$(NO_TRACE_MAKE) $(if $(CUR_MAKEFILE),-f $(CUR_MAKEFILE)) |
PKG_CONFIG_PATH=$(STAGING_DIR)/usr/lib/pkgconfig:$(STAGING_DIR)/usr/share/pkgconfig |
unexport QUIET CONFIG_SITE |
|
ifeq ($(DUMP)$(filter prereq clean refresh update,$(MAKECMDGOALS)),) |
ifneq ($(if $(QUILT),,$(CONFIG_AUTOREBUILD)),) |
define Build/Autoclean |
$(PKG_BUILD_DIR)/.dep_files: $(STAMP_PREPARED) |
$(call rdep,${CURDIR} $(PKG_FILE_DEPENDS),$(STAMP_PREPARED),$(PKG_BUILD_DIR)/.dep_files,-x "*/.dep_*") |
$(if $(filter prepare,$(MAKECMDGOALS)),,$(call rdep,$(PKG_BUILD_DIR),$(STAMP_BUILT),,-x "*/.dep_*" -x "*/ipkg*")) |
endef |
endif |
endif |
|
ifdef USE_GIT_TREE |
define Build/Prepare/Default |
mkdir -p $(PKG_BUILD_DIR) |
ln -s $(CURDIR)/git-src $(PKG_BUILD_DIR)/.git |
( cd $(PKG_BUILD_DIR); \ |
git checkout .; \ |
git submodule update --recursive; \ |
git submodule foreach git config --unset core.worktree; \ |
git submodule foreach git checkout .; \ |
) |
endef |
endif |
ifdef USE_SOURCE_DIR |
define Build/Prepare/Default |
rm -rf $(PKG_BUILD_DIR) |
$(if $(wildcard $(USE_SOURCE_DIR)/*),,@echo "Error: USE_SOURCE_DIR=$(USE_SOURCE_DIR) path not found"; false) |
ln -snf $(USE_SOURCE_DIR) $(PKG_BUILD_DIR) |
touch $(PKG_BUILD_DIR)/.source_dir |
endef |
endif |
|
define Build/Exports/Default |
$(1) : export ACLOCAL_INCLUDE=$$(foreach p,$$(wildcard $$(STAGING_DIR)/usr/share/aclocal $$(STAGING_DIR)/usr/share/aclocal-* $$(STAGING_DIR_HOSTPKG)/share/aclocal $$(STAGING_DIR_HOSTPKG)/share/aclocal-* $$(STAGING_DIR)/host/share/aclocal $$(STAGING_DIR)/host/share/aclocal-*),-I $$(p)) |
$(1) : export STAGING_PREFIX=$$(STAGING_DIR)/usr |
$(1) : export PATH=$$(TARGET_PATH_PKG) |
$(1) : export CONFIG_SITE:=$$(CONFIG_SITE) |
$(1) : export PKG_CONFIG_PATH:=$$(PKG_CONFIG_PATH) |
$(1) : export PKG_CONFIG_LIBDIR:=$$(PKG_CONFIG_PATH) |
$(if $(CONFIG_CCACHE),$(1) : export CCACHE_DIR:=$(STAGING_DIR)/ccache) |
endef |
Build/Exports=$(Build/Exports/Default) |
|
define Build/CoreTargets |
STAMP_PREPARED:=$$(STAMP_PREPARED) |
STAMP_CONFIGURED:=$$(STAMP_CONFIGURED) |
|
$(if $(QUILT),$(Build/Quilt)) |
$(call Build/Autoclean) |
$(call DefaultTargets) |
|
download: |
$(foreach hook,$(Hooks/Download), |
$(call $(hook))$(sep) |
) |
|
$(STAMP_PREPARED) : export PATH=$$(TARGET_PATH_PKG) |
$(STAMP_PREPARED): $(STAMP_PREPARED_DEPENDS) |
@-rm -rf $(PKG_BUILD_DIR) |
@mkdir -p $(PKG_BUILD_DIR) |
touch $$@_check |
$(foreach hook,$(Hooks/Prepare/Pre),$(call $(hook))$(sep)) |
$(Build/Prepare) |
$(foreach hook,$(Hooks/Prepare/Post),$(call $(hook))$(sep)) |
touch $$@ |
|
$(call Build/Exports,$(STAMP_CONFIGURED)) |
$(STAMP_CONFIGURED): $(STAMP_PREPARED) $(STAMP_CONFIGURED_DEPENDS) |
rm -f $(STAMP_CONFIGURED_WILDCARD) |
$(CleanStaging) |
$(foreach hook,$(Hooks/Configure/Pre),$(call $(hook))$(sep)) |
$(Build/Configure) |
$(foreach hook,$(Hooks/Configure/Post),$(call $(hook))$(sep)) |
touch $$@ |
|
$(call Build/Exports,$(STAMP_BUILT)) |
$(STAMP_BUILT): $(STAMP_CONFIGURED) $(STAMP_BUILT_DEPENDS) |
rm -f $$@ |
touch $$@_check |
$(foreach hook,$(Hooks/Compile/Pre),$(call $(hook))$(sep)) |
$(Build/Compile) |
$(foreach hook,$(Hooks/Compile/Post),$(call $(hook))$(sep)) |
$(Build/Install) |
$(foreach hook,$(Hooks/Install/Post),$(call $(hook))$(sep)) |
touch $$@ |
|
$(STAMP_INSTALLED) : export PATH=$$(TARGET_PATH_PKG) |
$(STAMP_INSTALLED): $(STAMP_BUILT) |
rm -rf $(TMP_DIR)/stage-$(PKG_DIR_NAME) |
mkdir -p $(TMP_DIR)/stage-$(PKG_DIR_NAME)/host $(STAGING_DIR)/packages $(STAGING_DIR_HOST)/packages |
$(foreach hook,$(Hooks/InstallDev/Pre),\ |
$(call $(hook),$(TMP_DIR)/stage-$(PKG_DIR_NAME),$(TMP_DIR)/stage-$(PKG_DIR_NAME)/host)$(sep)\ |
) |
$(call Build/InstallDev,$(TMP_DIR)/stage-$(PKG_DIR_NAME),$(TMP_DIR)/stage-$(PKG_DIR_NAME)/host) |
$(foreach hook,$(Hooks/InstallDev/Post),\ |
$(call $(hook),$(TMP_DIR)/stage-$(PKG_DIR_NAME),$(TMP_DIR)/stage-$(PKG_DIR_NAME)/host)$(sep)\ |
) |
if [ -f $(STAGING_DIR)/packages/$(STAGING_FILES_LIST) ]; then \ |
$(SCRIPT_DIR)/clean-package.sh \ |
"$(STAGING_DIR)/packages/$(STAGING_FILES_LIST)" \ |
"$(STAGING_DIR)"; \ |
fi |
if [ -d $(TMP_DIR)/stage-$(PKG_DIR_NAME) ]; then \ |
(cd $(TMP_DIR)/stage-$(PKG_DIR_NAME); find ./ > $(TMP_DIR)/stage-$(PKG_DIR_NAME).files); \ |
$(call locked, \ |
mv $(TMP_DIR)/stage-$(PKG_DIR_NAME).files $(STAGING_DIR)/packages/$(STAGING_FILES_LIST) && \ |
$(CP) $(TMP_DIR)/stage-$(PKG_DIR_NAME)/* $(STAGING_DIR)/; \ |
,staging-dir); \ |
fi |
rm -rf $(TMP_DIR)/stage-$(PKG_DIR_NAME) |
touch $$@ |
|
ifdef Build/InstallDev |
$(_pkg_target)compile: $(STAMP_INSTALLED) |
endif |
|
$(_pkg_target)prepare: $(STAMP_PREPARED) |
$(_pkg_target)configure: $(STAMP_CONFIGURED) |
$(_pkg_target)dist: $(STAMP_CONFIGURED) |
$(_pkg_target)distcheck: $(STAMP_CONFIGURED) |
|
ifneq ($(CONFIG_AUTOREMOVE),) |
compile: |
-touch -r $(PKG_BUILD_DIR)/.built $(PKG_BUILD_DIR)/.autoremove 2>/dev/null >/dev/null |
$(FIND) $(PKG_BUILD_DIR) -mindepth 1 -maxdepth 1 -not '(' -type f -and -name '.*' -and -size 0 ')' -and -not -name '.pkgdir' | \ |
$(XARGS) rm -rf |
endif |
endef |
|
define Build/DefaultTargets |
$(if $(USE_SOURCE_DIR)$(USE_GIT_TREE),,$(if $(strip $(PKG_SOURCE_URL)),$(call Download,default))) |
$(if $(DUMP),,$(Build/CoreTargets)) |
|
define Build/DefaultTargets |
endef |
endef |
|
define BuildPackage |
$(eval $(Package/Default)) |
$(eval $(Package/$(1))) |
|
ifdef DESCRIPTION |
$$(error DESCRIPTION:= is obsolete, use Package/PKG_NAME/description) |
endif |
|
ifndef Package/$(1)/description |
define Package/$(1)/description |
$(TITLE) |
endef |
endif |
|
BUILD_PACKAGES += $(1) |
$(STAMP_PREPARED): $$(if $(QUILT)$(DUMP),,$(call find_library_dependencies,$(DEPENDS))) |
|
$(foreach FIELD, TITLE CATEGORY SECTION VERSION, |
ifeq ($($(FIELD)),) |
$$(error Package/$(1) is missing the $(FIELD) field) |
endif |
) |
|
$(if $(DUMP), \ |
$(if $(CHECK),,$(Dumpinfo/Package)), \ |
$(foreach target, \ |
$(if $(Package/$(1)/targets),$(Package/$(1)/targets), \ |
$(if $(PKG_TARGETS),$(PKG_TARGETS), ipkg) \ |
), $(BuildTarget/$(target)) \ |
) \ |
) |
$(if $(PKG_HOST_ONLY),,$(call Build/DefaultTargets,$(1))) |
endef |
|
define pkg_install_files |
$(foreach install_file,$(1),$(INSTALL_DIR) $(3)/`dirname $(install_file)`; $(INSTALL_DATA) $(2)/$(install_file) $(3)/`dirname $(install_file)`;) |
endef |
|
define pkg_install_bin |
$(foreach install_apps,$(1),$(INSTALL_DIR) $(3)/`dirname $(install_apps)`; $(INSTALL_BIN) $(2)/$(install_apps) $(3)/`dirname $(install_apps)`;) |
endef |
|
Build/Prepare=$(call Build/Prepare/Default,) |
Build/Configure=$(call Build/Configure/Default,) |
Build/Compile=$(call Build/Compile/Default,) |
Build/Install=$(if $(PKG_INSTALL),$(call Build/Install/Default,)) |
Build/Dist=$(call Build/Dist/Default,) |
Build/DistCheck=$(call Build/DistCheck/Default,) |
|
.NOTPARALLEL: |
|
.PHONY: prepare-package-install |
prepare-package-install: |
@mkdir -p $(PKG_INFO_DIR) |
@rm -f $(PKG_INSTALL_STAMP) |
@echo "$(filter-out essential nonshared,$(PKG_FLAGS))" > $(PKG_INSTALL_STAMP).flags |
|
$(PACKAGE_DIR): |
mkdir -p $@ |
|
compile: |
.install: .compile |
install: compile |
|
force-clean-build: FORCE |
rm -rf $(PKG_BUILD_DIR) |
|
clean-build: $(if $(wildcard $(PKG_BUILD_DIR)/.autoremove),force-clean-build) |
|
clean: force-clean-build |
$(CleanStaging) |
$(call Build/UninstallDev,$(STAGING_DIR),$(STAGING_DIR_HOST)) |
$(Build/Clean) |
rm -f $(STAGING_DIR)/packages/$(STAGING_FILES_LIST) $(STAGING_DIR_HOST)/packages/$(STAGING_FILES_LIST) |
|
dist: |
$(Build/Dist) |
|
distcheck: |
$(Build/DistCheck) |
/branches/18.06.1/include/prereq-build.mk |
@@ -0,0 +1,164 @@ |
# |
# Copyright (C) 2006-2012 OpenWrt.org |
# |
# This is free software, licensed under the GNU General Public License v2. |
# See /LICENSE for more information. |
# |
|
include $(TOPDIR)/rules.mk |
include $(INCLUDE_DIR)/prereq.mk |
|
SHELL:=sh |
PKG_NAME:=Build dependency |
|
|
# Required for the toolchain |
$(eval $(call TestHostCommand,working-make, \ |
Please install GNU make v3.81 or later. (This version has bugs), \ |
$(MAKE) -v | grep -E 'Make (3\.8[1-9]|3\.9[0-9]|[4-9]\.)')) |
|
$(eval $(call TestHostCommand,case-sensitive-fs, \ |
OpenWrt can only be built on a case-sensitive filesystem, \ |
rm -f $(TMP_DIR)/test.*; touch $(TMP_DIR)/test.fs; \ |
test ! -f $(TMP_DIR)/test.FS)) |
|
$(eval $(call TestHostCommand,proper-umask, \ |
Please build with umask 022 - other values produce broken packages, \ |
umask | grep -xE 0?0[012][012])) |
|
$(eval $(call SetupHostCommand,gcc, \ |
Please install the GNU C Compiler (gcc) 4.8 or later, \ |
$(CC) -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \ |
gcc -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \ |
gcc48 --version | grep gcc, \ |
gcc49 --version | grep gcc, \ |
gcc5 --version | grep gcc, \ |
gcc6 --version | grep gcc, \ |
gcc7 --version | grep gcc, \ |
gcc8 --version | grep gcc, \ |
gcc9 --version | grep gcc, \ |
gcc --version | grep Apple.LLVM )) |
|
$(eval $(call TestHostCommand,working-gcc, \ |
\nPlease reinstall the GNU C Compiler (4.8 or later) - \ |
it appears to be broken, \ |
echo 'int main(int argc, char **argv) { return 0; }' | \ |
gcc -x c -o $(TMP_DIR)/a.out -)) |
|
$(eval $(call SetupHostCommand,g++, \ |
Please install the GNU C++ Compiler (g++) 4.8 or later, \ |
$(CXX) -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \ |
g++ -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?)', \ |
g++48 --version | grep g++, \ |
g++49 --version | grep g++, \ |
g++5 --version | grep g++, \ |
g++6 --version | grep g++, \ |
g++7 --version | grep g++, \ |
g++8 --version | grep g++, \ |
g++9 --version | grep g++, \ |
g++ --version | grep Apple.LLVM )) |
|
$(eval $(call TestHostCommand,working-g++, \ |
\nPlease reinstall the GNU C++ Compiler (4.8 or later) - \ |
it appears to be broken, \ |
echo 'int main(int argc, char **argv) { return 0; }' | \ |
g++ -x c++ -o $(TMP_DIR)/a.out - -lstdc++ && \ |
$(TMP_DIR)/a.out)) |
|
$(eval $(call TestHostCommand,ncurses, \ |
Please install ncurses. (Missing libncurses.so or ncurses.h), \ |
echo 'int main(int argc, char **argv) { initscr(); return 0; }' | \ |
gcc -include ncurses.h -x c -o $(TMP_DIR)/a.out - -lncurses)) |
|
ifeq ($(HOST_OS),Linux) |
zlib_link_flags := -Wl,-Bstatic -lz -Wl,-Bdynamic |
else |
zlib_link_flags := -lz |
endif |
|
$(eval $(call TestHostCommand,perl-thread-queue, \ |
Please install the Perl Thread::Queue module, \ |
perl -MThread::Queue -e 1)) |
|
|
$(eval $(call SetupHostCommand,tar,Please install GNU 'tar', \ |
gtar --version 2>&1 | grep GNU, \ |
gnutar --version 2>&1 | grep GNU, \ |
tar --version 2>&1 | grep GNU)) |
|
$(eval $(call SetupHostCommand,find,Please install GNU 'find', \ |
gfind --version 2>&1 | grep GNU, \ |
find --version 2>&1 | grep GNU)) |
|
$(eval $(call SetupHostCommand,bash,Please install GNU 'bash', \ |
bash --version 2>&1 | grep GNU)) |
|
$(eval $(call SetupHostCommand,patch,Please install GNU 'patch', \ |
gpatch --version 2>&1 | grep 'Free Software Foundation', \ |
patch --version 2>&1 | grep 'Free Software Foundation')) |
|
$(eval $(call SetupHostCommand,diff,Please install diffutils, \ |
gdiff --version 2>&1 | grep diff, \ |
diff --version 2>&1 | grep diff)) |
|
$(eval $(call SetupHostCommand,cp,Please install GNU fileutils, \ |
gcp --help 2>&1 | grep 'Copy SOURCE', \ |
cp --help 2>&1 | grep 'Copy SOURCE')) |
|
$(eval $(call SetupHostCommand,seq,, \ |
gseq --version, \ |
seq --version)) |
|
$(eval $(call SetupHostCommand,awk,Please install GNU 'awk', \ |
gawk --version 2>&1 | grep GNU, \ |
awk --version 2>&1 | grep GNU)) |
|
$(eval $(call SetupHostCommand,grep,Please install GNU 'grep', \ |
ggrep --version 2>&1 | grep GNU, \ |
grep --version 2>&1 | grep GNU)) |
|
$(eval $(call SetupHostCommand,getopt, \ |
Please install an extended getopt version that supports --long, \ |
gnugetopt -o t --long test -- --test | grep '^ *--test *--', \ |
/usr/local/bin/getopt -o t --long test -- --test | grep '^ *--test *--', \ |
getopt -o t --long test -- --test | grep '^ *--test *--')) |
|
$(eval $(call SetupHostCommand,stat,Cannot find a file stat utility, \ |
gnustat -c%s $(TOPDIR)/Makefile, \ |
gstat -c%s $(TOPDIR)/Makefile, \ |
stat -c%s $(TOPDIR)/Makefile)) |
|
$(eval $(call SetupHostCommand,unzip,Please install 'unzip', \ |
unzip 2>&1 | grep zipfile, \ |
unzip)) |
|
$(eval $(call SetupHostCommand,bzip2,Please install 'bzip2', \ |
bzip2 --version </dev/null)) |
|
$(eval $(call SetupHostCommand,wget,Please install GNU 'wget', \ |
wget --version | grep GNU)) |
|
$(eval $(call SetupHostCommand,perl,Please install Perl 5.x, \ |
perl --version | grep "perl.*v5")) |
|
$(eval $(call SetupHostCommand,python,Please install Python 2.x, \ |
python2.7 -V 2>&1 | grep Python, \ |
python2 -V 2>&1 | grep Python, \ |
python -V 2>&1 | grep Python)) |
|
$(eval $(call SetupHostCommand,git,Please install Git (git-core) >= 1.7.12.2, \ |
git --exec-path | xargs -I % -- grep -q -- --recursive %/git-submodule)) |
|
$(eval $(call SetupHostCommand,file,Please install the 'file' package, \ |
file --version 2>&1 | grep file)) |
|
$(STAGING_DIR_HOST)/bin/mkhash: $(SCRIPT_DIR)/mkhash.c |
mkdir -p $(dir $@) |
$(CC) -O2 -I$(TOPDIR)/tools/include -o $@ $< |
|
prereq: $(STAGING_DIR_HOST)/bin/mkhash |
|
# Install ldconfig stub |
$(eval $(call TestHostCommand,ldconfig-stub,Failed to install stub, \ |
touch $(STAGING_DIR_HOST)/bin/ldconfig && \ |
chmod +x $(STAGING_DIR_HOST)/bin/ldconfig)) |
/branches/18.06.1/include/quilt.mk |
@@ -0,0 +1,183 @@ |
# |
# Copyright (C) 2007-2009 OpenWrt.org |
# |
# This is free software, licensed under the GNU General Public License v2. |
# See /LICENSE for more information. |
|
ifeq ($(TARGET_BUILD),1) |
PKG_BUILD_DIR:=$(LINUX_DIR) |
endif |
|
ifneq ($(filter host-refresh refresh,$(MAKECMDGOALS)),) |
override QUILT=1 |
override HOST_QUILT=1 |
endif |
|
ifneq ($(PKG_BUILD_DIR),) |
QUILT?=$(if $(wildcard $(PKG_BUILD_DIR)/.quilt_used),y) |
ifneq ($(QUILT),) |
STAMP_CHECKED:=$(PKG_BUILD_DIR)/.quilt_checked |
override CONFIG_AUTOREBUILD= |
override CONFIG_AUTOREMOVE= |
quilt-check: $(STAMP_CHECKED) |
endif |
endif |
|
ifneq ($(HOST_BUILD_DIR),) |
HOST_QUILT?=$(if $(findstring command,$(origin QUILT)),$(QUILT),$(if $(wildcard $(HOST_BUILD_DIR)/.quilt_used),y)) |
ifneq ($(HOST_QUILT),) |
HOST_STAMP_CHECKED:=$(HOST_BUILD_DIR)/.quilt_checked |
override CONFIG_AUTOREBUILD= |
override CONFIG_AUTOREMOVE= |
host-quilt-check: $(HOST_STAMP_CHECKED) |
endif |
endif |
|
ifneq ($(if $(DUMP),1,$(__quilt_inc)),1) |
__quilt_inc:=1 |
|
PATCH_DIR?=./patches |
FILES_DIR?=./files |
HOST_PATCH_DIR?=$(PATCH_DIR) |
HOST_FILES_DIR?=$(FILES_DIR) |
|
QUILT_CMD:=quilt --quiltrc=- |
|
define filter_series |
sed -e s,\\\#.*,, $(1) | grep -E \[a-zA-Z0-9\] |
endef |
|
define PatchDir/Quilt |
@mkdir -p "$(1)/patches$(if $(3),/$(patsubst %/,%,$(3)))" |
@if [ -s "$(2)/series" ]; then \ |
mkdir -p "$(1)/patches/$(3)"; \ |
cp "$(2)/series" "$(1)/patches/$(3)"; \ |
fi |
@for patch in $$$$( (cd "$(2)" && if [ -f series ]; then $(call filter_series,series); else ls | sort; fi; ) 2>/dev/null ); do ( \ |
cp "$(2)/$$$$patch" "$(1)/patches/$(3)"; \ |
echo "$(3)$$$$patch" >> "$(1)/patches/series"; \ |
); done |
$(if $(3),@echo $(3) >> "$(1)/patches/.subdirs") |
endef |
|
define PatchDir/Default |
@if [ -d "$(2)" ] && [ "$$$$(ls $(2) | wc -l)" -gt 0 ]; then \ |
export PATCH="$(PATCH)"; \ |
if [ -s "$(2)/series" ]; then \ |
$(call filter_series,$(2)/series) | xargs -n1 \ |
$(KPATCH) "$(1)" "$(2)"; \ |
else \ |
$(KPATCH) "$(1)" "$(2)"; \ |
fi; \ |
fi |
endef |
|
define PatchDir |
$(call PatchDir/$(if $(strip $(QUILT)),Quilt,Default),$(strip $(1)),$(strip $(2)),$(strip $(3))) |
endef |
|
define HostPatchDir |
$(call PatchDir/$(if $(strip $(HOST_QUILT)),Quilt,Default),$(strip $(1)),$(strip $(2)),$(strip $(3))) |
endef |
|
define Host/Patch/Default |
$(if $(HOST_QUILT),rm -rf $(HOST_BUILD_DIR)/patches; mkdir -p $(HOST_BUILD_DIR)/patches) |
$(call HostPatchDir,$(HOST_BUILD_DIR),$(HOST_PATCH_DIR),) |
$(if $(HOST_QUILT),touch $(HOST_BUILD_DIR)/.quilt_used) |
endef |
|
define Build/Patch/Default |
$(if $(QUILT),rm -rf $(PKG_BUILD_DIR)/patches; mkdir -p $(PKG_BUILD_DIR)/patches) |
$(call PatchDir,$(PKG_BUILD_DIR),$(PATCH_DIR),) |
$(if $(QUILT),touch $(PKG_BUILD_DIR)/.quilt_used) |
endef |
|
kernel_files=$(foreach fdir,$(GENERIC_FILES_DIR) $(FILES_DIR),$(fdir)/.) |
define Kernel/Patch/Default |
$(if $(QUILT),rm -rf $(LINUX_DIR)/patches; mkdir -p $(LINUX_DIR)/patches) |
$(if $(kernel_files),$(CP) $(kernel_files) $(LINUX_DIR)/) |
find $(LINUX_DIR)/ -name \*.rej -or -name \*.orig | $(XARGS) rm -f |
if [ -d $(GENERIC_PLATFORM_DIR)/patches$(if $(wildcard $(GENERIC_PLATFORM_DIR)/patches-$(KERNEL_PATCHVER)),-$(KERNEL_PATCHVER)) ]; then \ |
echo "generic patches directory is present. please move your patches to the pending directory" ; \ |
exit 1; \ |
fi |
$(call PatchDir,$(LINUX_DIR),$(GENERIC_BACKPORT_DIR),generic-backport/) |
$(call PatchDir,$(LINUX_DIR),$(GENERIC_PATCH_DIR),generic/) |
$(call PatchDir,$(LINUX_DIR),$(GENERIC_HACK_DIR),generic-hack/) |
$(call PatchDir,$(LINUX_DIR),$(PATCH_DIR),platform/) |
endef |
|
define Quilt/RefreshDir |
mkdir -p $(2) |
-rm -f $(2)/* 2>/dev/null >/dev/null |
@( \ |
for patch in $$$$($(if $(3),grep "^$(3)",cat) $(1)/patches/series | awk '{print $$$$1}'); do \ |
$(CP) -v "$(1)/patches/$$$$patch" $(2); \ |
done; \ |
) |
endef |
|
define Quilt/Refresh/Host |
$(call Quilt/RefreshDir,$(HOST_BUILD_DIR),$(PATCH_DIR)) |
endef |
|
define Quilt/Refresh/Package |
$(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(PATCH_DIR)) |
endef |
|
define Quilt/Refresh/Kernel |
@[ -z "$$(grep -v '^generic/' $(PKG_BUILD_DIR)/patches/series | grep -v '^platform/')" ] || { \ |
echo "All kernel patches must start with either generic/ or platform/"; \ |
false; \ |
} |
$(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(GENERIC_BACKPORT_DIR),generic-backport/) |
$(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(GENERIC_PATCH_DIR),generic/) |
$(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(GENERIC_HACK_DIR),generic-hack/) |
$(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(PATCH_DIR),platform/) |
endef |
|
define Quilt/Template |
$($(2)STAMP_CONFIGURED): $($(2)STAMP_CHECKED) |
$(if $(NO_RECONFIGURE),$($(2)STAMP_BUILT),$($(2)STAMP_CONFIGURED)): FORCE |
$($(2)STAMP_CHECKED): $($(2)STAMP_PREPARED) |
if [ -s "$(1)/patches/series" ]; then \ |
(cd "$(1)"; \ |
if $(QUILT_CMD) next >/dev/null 2>&1; then \ |
$(QUILT_CMD) push -a; \ |
else \ |
$(QUILT_CMD) top >/dev/null 2>&1; \ |
fi \ |
); \ |
fi |
touch "$$@" |
|
$(3)quilt-check: $($(2)STAMP_PREPARED) FORCE |
@[ -f "$(1)/.quilt_used" ] || { \ |
echo "The source directory was not unpacked using quilt. Please rebuild with QUILT=1"; \ |
false; \ |
} |
@[ -f "$(1)/patches/series" ] || { \ |
echo "The source directory contains no quilt patches."; \ |
false; \ |
} |
@[ -n "$$$$(ls $(1)/patches/series)" -o \ |
"$$$$(cat $(1)/patches/series | mkhash md5)" = "$$(sort $(1)/patches/series | mkhash md5)" ] || { \ |
echo "The patches are not sorted in the right order. Please fix."; \ |
false; \ |
} |
|
$(3)refresh: $(3)quilt-check |
@cd "$(1)"; $(QUILT_CMD) pop -a -f >/dev/null 2>/dev/null |
@cd "$(1)"; while $(QUILT_CMD) next 2>/dev/null >/dev/null && $(QUILT_CMD) push; do \ |
QUILT_DIFF_OPTS="-p" $(QUILT_CMD) refresh -p ab --no-index --no-timestamps; \ |
done; ! $(QUILT_CMD) next 2>/dev/null >/dev/null |
$(Quilt/Refresh/$(4)) |
|
$(3)update: $(3)quilt-check |
$(Quilt/Refresh/$(4)) |
endef |
|
Build/Quilt=$(call Quilt/Template,$(PKG_BUILD_DIR),,,$(if $(TARGET_BUILD),Kernel,Package)) |
Host/Quilt=$(call Quilt/Template,$(HOST_BUILD_DIR),HOST_,host-,Host) |
|
endif |
/branches/18.06.1/include/target.mk |
@@ -0,0 +1,324 @@ |
# |
# Copyright (C) 2007-2008 OpenWrt.org |
# Copyright (C) 2016 LEDE Project |
# |
# This is free software, licensed under the GNU General Public License v2. |
# See /LICENSE for more information. |
# |
|
ifneq ($(__target_inc),1) |
__target_inc=1 |
|
# default device type |
DEVICE_TYPE?=router |
|
# Default packages - the really basic set |
DEFAULT_PACKAGES:=base-files libc libgcc busybox dropbear mtd uci opkg netifd fstools uclient-fetch logd |
# For nas targets |
DEFAULT_PACKAGES.nas:=block-mount fdisk lsblk mdadm |
# For router targets |
DEFAULT_PACKAGES.router:=dnsmasq iptables ip6tables ppp ppp-mod-pppoe firewall odhcpd-ipv6only odhcp6c kmod-ipt-offload |
DEFAULT_PACKAGES.bootloader:= |
|
ifneq ($(DUMP),) |
all: dumpinfo |
endif |
|
target_conf=$(subst .,_,$(subst -,_,$(subst /,_,$(1)))) |
ifeq ($(DUMP),) |
PLATFORM_DIR:=$(TOPDIR)/target/linux/$(BOARD) |
SUBTARGET:=$(strip $(foreach subdir,$(patsubst $(PLATFORM_DIR)/%/target.mk,%,$(wildcard $(PLATFORM_DIR)/*/target.mk)),$(if $(CONFIG_TARGET_$(call target_conf,$(BOARD)_$(subdir))),$(subdir)))) |
else |
PLATFORM_DIR:=${CURDIR} |
ifeq ($(SUBTARGETS),) |
SUBTARGETS:=$(strip $(patsubst $(PLATFORM_DIR)/%/target.mk,%,$(wildcard $(PLATFORM_DIR)/*/target.mk))) |
endif |
endif |
|
TARGETID:=$(BOARD)$(if $(SUBTARGET),/$(SUBTARGET)) |
PLATFORM_SUBDIR:=$(PLATFORM_DIR)$(if $(SUBTARGET),/$(SUBTARGET)) |
|
ifneq ($(TARGET_BUILD),1) |
ifndef DUMP |
include $(PLATFORM_DIR)/Makefile |
ifneq ($(PLATFORM_DIR),$(PLATFORM_SUBDIR)) |
include $(PLATFORM_SUBDIR)/target.mk |
endif |
endif |
else |
ifneq ($(SUBTARGET),) |
-include ./$(SUBTARGET)/target.mk |
endif |
endif |
|
ifneq ($(filter 3.18 4.9,$(KERNEL_PATCHVER)),) |
DEFAULT_PACKAGES.router:=$(filter-out kmod-ipt-offload,$(DEFAULT_PACKAGES.router)) |
endif |
|
# Add device specific packages (here below to allow device type set from subtarget) |
DEFAULT_PACKAGES += $(DEFAULT_PACKAGES.$(DEVICE_TYPE)) |
|
filter_packages = $(filter-out -% $(patsubst -%,%,$(filter -%,$(1))),$(1)) |
extra_packages = $(if $(filter wpad-mini wpad-basic wpad nas,$(1)),iwinfo) |
|
define ProfileDefault |
NAME:= |
PRIORITY:= |
PACKAGES:= |
endef |
|
ifndef Profile |
define Profile |
$(eval $(call ProfileDefault)) |
$(eval $(call Profile/$(1))) |
dumpinfo : $(call shexport,Profile/$(1)/Description) |
PACKAGES := $(filter-out -%,$(PACKAGES)) |
DUMPINFO += \ |
echo "Target-Profile: $(1)"; \ |
$(if $(PRIORITY), echo "Target-Profile-Priority: $(PRIORITY)"; ) \ |
echo "Target-Profile-Name: $(NAME)"; \ |
echo "Target-Profile-Packages: $(PACKAGES) $(call extra_packages,$(DEFAULT_PACKAGES) $(PACKAGES))"; \ |
echo "Target-Profile-Description:"; \ |
echo "$$$$$$$$$(call shvar,Profile/$(1)/Description)"; \ |
echo "@@"; \ |
echo; |
endef |
endif |
|
ifneq ($(PLATFORM_DIR),$(PLATFORM_SUBDIR)) |
define IncludeProfiles |
-include $(sort $(wildcard $(PLATFORM_DIR)/profiles/*.mk)) |
-include $(sort $(wildcard $(PLATFORM_SUBDIR)/profiles/*.mk)) |
endef |
else |
define IncludeProfiles |
-include $(sort $(wildcard $(PLATFORM_DIR)/profiles/*.mk)) |
endef |
endif |
|
PROFILE?=$(call qstrip,$(CONFIG_TARGET_PROFILE)) |
|
ifeq ($(TARGET_BUILD),1) |
ifneq ($(DUMP),) |
$(eval $(call IncludeProfiles)) |
endif |
endif |
|
ifneq ($(TARGET_BUILD)$(if $(DUMP),,1),) |
include $(INCLUDE_DIR)/kernel-version.mk |
endif |
|
GENERIC_PLATFORM_DIR := $(TOPDIR)/target/linux/generic |
GENERIC_BACKPORT_DIR := $(GENERIC_PLATFORM_DIR)/backport$(if $(wildcard $(GENERIC_PLATFORM_DIR)/backport-$(KERNEL_PATCHVER)),-$(KERNEL_PATCHVER)) |
GENERIC_PATCH_DIR := $(GENERIC_PLATFORM_DIR)/pending$(if $(wildcard $(GENERIC_PLATFORM_DIR)/pending-$(KERNEL_PATCHVER)),-$(KERNEL_PATCHVER)) |
GENERIC_HACK_DIR := $(GENERIC_PLATFORM_DIR)/hack$(if $(wildcard $(GENERIC_PLATFORM_DIR)/hack-$(KERNEL_PATCHVER)),-$(KERNEL_PATCHVER)) |
GENERIC_FILES_DIR := $(foreach dir,$(wildcard $(GENERIC_PLATFORM_DIR)/files $(GENERIC_PLATFORM_DIR)/files-$(KERNEL_PATCHVER)),"$(dir)") |
|
__config_name_list = $(1)/config-$(KERNEL_PATCHVER) $(1)/config-default |
__config_list = $(firstword $(wildcard $(call __config_name_list,$(1)))) |
find_kernel_config=$(if $(__config_list),$(__config_list),$(lastword $(__config_name_list))) |
|
GENERIC_LINUX_CONFIG = $(call find_kernel_config,$(GENERIC_PLATFORM_DIR)) |
LINUX_TARGET_CONFIG = $(call find_kernel_config,$(PLATFORM_DIR)) |
ifneq ($(PLATFORM_DIR),$(PLATFORM_SUBDIR)) |
LINUX_SUBTARGET_CONFIG = $(call find_kernel_config,$(PLATFORM_SUBDIR)) |
endif |
|
# config file list used for compiling |
LINUX_KCONFIG_LIST = $(wildcard $(GENERIC_LINUX_CONFIG) $(LINUX_TARGET_CONFIG) $(LINUX_SUBTARGET_CONFIG) $(TOPDIR)/env/kernel-config) |
|
# default config list for reconfiguring |
# defaults to subtarget if subtarget exists and target does not |
# defaults to target otherwise |
USE_SUBTARGET_CONFIG = $(if $(wildcard $(LINUX_TARGET_CONFIG)),,$(if $(LINUX_SUBTARGET_CONFIG),1)) |
|
LINUX_RECONFIG_LIST = $(wildcard $(GENERIC_LINUX_CONFIG) $(LINUX_TARGET_CONFIG) $(if $(USE_SUBTARGET_CONFIG),$(LINUX_SUBTARGET_CONFIG))) |
LINUX_RECONFIG_TARGET = $(if $(USE_SUBTARGET_CONFIG),$(LINUX_SUBTARGET_CONFIG),$(LINUX_TARGET_CONFIG)) |
|
# select the config file to be changed by kernel_menuconfig/kernel_oldconfig |
ifeq ($(CONFIG_TARGET),platform) |
LINUX_RECONFIG_LIST = $(wildcard $(GENERIC_LINUX_CONFIG) $(LINUX_TARGET_CONFIG)) |
LINUX_RECONFIG_TARGET = $(LINUX_TARGET_CONFIG) |
endif |
ifeq ($(CONFIG_TARGET),subtarget) |
LINUX_RECONFIG_LIST = $(wildcard $(GENERIC_LINUX_CONFIG) $(LINUX_TARGET_CONFIG) $(LINUX_SUBTARGET_CONFIG)) |
LINUX_RECONFIG_TARGET = $(LINUX_SUBTARGET_CONFIG) |
endif |
ifeq ($(CONFIG_TARGET),subtarget_platform) |
LINUX_RECONFIG_LIST = $(wildcard $(GENERIC_LINUX_CONFIG) $(LINUX_SUBTARGET_CONFIG) $(LINUX_TARGET_CONFIG)) |
LINUX_RECONFIG_TARGET = $(LINUX_TARGET_CONFIG) |
endif |
ifeq ($(CONFIG_TARGET),env) |
LINUX_RECONFIG_LIST = $(LINUX_KCONFIG_LIST) |
LINUX_RECONFIG_TARGET = $(TOPDIR)/env/kernel-config |
endif |
|
__linux_confcmd = $(SCRIPT_DIR)/kconfig.pl $(2) $(patsubst %,+,$(wordlist 2,9999,$(1))) $(1) |
|
LINUX_CONF_CMD = $(call __linux_confcmd,$(LINUX_KCONFIG_LIST),) |
LINUX_RECONF_CMD = $(call __linux_confcmd,$(LINUX_RECONFIG_LIST),) |
LINUX_RECONF_DIFF = $(call __linux_confcmd,$(filter-out $(LINUX_RECONFIG_TARGET),$(LINUX_RECONFIG_LIST)),'>') |
|
ifeq ($(DUMP),1) |
BuildTarget=$(BuildTargets/DumpCurrent) |
|
CPU_CFLAGS = -Os -pipe |
ifneq ($(findstring mips,$(ARCH)),) |
ifneq ($(findstring mips64,$(ARCH)),) |
CPU_TYPE ?= mips64 |
else |
CPU_TYPE ?= mips32 |
endif |
CPU_CFLAGS += -mno-branch-likely |
CPU_CFLAGS_mips32 = -mips32 -mtune=mips32 |
CPU_CFLAGS_mips64 = -mips64 -mtune=mips64 -mabi=64 |
CPU_CFLAGS_24kc = -mips32r2 -mtune=24kc |
CPU_CFLAGS_74kc = -mips32r2 -mtune=74kc |
CPU_CFLAGS_octeonplus = -march=octeon+ -mabi=64 |
endif |
ifeq ($(ARCH),i386) |
CPU_TYPE ?= pentium |
CPU_CFLAGS_pentium = -march=pentium-mmx |
CPU_CFLAGS_pentium4 = -march=pentium4 |
endif |
ifneq ($(findstring arm,$(ARCH)),) |
CPU_TYPE ?= xscale |
CPU_CFLAGS_arm920t = -mcpu=arm920t |
CPU_CFLAGS_arm926ej-s = -mcpu=arm926ej-s |
CPU_CFLAGS_arm1136j-s = -mcpu=arm1136j-s |
CPU_CFLAGS_arm1176jzf-s = -mcpu=arm1176jzf-s |
CPU_CFLAGS_cortex-a5 = -mcpu=cortex-a5 |
CPU_CFLAGS_cortex-a7 = -mcpu=cortex-a7 |
CPU_CFLAGS_cortex-a8 = -mcpu=cortex-a8 |
CPU_CFLAGS_cortex-a9 = -mcpu=cortex-a9 |
CPU_CFLAGS_cortex-a15 = -mcpu=cortex-a15 |
CPU_CFLAGS_cortex-a53 = -mcpu=cortex-a53 |
CPU_CFLAGS_cortex-a72 = -mcpu=cortex-a72 |
CPU_CFLAGS_fa526 = -mcpu=fa526 |
CPU_CFLAGS_mpcore = -mcpu=mpcore |
CPU_CFLAGS_xscale = -mcpu=xscale |
ifeq ($(CONFIG_SOFT_FLOAT),) |
CPU_CFLAGS_neon = -mfpu=neon |
CPU_CFLAGS_vfp = -mfpu=vfp |
CPU_CFLAGS_vfpv3 = -mfpu=vfpv3-d16 |
CPU_CFLAGS_neon-vfpv4 = -mfpu=neon-vfpv4 |
endif |
endif |
ifeq ($(ARCH),powerpc) |
CPU_CFLAGS_603e:=-mcpu=603e |
CPU_CFLAGS_8540:=-mcpu=8540 |
CPU_CFLAGS_405:=-mcpu=405 |
CPU_CFLAGS_440:=-mcpu=440 |
CPU_CFLAGS_464fp:=-mcpu=464fp |
endif |
ifeq ($(ARCH),powerpc64) |
CPU_TYPE ?= powerpc64 |
CPU_CFLAGS_powerpc64:=-mcpu=powerpc64 |
endif |
ifeq ($(ARCH),sparc) |
CPU_TYPE = sparc |
CPU_CFLAGS_ultrasparc = -mcpu=ultrasparc |
endif |
ifeq ($(ARCH),aarch64) |
CPU_TYPE ?= generic |
CPU_CFLAGS_generic = -mcpu=generic |
CPU_CFLAGS_cortex-a53 = -mcpu=cortex-a53 |
endif |
ifeq ($(ARCH),arc) |
CPU_TYPE ?= arc700 |
CPU_CFLAGS += -matomic |
CPU_CFLAGS_arc700 = -mcpu=arc700 |
CPU_CFLAGS_archs = -mcpu=archs |
endif |
ifneq ($(CPU_TYPE),) |
ifndef CPU_CFLAGS_$(CPU_TYPE) |
$(warning CPU_TYPE "$(CPU_TYPE)" doesn't correspond to a known type) |
endif |
endif |
DEFAULT_CFLAGS=$(strip $(CPU_CFLAGS) $(CPU_CFLAGS_$(CPU_TYPE)) $(CPU_CFLAGS_$(CPU_SUBTYPE))) |
|
ifneq ($(BOARD),) |
TMP_CONFIG:=$(TMP_DIR)/.kconfig-$(call target_conf,$(TARGETID)) |
$(TMP_CONFIG): $(LINUX_KCONFIG_LIST) |
$(LINUX_CONF_CMD) > $@ || rm -f $@ |
-include $(TMP_CONFIG) |
.SILENT: $(TMP_CONFIG) |
.PRECIOUS: $(TMP_CONFIG) |
|
ifneq ($(CONFIG_OF),) |
FEATURES += dt |
endif |
ifneq ($(CONFIG_GENERIC_GPIO)$(CONFIG_GPIOLIB),) |
FEATURES += gpio |
endif |
ifneq ($(CONFIG_PCI),) |
FEATURES += pci |
endif |
ifneq ($(CONFIG_PCIEPORTBUS),) |
FEATURES += pcie |
endif |
ifneq ($(CONFIG_USB)$(CONFIG_USB_SUPPORT),) |
ifneq ($(CONFIG_USB_ARCH_HAS_HCD)$(CONFIG_USB_EHCI_HCD),) |
FEATURES += usb |
endif |
endif |
ifneq ($(CONFIG_PCMCIA)$(CONFIG_PCCARD),) |
FEATURES += pcmcia |
endif |
ifneq ($(CONFIG_VGA_CONSOLE)$(CONFIG_FB),) |
FEATURES += display |
endif |
ifneq ($(CONFIG_RTC_CLASS),) |
FEATURES += rtc |
endif |
ifneq ($(CONFIG_VIRTIO),) |
FEATURES += virtio |
endif |
ifneq ($(CONFIG_CPU_MIPS32_R2),) |
FEATURES += mips16 |
endif |
FEATURES += $(foreach v,6 7,$(if $(CONFIG_CPU_V$(v)),arm_v$(v))) |
|
# remove duplicates |
FEATURES:=$(sort $(FEATURES)) |
endif |
endif |
|
CUR_SUBTARGET:=$(SUBTARGET) |
ifeq ($(SUBTARGETS),) |
CUR_SUBTARGET := default |
endif |
|
define BuildTargets/DumpCurrent |
.PHONY: dumpinfo |
dumpinfo : export DESCRIPTION=$$(Target/Description) |
dumpinfo: |
@echo 'Target: $(TARGETID)'; \ |
echo 'Target-Board: $(BOARD)'; \ |
echo 'Target-Name: $(BOARDNAME)$(if $(SUBTARGETS),$(if $(SUBTARGET),))'; \ |
echo 'Target-Arch: $(ARCH)'; \ |
echo 'Target-Arch-Packages: $(if $(ARCH_PACKAGES),$(ARCH_PACKAGES),$(ARCH)$(if $(CPU_TYPE),_$(CPU_TYPE))$(if $(CPU_SUBTYPE),_$(CPU_SUBTYPE)))'; \ |
echo 'Target-Features: $(FEATURES)'; \ |
echo 'Target-Depends: $(DEPENDS)'; \ |
echo 'Target-Optimization: $(if $(CFLAGS),$(CFLAGS),$(DEFAULT_CFLAGS))'; \ |
echo 'CPU-Type: $(CPU_TYPE)$(if $(CPU_SUBTYPE),+$(CPU_SUBTYPE))'; \ |
echo 'Linux-Version: $(LINUX_VERSION)'; \ |
echo 'Linux-Release: $(LINUX_RELEASE)'; \ |
echo 'Linux-Kernel-Arch: $(LINUX_KARCH)'; \ |
$(if $(SUBTARGET),,$(if $(DEFAULT_SUBTARGET), echo 'Default-Subtarget: $(DEFAULT_SUBTARGET)'; )) \ |
echo 'Target-Description:'; \ |
echo "$$$$DESCRIPTION"; \ |
echo '@@'; \ |
echo 'Default-Packages: $(DEFAULT_PACKAGES) $(call extra_packages,$(DEFAULT_PACKAGES))'; \ |
$(DUMPINFO) |
$(if $(CUR_SUBTARGET),$(SUBMAKE) -r --no-print-directory -C image -s DUMP=1 SUBTARGET=$(CUR_SUBTARGET)) |
$(if $(SUBTARGET),,@$(foreach SUBTARGET,$(SUBTARGETS),$(SUBMAKE) -s DUMP=1 SUBTARGET=$(SUBTARGET); )) |
endef |
|
include $(INCLUDE_DIR)/kernel.mk |
ifeq ($(TARGET_BUILD),1) |
include $(INCLUDE_DIR)/kernel-build.mk |
BuildTarget?=$(BuildKernel) |
endif |
|
endif #__target_inc |
/branches/18.06.1/include/toplevel.mk |
@@ -0,0 +1,257 @@ |
# Makefile for OpenWrt |
# |
# Copyright (C) 2007-2012 OpenWrt.org |
# |
# This is free software, licensed under the GNU General Public License v2. |
# See /LICENSE for more information. |
# |
|
PREP_MK= OPENWRT_BUILD= QUIET=0 |
|
export IS_TTY=$(shell tty -s && echo 1 || echo 0) |
|
include $(TOPDIR)/include/verbose.mk |
|
ifeq ($(SDK),1) |
include $(TOPDIR)/include/version.mk |
else |
REVISION:=$(shell $(TOPDIR)/scripts/getver.sh) |
SOURCE_DATE_EPOCH:=$(shell $(TOPDIR)/scripts/get_source_date_epoch.sh) |
endif |
|
HOSTCC ?= $(CC) |
export REVISION |
export SOURCE_DATE_EPOCH |
export GIT_CONFIG_PARAMETERS='core.autocrlf=false' |
export GIT_ASKPASS:=/bin/true |
export MAKE_JOBSERVER=$(filter --jobserver%,$(MAKEFLAGS)) |
export GNU_HOST_NAME:=$(shell $(TOPDIR)/scripts/config.guess) |
export HOST_OS:=$(shell uname) |
export HOST_ARCH:=$(shell uname -m) |
|
# prevent perforce from messing with the patch utility |
unexport P4PORT P4USER P4CONFIG P4CLIENT |
|
# prevent user defaults for quilt from interfering |
unexport QUILT_PATCHES QUILT_PATCH_OPTS |
|
unexport C_INCLUDE_PATH CROSS_COMPILE ARCH |
|
# prevent distro default LPATH from interfering |
unexport LPATH |
|
# make sure that a predefined CFLAGS variable does not disturb packages |
export CFLAGS= |
export LDFLAGS= |
|
empty:= |
space:= $(empty) $(empty) |
path:=$(subst :,$(space),$(PATH)) |
path:=$(filter-out .%,$(path)) |
path:=$(subst $(space),:,$(path)) |
export PATH:=$(path) |
|
unexport TAR_OPTIONS |
|
ifneq ($(shell $(HOSTCC) 2>&1 | grep clang),) |
export HOSTCC_REAL?=$(HOSTCC) |
export HOSTCC_WRAPPER:=$(TOPDIR)/scripts/clang-gcc-wrapper |
else |
export HOSTCC_WRAPPER:=$(HOSTCC) |
endif |
|
ifeq ($(FORCE),) |
.config scripts/config/conf scripts/config/mconf: staging_dir/host/.prereq-build |
endif |
|
SCAN_COOKIE?=$(shell echo $$$$) |
export SCAN_COOKIE |
|
SUBMAKE:=umask 022; $(SUBMAKE) |
|
ULIMIT_FIX=_limit=`ulimit -n`; [ "$$_limit" = "unlimited" -o "$$_limit" -ge 1024 ] || ulimit -n 1024; |
|
prepare-mk: staging_dir/host/.prereq-build FORCE ; |
|
ifdef SDK |
IGNORE_PACKAGES = linux |
endif |
|
_ignore = $(foreach p,$(IGNORE_PACKAGES),--ignore $(p)) |
|
prepare-tmpinfo: FORCE |
@+$(MAKE) -r -s staging_dir/host/.prereq-build $(PREP_MK) |
mkdir -p tmp/info |
$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f include/scan.mk SCAN_TARGET="packageinfo" SCAN_DIR="package" SCAN_NAME="package" SCAN_DEPTH=5 SCAN_EXTRA="" |
$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f include/scan.mk SCAN_TARGET="targetinfo" SCAN_DIR="target/linux" SCAN_NAME="target" SCAN_DEPTH=2 SCAN_EXTRA="" SCAN_MAKEOPTS="TARGET_BUILD=1" |
for type in package target; do \ |
f=tmp/.$${type}info; t=tmp/.config-$${type}.in; \ |
[ "$$t" -nt "$$f" ] || ./scripts/$${type}-metadata.pl $(_ignore) config "$$f" > "$$t" || { rm -f "$$t"; echo "Failed to build $$t"; false; break; }; \ |
done |
[ tmp/.config-feeds.in -nt tmp/.packageauxvars ] || ./scripts/feeds feed_config > tmp/.config-feeds.in |
./scripts/package-metadata.pl mk tmp/.packageinfo > tmp/.packagedeps || { rm -f tmp/.packagedeps; false; } |
./scripts/package-metadata.pl pkgaux tmp/.packageinfo > tmp/.packageauxvars || { rm -f tmp/.packageauxvars; false; } |
touch $(TOPDIR)/tmp/.build |
|
.config: ./scripts/config/conf $(if $(CONFIG_HAVE_DOT_CONFIG),,prepare-tmpinfo) |
@+if [ \! -e .config ] || ! grep CONFIG_HAVE_DOT_CONFIG .config >/dev/null; then \ |
[ -e $(HOME)/.openwrt/defconfig ] && cp $(HOME)/.openwrt/defconfig .config; \ |
$(_SINGLE)$(NO_TRACE_MAKE) menuconfig $(PREP_MK); \ |
fi |
|
scripts/config/mconf: |
@$(_SINGLE)$(SUBMAKE) -s -C scripts/config all CC="$(HOSTCC_WRAPPER)" |
|
$(eval $(call rdep,scripts/config,scripts/config/mconf)) |
|
scripts/config/qconf: |
@$(_SINGLE)$(SUBMAKE) -s -C scripts/config qconf CC="$(HOSTCC_WRAPPER)" |
|
scripts/config/conf: |
@$(_SINGLE)$(SUBMAKE) -s -C scripts/config conf CC="$(HOSTCC_WRAPPER)" |
|
config: scripts/config/conf prepare-tmpinfo FORCE |
[ -L .config ] && export KCONFIG_OVERWRITECONFIG=1; \ |
$< Config.in |
|
config-clean: FORCE |
$(_SINGLE)$(NO_TRACE_MAKE) -C scripts/config clean |
|
defconfig: scripts/config/conf prepare-tmpinfo FORCE |
touch .config |
@if [ ! -s .config -a -e $(HOME)/.openwrt/defconfig ]; then cp $(HOME)/.openwrt/defconfig .config; fi |
[ -L .config ] && export KCONFIG_OVERWRITECONFIG=1; \ |
$< --defconfig=.config Config.in |
|
confdefault-y=allyes |
confdefault-m=allmod |
confdefault-n=allno |
confdefault:=$(confdefault-$(CONFDEFAULT)) |
|
oldconfig: scripts/config/conf prepare-tmpinfo FORCE |
[ -L .config ] && export KCONFIG_OVERWRITECONFIG=1; \ |
$< --$(if $(confdefault),$(confdefault),old)config Config.in |
|
menuconfig: scripts/config/mconf prepare-tmpinfo FORCE |
if [ \! -e .config -a -e $(HOME)/.openwrt/defconfig ]; then \ |
cp $(HOME)/.openwrt/defconfig .config; \ |
fi |
[ -L .config ] && export KCONFIG_OVERWRITECONFIG=1; \ |
$< Config.in |
|
xconfig: scripts/config/qconf prepare-tmpinfo FORCE |
if [ \! -e .config -a -e $(HOME)/.openwrt/defconfig ]; then \ |
cp $(HOME)/.openwrt/defconfig .config; \ |
fi |
$< Config.in |
|
prepare_kernel_conf: .config FORCE |
|
ifeq ($(wildcard staging_dir/host/bin/quilt),) |
prepare_kernel_conf: |
@+$(SUBMAKE) -r tools/quilt/compile |
else |
prepare_kernel_conf: ; |
endif |
|
kernel_oldconfig: prepare_kernel_conf |
$(_SINGLE)$(NO_TRACE_MAKE) -C target/linux oldconfig |
|
kernel_menuconfig: prepare_kernel_conf |
$(_SINGLE)$(NO_TRACE_MAKE) -C target/linux menuconfig |
|
kernel_nconfig: prepare_kernel_conf |
$(_SINGLE)$(NO_TRACE_MAKE) -C target/linux nconfig |
|
staging_dir/host/.prereq-build: include/prereq-build.mk |
mkdir -p tmp |
@$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f $(TOPDIR)/include/prereq-build.mk prereq 2>/dev/null || { \ |
echo "Prerequisite check failed. Use FORCE=1 to override."; \ |
false; \ |
} |
ifneq ($(realpath $(TOPDIR)/include/prepare.mk),) |
@$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f $(TOPDIR)/include/prepare.mk prepare 2>/dev/null || { \ |
echo "Preparation failed."; \ |
false; \ |
} |
endif |
touch $@ |
|
printdb: FORCE |
@$(_SINGLE)$(NO_TRACE_MAKE) -p $@ V=99 DUMP_TARGET_DB=1 2>&1 |
|
ifndef SDK |
DOWNLOAD_DIRS = tools/download toolchain/download package/download target/download |
else |
DOWNLOAD_DIRS = package/download |
endif |
|
download: .config FORCE $(if $(wildcard $(TOPDIR)/staging_dir/host/bin/flock),,tools/flock/compile) |
@+$(foreach dir,$(DOWNLOAD_DIRS),$(SUBMAKE) $(dir);) |
|
clean dirclean: .config |
@+$(SUBMAKE) -r $@ |
|
prereq:: prepare-tmpinfo .config |
@+$(NO_TRACE_MAKE) -r -s $@ |
|
check: .config FORCE |
@+$(NO_TRACE_MAKE) -r -s $@ QUIET= V=s |
|
val.%: FORCE |
@+$(NO_TRACE_MAKE) -r -s $@ QUIET= V=s |
|
WARN_PARALLEL_ERROR = $(if $(BUILD_LOG),,$(and $(filter -j,$(MAKEFLAGS)),$(findstring s,$(OPENWRT_VERBOSE)))) |
|
ifeq ($(SDK),1) |
|
%:: |
@+$(PREP_MK) $(NO_TRACE_MAKE) -r -s prereq |
@./scripts/config/conf --defconfig=.config Config.in |
@+$(ULIMIT_FIX) $(SUBMAKE) -r $@ |
|
else |
|
%:: |
@+$(PREP_MK) $(NO_TRACE_MAKE) -r -s prereq |
@( \ |
cp .config tmp/.config; \ |
./scripts/config/conf --defconfig=tmp/.config -w tmp/.config Config.in > /dev/null 2>&1; \ |
if ./scripts/kconfig.pl '>' .config tmp/.config | grep -q CONFIG; then \ |
printf "$(_R)WARNING: your configuration is out of sync. Please run make menuconfig, oldconfig or defconfig!$(_N)\n" >&2; \ |
fi \ |
) |
@+$(ULIMIT_FIX) $(SUBMAKE) -r $@ $(if $(WARN_PARALLEL_ERROR), || { \ |
printf "$(_R)Build failed - please re-run with -j1 to see the real error message$(_N)\n" >&2; \ |
false; \ |
} ) |
|
endif |
|
# update all feeds, re-create index files, install symlinks |
package/symlinks: |
./scripts/feeds update -a |
./scripts/feeds install -a |
|
# re-create index files, install symlinks |
package/symlinks-install: |
./scripts/feeds update -i |
./scripts/feeds install -a |
|
# remove all symlinks, don't touch ./feeds |
package/symlinks-clean: |
./scripts/feeds uninstall -a |
|
help: |
cat README |
|
distclean: |
rm -rf bin build_dir .config* dl feeds key-build* logs package/feeds package/openwrt-packages staging_dir tmp |
@$(_SINGLE)$(SUBMAKE) -C scripts/config clean |
|
ifeq ($(findstring v,$(DEBUG)),) |
.SILENT: symlinkclean clean dirclean distclean config-clean download help tmpinfo-clean .config scripts/config/mconf scripts/config/conf menuconfig staging_dir/host/.prereq-build tmp/.prereq-package prepare-tmpinfo |
endif |
.PHONY: help FORCE |
.NOTPARALLEL: |
|
/branches/18.06.1/include/version.mk |
@@ -0,0 +1,111 @@ |
# |
# Copyright (C) 2012-2015 OpenWrt.org |
# Copyright (C) 2016 LEDE Project |
# |
# This is free software, licensed under the GNU General Public License v2. |
# See /LICENSE for more information. |
# |
|
# Substituted by SDK, do not remove |
# REVISION:=x |
# SOURCE_DATE_EPOCH:=x |
|
PKG_CONFIG_DEPENDS += \ |
CONFIG_VERSION_HOME_URL \ |
CONFIG_VERSION_BUG_URL \ |
CONFIG_VERSION_NUMBER \ |
CONFIG_VERSION_CODE \ |
CONFIG_VERSION_REPO \ |
CONFIG_VERSION_DIST \ |
CONFIG_VERSION_MANUFACTURER \ |
CONFIG_VERSION_MANUFACTURER_URL \ |
CONFIG_VERSION_PRODUCT \ |
CONFIG_VERSION_SUPPORT_URL \ |
CONFIG_VERSION_HWREV \ |
|
sanitize = $(call tolower,$(subst _,-,$(subst $(space),-,$(1)))) |
|
VERSION_NUMBER:=$(call qstrip,$(CONFIG_VERSION_NUMBER)) |
VERSION_NUMBER:=$(if $(VERSION_NUMBER),$(VERSION_NUMBER),SNAPSHOT) |
|
VERSION_CODE:=$(call qstrip,$(CONFIG_VERSION_CODE)) |
VERSION_CODE:=$(if $(VERSION_CODE),$(VERSION_CODE),$(REVISION)) |
|
VERSION_REPO:=$(call qstrip,$(CONFIG_VERSION_REPO)) |
VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),http://downloads.openwrt.org/snapshots) |
|
VERSION_DIST:=$(call qstrip,$(CONFIG_VERSION_DIST)) |
VERSION_DIST:=$(if $(VERSION_DIST),$(VERSION_DIST),OpenWrt) |
VERSION_DIST_SANITIZED:=$(call sanitize,$(VERSION_DIST)) |
|
VERSION_MANUFACTURER:=$(call qstrip,$(CONFIG_VERSION_MANUFACTURER)) |
VERSION_MANUFACTURER:=$(if $(VERSION_MANUFACTURER),$(VERSION_MANUFACTURER),OpenWrt) |
|
VERSION_MANUFACTURER_URL:=$(call qstrip,$(CONFIG_VERSION_MANUFACTURER_URL)) |
VERSION_MANUFACTURER_URL:=$(if $(VERSION_MANUFACTURER_URL),$(VERSION_MANUFACTURER_URL),http://openwrt.org/) |
|
VERSION_BUG_URL:=$(call qstrip,$(CONFIG_VERSION_BUG_URL)) |
VERSION_BUG_URL:=$(if $(VERSION_BUG_URL),$(VERSION_BUG_URL),http://bugs.openwrt.org/) |
|
VERSION_HOME_URL:=$(call qstrip,$(CONFIG_VERSION_HOME_URL)) |
VERSION_HOME_URL:=$(if $(VERSION_HOME_URL),$(VERSION_HOME_URL),http://openwrt.org/) |
|
VERSION_SUPPORT_URL:=$(call qstrip,$(CONFIG_VERSION_SUPPORT_URL)) |
VERSION_SUPPORT_URL:=$(if $(VERSION_SUPPORT_URL),$(VERSION_SUPPORT_URL),http://forum.lede-project.org/) |
|
VERSION_PRODUCT:=$(call qstrip,$(CONFIG_VERSION_PRODUCT)) |
VERSION_PRODUCT:=$(if $(VERSION_PRODUCT),$(VERSION_PRODUCT),Generic) |
|
VERSION_HWREV:=$(call qstrip,$(CONFIG_VERSION_HWREV)) |
VERSION_HWREV:=$(if $(VERSION_HWREV),$(VERSION_HWREV),v0) |
|
define taint2sym |
$(CONFIG_$(firstword $(subst :, ,$(subst +,,$(subst -,,$(1)))))) |
endef |
|
define taint2name |
$(lastword $(subst :, ,$(1))) |
endef |
|
VERSION_TAINT_SPECS := \ |
-ALL_KMODS:no-all \ |
-IPV6:no-ipv6 \ |
+USE_GLIBC:glibc \ |
+USE_MKLIBS:mklibs \ |
+BUSYBOX_CUSTOM:busybox \ |
+OVERRIDE_PKGS:override \ |
|
VERSION_TAINTS := $(strip $(foreach taint,$(VERSION_TAINT_SPECS), \ |
$(if $(findstring +,$(taint)), \ |
$(if $(call taint2sym,$(taint)),$(call taint2name,$(taint))), \ |
$(if $(call taint2sym,$(taint)),,$(call taint2name,$(taint))) \ |
))) |
|
PKG_CONFIG_DEPENDS += $(foreach taint,$(VERSION_TAINT_SPECS),$(call taint2sym,$(taint))) |
|
# escape commas, backslashes, squotes, and ampersands for sed |
define sed_escape |
$(subst &,\&,$(subst $(comma),\$(comma),$(subst ','\'',$(subst \,\\,$(1))))) |
endef |
#' |
|
VERSION_SED_SCRIPT:=$(SED) 's,%U,$(call sed_escape,$(VERSION_REPO)),g' \ |
-e 's,%V,$(call sed_escape,$(VERSION_NUMBER)),g' \ |
-e 's,%v,\L$(call sed_escape,$(subst $(space),_,$(VERSION_NUMBER))),g' \ |
-e 's,%C,$(call sed_escape,$(VERSION_CODE)),g' \ |
-e 's,%c,\L$(call sed_escape,$(subst $(space),_,$(VERSION_CODE))),g' \ |
-e 's,%D,$(call sed_escape,$(VERSION_DIST)),g' \ |
-e 's,%d,\L$(call sed_escape,$(subst $(space),_,$(VERSION_DIST))),g' \ |
-e 's,%R,$(call sed_escape,$(REVISION)),g' \ |
-e 's,%T,$(call sed_escape,$(BOARD)),g' \ |
-e 's,%S,$(call sed_escape,$(BOARD)/$(if $(SUBTARGET),$(SUBTARGET),generic)),g' \ |
-e 's,%A,$(call sed_escape,$(ARCH_PACKAGES)),g' \ |
-e 's,%t,$(call sed_escape,$(VERSION_TAINTS)),g' \ |
-e 's,%M,$(call sed_escape,$(VERSION_MANUFACTURER)),g' \ |
-e 's,%m,$(call sed_escape,$(VERSION_MANUFACTURER_URL)),g' \ |
-e 's,%b,$(call sed_escape,$(VERSION_BUG_URL)),g' \ |
-e 's,%u,$(call sed_escape,$(VERSION_HOME_URL)),g' \ |
-e 's,%s,$(call sed_escape,$(VERSION_SUPPORT_URL)),g' \ |
-e 's,%P,$(call sed_escape,$(VERSION_PRODUCT)),g' \ |
-e 's,%h,$(call sed_escape,$(VERSION_HWREV)),g' |
|