aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/autotools.mk38
-rw-r--r--include/cmake.mk84
-rw-r--r--include/debug.mk7
-rw-r--r--include/depends.mk10
-rw-r--r--include/download.mk107
-rw-r--r--include/feeds.mk41
-rw-r--r--include/hardened-ld-pie.specs2
-rw-r--r--include/hardening.mk21
-rw-r--r--include/host-build.mk15
-rw-r--r--include/image-commands.mk501
-rw-r--r--include/image-legacy.mk93
-rw-r--r--include/image.mk361
-rw-r--r--include/kernel-build.mk37
-rw-r--r--include/kernel-defaults.mk67
-rw-r--r--include/kernel-version.mk30
-rw-r--r--include/kernel.mk146
-rw-r--r--include/logo.pngbin0 -> 81750 bytes
-rw-r--r--include/logo.svg398
-rw-r--r--include/netfilter.mk107
-rw-r--r--include/nls.mk9
-rw-r--r--include/package-bin.mk7
-rw-r--r--include/package-defaults.mk14
-rw-r--r--include/package-dumpinfo.mk64
-rw-r--r--include/package-ipkg.mk76
-rw-r--r--include/package-seccomp.mk7
-rw-r--r--include/package.mk93
-rw-r--r--include/prereq-build.mk119
-rw-r--r--include/prereq.mk22
-rw-r--r--include/quilt.mk18
-rw-r--r--include/rootfs.mk46
-rw-r--r--include/scan.mk30
-rw-r--r--include/scons.mk23
-rw-r--r--include/subdir.mk14
-rw-r--r--include/target.mk97
-rw-r--r--include/toolchain-build.mk8
-rw-r--r--include/toplevel.mk85
-rw-r--r--include/trusted-firmware-a.mk95
-rw-r--r--include/u-boot.mk8
-rw-r--r--include/unpack.mk22
-rw-r--r--include/verbose.mk9
-rw-r--r--include/version.mk98
41 files changed, 2063 insertions, 966 deletions
diff --git a/include/autotools.mk b/include/autotools.mk
index 7bd400ab36..1686f69f87 100644
--- a/include/autotools.mk
+++ b/include/autotools.mk
@@ -1,9 +1,9 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
-# Copyright (C) 2007-2012 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
+# Copyright (C) 2007-2020 OpenWrt.org
+
+ifneq ($(__autotools_inc),1)
+__autotools_inc=1
autoconf_bool = $(patsubst %,$(if $($(1)),--enable,--disable)-%,$(2))
@@ -39,7 +39,9 @@ define autoreconf
[ -e $(p)/config.rpath ] || \
ln -s $(SCRIPT_DIR)/config.rpath $(p)/config.rpath; \
touch NEWS AUTHORS COPYING ABOUT-NLS ChangeLog; \
- $(AM_TOOL_PATHS) $(STAGING_DIR_HOST)/bin/autoreconf -v -f -i -s \
+ $(AM_TOOL_PATHS) \
+ LIBTOOLIZE='$(STAGING_DIR_HOST)/bin/libtoolize --install' \
+ $(STAGING_DIR_HOST)/bin/autoreconf -v -f -i -s \
$(if $(word 2,$(3)),--no-recursive) \
-B $(STAGING_DIR_HOST)/share/aclocal \
$(patsubst %,-I %,$(5)) \
@@ -63,6 +65,12 @@ define patch_libtool
);
endef
+define set_libtool_abiver
+ sed -i \
+ -e 's,^soname_spec=.*,soname_spec="\\$$$${libname}\\$$$${shared_ext}.$(PKG_ABI_VERSION)",' \
+ -e 's,^library_names_spec=.*,library_names_spec="\\$$$${libname}\\$$$${shared_ext}.$(PKG_ABI_VERSION) \\$$$${libname}\\$$$${shared_ext}",' \
+ $(PKG_BUILD_DIR)/libtool
+endef
PKG_LIBTOOL_PATHS?=$(CONFIGURE_PATH)
PKG_AUTOMAKE_PATHS?=$(CONFIGURE_PATH)
@@ -85,7 +93,7 @@ endef
define gettext_version_target
(cd $(PKG_BUILD_DIR) && \
- GETTEXT_VERSION=$(shell $(STAGING_DIR_HOSTPKG)/bin/gettext -V | $(STAGING_DIR_HOST)/bin/sed -ne '1s/.*\([0-9]\.[0-9]\{2\}\.[0-9]\).*/\1/p' ) && \
+ GETTEXT_VERSION=$(shell $(STAGING_DIR_HOSTPKG)/bin/gettext -V | $(STAGING_DIR_HOST)/bin/sed -rne '1s/.*\b([0-9]\.[0-9]+(\.[0-9]+)?)\b.*/\1/p' ) && \
$(STAGING_DIR_HOST)/bin/sed \
-i $(PKG_BUILD_DIR)/configure.ac \
-e "s/AM_GNU_GETTEXT_VERSION(.*)/AM_GNU_GETTEXT_VERSION(\[$$$$GETTEXT_VERSION\])/g" && \
@@ -105,14 +113,18 @@ ifneq ($(filter patch-libtool,$(PKG_FIXUP)),)
endif
ifneq ($(filter libtool,$(PKG_FIXUP)),)
- PKG_BUILD_DEPENDS += libtool libintl libiconv
+ PKG_BUILD_DEPENDS += libtool gettext libiconv
ifeq ($(filter no-autoreconf,$(PKG_FIXUP)),)
Hooks/Configure/Pre += autoreconf_target
endif
endif
+ifneq ($(filter libtool-abiver,$(PKG_FIXUP)),)
+ Hooks/Configure/Post += set_libtool_abiver
+endif
+
ifneq ($(filter libtool-ucxx,$(PKG_FIXUP)),)
- PKG_BUILD_DEPENDS += libtool libintl libiconv
+ PKG_BUILD_DEPENDS += libtool gettext libiconv
ifeq ($(filter no-autoreconf,$(PKG_FIXUP)),)
Hooks/Configure/Pre += autoreconf_target
endif
@@ -143,12 +155,8 @@ define patch_libtool_host
$(HOST_BUILD_DIR)))
endef
-ifneq ($(filter patch-libtool,$(PKG_FIXUP)),)
- Hooks/HostConfigure/Pre += patch_libtool_host
-endif
-
ifneq ($(filter patch-libtool,$(HOST_FIXUP)),)
- Hooks/HostConfigure/Pre += $(strip $(call patch_libtool,$(HOST_BUILD_DIR)))
+ Hooks/HostConfigure/Pre += patch_libtool_host
endif
ifneq ($(filter libtool,$(HOST_FIXUP)),)
@@ -168,3 +176,5 @@ ifneq ($(filter autoreconf,$(HOST_FIXUP)),)
Hooks/HostConfigure/Pre += autoreconf_host
endif
endif
+
+endif #__autotools_inc
diff --git a/include/cmake.mk b/include/cmake.mk
index 900dae1d4a..b38d440039 100644
--- a/include/cmake.mk
+++ b/include/cmake.mk
@@ -1,14 +1,23 @@
cmake_bool = $(patsubst %,-D%:BOOL=$(if $($(1)),ON,OFF),$(2))
+PKG_USE_NINJA ?= 1
+HOST_USE_NINJA ?= 1
+ifeq ($(PKG_USE_NINJA),1)
+ PKG_BUILD_PARALLEL ?= 1
+endif
+ifeq ($(HOST_USE_NINJA),1)
+ HOST_BUILD_PARALLEL ?= 1
+endif
PKG_INSTALL:=1
ifneq ($(findstring c,$(OPENWRT_VERBOSE)),)
MAKE_FLAGS+=VERBOSE=1
+ HOST_MAKE_FLAGS+=VERBOSE=1
endif
CMAKE_BINARY_DIR = $(PKG_BUILD_DIR)$(if $(CMAKE_BINARY_SUBDIR),/$(CMAKE_BINARY_SUBDIR))
-CMAKE_SOURCE_DIR = $(PKG_BUILD_DIR)
-HOST_CMAKE_SOURCE_DIR = $(HOST_BUILD_DIR)
+CMAKE_SOURCE_DIR = $(PKG_BUILD_DIR)$(if $(CMAKE_SOURCE_SUBDIR),/$(CMAKE_SOURCE_SUBDIR))
+HOST_CMAKE_SOURCE_DIR = $(HOST_BUILD_DIR)$(if $(CMAKE_SOURCE_SUBDIR),/$(CMAKE_SOURCE_SUBDIR))
MAKE_PATH = $(firstword $(CMAKE_BINARY_SUBDIR) .)
ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
@@ -18,16 +27,22 @@ else
endif
ifeq ($(CONFIG_CCACHE),)
+ CMAKE_C_COMPILER_LAUNCHER:=
+ CMAKE_CXX_COMPILER_LAUNCHER:=
CMAKE_C_COMPILER:=$(call cmake_tool,$(TARGET_CC))
CMAKE_CXX_COMPILER:=$(call cmake_tool,$(TARGET_CXX))
- CMAKE_C_COMPILER_ARG1:=
- CMAKE_CXX_COMPILER_ARG1:=
+
+ CMAKE_HOST_C_COMPILER:=$(HOSTCC)
+ CMAKE_HOST_CXX_COMPILER:=$(HOSTCXX)
else
CCACHE:=$(STAGING_DIR_HOST)/bin/ccache
- CMAKE_C_COMPILER:=$(CCACHE)
- CMAKE_C_COMPILER_ARG1:=$(TARGET_CC_NOCACHE)
- CMAKE_CXX_COMPILER:=$(CCACHE)
- CMAKE_CXX_COMPILER_ARG1:=$(TARGET_CXX_NOCACHE)
+ CMAKE_C_COMPILER_LAUNCHER:=$(CCACHE)
+ CMAKE_CXX_COMPILER_LAUNCHER:=$(CCACHE)
+ CMAKE_C_COMPILER:=$(TARGET_CC_NOCACHE)
+ CMAKE_CXX_COMPILER:=$(TARGET_CXX_NOCACHE)
+
+ CMAKE_HOST_C_COMPILER:=$(HOSTCC_NOCACHE)
+ CMAKE_HOST_CXX_COMPILER:=$(HOSTCXX_NOCACHE)
endif
CMAKE_AR:=$(call cmake_tool,$(TARGET_AR))
CMAKE_NM:=$(call cmake_tool,$(TARGET_NM))
@@ -37,6 +52,34 @@ CMAKE_FIND_ROOT_PATH:=$(STAGING_DIR)/usr;$(TOOLCHAIN_DIR)$(if $(CONFIG_EXTERNAL_
CMAKE_HOST_FIND_ROOT_PATH:=$(STAGING_DIR)/host;$(STAGING_DIR_HOSTPKG);$(STAGING_DIR_HOST)
CMAKE_SHARED_LDFLAGS:=-Wl,-Bsymbolic-functions
+ifeq ($(HOST_USE_NINJA),1)
+ CMAKE_HOST_OPTIONS += -DCMAKE_GENERATOR="Ninja"
+
+ define Host/Compile/Default
+ +$(NINJA) -C $(HOST_BUILD_DIR) $(1)
+ endef
+
+ define Host/Install/Default
+ +$(NINJA) -C $(HOST_BUILD_DIR) install
+ endef
+
+ define Host/Uninstall/Default
+ +$(NINJA) -C $(HOST_BUILD_DIR) uninstall
+ endef
+endif
+
+ifeq ($(PKG_USE_NINJA),1)
+ CMAKE_OPTIONS += -DCMAKE_GENERATOR="Ninja"
+
+ define Build/Compile/Default
+ +$(NINJA) -C $(CMAKE_BINARY_DIR) $(1)
+ endef
+
+ define Build/Install/Default
+ +DESTDIR="$(PKG_INSTALL_DIR)" $(NINJA) -C $(CMAKE_BINARY_DIR) install
+ endef
+endif
+
define Build/Configure/Default
mkdir -p $(CMAKE_BINARY_DIR)
(cd $(CMAKE_BINARY_DIR); \
@@ -50,12 +93,12 @@ define Build/Configure/Default
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_FLAGS_RELEASE="-DNDEBUG" \
-DCMAKE_CXX_FLAGS_RELEASE="-DNDEBUG" \
+ -DCMAKE_C_COMPILER_LAUNCHER="$(CMAKE_C_COMPILER_LAUNCHER)" \
-DCMAKE_C_COMPILER="$(CMAKE_C_COMPILER)" \
- -DCMAKE_C_COMPILER_ARG1="$(CMAKE_C_COMPILER_ARG1)" \
+ -DCMAKE_CXX_COMPILER_LAUNCHER="$(CMAKE_CXX_COMPILER_LAUNCHER)" \
-DCMAKE_CXX_COMPILER="$(CMAKE_CXX_COMPILER)" \
- -DCMAKE_CXX_COMPILER_ARG1="$(CMAKE_CXX_COMPILER_ARG1)" \
+ -DCMAKE_ASM_COMPILER_LAUNCHER="$(CMAKE_C_COMPILER_LAUNCHER)" \
-DCMAKE_ASM_COMPILER="$(CMAKE_C_COMPILER)" \
- -DCMAKE_ASM_COMPILER_ARG1="$(CMAKE_C_COMPILER_ARG1)" \
-DCMAKE_EXE_LINKER_FLAGS:STRING="$(TARGET_LDFLAGS)" \
-DCMAKE_MODULE_LINKER_FLAGS:STRING="$(TARGET_LDFLAGS) $(CMAKE_SHARED_LDFLAGS)" \
-DCMAKE_SHARED_LINKER_FLAGS:STRING="$(TARGET_LDFLAGS) $(CMAKE_SHARED_LDFLAGS)" \
@@ -71,6 +114,12 @@ define Build/Configure/Default
-DDL_LIBRARY=$(STAGING_DIR) \
-DCMAKE_PREFIX_PATH=$(STAGING_DIR) \
-DCMAKE_SKIP_RPATH=TRUE \
+ -DCMAKE_EXPORT_PACKAGE_REGISTRY=FALSE \
+ -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=TRUE \
+ -DCMAKE_FIND_USE_PACKAGE_REGISTRY=FALSE \
+ -DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=TRUE \
+ -DCMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY=FALSE \
+ -DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=TRUE \
$(CMAKE_OPTIONS) \
$(CMAKE_SOURCE_DIR) \
)
@@ -90,6 +139,12 @@ define Host/Configure/Default
LDFLAGS="$(HOST_LDFLAGS)" \
cmake \
-DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_C_COMPILER_LAUNCHER="$(CMAKE_C_COMPILER_LAUNCHER)" \
+ -DCMAKE_C_COMPILER="$(CMAKE_HOST_C_COMPILER)" \
+ -DCMAKE_CXX_COMPILER_LAUNCHER="$(CMAKE_CXX_COMPILER_LAUNCHER)" \
+ -DCMAKE_CXX_COMPILER="$(CMAKE_HOST_CXX_COMPILER)" \
+ -DCMAKE_ASM_COMPILER_LAUNCHER="$(CMAKE_C_COMPILER_LAUNCHER)" \
+ -DCMAKE_ASM_COMPILER="$(CMAKE_HOST_C_COMPILER)" \
-DCMAKE_C_FLAGS_RELEASE="-DNDEBUG" \
-DCMAKE_CXX_FLAGS_RELEASE="-DNDEBUG" \
-DCMAKE_EXE_LINKER_FLAGS:STRING="$(HOST_LDFLAGS)" \
@@ -103,6 +158,13 @@ define Host/Configure/Default
-DCMAKE_INSTALL_PREFIX=$(HOST_BUILD_PREFIX) \
-DCMAKE_PREFIX_PATH=$(HOST_BUILD_PREFIX) \
-DCMAKE_SKIP_RPATH=TRUE \
+ -DCMAKE_INSTALL_LIBDIR=lib \
+ -DCMAKE_EXPORT_PACKAGE_REGISTRY=FALSE \
+ -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=TRUE \
+ -DCMAKE_FIND_USE_PACKAGE_REGISTRY=FALSE \
+ -DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=TRUE \
+ -DCMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY=FALSE \
+ -DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=TRUE \
$(CMAKE_HOST_OPTIONS) \
$(HOST_CMAKE_SOURCE_DIR) \
)
diff --git a/include/debug.mk b/include/debug.mk
index 59a99c0f77..98a1d6e889 100644
--- a/include/debug.mk
+++ b/include/debug.mk
@@ -1,9 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
-# Copyright (C) 2007 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
+# Copyright (C) 2007-2020 OpenWrt.org
# debug flags:
#
diff --git a/include/depends.mk b/include/depends.mk
index 3df51adae3..465e4e952a 100644
--- a/include/depends.mk
+++ b/include/depends.mk
@@ -1,9 +1,7 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
-# Copyright (C) 2007 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
+# Copyright (C) 2007-2020 OpenWrt.org
+
# define a dependency on a subtree
# parameters:
# 1: directories/files
@@ -13,7 +11,7 @@
DEP_FINDPARAMS := -x "*/.svn*" -x ".*" -x "*:*" -x "*\!*" -x "* *" -x "*\\\#*" -x "*/.*_check" -x "*/.*.swp" -x "*/.pkgdir*"
-find_md5=find $(wildcard $(1)) -type f $(patsubst -x,-and -not -path,$(DEP_FINDPARAMS) $(2)) | mkhash md5
+find_md5=find $(wildcard $(1)) -type f $(patsubst -x,-and -not -path,$(DEP_FINDPARAMS) $(2)) -printf "%p%T@\n" | sort | $(MKHASH) md5
define rdep
.PRECIOUS: $(2)
diff --git a/include/download.mk b/include/download.mk
index 0a25641738..609956b004 100644
--- a/include/download.mk
+++ b/include/download.mk
@@ -1,33 +1,40 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
# 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.
-#
-OPENWRT_GIT = http://git.openwrt.org
-LEDE_GIT = https://git.lede-project.org
+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
+ ifndef PKG_VERSION
+ PKG_VERSION := $(if $(PKG_SOURCE_DATE),$(PKG_SOURCE_DATE)-)$(call version_abbrev,$(PKG_SOURCE_VERSION))
+ endif
+ 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 $(2),$(2), \
- $(if $(filter @APACHE/% @GITHUB/% @GNOME/% @GNU/% @KERNEL/% @SF/% @SAVANNAH/% ftp://% http://% https://% file://%,$(1)),default, \
- $(if $(filter git://%,$(1)),git, \
- $(if $(filter svn://%,$(1)),svn, \
- $(if $(filter cvs://%,$(1)),cvs, \
- $(if $(filter hg://%,$(1)),hg, \
- $(if $(filter sftp://%,$(1)),bzr, \
- unknown \
+ $(if $(filter git,$(2)),$(call dl_method_git,$(1),$(2)),
+ $(if $(2),$(2), \
+ $(if $(filter @OPENWRT @APACHE/% @DEBIAN/% @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 \
+ ) \
) \
) \
) \
@@ -42,18 +49,24 @@ endef
dl_pack/bz2=bzip2 -c > $(1)
dl_pack/gz=gzip -nc > $(1)
dl_pack/xz=xz -zc -7e > $(1)
+dl_pack/zst=zstd -T0 --ultra -20 -c > $(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))
+ $(TAR) --numeric-owner --owner=0 --group=0 --mode=a-s --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)
@@ -61,7 +74,7 @@ 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))
+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)
@@ -69,11 +82,17 @@ 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)), \
@@ -114,6 +133,9 @@ define DownloadMethod/default
)
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)), \
@@ -157,23 +179,41 @@ endef
define DownloadMethod/git
$(call wrap_mirror,$(1),$(2), \
- 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); \
+ $(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..."; \
@@ -249,6 +289,7 @@ endef
define Download/default
FILE:=$(PKG_SOURCE)
URL:=$(PKG_SOURCE_URL)
+ URL_FILE:=$(PKG_SOURCE_URL_FILE)
SUBDIR:=$(PKG_SOURCE_SUBDIR)
PROTO:=$(PKG_SOURCE_PROTO)
$(if $(PKG_SOURCE_MIRROR),MIRROR:=$(filter 1,$(PKG_MIRROR)))
diff --git a/include/feeds.mk b/include/feeds.mk
index f89687a27e..632fecb4a3 100644
--- a/include/feeds.mk
+++ b/include/feeds.mk
@@ -1,30 +1,19 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
# Copyright (C) 2014 OpenWrt.org
# Copyright (C) 2016 LEDE Project
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
--include $(TMP_DIR)/.packagesubdirs
+-include $(TMP_DIR)/.packageauxvars
FEEDS_INSTALLED:=$(notdir $(wildcard $(TOPDIR)/package/feeds/*))
-FEEDS_AVAILABLE:=$(sort $(FEEDS_INSTALLED) $(shell $(SCRIPT_DIR)/feeds list -n))
-FEEDS_ENABLED:=$(foreach feed,$(FEEDS_AVAILABLE),$(if $(CONFIG_FEED_$(feed)),$(feed)))
-FEEDS_DISABLED:=$(filter-out $(FEEDS_ENABLED),$(FEEDS_AVAILABLE))
+FEEDS_AVAILABLE:=$(sort $(FEEDS_INSTALLED) $(shell $(SCRIPT_DIR)/feeds list -n 2>/dev/null))
PACKAGE_SUBDIRS=$(PACKAGE_DIR)
ifneq ($(CONFIG_PER_FEED_REPO),)
PACKAGE_SUBDIRS += $(OUTPUT_DIR)/packages/$(ARCH_PACKAGES)/base
- ifneq ($(CONFIG_PER_FEED_REPO_ADD_DISABLED),)
- PACKAGE_SUBDIRS += $(foreach FEED,$(FEEDS_AVAILABLE),$(OUTPUT_DIR)/packages/$(ARCH_PACKAGES)/$(FEED))
- else
- PACKAGE_SUBDIRS += $(foreach FEED,$(FEEDS_ENABLED),$(OUTPUT_DIR)/packages/$(ARCH_PACKAGES)/$(FEED))
- endif
+ PACKAGE_SUBDIRS += $(foreach FEED,$(FEEDS_AVAILABLE),$(OUTPUT_DIR)/packages/$(ARCH_PACKAGES)/$(FEED))
endif
-PACKAGE_DIR_ALL := $(TOPDIR)/staging_dir/packages/$(BOARD)
-
opkg_package_files = $(wildcard \
$(foreach dir,$(PACKAGE_SUBDIRS), \
$(foreach pkg,$(1), $(dir)/$(pkg)_*.ipk)))
@@ -41,10 +30,24 @@ endef
# 1: destination file
define FeedSourcesAppend
( \
- echo "src/gz %n_core %U/targets/%S/packages"; \
+ echo 'src/gz %d_core %U/targets/%S/packages'; \
$(strip $(if $(CONFIG_PER_FEED_REPO), \
- $(foreach feed,base $(FEEDS_ENABLED),echo "src/gz %n_$(feed) %U/packages/%A/$(feed)";) \
- $(if $(CONFIG_PER_FEED_REPO_ADD_DISABLED), \
- $(foreach feed,$(FEEDS_DISABLED),echo "$(if $(CONFIG_PER_FEED_REPO_ADD_COMMENTED),# )src/gz %n_$(feed) %U/packages/%A/$(feed)";)))) \
+ echo 'src/gz %d_base %U/packages/%A/base'; \
+ $(if $(filter %SNAPSHOT-y,$(VERSION_NUMBER)-$(CONFIG_BUILDBOT)), \
+ echo 'src/gz %d_kmods %U/targets/%S/kmods/$(LINUX_VERSION)-$(LINUX_RELEASE)-$(LINUX_VERMAGIC)';) \
+ $(foreach feed,$(FEEDS_AVAILABLE), \
+ $(if $(CONFIG_FEED_$(feed)), \
+ echo '$(if $(filter m,$(CONFIG_FEED_$(feed))),# )src/gz %d_$(feed) %U/packages/%A/$(feed)';)))) \
) >> $(1)
endef
+
+# 1: package name
+define GetABISuffix
+$(if $(ABIV_$(1)),$(ABIV_$(1)),$(call FormatABISuffix,$(1),$(foreach v,$(wildcard $(STAGING_DIR)/pkginfo/$(1).version),$(shell cat $(v)))))
+endef
+
+# 1: package name
+# 2: abi version
+define FormatABISuffix
+$(if $(filter-out kmod-%,$(1)),$(if $(2),$(if $(filter %0 %1 %2 %3 %4 %5 %6 %7 %8 %9,$(1)),-)$(2)))
+endef
diff --git a/include/hardened-ld-pie.specs b/include/hardened-ld-pie.specs
new file mode 100644
index 0000000000..7317b19a17
--- /dev/null
+++ b/include/hardened-ld-pie.specs
@@ -0,0 +1,2 @@
+*self_spec:
++ %{no-pie|static|r|shared:;:-pie}
diff --git a/include/hardening.mk b/include/hardening.mk
index c277081c51..6acd862f5c 100644
--- a/include/hardening.mk
+++ b/include/hardening.mk
@@ -1,11 +1,10 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
+# Copyright (C) 2015-2020 OpenWrt.org
PKG_CHECK_FORMAT_SECURITY ?= 1
+PKG_ASLR_PIE ?= 1
+PKG_ASLR_PIE_REGULAR ?= 0
PKG_SSP ?= 1
PKG_FORTIFY_SOURCE ?= 1
PKG_RELRO ?= 1
@@ -15,6 +14,18 @@ ifdef CONFIG_PKG_CHECK_FORMAT_SECURITY
TARGET_CFLAGS += -Wformat -Werror=format-security
endif
endif
+ifdef CONFIG_PKG_ASLR_PIE_ALL
+ ifeq ($(strip $(PKG_ASLR_PIE)),1)
+ TARGET_CFLAGS += $(FPIC)
+ TARGET_LDFLAGS += $(FPIC) -specs=$(INCLUDE_DIR)/hardened-ld-pie.specs
+ endif
+endif
+ifdef CONFIG_PKG_ASLR_PIE_REGULAR
+ ifeq ($(strip $(PKG_ASLR_PIE_REGULAR)),1)
+ TARGET_CFLAGS += $(FPIC)
+ TARGET_LDFLAGS += $(FPIC) -specs=$(INCLUDE_DIR)/hardened-ld-pie.specs
+ endif
+endif
ifdef CONFIG_PKG_CC_STACKPROTECTOR_REGULAR
ifeq ($(strip $(PKG_SSP)),1)
TARGET_CFLAGS += -fstack-protector
diff --git a/include/host-build.mk b/include/host-build.mk
index 113e269b4c..e4a5c48e72 100644
--- a/include/host-build.mk
+++ b/include/host-build.mk
@@ -1,9 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
-# Copyright (C) 2006-2010 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
+# Copyright (C) 2006-2020 OpenWrt.org
include $(INCLUDE_DIR)/download.mk
@@ -24,7 +21,7 @@ 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_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))
@@ -52,6 +49,7 @@ endef
HOST_CONFIGURE_VARS = \
CC="$(HOSTCC)" \
CFLAGS="$(HOST_CFLAGS)" \
+ CXX="$(HOSTCXX)" \
CPPFLAGS="$(HOST_CPPFLAGS)" \
LDFLAGS="$(HOST_LDFLAGS)" \
CONFIG_SHELL="$(SHELL)"
@@ -131,7 +129,6 @@ define Host/Exports/Default
$(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
- $(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
@@ -183,17 +180,19 @@ ifndef DUMP
clean-build: host-clean-build
endif
+ $(DL_DIR)/$(FILE): FORCE
+
$(_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
+ $(call Host/Uninstall)
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),)
diff --git a/include/image-commands.mk b/include/image-commands.mk
index aaece705d2..fa36885038 100644
--- a/include/image-commands.mk
+++ b/include/image-commands.mk
@@ -3,11 +3,138 @@
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)) LEDE Linux-$(LINUX_VERSION))' -d $@ $@.new
+define ModelNameLimit16
+$(shell expr substr "$(word 2, $(subst _, ,$(1)))" 1 16)
+endef
+
+define rootfs_align
+$(patsubst %-256k,0x40000,$(patsubst %-128k,0x20000,$(patsubst %-64k,0x10000,$(patsubst squashfs%,0x4,$(patsubst root.%,%,$(1))))))
+endef
+
+
+define Build/append-dtb
+ cat $(KDIR)/image-$(firstword $(DEVICE_DTS)).dtb >> $@
+endef
+
+define Build/append-dtb-elf
+ $(TARGET_CROSS)objcopy \
+ --set-section-flags=.appended_dtb=alloc,contents \
+ --update-section \
+ .appended_dtb=$(KDIR)/image-$(firstword $(DEVICE_DTS)).dtb $@
+endef
+
+define Build/append-kernel
+ dd if=$(IMAGE_KERNEL) >> $@
+endef
+
+define Build/append-image
+ dd if=$(BIN_DIR)/$(DEVICE_IMG_PREFIX)-$(1) >> $@
+endef
+
+ifdef IB
+define Build/append-image-stage
+ dd if=$(STAGING_DIR_IMAGE)/$(BOARD)$(if $(SUBTARGET),-$(SUBTARGET))-$(DEVICE_NAME)-$(1) >> $@
+endef
+else
+define Build/append-image-stage
+ dd if=$(BIN_DIR)/$(DEVICE_IMG_PREFIX)-$(1) of=$(STAGING_DIR_IMAGE)/$(BOARD)$(if $(SUBTARGET),-$(SUBTARGET))-$(DEVICE_NAME)-$(1)
+ dd if=$(BIN_DIR)/$(DEVICE_IMG_PREFIX)-$(1) >> $@
+endef
+endif
+
+
+compat_version=$(if $(DEVICE_COMPAT_VERSION),$(DEVICE_COMPAT_VERSION),1.0)
+json_quote=$(subst ','\'',$(subst ",\",$(1)))
+#")')
+
+legacy_supported_message=$(SUPPORTED_DEVICES) - Image version mismatch: image $(compat_version), \
+ device 1.0. Please wipe config during upgrade (force required) or reinstall. \
+ $(if $(DEVICE_COMPAT_MESSAGE),Reason: $(DEVICE_COMPAT_MESSAGE),Please check documentation ...)
+
+metadata_devices=$(if $(1),$(subst "$(space)","$(comma)",$(strip $(foreach v,$(1),"$(call json_quote,$(v))"))))
+metadata_json = \
+ '{ $(if $(IMAGE_METADATA),$(IMAGE_METADATA)$(comma)) \
+ "metadata_version": "1.1", \
+ "compat_version": "$(call json_quote,$(compat_version))", \
+ $(if $(DEVICE_COMPAT_MESSAGE),"compat_message": "$(call json_quote,$(DEVICE_COMPAT_MESSAGE))"$(comma)) \
+ $(if $(filter-out 1.0,$(compat_version)),"new_supported_devices": \
+ [$(call metadata_devices,$(SUPPORTED_DEVICES))]$(comma) \
+ "supported_devices": ["$(call json_quote,$(legacy_supported_message))"]$(comma)) \
+ $(if $(filter 1.0,$(compat_version)),"supported_devices":[$(call metadata_devices,$(SUPPORTED_DEVICES))]$(comma)) \
+ "version": { \
+ "dist": "$(call json_quote,$(VERSION_DIST))", \
+ "version": "$(call json_quote,$(VERSION_NUMBER))", \
+ "revision": "$(call json_quote,$(REVISION))", \
+ "target": "$(call json_quote,$(TARGETID))", \
+ "board": "$(call json_quote,$(if $(BOARD_NAME),$(BOARD_NAME),$(DEVICE_NAME)))" \
+ } \
+ }'
+
+define Build/append-metadata
+ $(if $(SUPPORTED_DEVICES),-echo $(call metadata_json) | 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/append-rootfs
+ dd if=$(IMAGE_ROOTFS) >> $@
+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
+
+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
+
+# append a fake/empty uImage header, to fool bootloaders rootfs integrity check
+# for example
+define Build/append-uImage-fakehdr
+ $(eval type=$(word 1,$(1)))
+ $(eval magic=$(word 2,$(1)))
+ touch $@.fakehdr
+ $(STAGING_DIR_HOST)/bin/mkimage \
+ -A $(LINUX_KARCH) -O linux -T $(type) -C none \
+ -n '$(VERSION_DIST) fake $(type)' \
+ $(if $(magic),-M $(magic)) \
+ -d $@.fakehdr \
+ -s \
+ $@.fakehdr
+ cat $@.fakehdr >> $@
+endef
+
+define Build/buffalo-dhp-image
+ $(STAGING_DIR_HOST)/bin/mkdhpimg $@ $@.new
mv $@.new $@
endef
@@ -39,108 +166,94 @@ define Build/buffalo-tag-dhp
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 $@
+define Build/check-size
+ @imagesize="$$(stat -c%s $@)"; \
+ limitsize="$$(($(subst k,* 1024,$(subst m, * 1024k,$(if $(1),$(1),$(IMAGE_SIZE))))))"; \
+ [ $$limitsize -ge $$imagesize ] || { \
+ echo "WARNING: Image file $@ is too big: $$imagesize > $$limitsize" >&2; \
+ rm -f $@; \
+ }
endef
-define Build/netgear-chk
- $(STAGING_DIR_HOST)/bin/mkchkimg \
- -o $@.new \
- -k $@ \
- -b $(NETGEAR_BOARD_ID) \
- $(if $(NETGEAR_REGION),-r $(NETGEAR_REGION),)
+define Build/elecom-product-header
+ $(eval product=$(word 1,$(1)))
+ $(eval fw=$(if $(word 2,$(1)),$(word 2,$(1)),$@))
+
+ ( \
+ echo -n -e "ELECOM\x00\x00$(product)" | dd bs=40 count=1 conv=sync; \
+ echo -n "0.00" | dd bs=16 count=1 conv=sync; \
+ dd if=$(fw); \
+ ) > $(fw).new
+ mv $(fw).new $(fw)
+endef
+
+define Build/elx-header
+ $(eval hw_id=$(word 1,$(1)))
+ $(eval xor_pattern=$(word 2,$(1)))
+ ( \
+ echo -ne "\x00\x00\x00\x00\x00\x00\x00\x03" | \
+ dd bs=42 count=1 conv=sync; \
+ hw_id="$(hw_id)"; \
+ echo -ne "\x$${hw_id:0:2}\x$${hw_id:2:2}\x$${hw_id:4:2}\x$${hw_id:6:2}" | \
+ dd bs=20 count=1 conv=sync; \
+ echo -ne "$$(printf '%08x' $$(stat -c%s $@) | fold -s2 | xargs -I {} echo \\x{} | tr -d '\n')" | \
+ dd bs=8 count=1 conv=sync; \
+ echo -ne "$$($(MKHASH) md5 $@ | fold -s2 | xargs -I {} echo \\x{} | tr -d '\n')" | \
+ dd bs=58 count=1 conv=sync; \
+ ) > $(KDIR)/tmp/$(DEVICE_NAME).header
+ $(call Build/xor-image,-p $(xor_pattern) -x)
+ cat $(KDIR)/tmp/$(DEVICE_NAME).header $@ > $@.new
mv $@.new $@
+ rm -rf $(KDIR)/tmp/$(DEVICE_NAME).header
endef
-define Build/netgear-dni
- $(STAGING_DIR_HOST)/bin/mkdniimg \
- -B $(NETGEAR_BOARD_ID) -v LEDE.$(REVISION) \
- $(if $(NETGEAR_HW_ID),-H $(NETGEAR_HW_ID)) \
- -r "$(1)" \
- -i $@ -o $@.new
+define Build/eva-image
+ $(STAGING_DIR_HOST)/bin/lzma2eva $(KERNEL_LOADADDR) $(KERNEL_LOADADDR) $@ $@.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
-
-# append a fake/empty rootfs uImage header, to fool the bootloaders
-# rootfs integrity check
-define Build/append-uImage-fakeroot-hdr
- rm -f $@.fakeroot
- $(STAGING_DIR_HOST)/bin/mkimage \
- -A $(LINUX_KARCH) -O linux -T filesystem -C none \
- -n '$(call toupper,$(LINUX_KARCH)) LEDE fakeroot' \
- -s \
- $@.fakeroot
- cat $@.fakeroot >> $@
-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
- $(call Image/BuildDTB,$(if $(DEVICE_DTS_DIR),$(DEVICE_DTS_DIR),$(DTS_DIR))/$(DEVICE_DTS).dts,$@.dtb)
- cat $@.dtb >> $@
-endef
-
-define Build/install-dtb
- $(foreach dts,$(DEVICE_DTS), \
- $(CP) \
- $(DTS_DIR)/$(dts).dtb \
- $(BIN_DIR)/$(IMG_PREFIX)-$(dts).dtb; \
- )
-endef
-
-define Build/install-zImage
- $(CP) $(KDIR)/zImage \
- $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE_SANITIZED)-zImage
+define Build/initrd_compression
+ $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_BZIP2),.bzip2) \
+ $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_GZIP),.gzip) \
+ $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZMA),.lzma) \
+ $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_XZ),.xz) \
+ $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_ZSTD),.zstd)
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)) \
+ -C $(word 1,$(1)) $(if $(word 2,$(1)),\
+ $(if $(DEVICE_DTS_OVERLAY),-d $(KERNEL_BUILD_DIR)/image-$$(basename $(word 2,$(1))),\
+ -d $(word 2,$(1)))) \
+ $(if $(findstring with-rootfs,$(word 3,$(1))),-r $(IMAGE_ROOTFS)) \
+ $(if $(findstring with-initrd,$(word 3,$(1))), \
+ $(if $(CONFIG_TARGET_ROOTFS_INITRAMFS_SEPARATE), \
+ -i $(KERNEL_BUILD_DIR)/initrd.cpio$(strip $(call Build/initrd_compression)))) \
-a $(KERNEL_LOADADDR) -e $(if $(KERNEL_ENTRY),$(KERNEL_ENTRY),$(KERNEL_LOADADDR)) \
+ $(if $(DEVICE_FDT_NUM),-n $(DEVICE_FDT_NUM)) \
+ $(if $(DEVICE_DTS_OVERLAY),$(foreach dtso,$(DEVICE_DTS_OVERLAY), -O $(dtso):$(KERNEL_BUILD_DIR)/image-$(dtso).dtb)) \
+ -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
+ PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage $(if $(findstring external,$(word 3,$(1))),\
+ -E -B 0x1000 $(if $(findstring static,$(word 3,$(1))),-p 0x1000)) -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
+define Build/gzip
+ gzip -f -9n -c $@ $(1) > $@.new
@mv $@.new $@
endef
-define Build/gzip
- gzip -9n -c $@ $(1) > $@.new
- @mv $@.new $@
+define Build/install-dtb
+ $(call locked, \
+ $(foreach dts,$(DEVICE_DTS), \
+ $(CP) \
+ $(DTS_DIR)/$(dts).dtb \
+ $(BIN_DIR)/$(IMG_PREFIX)-$(dts).dtb; \
+ ), \
+ install-dtb-$(IMG_PREFIX) \
+ )
endef
define Build/jffs2
@@ -158,50 +271,68 @@ define Build/jffs2
@mv $@.new $@
endef
+define Build/kernel2minor
+ $(eval temp_file := $(shell mktemp))
+ cp $@ $(temp_file)
+ kernel2minor -k $(temp_file) -r $(temp_file).new $(1)
+ mv $(temp_file).new $@
+ rm -f $(temp_file)
+endef
+
define Build/kernel-bin
rm -f $@
cp $< $@
endef
-define Build/patch-cmdline
- $(STAGING_DIR_HOST)/bin/patch-cmdline $@ '$(CMDLINE)'
+define Build/linksys-image
+ $(TOPDIR)/scripts/linksys-image.sh \
+ "$(call param_get_default,type,$(1),$(DEVICE_NAME))" \
+ $@ $@.new
+ mv $@.new $@
endef
-define Build/append-kernel
- dd if=$(IMAGE_KERNEL) >> $@
+define Build/lzma
+ $(call Build/lzma-no-dict,-lc1 -lp2 -pb2 $(1))
endef
-define Build/append-rootfs
- dd if=$(IMAGE_ROOTFS) >> $@
+define Build/lzma-no-dict
+ $(STAGING_DIR_HOST)/bin/lzma e $@ $(1) $@.new
+ @mv $@.new $@
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
+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/pad-to
- dd if=$@ of=$@.new bs=$(1) conv=sync
+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/pad-extra
- dd if=/dev/zero bs=$(1) count=1 >> $@
+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/pad-rootfs
- $(STAGING_DIR_HOST)/bin/padjffs2 $@ $(1) \
- $(if $(BLOCKSIZE),$(BLOCKSIZE:%k=%),4 8 16 64 128 256)
+define Build/pad-extra
+ dd if=/dev/zero bs=$(1) count=1 >> $@
endef
define Build/pad-offset
@@ -215,21 +346,61 @@ define Build/pad-offset
mv $@.new $@
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 $@; \
- }
+define Build/pad-rootfs
+ $(STAGING_DIR_HOST)/bin/padjffs2 $@ $(1) \
+ $(if $(BLOCKSIZE),$(BLOCKSIZE:%k=%),4 8 16 64 128 256)
+endef
+
+define Build/pad-to
+ $(call Image/pad-to,$@,$(1))
+endef
+
+define Build/patch-cmdline
+ $(STAGING_DIR_HOST)/bin/patch-cmdline $@ '$(CMDLINE)'
+endef
+
+# Convert a raw image into a $1 type image.
+# E.g. | qemu-image vdi
+define Build/qemu-image
+ if command -v qemu-img; then \
+ qemu-img convert -f raw -O $1 $@ $@.new; \
+ mv $@.new $@; \
+ else \
+ echo "WARNING: Install qemu-img to create VDI/VMDK images" >&2; exit 1; \
+ fi
+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/combined-image
- -sh $(TOPDIR)/scripts/combined-image.sh \
- "$(IMAGE_KERNEL)" \
- "$@" \
- "$@.new"
+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/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/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)) \
@@ -238,6 +409,18 @@ define Build/sysupgrade-tar
$@
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/tplink-v1-header
$(STAGING_DIR_HOST)/bin/mktplinkfw \
-c -H $(TPLINK_HWID) -W $(TPLINK_HWREV) -L $(KERNEL_LOADADDR) \
@@ -247,6 +430,24 @@ define Build/tplink-v1-header
@mv $@.new $@
endef
+# combine kernel and rootfs into one image
+# mktplinkfw <type> <optional extra arguments to mktplinkfw binary>
+# <type> is "sysupgrade" or "factory"
+#
+# -a align the rootfs start on an <align> bytes boundary
+# -j add jffs2 end-of-filesystem markers
+# -s strip padding from end of the image
+# -X reserve <size> bytes in the firmware image (hexval prefixed with 0x)
+define Build/tplink-v1-image
+ -$(STAGING_DIR_HOST)/bin/mktplinkfw \
+ -H $(TPLINK_HWID) -W $(TPLINK_HWREV) -F $(TPLINK_FLASHLAYOUT) \
+ -N "$(VERSION_DIST)" -V $(REVISION) -m $(TPLINK_HEADER_VERSION) \
+ -k $(IMAGE_KERNEL) -r $(IMAGE_ROOTFS) -o $@.new -j -X 0x40000 \
+ -a $(call rootfs_align,$(FILESYSTEM)) \
+ $(wordlist 2,$(words $(1)),$(1)) \
+ $(if $(findstring sysupgrade,$(word 1,$(1))),-s) && mv $@.new $@ || rm -f $@
+endef
+
define Build/tplink-v2-header
$(STAGING_DIR_HOST)/bin/mktplinkfw2 \
-c -H $(TPLINK_HWID) -W $(TPLINK_HWREV) -L $(KERNEL_LOADADDR) \
@@ -267,25 +468,45 @@ define Build/tplink-v2-image
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/uImage
+ mkimage \
+ -A $(LINUX_KARCH) \
+ -O linux \
+ -T kernel \
+ -C $(word 1,$(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))' \
+ $(if $(UIMAGE_MAGIC),-M $(UIMAGE_MAGIC)) \
+ $(wordlist 2,$(words $(1)),$(1)) \
+ -d $@ $@.new
+ mv $@.new $@
+endef
-define Build/append-metadata
- $(if $(SUPPORTED_DEVICES),echo $(call metadata_json,$(SUPPORTED_DEVICES)) | fwtool -I - $@)
+define Build/xor-image
+ $(STAGING_DIR_HOST)/bin/xorimage -i $@ -o $@.xor $(1)
+ mv $@.xor $@
endef
-define Build/kernel2minor
- kernel2minor -k $@ -r $@.new $(1)
- mv $@.new $@
+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/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
diff --git a/include/image-legacy.mk b/include/image-legacy.mk
deleted file mode 100644
index 1ccaec09b0..0000000000
--- a/include/image-legacy.mk
+++ /dev/null
@@ -1,93 +0,0 @@
-ifneq ($(CONFIG_TARGET_ROOTFS_UBIFS),)
- define Image/mkfs/ubifs/generate
- $(CP) ./ubinize$(1).cfg $(KDIR)
- ( cd $(KDIR); \
- $(STAGING_DIR_HOST)/bin/ubinize \
- $(if $($(PROFILE)_UBI_OPTS),$($(PROFILE)_UBI_OPTS),$(shell echo $(UBI_OPTS))) \
- -o $(KDIR)/root$(1).ubi \
- ubinize$(1).cfg \
- )
- endef
-
- define Image/mkfs/ubifs/legacy
-
- $(if $($(PROFILE)_UBIFS_OPTS)$(UBIFS_OPTS),
- $(STAGING_DIR_HOST)/bin/mkfs.ubifs \
- $(if $($(PROFILE)_UBIFS_OPTS),$($(PROFILE)_UBIFS_OPTS),$(UBIFS_OPTS)) \
- $(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 $(KDIR)/root.ubifs \
- -d $(TARGET_DIR)
- )
- $(call Image/Build,ubifs)
-
- $(if $($(PROFILE)_UBI_OPTS)$(UBI_OPTS),
- $(if $(wildcard ./ubinize.cfg),$(call Image/mkfs/ubifs/generate,))
- $(if $(wildcard ./ubinize-overlay.cfg),$(call Image/mkfs/ubifs/generate,-overlay))
- )
- $(if $(wildcard ./ubinize.cfg),$(call Image/Build,ubi))
- endef
-endif
-
-LegacyDevice/Dump = $(Device/Dump)
-
-define LegacyDevice/Check
- $(Device/Check/Common)
- _TARGET_PREPARE := $$(if $$(_PROFILE_SET),legacy-images-prepare,prepare-disabled)
- _TARGET := $$(if $$(_PROFILE_SET),legacy-images,install-disabled)
- $$(if $$(_PROFILE_SET),install: legacy-images-make)
- ifndef IB
- $$(if $$(_PROFILE_SET),kernel_prepare: legacy-images-prepare-make)
- endif
-endef
-
-ifdef TARGET_PER_DEVICE_ROOTFS
- define Image/Build/Profile/Filesystem
- cp $(KDIR)/root.$(2)+pkg=$(3) $(KDIR)/root.$(2)
- $(call Image/Build/$(2),$(2))
- $(call Image/Build/Profile,$(1),$(2))
- endef
-else
- Image/Build/Profile/Filesystem = $(Image/Build/Profile)
-endif
-
-define LegacyDevice/Build
- $$(_TARGET): legacy-image-$(1)
- $$(_TARGET_PREPARE): legacy-image-prepare-$(1)
- .PHONY: legacy-image-prepare-$(1) legacy-image-$(1)
-
- legacy-image-prepare-$(1):
- $$(call Image/Prepare/Profile,$(1))
-
- ifndef IB
- ifdef CONFIG_TARGET_PER_DEVICE_ROOTFS
- ROOTFS/$(1) := $(foreach fs,$(TARGET_FILESYSTEMS), \
- $(KDIR)/root.$(fs)$$(strip $(if $(CONFIG_TARGET_PER_DEVICE_ROOTFS),+pkg=$$(ROOTFS_ID/$(1)))) \
- )
-
- $$(ROOTFS/$(1)): target-dir-$$(ROOTFS_ID/$(1))
- legacy-images-make: $$(if $$(_PROFILE_SET),$$(ROOTFS/$(1)))
- endif
- endif
-
- legacy-image-$(1):
- $$(call Image/BuildKernel/Profile,$(1))
- $(foreach fs,$(TARGET_FILESYSTEMS),
- $$(call Image/Build/Profile/Filesystem,$(1),$(fs),$$(ROOTFS_ID/$(1)))
- )
-
-endef
-
-define LegacyDevice
- $(call Device/InitProfile,$(1))
- $(call Device/Default,$(1))
- $(call LegacyDevice/Default,$(1))
- $(call LegacyDevice/$(1),$(1))
- $(call LegacyDevice/Check,$(1))
- $(call LegacyDevice/$(if $(DUMP),Dump,Build),$(1))
-
-endef
diff --git a/include/image.mk b/include/image.mk
index fc6bf06e96..a7473abe68 100644
--- a/include/image.mk
+++ b/include/image.mk
@@ -1,9 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
-# Copyright (C) 2006-2010 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
+# Copyright (C) 2006-2020 OpenWrt.org
override TARGET_BUILD=
include $(INCLUDE_DIR)/prereq.mk
@@ -17,11 +14,8 @@ ifndef IB
endif
endif
-include $(INCLUDE_DIR)/image-legacy.mk
-
-ifdef TARGET_PER_DEVICE_ROOTFS
- include $(INCLUDE_DIR)/rootfs.mk
-endif
+include $(INCLUDE_DIR)/feeds.mk
+include $(INCLUDE_DIR)/rootfs.mk
override MAKE:=$(_SINGLE)$(SUBMAKE)
override NO_TRACE_MAKE:=$(_SINGLE)$(NO_TRACE_MAKE)
@@ -32,7 +26,7 @@ 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_packages_id = $(shell echo $(sort $(1)) | $(MKHASH) md5 | cut -b1-8)
mkfs_target_dir = $(if $(call param_get,pkg,$(1)),$(KDIR)/target-dir-$(call param_get,pkg,$(1)),$(TARGET_DIR))
KDIR=$(KERNEL_BUILD_DIR)
@@ -44,6 +38,10 @@ IMG_PREFIX_VERNUM:=$(if $(CONFIG_VERSION_FILENAMES),$(call sanitize,$(VERSION_NU
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))
+IMG_ROOTFS:=$(IMG_PREFIX)-rootfs
+IMG_COMBINED:=$(IMG_PREFIX)-combined
+IMG_PART_SIGNATURE:=$(shell echo $(SOURCE_DATE_EPOCH)$(LINUX_VERMAGIC) | $(MKHASH) md5 | cut -b1-8)
+IMG_PART_DISKGUID:=$(shell echo $(SOURCE_DATE_EPOCH)$(LINUX_VERMAGIC) | $(MKHASH) md5 | sed -E 's/(.{8})(.{4})(.{4})(.{4})(.{10})../\1-\2-\3-\4-\500/')
MKFS_DEVTABLE_OPT := -D $(INCLUDE_DIR)/device_table.txt
@@ -92,7 +90,6 @@ 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)))
@@ -106,7 +103,7 @@ define add_jffs2_mark
echo -ne '\xde\xad\xc0\xde' >> $(1)
endef
-PROFILE_SANITIZED := $(call sanitize,$(PROFILE))
+PROFILE_SANITIZED := $(call tolower,$(subst DEVICE_,,$(subst $(space),-,$(PROFILE))))
define split_args
$(foreach data, \
@@ -136,12 +133,13 @@ endef
define Image/BuildKernel/MkuImage
mkimage -A $(ARCH) -O linux -T kernel -C $(1) -a $(2) -e $(3) \
- -n '$(call toupper,$(ARCH)) LEDE Linux-$(LINUX_VERSION)' -d $(4) $(5)
+ -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
@@ -153,6 +151,32 @@ ifdef CONFIG_TARGET_IMAGES_GZIP
endef
endif
+
+# Disable noisy checks by default as in upstream
+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 \
+ -Wno-avoid_unnecessary_addr_size \
+ -Wno-alias_paths \
+ -Wno-graph_child_address \
+ -Wno-graph_port \
+ -Wno-unique_unit_address
+
+define Image/pad-to
+ dd if=$(1) of=$(1).new bs=$(2) conv=sync
+ mv $(1).new $(1)
+endef
+
+ROOTFS_PARTSIZE=$(shell echo $$(($(CONFIG_TARGET_ROOTFS_PARTSIZE)*1024*1024)))
+
+define Image/pad-root-squashfs
+ $(call Image/pad-to,$(KDIR)/root.squashfs,$(if $(1),$(1),$(ROOTFS_PARTSIZE)))
+endef
+
# $(1) source dts file
# $(2) target dtb file
# $(3) extra CPP flags
@@ -165,7 +189,8 @@ define Image/BuildDTB
-undef -D__DTS__ $(3) \
-o $(2).tmp $(1)
$(LINUX_DIR)/scripts/dtc/dtc -O dtb \
- -i$(dir $(1)) $(4) \
+ -i$(dir $(1)) $(DTC_FLAGS) $(4) \
+ $(if $(CONFIG_HAS_DT_OVERLAY_SUPPORT),-@) \
-o $(2) $(2).tmp
$(RM) $(2).tmp
endef
@@ -200,41 +225,28 @@ 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
+define Image/mkfs/squashfs-common
$(STAGING_DIR_HOST)/bin/mksquashfs4 $(call mkfs_target_dir,$(1)) $@ \
-nopad -noappend -root-owned \
-comp $(SQUASHFSCOMP) $(SQUASHFSOPT) \
- -processors 1 \
- $(if $(SOURCE_DATE_EPOCH),-fixed-time $(SOURCE_DATE_EPOCH))
-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
+ -processors 1
+endef
+ifeq ($(CONFIG_TARGET_ROOTFS_SECURITY_LABELS),y)
+define Image/mkfs/squashfs
+ echo ". $(call mkfs_target_dir,$(1))/etc/selinux/config" > $@.fakeroot-script
+ echo "$(STAGING_DIR_HOST)/bin/setfiles -r" \
+ "$(call mkfs_target_dir,$(1))" \
+ "$(call mkfs_target_dir,$(1))/etc/selinux/\$${SELINUXTYPE}/contexts/files/file_contexts " \
+ "$(call mkfs_target_dir,$(1))" >> $@.fakeroot-script
+ echo "$(Image/mkfs/squashfs-common)" >> $@.fakeroot-script
+ chmod +x $@.fakeroot-script
+ $(FAKEROOT) "$@.fakeroot-script"
+endef
+else
+define Image/mkfs/squashfs
+ $(call Image/mkfs/squashfs-common,$(1))
+endef
endif
define Image/mkfs/ubifs
@@ -249,11 +261,9 @@ define Image/mkfs/ubifs
-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) \
+ $(STAGING_DIR_HOST)/bin/make_ext4fs -L rootfs \
+ -l $(ROOTFS_PARTSIZE) -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)) \
@@ -261,16 +271,30 @@ define Image/mkfs/ext4
endef
define Image/Manifest
- $(STAGING_DIR_HOST)/bin/opkg \
- --offline-root $(TARGET_DIR) \
- --add-arch all:100 \
- --add-arch $(if $(ARCH_PACKAGES),$(ARCH_PACKAGES),$(BOARD)):200 list-installed > \
+ $(call opkg,$(TARGET_DIR_ORIG)) list-installed > \
$(BIN_DIR)/$(IMG_PREFIX)$(if $(PROFILE_SANITIZED),-$(PROFILE_SANITIZED)).manifest
endef
+define Image/gzip-ext4-padded-squashfs
+
+ define Image/Build/squashfs
+ $(call Image/pad-root-squashfs)
+ endef
+
+ ifneq ($(CONFIG_TARGET_IMAGES_GZIP),)
+ define Image/Build/gzip/ext4
+ $(call Image/Build/gzip,ext4)
+ endef
+ define Image/Build/gzip/squashfs
+ $(call Image/Build/gzip,squashfs)
+ endef
+ endif
+
+endef
+
ifdef CONFIG_TARGET_ROOTFS_TARGZ
define Image/Build/targz
- $(TAR) -cp --numeric-owner --owner=0 --group=0 --sort=name \
+ $(TAR) -cp --numeric-owner --owner=0 --group=0 --mode=a-s --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
@@ -278,13 +302,13 @@ 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 )
+ ( cd $(TARGET_DIR); find . | $(STAGING_DIR_HOST)/bin/cpio -o -H newc -R 0:0 | gzip -9n >$(BIN_DIR)/$(IMG_ROOTFS).cpio.gz )
endef
endif
mkfs_packages = $(filter-out @%,$(PACKAGES_$(call param_get,pkg,pkg=$(target_params))))
-mkfs_packages_add = $(filter-out -%,$(mkfs_packages))
-mkfs_packages_remove = $(patsubst -%,%,$(filter -%,$(mkfs_packages)))
+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 = \
@@ -303,16 +327,31 @@ target-dir-%: FORCE
$(opkg_target) update && \
$(opkg_target) install \
$(call opkg_package_files,$(mkfs_packages_add)))
- $(call prepare_rootfs,$(mkfs_cur_target_dir))
- -mv $(mkfs_cur_target_dir).opkg $(mkfs_cur_target_dir)/etc/opkg
- rm -f $(mkfs_cur_target_dir).conf
+ -$(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_TITLE = $$(DEVICE_VENDOR) $$(DEVICE_MODEL)$$(if $$(DEVICE_VARIANT), $$(DEVICE_VARIANT))
+ DEVICE_ALT0_TITLE = $$(DEVICE_ALT0_VENDOR) $$(DEVICE_ALT0_MODEL)$$(if $$(DEVICE_ALT0_VARIANT), $$(DEVICE_ALT0_VARIANT))
+ DEVICE_ALT1_TITLE = $$(DEVICE_ALT1_VENDOR) $$(DEVICE_ALT1_MODEL)$$(if $$(DEVICE_ALT1_VARIANT), $$(DEVICE_ALT1_VARIANT))
+ DEVICE_ALT2_TITLE = $$(DEVICE_ALT2_VENDOR) $$(DEVICE_ALT2_MODEL)$$(if $$(DEVICE_ALT2_VARIANT), $$(DEVICE_ALT2_VARIANT))
+ DEVICE_VENDOR :=
+ DEVICE_MODEL :=
+ DEVICE_VARIANT :=
+ DEVICE_ALT0_VENDOR :=
+ DEVICE_ALT0_MODEL :=
+ DEVICE_ALT0_VARIANT :=
+ DEVICE_ALT1_VENDOR :=
+ DEVICE_ALT1_MODEL :=
+ DEVICE_ALT1_VARIANT :=
+ DEVICE_ALT2_VENDOR :=
+ DEVICE_ALT2_MODEL :=
+ DEVICE_ALT2_VARIANT :=
DEVICE_PACKAGES :=
DEVICE_DESCRIPTION = Build firmware images for $$(DEVICE_TITLE)
endef
@@ -321,17 +360,18 @@ define Device/Init
DEVICE_NAME := $(1)
KERNEL:=
KERNEL_INITRAMFS = $$(KERNEL)
- KERNEL_SIZE:=
CMDLINE:=
IMAGES :=
- IMAGE_PREFIX := $(IMG_PREFIX)-$(1)
- IMAGE_NAME = $$(IMAGE_PREFIX)-$$(1)-$$(2)
- KERNEL_PREFIX = $$(IMAGE_PREFIX)
+ ARTIFACTS :=
+ DEVICE_IMG_PREFIX := $(IMG_PREFIX)-$(1)
+ DEVICE_IMG_NAME = $$(DEVICE_IMG_PREFIX)-$$(1)-$$(2)
+ IMAGE_SIZE :=
+ KERNEL_PREFIX = $$(DEVICE_IMG_PREFIX)
KERNEL_SUFFIX := -kernel.bin
KERNEL_INITRAMFS_SUFFIX = $$(KERNEL_SUFFIX)
KERNEL_IMAGE = $$(KERNEL_PREFIX)$$(KERNEL_SUFFIX)
- KERNEL_INITRAMFS_PREFIX = $$(IMAGE_PREFIX)-initramfs
+ KERNEL_INITRAMFS_PREFIX = $$(DEVICE_IMG_PREFIX)-initramfs
KERNEL_INITRAMFS_IMAGE = $$(KERNEL_INITRAMFS_PREFIX)$$(KERNEL_INITRAMFS_SUFFIX)
KERNEL_INITRAMFS_NAME = $$(KERNEL_NAME)-initramfs
KERNEL_INSTALL :=
@@ -352,23 +392,41 @@ define Device/Init
FS_OPTIONS/ubifs = $$(MKUBIFS_OPTS)
DEVICE_DTS :=
+ DEVICE_DTS_CONFIG :=
DEVICE_DTS_DIR :=
+ DEVICE_DTS_OVERLAY :=
+ DEVICE_FDT_NUM :=
+ SOC :=
BOARD_NAME :=
+ UIMAGE_MAGIC :=
UIMAGE_NAME :=
- SUPPORTED_DEVICES :=
+ DEVICE_COMPAT_VERSION := 1.0
+ DEVICE_COMPAT_MESSAGE :=
+ SUPPORTED_DEVICES := $(subst _,$(comma),$(1))
IMAGE_METADATA :=
FILESYSTEMS := $(TARGET_FILESYSTEMS)
+
+ UBOOT_PATH := $(STAGING_DIR_IMAGE)/uboot-$(1)
+
+ BROKEN :=
+ DEFAULT :=
endef
DEFAULT_DEVICE_VARS := \
- DEVICE_NAME KERNEL KERNEL_INITRAMFS KERNEL_SIZE KERNEL_INITRAMFS_IMAGE \
- KERNEL_LOADADDR DEVICE_DTS DEVICE_DTS_DIR BOARD_NAME CMDLINE \
- UBOOTENV_IN_UBI KERNEL_IN_UBI \
- BLOCKSIZE PAGESIZE SUBPAGESIZE VID_HDR_OFFSET \
- UBINIZE_OPTS UIMAGE_NAME UBINIZE_PARTS \
- SUPPORTED_DEVICES IMAGE_METADATA
+ 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 DEVICE_DTS_OVERLAY DEVICE_FDT_NUM \
+ DEVICE_IMG_PREFIX SOC BOARD_NAME UIMAGE_MAGIC UIMAGE_NAME \
+ SUPPORTED_DEVICES IMAGE_METADATA KERNEL_ENTRY KERNEL_LOADADDR \
+ UBOOT_PATH IMAGE_SIZE \
+ DEVICE_PACKAGES DEVICE_COMPAT_VERSION DEVICE_COMPAT_MESSAGE \
+ DEVICE_VENDOR DEVICE_MODEL DEVICE_VARIANT \
+ DEVICE_ALT0_VENDOR DEVICE_ALT0_MODEL DEVICE_ALT0_VARIANT \
+ DEVICE_ALT1_VENDOR DEVICE_ALT1_MODEL DEVICE_ALT1_VARIANT \
+ DEVICE_ALT2_VENDOR DEVICE_ALT2_MODEL DEVICE_ALT2_VARIANT
define Device/ExportVar
$(1) : $(2):=$$($(2))
@@ -396,6 +454,7 @@ 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)))
@@ -415,15 +474,49 @@ 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))
+ $$(_TARGET): $$(if $$(KERNEL_INITRAMFS),$(BIN_DIR)/$$(KERNEL_INITRAMFS_IMAGE) \
+ $$(if $$(CONFIG_JSON_OVERVIEW_IMAGE_INFO), $(BUILD_DIR)/json_info_files/$$(KERNEL_INITRAMFS_IMAGE).json,))
$(KDIR)/$$(KERNEL_INITRAMFS_NAME):: image_prepare
+ $(1)-images: $$(if $$(KERNEL_INITRAMFS),$(BIN_DIR)/$$(KERNEL_INITRAMFS_IMAGE))
$(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))
+
+ $(call Device/Export,$(BUILD_DIR)/json_info_files/$$(KERNEL_INITRAMFS_IMAGE).json,$(1))
+
+ $(BUILD_DIR)/json_info_files/$$(KERNEL_INITRAMFS_IMAGE).json: $(BIN_DIR)/$$(KERNEL_INITRAMFS_IMAGE)
+ @mkdir -p $$(shell dirname $$@)
+ DEVICE_ID="$(1)" \
+ BIN_DIR="$(BIN_DIR)" \
+ SOURCE_DATE_EPOCH=$(SOURCE_DATE_EPOCH) \
+ DEVICE_IMG_NAME="$$(notdir $$^)" \
+ IMAGE_TYPE="kernel" \
+ IMAGE_FILESYSTEM="initramfs" \
+ DEVICE_IMG_PREFIX="$$(DEVICE_IMG_PREFIX)" \
+ DEVICE_VENDOR="$$(DEVICE_VENDOR)" \
+ DEVICE_MODEL="$$(DEVICE_MODEL)" \
+ DEVICE_VARIANT="$$(DEVICE_VARIANT)" \
+ DEVICE_ALT0_VENDOR="$$(DEVICE_ALT0_VENDOR)" \
+ DEVICE_ALT0_MODEL="$$(DEVICE_ALT0_MODEL)" \
+ DEVICE_ALT0_VARIANT="$$(DEVICE_ALT0_VARIANT)" \
+ DEVICE_ALT1_VENDOR="$$(DEVICE_ALT1_VENDOR)" \
+ DEVICE_ALT1_MODEL="$$(DEVICE_ALT1_MODEL)" \
+ DEVICE_ALT1_VARIANT="$$(DEVICE_ALT1_VARIANT)" \
+ DEVICE_ALT2_VENDOR="$$(DEVICE_ALT2_VENDOR)" \
+ DEVICE_ALT2_MODEL="$$(DEVICE_ALT2_MODEL)" \
+ DEVICE_ALT2_VARIANT="$$(DEVICE_ALT2_VARIANT)" \
+ DEVICE_TITLE="$$(DEVICE_TITLE)" \
+ DEVICE_PACKAGES="$$(DEVICE_PACKAGES)" \
+ TARGET="$(BOARD)" \
+ SUBTARGET="$(if $(SUBTARGET),$(SUBTARGET),generic)" \
+ VERSION_NUMBER="$(VERSION_NUMBER)" \
+ VERSION_CODE="$(VERSION_CODE)" \
+ SUPPORTED_DEVICES="$$(SUPPORTED_DEVICES)" \
+ $(TOPDIR)/scripts/json_add_image_info.py $$@
endef
endif
@@ -435,7 +528,27 @@ define Device/Build/compile
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) $$(DEVICE_DTS_OVERLAY), \
+ $$(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))
@@ -454,8 +567,12 @@ 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)))
+ $$(_TARGET): $(if $(CONFIG_JSON_OVERVIEW_IMAGE_INFO), \
+ $(BUILD_DIR)/json_info_files/$(call DEVICE_IMG_NAME,$(1),$(2)).json, \
+ $(BIN_DIR)/$(call DEVICE_IMG_NAME,$(1),$(2))$$(GZ_SUFFIX))
+ $(eval $(call Device/Export,$(KDIR)/tmp/$(call DEVICE_IMG_NAME,$(1),$(2)),$(1)))
+ $(3)-images: $(BIN_DIR)/$(call DEVICE_IMG_NAME,$(1),$(2))$$(GZ_SUFFIX)
+
ROOTFS/$(1)/$(3) := \
$(KDIR)/root.$(1)$$(strip \
$$(if $$(FS_OPTIONS/$(1)),+fs=$$(call param_mangle,$$(FS_OPTIONS/$(1)))) \
@@ -465,17 +582,61 @@ define Device/Build/image
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))
+ $(KDIR)/tmp/$(call DEVICE_IMG_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))
+ .IGNORE: $(BIN_DIR)/$(call DEVICE_IMG_NAME,$(1),$(2))
- $(BIN_DIR)/$(call IMAGE_NAME,$(1),$(2)).gz: $(KDIR)/tmp/$(call IMAGE_NAME,$(1),$(2))
+ $(BIN_DIR)/$(call DEVICE_IMG_NAME,$(1),$(2)).gz: $(KDIR)/tmp/$(call DEVICE_IMG_NAME,$(1),$(2))
gzip -c -9n $$^ > $$@
- $(BIN_DIR)/$(call IMAGE_NAME,$(1),$(2)): $(KDIR)/tmp/$(call IMAGE_NAME,$(1),$(2))
+ $(BIN_DIR)/$(call DEVICE_IMG_NAME,$(1),$(2)): $(KDIR)/tmp/$(call DEVICE_IMG_NAME,$(1),$(2))
+ cp $$^ $$@
+
+ $(BUILD_DIR)/json_info_files/$(call DEVICE_IMG_NAME,$(1),$(2)).json: $(BIN_DIR)/$(call DEVICE_IMG_NAME,$(1),$(2))$$(GZ_SUFFIX)
+ @mkdir -p $$(shell dirname $$@)
+ DEVICE_ID="$(DEVICE_NAME)" \
+ BIN_DIR="$(BIN_DIR)" \
+ SOURCE_DATE_EPOCH=$(SOURCE_DATE_EPOCH) \
+ DEVICE_IMG_NAME="$(DEVICE_IMG_NAME)" \
+ IMAGE_TYPE=$(word 1,$(subst ., ,$(2))) \
+ IMAGE_FILESYSTEM="$(1)" \
+ DEVICE_IMG_PREFIX="$(DEVICE_IMG_PREFIX)" \
+ DEVICE_VENDOR="$(DEVICE_VENDOR)" \
+ DEVICE_MODEL="$(DEVICE_MODEL)" \
+ DEVICE_VARIANT="$(DEVICE_VARIANT)" \
+ DEVICE_ALT0_VENDOR="$(DEVICE_ALT0_VENDOR)" \
+ DEVICE_ALT0_MODEL="$(DEVICE_ALT0_MODEL)" \
+ DEVICE_ALT0_VARIANT="$(DEVICE_ALT0_VARIANT)" \
+ DEVICE_ALT1_VENDOR="$(DEVICE_ALT1_VENDOR)" \
+ DEVICE_ALT1_MODEL="$(DEVICE_ALT1_MODEL)" \
+ DEVICE_ALT1_VARIANT="$(DEVICE_ALT1_VARIANT)" \
+ DEVICE_ALT2_VENDOR="$(DEVICE_ALT2_VENDOR)" \
+ DEVICE_ALT2_MODEL="$(DEVICE_ALT2_MODEL)" \
+ DEVICE_ALT2_VARIANT="$(DEVICE_ALT2_VARIANT)" \
+ DEVICE_TITLE="$(DEVICE_TITLE)" \
+ DEVICE_PACKAGES="$(DEVICE_PACKAGES)" \
+ TARGET="$(BOARD)" \
+ SUBTARGET="$(if $(SUBTARGET),$(SUBTARGET),generic)" \
+ VERSION_NUMBER="$(VERSION_NUMBER)" \
+ VERSION_CODE="$(VERSION_CODE)" \
+ SUPPORTED_DEVICES="$(SUPPORTED_DEVICES)" \
+ $(TOPDIR)/scripts/json_add_image_info.py $$@
+
+endef
+
+define Device/Build/artifact
+ $$(_TARGET): $(BIN_DIR)/$(DEVICE_IMG_PREFIX)-$(1)
+ $(eval $(call Device/Export,$(KDIR)/tmp/$(DEVICE_IMG_PREFIX)-$(1)))
+ $(KDIR)/tmp/$(DEVICE_IMG_PREFIX)-$(1): $$(KDIR_KERNEL_IMAGE) $(2)-images
+ @rm -f $$@
+ $$(call concat_cmd,$(ARTIFACT/$(1)))
+
+ .IGNORE: $(BIN_DIR)/$(DEVICE_IMG_PREFIX)-$(1)
+
+ $(BIN_DIR)/$(DEVICE_IMG_PREFIX)-$(1): $(KDIR)/tmp/$(DEVICE_IMG_PREFIX)-$(1)
cp $$^ $$@
endef
@@ -490,19 +651,44 @@ define Device/Build
$$(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),$(1))))
+
endef
define Device/DumpInfo
Target-Profile: DEVICE_$(1)
-Target-Profile-Name: $(DEVICE_TITLE)
+Target-Profile-Name: $(DEVICE_DISPLAY)
Target-Profile-Packages: $(DEVICE_PACKAGES)
+Target-Profile-hasImageMetadata: $(if $(foreach image,$(IMAGES),$(findstring append-metadata,$(IMAGE/$(image)))),1,0)
+Target-Profile-SupportedDevices: $(SUPPORTED_DEVICES)
+$(if $(BROKEN),Target-Profile-Broken: $(BROKEN))
+$(if $(DEFAULT),Target-Profile-Default: $(DEFAULT))
Target-Profile-Description:
$(DEVICE_DESCRIPTION)
+$(if $(strip $(DEVICE_ALT0_TITLE)),Alternative device titles:
+- $(DEVICE_ALT0_TITLE))
+$(if $(strip $(DEVICE_ALT1_TITLE)),- $(DEVICE_ALT1_TITLE))
+$(if $(strip $(DEVICE_ALT2_TITLE)),- $(DEVICE_ALT2_TITLE))
@@
endef
define Device/Dump
+ifneq ($$(strip $$(DEVICE_ALT0_TITLE)),)
+DEVICE_DISPLAY = $$(DEVICE_ALT0_TITLE) ($$(DEVICE_TITLE))
+$$(info $$(call Device/DumpInfo,$(1)))
+endif
+ifneq ($$(strip $$(DEVICE_ALT1_TITLE)),)
+DEVICE_DISPLAY = $$(DEVICE_ALT1_TITLE) ($$(DEVICE_TITLE))
+$$(info $$(call Device/DumpInfo,$(1)))
+endif
+ifneq ($$(strip $$(DEVICE_ALT2_TITLE)),)
+DEVICE_DISPLAY = $$(DEVICE_ALT2_TITLE) ($$(DEVICE_TITLE))
+$$(info $$(call Device/DumpInfo,$(1)))
+endif
+DEVICE_DISPLAY = $$(DEVICE_TITLE)
$$(eval $$(if $$(DEVICE_TITLE),$$(info $$(call Device/DumpInfo,$(1)))))
endef
@@ -528,8 +714,6 @@ define BuildImage
prepare:
compile:
clean:
- legacy-images-prepare:
- legacy-images:
image_prepare:
ifeq ($(IB),)
@@ -542,11 +726,9 @@ define BuildImage
image_prepare: compile
mkdir -p $(BIN_DIR) $(KDIR)/tmp
+ rm -rf $(BUILD_DIR)/json_info_files
$(call Image/Prepare)
- legacy-images-prepare-make: image_prepare
- $(MAKE) legacy-images-prepare
-
else
image_prepare:
mkdir -p $(BIN_DIR) $(KDIR)/tmp
@@ -560,17 +742,12 @@ define BuildImage
$(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
-
install: install-images
$(call Image/Manifest)
diff --git a/include/kernel-build.mk b/include/kernel-build.mk
index 5c58e443df..66a9f64c80 100644
--- a/include/kernel-build.mk
+++ b/include/kernel-build.mk
@@ -1,9 +1,7 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
-# Copyright (C) 2006-2007 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
+# Copyright (C) 2006-2020 OpenWrt.org
+
include $(INCLUDE_DIR)/prereq.mk
include $(INCLUDE_DIR)/depends.mk
@@ -11,7 +9,7 @@ ifneq ($(DUMP),1)
all: compile
endif
-KERNEL_FILE_DEPENDS=$(BACKPORT_PATCH_DIR) $(GENERIC_PATCH_DIR) $(GENERIC_HACK_DIR) $(PATCH_DIR) $(GENERIC_FILES_DIR) $(FILES_DIR)
+KERNEL_FILE_DEPENDS=$(GENERIC_BACKPORT_DIR) $(GENERIC_PATCH_DIR) $(GENERIC_HACK_DIR) $(PATCH_DIR) $(GENERIC_FILES_DIR) $(FILES_DIR)
STAMP_PREPARED=$(LINUX_DIR)/.prepared$(if $(QUILT)$(DUMP),,_$(shell $(call find_md5,$(KERNEL_FILE_DEPENDS),)))
STAMP_CONFIGURED:=$(LINUX_DIR)/.configured
include $(INCLUDE_DIR)/download.mk
@@ -50,14 +48,10 @@ ifneq ($(strip $(CONFIG_KERNEL_GIT_LOCAL_REPOSITORY)),"")
KERNEL_GIT_OPTS+=--reference $(CONFIG_KERNEL_GIT_LOCAL_REPOSITORY)
endif
-ifneq ($(strip $(CONFIG_KERNEL_GIT_BRANCH)),"")
- KERNEL_GIT_OPTS+=--branch $(CONFIG_KERNEL_GIT_BRANCH)
-endif
-
define Download/git-kernel
URL:=$(call qstrip,$(CONFIG_KERNEL_GIT_CLONE_URI))
PROTO:=git
- VERSION:=$(CONFIG_KERNEL_GIT_BRANCH)
+ VERSION:=$(CONFIG_KERNEL_GIT_REF)
FILE:=$(LINUX_SOURCE)
SUBDIR:=linux-$(LINUX_VERSION)
OPTS:=$(KERNEL_GIT_OPTS)
@@ -74,7 +68,7 @@ ifdef CONFIG_COLLECT_KERNEL_DEBUG
$(FIND) $(KERNEL_BUILD_DIR)/debug -type f | $(XARGS) $(KERNEL_CROSS)strip --only-keep-debug
$(TAR) c -C $(KERNEL_BUILD_DIR) debug \
$(if $(SOURCE_DATE_EPOCH),--mtime="@$(SOURCE_DATE_EPOCH)") \
- | bzip2 -c -9 > $(BIN_DIR)/kernel-debug.tar.bz2
+ | zstd -T0 -f -o $(BIN_DIR)/kernel-debug.tar.zst
endef
endif
@@ -109,7 +103,7 @@ define BuildKernel
xargs $(TARGET_CROSS)nm | \
awk '$$$$1 == "U" { print $$$$2 } ' | \
sort -u > $(KERNEL_BUILD_DIR)/mod_symtab.txt
- $(TARGET_CROSS)nm -n $(LINUX_DIR)/vmlinux.o | grep ' [rR] __ksymtab' | sed -e 's,........ [rR] __ksymtab_,,' > $(KERNEL_BUILD_DIR)/kernel_symtab.txt
+ $(TARGET_CROSS)nm -n $(LINUX_DIR)/vmlinux.o | awk '/^[0-9a-f]+ [rR] __ksymtab_/ {print substr($$$$3,11)}' > $(KERNEL_BUILD_DIR)/kernel_symtab.txt
grep -Ff $(KERNEL_BUILD_DIR)/mod_symtab.txt $(KERNEL_BUILD_DIR)/kernel_symtab.txt > $(KERNEL_BUILD_DIR)/sym_include.txt
grep -Fvf $(KERNEL_BUILD_DIR)/mod_symtab.txt $(KERNEL_BUILD_DIR)/kernel_symtab.txt > $(KERNEL_BUILD_DIR)/sym_exclude.txt
( \
@@ -135,10 +129,16 @@ define BuildKernel
$(Kernel/Configure)
touch $$@
+ $(LINUX_DIR)/.modules: export STAGING_PREFIX=$$(STAGING_DIR_HOST)
+ $(LINUX_DIR)/.modules: export PKG_CONFIG_PATH=$$(STAGING_DIR_HOST)/lib/pkgconfig
+ $(LINUX_DIR)/.modules: export PKG_CONFIG_LIBDIR=$$(STAGING_DIR_HOST)/lib/pkgconfig
$(LINUX_DIR)/.modules: $(STAMP_CONFIGURED) $(LINUX_DIR)/.config FORCE
$(Kernel/CompileModules)
touch $$@
+ $(LINUX_DIR)/.image: export STAGING_PREFIX=$$(STAGING_DIR_HOST)
+ $(LINUX_DIR)/.image: export PKG_CONFIG_PATH=$$(STAGING_DIR_HOST)/lib/pkgconfig
+ $(LINUX_DIR)/.image: export PKG_CONFIG_LIBDIR=$$(STAGING_DIR_HOST)/lib/pkgconfig
$(LINUX_DIR)/.image: $(STAMP_CONFIGURED) $(if $(CONFIG_STRIP_KERNEL_EXPORTS),$(KERNEL_BUILD_DIR)/symtab.h) FORCE
$(Kernel/CompileImage)
$(Kernel/CollectDebug)
@@ -155,14 +155,19 @@ define BuildKernel
compile: $(LINUX_DIR)/.modules
$(MAKE) -C image compile TARGET_BUILD=
- oldconfig menuconfig nconfig: $(STAMP_PREPARED) $(STAMP_CHECKED) FORCE
+ oldconfig menuconfig nconfig xconfig: $(STAMP_PREPARED) $(STAMP_CHECKED) FORCE
rm -f $(LINUX_DIR)/.config.prev
rm -f $(STAMP_CONFIGURED)
$(LINUX_RECONF_CMD) > $(LINUX_DIR)/.config
$(_SINGLE)$(KERNEL_MAKE) \
- $(if $(findstring Darwin,$(HOST_OS)),HOST_LOADLIBES="-L$(STAGING_DIR_HOST)/lib -lncurses") \
+ $(if $(findstring Darwin,$(HOST_OS)), \
+ HOST_LOADLIBES="-L$(STAGING_DIR_HOST)/lib -lncurses" \
+ HOSTLDLIBS_mconf="-L$(STAGING_DIR_HOST)/lib -lncurses" \
+ filechk_conf_cfg=" :" \
+ ) \
+ YACC=$(STAGING_DIR_HOST)/bin/bison \
$$@
- $(LINUX_RECONF_DIFF) $(LINUX_DIR)/.config > $(LINUX_RECONFIG_TARGET)
+ $(call LINUX_RECONF_DIFF,$(LINUX_DIR)/.config) > $(LINUX_RECONFIG_TARGET)
install: $(LINUX_DIR)/.image
+$(MAKE) -C image compile install TARGET_BUILD=
diff --git a/include/kernel-defaults.mk b/include/kernel-defaults.mk
index f0618633b2..f2864d6a10 100644
--- a/include/kernel-defaults.mk
+++ b/include/kernel-defaults.mk
@@ -1,12 +1,9 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
-# Copyright (C) 2006-2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
+# Copyright (C) 2006-2020 OpenWrt.org
ifdef CONFIG_STRIP_KERNEL_EXPORTS
- KERNEL_MAKEOPTS += \
+ KERNEL_MAKEOPTS_IMAGE += \
EXTRA_LDSFLAGS="-I$(KERNEL_BUILD_DIR) -include symtab.h"
endif
@@ -21,16 +18,22 @@ export HOST_EXTRACFLAGS=-I$(STAGING_DIR_HOST)/include
# defined in quilt.mk
Kernel/Patch:=$(Kernel/Patch/Default)
+ifneq (,$(findstring .xz,$(LINUX_SOURCE)))
+ LINUX_CAT:=xzcat
+else
+ LINUX_CAT:=gzip -dc
+endif
+
ifeq ($(strip $(CONFIG_EXTERNAL_KERNEL_TREE)),"")
ifeq ($(strip $(CONFIG_KERNEL_GIT_CLONE_URI)),"")
define Kernel/Prepare/Default
- xzcat $(DL_DIR)/$(LINUX_SOURCE) | $(TAR) -C $(KERNEL_BUILD_DIR) $(TAR_OPTIONS)
+ $(LINUX_CAT) $(DL_DIR)/$(LINUX_SOURCE) | $(TAR) -C $(KERNEL_BUILD_DIR) $(TAR_OPTIONS)
$(Kernel/Patch)
$(if $(QUILT),touch $(LINUX_DIR)/.quilt_used)
endef
else
define Kernel/Prepare/Default
- xzcat $(DL_DIR)/$(LINUX_SOURCE) | $(TAR) -C $(KERNEL_BUILD_DIR) $(TAR_OPTIONS)
+ $(LINUX_CAT) $(DL_DIR)/$(LINUX_SOURCE) | $(TAR) -C $(KERNEL_BUILD_DIR) $(TAR_OPTIONS)
endef
endif
else
@@ -40,10 +43,20 @@ else
rmdir $(LINUX_DIR); \
fi
ln -s $(CONFIG_EXTERNAL_KERNEL_TREE) $(LINUX_DIR)
+ if [ -d $(LINUX_DIR)/user_headers ]; then \
+ rm -rf $(LINUX_DIR)/user_headers; \
+ fi
endef
endif
ifeq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y)
+ ifeq ($(CONFIG_TARGET_ROOTFS_INITRAMFS_SEPARATE),y)
+ define Kernel/SetInitramfs/PreConfigure
+ grep -v -e CONFIG_BLK_DEV_INITRD $(LINUX_DIR)/.config.old > $(LINUX_DIR)/.config
+ echo 'CONFIG_BLK_DEV_INITRD=y' >> $(LINUX_DIR)/.config
+ echo 'CONFIG_INITRAMFS_SOURCE=""' >> $(LINUX_DIR)/.config
+ endef
+ else
ifeq ($(strip $(CONFIG_EXTERNAL_CPIO)),"")
define Kernel/SetInitramfs/PreConfigure
grep -v -e INITRAMFS -e CONFIG_RD_ -e CONFIG_BLK_DEV_INITRD $(LINUX_DIR)/.config.old > $(LINUX_DIR)/.config
@@ -56,13 +69,19 @@ ifeq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y)
echo 'CONFIG_INITRAMFS_SOURCE="$(call qstrip,$(CONFIG_EXTERNAL_CPIO))"' >> $(LINUX_DIR)/.config
endef
endif
+endif
define Kernel/SetInitramfs
rm -f $(LINUX_DIR)/.config.prev
mv $(LINUX_DIR)/.config $(LINUX_DIR)/.config.old
$(call Kernel/SetInitramfs/PreConfigure)
+ ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS_SEPARATE),y)
echo 'CONFIG_INITRAMFS_ROOT_UID=$(shell id -u)' >> $(LINUX_DIR)/.config
echo 'CONFIG_INITRAMFS_ROOT_GID=$(shell id -g)' >> $(LINUX_DIR)/.config
+ echo "$(if $(CONFIG_TARGET_INITRAMFS_FORCE),CONFIG_INITRAMFS_FORCE=y,# CONFIG_INITRAMFS_FORCE is not set)" >> $(LINUX_DIR)/.config
+ else
+ echo "# CONFIG_INITRAMFS_FORCE is not set" >> $(LINUX_DIR)/.config
+ endif
echo "$(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_NONE),CONFIG_INITRAMFS_COMPRESSION_NONE=y,# CONFIG_INITRAMFS_COMPRESSION_NONE is not set)" >> $(LINUX_DIR)/.config
echo -e "$(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_GZIP),CONFIG_INITRAMFS_COMPRESSION_GZIP=y\nCONFIG_RD_GZIP=y,# CONFIG_INITRAMFS_COMPRESSION_GZIP is not set\n# CONFIG_RD_GZIP is not set)" >> $(LINUX_DIR)/.config
echo -e "$(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_BZIP2),CONFIG_INITRAMFS_COMPRESSION_BZIP2=y\nCONFIG_RD_BZIP2=y,# CONFIG_INITRAMFS_COMPRESSION_BZIP2 is not set\n# CONFIG_RD_BZIP2 is not set)" >> $(LINUX_DIR)/.config
@@ -70,6 +89,7 @@ ifeq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y)
echo -e "$(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZO),CONFIG_INITRAMFS_COMPRESSION_LZO=y\nCONFIG_RD_LZO=y,# CONFIG_INITRAMFS_COMPRESSION_LZO is not set\n# CONFIG_RD_LZO is not set)" >> $(LINUX_DIR)/.config
echo -e "$(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_XZ),CONFIG_INITRAMFS_COMPRESSION_XZ=y\nCONFIG_RD_XZ=y,# CONFIG_INITRAMFS_COMPRESSION_XZ is not set\n# CONFIG_RD_XZ is not set)" >> $(LINUX_DIR)/.config
echo -e "$(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZ4),CONFIG_INITRAMFS_COMPRESSION_LZ4=y\nCONFIG_RD_LZ4=y,# CONFIG_INITRAMFS_COMPRESSION_LZ4 is not set\n# CONFIG_RD_LZ4 is not set)" >> $(LINUX_DIR)/.config
+ echo -e "$(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_ZSTD),CONFIG_INITRAMFS_COMPRESSION_ZSTD=y\nCONFIG_RD_ZSTD=y,# CONFIG_INITRAMFS_COMPRESSION_ZSTD is not set\n# CONFIG_RD_ZSTD is not set)" >> $(LINUX_DIR)/.config
endef
else
endif
@@ -78,6 +98,7 @@ define Kernel/SetNoInitramfs
mv $(LINUX_DIR)/.config.set $(LINUX_DIR)/.config.old
grep -v INITRAMFS $(LINUX_DIR)/.config.old > $(LINUX_DIR)/.config.set
echo 'CONFIG_INITRAMFS_SOURCE=""' >> $(LINUX_DIR)/.config.set
+ echo '# CONFIG_INITRAMFS_FORCE is not set' >> $(LINUX_DIR)/.config.set
endef
define Kernel/Configure/Default
@@ -97,7 +118,7 @@ define Kernel/Configure/Default
cp $(LINUX_DIR)/.config.set $(LINUX_DIR)/.config.prev; \
}
$(_SINGLE) [ -d $(LINUX_DIR)/user_headers ] || $(KERNEL_MAKE) INSTALL_HDR_PATH=$(LINUX_DIR)/user_headers headers_install
- grep '=[ym]' $(LINUX_DIR)/.config.set | LC_ALL=C sort | mkhash md5 > $(LINUX_DIR)/.vermagic
+ grep '=[ym]' $(LINUX_DIR)/.config.set | LC_ALL=C sort | $(MKHASH) md5 > $(LINUX_DIR)/.vermagic
endef
define Kernel/Configure/Initramfs
@@ -106,7 +127,7 @@ endef
define Kernel/CompileModules/Default
rm -f $(LINUX_DIR)/vmlinux $(LINUX_DIR)/System.map
- +$(KERNEL_MAKE) modules
+ +$(KERNEL_MAKE) $(if $(KERNELNAME),$(KERNELNAME),all) modules
endef
OBJCOPY_STRIP = -R .reginfo -R .notes -R .note -R .comment -R .mdebug -R .note.gnu.build-id
@@ -128,18 +149,38 @@ define Kernel/CopyImage
}
endef
+# Always add "modules" so a proper Module.symvers file is written that
+# also contains symbols from the kernel modules. Without these symbols
+# external packages that depend on exported symbols from kernel modules
+# will fail to build.
define Kernel/CompileImage/Default
rm -f $(TARGET_DIR)/init
- +$(KERNEL_MAKE) $(if $(KERNELNAME),$(KERNELNAME),all) modules
+ +$(KERNEL_MAKE) $(KERNEL_MAKEOPTS_IMAGE) $(if $(KERNELNAME),$(KERNELNAME),all) modules
$(call Kernel/CopyImage)
endef
+# Here as well, always add "modules", see comment above.
ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),)
define Kernel/CompileImage/Initramfs
$(call Kernel/Configure/Initramfs)
$(CP) $(GENERIC_PLATFORM_DIR)/other-files/init $(TARGET_DIR)/init
+ $(if $(SOURCE_DATE_EPOCH),touch -hcd "@$(SOURCE_DATE_EPOCH)" $(TARGET_DIR)/init)
rm -rf $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)/usr/initramfs_data.cpio*
- +$(KERNEL_MAKE) $(if $(KERNELNAME),$(KERNELNAME),all) modules
+ifeq ($(CONFIG_TARGET_ROOTFS_INITRAMFS_SEPARATE),y)
+ifeq ($(CONFIG_EXTERNAL_CPIO),y)
+ $(CP) $(CONFIG_EXTERNAL_CPIO) $(KERNEL_BUILD_DIR)/initrd.cpio
+else
+ ( cd $(TARGET_DIR); find . | $(STAGING_DIR_HOST)/bin/cpio -o -H newc -R 0:0 > $(KERNEL_BUILD_DIR)/initrd.cpio )
+endif
+ $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_BZIP2),bzip2 -9 -c < $(KERNEL_BUILD_DIR)/initrd.cpio > $(KERNEL_BUILD_DIR)/initrd.cpio.bzip2)
+ $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_GZIP),gzip -f -S .gzip -9n $(KERNEL_BUILD_DIR)/initrd.cpio)
+ $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZMA),$(STAGING_DIR_HOST)/bin/lzma e -lc1 -lp2 -pb2 $(KERNEL_BUILD_DIR)/initrd.cpio $(KERNEL_BUILD_DIR)/initrd.cpio.lzma)
+# ? $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZO),)
+ $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_XZ),$(STAGING_DIR_HOST)/bin/xz -9 -fz --check=crc32 $(KERNEL_BUILD_DIR)/initrd.cpio)
+# ? $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZ4),)
+ $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_ZSTD),$(STAGING_DIR_HOST)/bin/zstd -T0 -f -o $(KERNEL_BUILD_DIR)/initrd.cpio.zstd $(KERNEL_BUILD_DIR)/initrd.cpio)
+endif
+ +$(KERNEL_MAKE) $(KERNEL_MAKEOPTS_IMAGE) $(if $(KERNELNAME),$(KERNELNAME),all) modules
$(call Kernel/CopyImage,-initramfs)
endef
else
@@ -152,5 +193,3 @@ define Kernel/Clean/Default
rm -f $(LINUX_KERNEL)
$(_SINGLE)$(MAKE) -C $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION) clean
endef
-
-
diff --git a/include/kernel-version.mk b/include/kernel-version.mk
index 2bddc87109..91e609c427 100644
--- a/include/kernel-version.mk
+++ b/include/kernel-version.mk
@@ -1,18 +1,34 @@
-# Use the default kernel version if the Makefile doesn't override it
+# Use the default kernel version if the Makefile doesn't override it
LINUX_RELEASE?=1
-LINUX_VERSION-3.18 = .71
-LINUX_VERSION-4.4 = .93
-LINUX_VERSION-4.9 = .58
+ifdef CONFIG_TESTING_KERNEL
+ KERNEL_PATCHVER:=$(KERNEL_TESTING_PATCHVER)
+endif
+
+LINUX_VERSION-5.4 = .132
+LINUX_VERSION-5.10 = .51
-LINUX_KERNEL_HASH-3.18.71 = 5abc9778ad44ce02ed6c8ab52ece8a21c6d20d21f6ed8a19287b4a38a50c1240
-LINUX_KERNEL_HASH-4.4.93 = ed349314f16e78a6571b5f8884f6452782aef6c26b81bcc7ccdac44ecd917c36
-LINUX_KERNEL_HASH-4.9.58 = 748f12a28689644b6a9102c67f8fa7938ca73823a949ba6f65024aecf2f221a7
+LINUX_KERNEL_HASH-5.4.132 = 8466adbfb3579e751ede683496df7bb20f258b5f882250f3dd82be63736d00ef
+LINUX_KERNEL_HASH-5.10.51 = 95bae893c274ccc3a8a6271f377bcc7fd3badcb7990ecd41b05b2731f1d67ae2
+remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1))))
+sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1)))))))
+
+ifneq ($(call qstrip,$(CONFIG_KERNEL_GIT_CLONE_URI)),)
+ LINUX_VERSION:=$(call sanitize_uri,$(call remove_uri_prefix,$(CONFIG_KERNEL_GIT_CLONE_URI)))
+ ifeq ($(call qstrip,$(CONFIG_KERNEL_GIT_REF)),)
+ CONFIG_KERNEL_GIT_REF:=HEAD
+ endif
+ LINUX_VERSION:=$(LINUX_VERSION)-$(call sanitize_uri,$(CONFIG_KERNEL_GIT_REF))
+else
ifdef KERNEL_PATCHVER
LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER)))
endif
+ifdef KERNEL_TESTING_PATCHVER
+ LINUX_TESTING_VERSION:=$(KERNEL_TESTING_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_TESTING_PATCHVER)))
+endif
+endif
split_version=$(subst ., ,$(1))
merge_version=$(subst $(space),.,$(1))
diff --git a/include/kernel.mk b/include/kernel.mk
index 75797cf17e..e4074a48f4 100644
--- a/include/kernel.mk
+++ b/include/kernel.mk
@@ -1,9 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
-# Copyright (C) 2006-2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
+# Copyright (C) 2006-2020 OpenWrt.org
ifneq ($(filter check,$(MAKECMDGOALS)),)
CHECK:=1
@@ -52,17 +49,23 @@ else
LINUX_VERMAGIC:=$(strip $(shell cat $(LINUX_DIR)/.vermagic 2>/dev/null))
LINUX_VERMAGIC:=$(if $(LINUX_VERMAGIC),$(LINUX_VERMAGIC),unknown)
- LINUX_UNAME_VERSION:=$(if $(word 3,$(subst ., ,$(KERNEL_BASE))),$(KERNEL_BASE),$(KERNEL_BASE).0)
+ 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
- LINUX_SOURCE:=linux-$(LINUX_VERSION).tar.xz
- TESTING:=$(if $(findstring -rc,$(LINUX_VERSION)),/testing,)
- 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$(TESTING)
+ 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
@@ -71,7 +74,7 @@ else
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))
+ PKG_BUILD_DIR ?= $(KERNEL_BUILD_DIR)/$(if $(BUILD_VARIANT),$(PKG_NAME)-$(BUILD_VARIANT)/)$(PKG_NAME)$(if $(PKG_VERSION),-$(PKG_VERSION))
endif
endif
@@ -97,7 +100,8 @@ endif
KERNEL_MAKE = $(MAKE) $(KERNEL_MAKEOPTS)
-KERNEL_MAKE_FLAGS := \
+KERNEL_MAKE_FLAGS = \
+ KCFLAGS="$(call iremap,$(BUILD_DIR),$(notdir $(BUILD_DIR)))" \
HOSTCFLAGS="$(HOST_CFLAGS) -Wall -Wmissing-prototypes -Wstrict-prototypes" \
CROSS_COMPILE="$(KERNEL_CROSS)" \
ARCH="$(LINUX_KARCH)" \
@@ -107,10 +111,15 @@ KERNEL_MAKE_FLAGS := \
KBUILD_BUILD_TIMESTAMP="$(KBUILD_BUILD_TIMESTAMP)" \
KBUILD_BUILD_VERSION="0" \
HOST_LOADLIBES="-L$(STAGING_DIR_HOST)/lib" \
+ KBUILD_HOSTLDLIBS="-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=
+ cmd_syscalls= \
+ $(if $(__package_mk),KBUILD_EXTRA_SYMBOLS="$(wildcard $(PKG_SYMVERS_DIR)/*.symvers)")
+
+KERNEL_NOSTDINC_FLAGS = \
+ -nostdinc $(if $(DUMP),, -isystem $(shell $(TARGET_CC) -print-file-name=include))
ifeq ($(call qstrip,$(CONFIG_EXTERNAL_KERNEL_TREE))$(call qstrip,$(CONFIG_KERNEL_GIT_CLONE_URI)),)
KERNEL_MAKE_FLAGS += \
@@ -123,61 +132,55 @@ ifdef CONFIG_USE_SPARSE
KERNEL_MAKEOPTS += C=1 CHECK=$(STAGING_DIR_HOST)/bin/sparse
endif
+ifneq ($(HOST_OS),Linux)
+ KERNEL_MAKEOPTS += CONFIG_STACK_VALIDATION=
+ export SKIP_STACK_VALIDATION:=1
+endif
+
+PKG_EXTMOD_SUBDIRS ?= .
+
+PKG_SYMVERS_DIR = $(KERNEL_BUILD_DIR)/symvers
+
+define collect_module_symvers
+ for subdir in $(PKG_EXTMOD_SUBDIRS); do \
+ realdir=$$$$(readlink -f $(PKG_BUILD_DIR)); \
+ grep -F $(PKG_BUILD_DIR) $(PKG_BUILD_DIR)/$$$$subdir/Module.symvers >> $(PKG_BUILD_DIR)/Module.symvers.tmp; \
+ [ "$(PKG_BUILD_DIR)" = "$$$$realdir" ] || \
+ grep -F $$$$realdir $(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; \
+ mkdir -p $(PKG_SYMVERS_DIR); \
+ mv $(PKG_BUILD_DIR)/Module.symvers $(PKG_SYMVERS_DIR)/$(PKG_NAME).symvers
+endef
+
+define KernelPackage/hooks
+ ifneq ($(PKG_NAME),kernel)
+ 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
- $(SH_FUNC) \
- export modules=; \
- probe_module() { \
- local mods="$$$$$$$$1"; \
- local boot="$$$$$$$$2"; \
- local mod; \
- shift 2; \
- for mod in $$$$$$$$mods; do \
- mkdir -p $(2)/etc/modules.d; \
- echo "$$$$$$$$mod" >> $(2)/etc/modules.d/$(1); \
- done; \
- if [ -e $(2)/etc/modules.d/$(1) ]; then \
- if [ "$$$$$$$$boot" = "1" -a ! -e $(2)/etc/modules-boot.d/$(1) ]; then \
- mkdir -p $(2)/etc/modules-boot.d; \
- ln -s ../modules.d/$(1) $(2)/etc/modules-boot.d/; \
- fi; \
- modules="$$$$$$$${modules:+$$$$$$$$modules }$$$$$$$$mods"; \
- fi; \
- }; \
- add_module() { \
- local priority="$$$$$$$$1"; \
- local mods="$$$$$$$$2"; \
- local boot="$$$$$$$$3"; \
- local mod; \
- shift 3; \
- for mod in $$$$$$$$mods; do \
- mkdir -p $(2)/etc/modules.d; \
- echo "$$$$$$$$mod" >> $(2)/etc/modules.d/$$$$$$$$priority-$(1); \
- done; \
- if [ -e $(2)/etc/modules.d/$$$$$$$$priority-$(1) ]; then \
- if [ "$$$$$$$$boot" = "1" -a ! -e $(2)/etc/modules-boot.d/$$$$$$$$priority-$(1) ]; then \
- mkdir -p $(2)/etc/modules-boot.d; \
- ln -s ../modules.d/$$$$$$$$priority-$(1) $(2)/etc/modules-boot.d/; \
- fi; \
- modules="$$$$$$$${modules:+$$$$$$$$modules }$$$$$$$$priority-$(1)"; \
- fi; \
- }; \
- $(3) \
- if [ -n "$$$$$$$$modules" ]; then \
- modules="$$$$$$$$(echo "$$$$$$$$modules" | tr ' ' '\n' | sort | uniq | paste -s -d' ' -)"; \
- mkdir -p $(2)/etc/modules.d; \
- mkdir -p $(2)/CONTROL; \
- echo "#!/bin/sh" > $(2)/CONTROL/postinst-pkg; \
- echo "[ -z \"\$$$$$$$$IPKG_INSTROOT\" ] || exit 0" >> $(2)/CONTROL/postinst-pkg; \
- echo ". /lib/functions.sh" >> $(2)/CONTROL/postinst-pkg; \
- echo "insert_modules $$$$$$$$modules" >> $(2)/CONTROL/postinst-pkg; \
- chmod 0755 $(2)/CONTROL/postinst-pkg; \
- fi
+ $(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),)
@@ -230,10 +233,10 @@ $(call KernelPackage/$(1)/config)
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)))),.),)
- ifneq ($(strip $(FILES)),)
- define Package/kmod-$(1)/install
+ 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."; \
@@ -245,10 +248,9 @@ $(call KernelPackage/$(1)/config)
exit 1; \
fi; \
done;
- $(call ModuleAutoLoad,$(1),$$(1),$(AUTOLOAD))
+ $(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
- endif
+ endef
$(if $(CONFIG_PACKAGE_kmod-$(1)),
else
compile: $(1)-disabled
@@ -262,17 +264,23 @@ $(call KernelPackage/$(1)/config)
endif
$$(eval $$(call BuildPackage,kmod-$(1)))
- $$(IPKG_kmod-$(1)): $$(wildcard $$(FILES))
+ $$(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
- add_module "$(1)" "$(call version_filter,$(2))" "$(3)";
+ $(if $(1),$(1),0) $(if $(3),1,0) $(call version_filter,$(2))
endef
+# 1: module list
+# 2: boot flag
define AutoProbe
- probe_module "$(call version_filter,$(1))" "$(2)";
+ $(call AutoLoad,,$(1),$(2))
endef
version_field=$(if $(word $(1),$(2)),$(word $(1),$(2)),0)
diff --git a/include/logo.png b/include/logo.png
new file mode 100644
index 0000000000..bb208dd905
--- /dev/null
+++ b/include/logo.png
Binary files differ
diff --git a/include/logo.svg b/include/logo.svg
new file mode 100644
index 0000000000..ff4b8adfc7
--- /dev/null
+++ b/include/logo.svg
@@ -0,0 +1,398 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="2000mm"
+ height="595.20099mm"
+ viewBox="0 0 2000.0002 595.20098"
+ version="1.1"
+ id="svg971"
+ inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
+ sodipodi:docname="logo.svg">
+ <defs
+ id="defs965">
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath78">
+ <path
+ d="M 0,0 H 792 V 612 H 0 Z"
+ id="path76" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath106">
+ <path
+ d="M 0,0 H 792 V 612 H 0 Z"
+ id="path104" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath130">
+ <path
+ d="M 0,0 H 792 V 612 H 0 Z"
+ id="path128" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath154">
+ <path
+ d="M 0,0 H 792 V 612 H 0 Z"
+ id="path152" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath174">
+ <path
+ d="M 0,0 H 792 V 612 H 0 Z"
+ id="path172" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath194">
+ <path
+ d="M 0,0 H 792 V 612 H 0 Z"
+ id="path192" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath214">
+ <path
+ d="M 0,0 H 792 V 612 H 0 Z"
+ id="path212" />
+ </clipPath>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.35"
+ inkscape:cx="1579.8791"
+ inkscape:cy="728.41283"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ inkscape:document-rotation="0"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata968">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(312.17635,44.559227)">
+ <g
+ id="g72"
+ transform="matrix(12.354182,0,0,-12.354182,-1687.2697,4281.0797)">
+ <g
+ id="g74"
+ clip-path="url(#clipPath78)">
+ <g
+ id="g80"
+ transform="translate(173.1753,319.1396)">
+ <path
+ d="m 0,0 c 0,-5.745 -4.627,-10.263 -10.545,-10.263 -5.918,0 -10.544,4.518 -10.544,10.263 0,5.771 4.626,10.367 10.544,10.367 C -4.627,10.367 0,5.771 0,0 m -3.685,0 c 0,3.995 -3.013,7.024 -6.86,7.024 -3.846,0 -6.859,-3.029 -6.859,-7.024 0,-3.995 3.013,-6.946 6.859,-6.946 3.847,0 6.86,2.95 6.86,6.946"
+ style="fill:#00ace2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path82" />
+ </g>
+ <g
+ id="g84"
+ transform="translate(189.0894,315.771)">
+ <path
+ d="m 0,0 c 0,-4.099 -3.174,-6.894 -6.591,-6.894 -1.829,0 -3.308,0.523 -4.438,1.41 v -8.329 H -14.58 V 6.528 h 3.552 V 5.484 C -9.898,6.397 -8.419,6.92 -6.59,6.92 -3.174,6.92 0,4.1 0,0 m -3.443,0 c 0,2.402 -1.614,3.917 -3.766,3.917 -1.91,0 -3.82,-1.515 -3.82,-3.917 0,-2.402 1.91,-3.889 3.82,-3.889 2.152,-0.002 3.766,1.486 3.766,3.889"
+ style="fill:#00ace2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path86" />
+ </g>
+ <g
+ id="g88"
+ transform="translate(203.958,314.8574)">
+ <path
+ d="m 0,0 h -10.222 c 0.349,-1.88 1.721,-3.029 3.362,-3.029 1.049,0 2.367,0.131 3.336,1.723 l 3.174,-0.652 c -1.183,-2.716 -3.577,-4.022 -6.51,-4.022 -3.793,0 -6.887,2.794 -6.887,6.894 0,4.099 3.094,6.918 6.94,6.918 3.578,0 6.671,-2.689 6.806,-6.659 z m -10.115,2.429 h 6.485 c -0.457,1.671 -1.749,2.402 -3.174,2.402 -1.347,0 -2.88,-0.784 -3.311,-2.402"
+ style="fill:#00ace2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path90" />
+ </g>
+ <g
+ id="g92"
+ transform="translate(218.446,317.2075)">
+ <path
+ d="m 0,0 v -7.938 h -3.551 v 7.207 c 0,1.827 -1.076,3.055 -2.717,3.055 -2.017,0 -3.335,-1.306 -3.335,-4.492 v -5.77 h -3.551 v 13.03 h 3.55 V 3.917 c 1.049,1.018 2.447,1.566 4.223,1.566 C -2.152,5.483 0,3.238 0,0"
+ style="fill:#00ace2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path94" />
+ </g>
+ </g>
+ </g>
+ <g
+ id="g96"
+ transform="matrix(12.354182,0,0,-12.354182,1281.2351,460.31368)">
+ <path
+ d="M 0,0 H -2.851 L -7.854,12.874 -12.885,0 h -2.824 l -6.699,19.846 h 3.82 l 4.492,-13.109 5.138,13.109 h 2.179 L -1.641,6.737 2.851,19.846 h 3.846 z"
+ style="fill:#00ace2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path98" />
+ </g>
+ <g
+ id="g100"
+ transform="matrix(12.354182,0,0,-12.354182,-1687.2697,4281.0797)">
+ <g
+ id="g102"
+ clip-path="url(#clipPath106)">
+ <g
+ id="g108"
+ transform="translate(255.7183,322.3774)">
+ <path
+ d="m 0,0 -0.188,-3.316 h -0.78 c -3.282,0 -4.789,-1.959 -4.789,-5.588 v -4.204 h -3.551 v 13.03 h 3.551 V -2.35 c 0.996,1.515 2.556,2.454 4.816,2.454 0.349,0 0.618,0 0.941,-0.104"
+ style="fill:#00ace2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path110" />
+ </g>
+ <g
+ id="g112"
+ transform="translate(263.2698,314.0737)">
+ <path
+ d="m 0,0 c 0,-1.279 0.619,-1.985 1.695,-1.985 0.618,0 1.533,0.262 2.234,0.627 L 4.952,-4.23 C 3.553,-4.961 2.584,-5.197 1.455,-5.197 c -3.201,0 -5.004,1.776 -5.004,4.937 v 5.665 h -2.879 v 2.821 h 2.879 v 4.726 l 3.55,1.045 V 8.226 H 5.193 V 5.405 H 0 Z"
+ style="fill:#00ace2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path114" />
+ </g>
+ </g>
+ </g>
+ <g
+ id="g116"
+ transform="matrix(12.354182,0,0,-12.354182,612.14009,549.73584)">
+ <path
+ d="M 0,0 H -0.799 L -1.549,2 -2.304,0 H -3.1 l -1.224,3.689 h 1.02 l 0.635,-1.99 0.795,1.99 h 0.65 l 0.79,-1.99 0.64,1.99 h 1.02 z"
+ style="fill:#002843;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path118" />
+ </g>
+ <g
+ id="g120"
+ transform="matrix(12.354182,0,0,-12.354182,674.30011,539.84385)">
+ <path
+ d="m 0,0 h 0.785 v -0.801 h -2.53 V 0 h 0.785 v 2.083 h -0.785 v 0.805 h 2.53 V 2.083 H 0 Z"
+ style="fill:#002843;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path122" />
+ </g>
+ <g
+ id="g124"
+ transform="matrix(12.354182,0,0,-12.354182,-1687.2697,4281.0797)">
+ <g
+ id="g126"
+ clip-path="url(#clipPath130)">
+ <g
+ id="g132"
+ transform="translate(196.9004,302.0308)">
+ <path
+ d="M 0,0 -0.7,0.801 H -1.449 V 0 H -2.41 v 3.689 h 1.771 c 1,0 1.605,-0.573 1.605,-1.427 0,-0.549 -0.255,-0.991 -0.695,-1.238 L 1.206,0 Z m -0.675,1.602 c 0.4,0 0.73,0.262 0.73,0.66 0,0.388 -0.33,0.628 -0.73,0.628 H -1.449 V 1.604 Z"
+ style="fill:#002843;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path134" />
+ </g>
+ </g>
+ </g>
+ <g
+ id="g136"
+ transform="matrix(12.354182,0,0,-12.354182,820.47493,549.73584)">
+ <path
+ d="m 0,0 h -2.9 v 3.689 h 2.87 V 2.888 H -1.94 V 2.257 h 1.88 V 1.456 H -1.94 V 0.801 h 1.941 z"
+ style="fill:#002843;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path138" />
+ </g>
+ <g
+ id="g140"
+ transform="matrix(12.354182,0,0,-12.354182,886.62894,549.73584)">
+ <path
+ d="m 0,0 h -2.805 v 3.689 h 0.96 V 0.801 H 0 Z"
+ style="fill:#002843;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path142" />
+ </g>
+ <g
+ id="g144"
+ transform="matrix(12.354182,0,0,-12.354182,953.79261,549.73584)">
+ <path
+ d="m 0,0 h -2.9 v 3.689 h 2.87 V 2.888 H -1.94 V 2.257 h 1.88 V 1.456 H -1.94 V 0.801 H 0 Z"
+ style="fill:#002843;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path146" />
+ </g>
+ <g
+ id="g148"
+ transform="matrix(12.354182,0,0,-12.354182,-1687.2697,4281.0797)">
+ <g
+ id="g150"
+ clip-path="url(#clipPath154)">
+ <g
+ id="g156"
+ transform="translate(219.3787,304.7295)">
+ <path
+ d="m 0,0 -0.94,-0.185 c -0.08,0.374 -0.34,0.481 -0.565,0.481 -0.225,0 -0.41,-0.111 -0.41,-0.316 0,-0.146 0.08,-0.238 0.245,-0.286 l 0.74,-0.228 c 0.625,-0.199 0.965,-0.481 0.965,-1.058 0,-0.83 -0.75,-1.18 -1.495,-1.18 -0.825,0 -1.495,0.422 -1.59,1.126 l 0.985,0.194 c 0.08,-0.364 0.304,-0.519 0.635,-0.519 0.28,0 0.45,0.126 0.45,0.321 0,0.145 -0.08,0.247 -0.29,0.3 l -0.705,0.199 c -0.575,0.16 -0.965,0.447 -0.965,1.044 0,0.752 0.609,1.165 1.44,1.165 0.79,0 1.375,-0.369 1.5,-1.058"
+ style="fill:#002843;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path158" />
+ </g>
+ <g
+ id="g160"
+ transform="translate(224.4026,304.7295)">
+ <path
+ d="m 0,0 -0.94,-0.185 c -0.08,0.374 -0.34,0.481 -0.565,0.481 -0.225,0 -0.41,-0.111 -0.41,-0.316 0,-0.146 0.08,-0.238 0.245,-0.286 l 0.74,-0.228 c 0.625,-0.199 0.965,-0.481 0.965,-1.058 0,-0.83 -0.75,-1.18 -1.495,-1.18 -0.825,0 -1.495,0.422 -1.591,1.126 l 0.986,0.194 c 0.08,-0.364 0.304,-0.519 0.635,-0.519 0.28,0 0.45,0.126 0.45,0.321 0,0.145 -0.08,0.247 -0.29,0.3 l -0.705,0.2 c -0.575,0.16 -0.965,0.446 -0.965,1.044 0,0.752 0.608,1.165 1.44,1.165 C -0.71,1.058 -0.125,0.689 0,0"
+ style="fill:#002843;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path162" />
+ </g>
+ </g>
+ </g>
+ <g
+ id="g164"
+ transform="matrix(12.354182,0,0,-12.354182,1170.9286,521.84896)">
+ <path
+ d="M 0,0 H 1.785 V -0.801 H 0 V -2.257 H -0.96 V 1.432 H 1.915 V 0.631 H 0 Z"
+ style="fill:#002843;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path166" />
+ </g>
+ <g
+ id="g168"
+ transform="matrix(12.354182,0,0,-12.354182,-1687.2697,4281.0797)">
+ <g
+ id="g170"
+ clip-path="url(#clipPath174)">
+ <g
+ id="g176"
+ transform="translate(238.2297,302.0308)">
+ <path
+ d="M 0,0 -0.7,0.801 H -1.45 V 0 h -0.96 v 3.689 h 1.77 c 1,0 1.605,-0.573 1.605,-1.427 C 0.965,1.713 0.71,1.271 0.27,1.024 L 1.205,0 Z m -0.675,1.602 c 0.4,0 0.73,0.262 0.73,0.66 0,0.388 -0.33,0.628 -0.73,0.628 H -1.45 V 1.604 Z"
+ style="fill:#002843;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path178" />
+ </g>
+ </g>
+ </g>
+ <g
+ id="g180"
+ transform="matrix(12.354182,0,0,-12.354182,1331.0682,549.73584)">
+ <path
+ d="m 0,0 h -2.9 v 3.689 h 2.87 V 2.888 H -1.94 V 2.257 h 1.88 V 1.456 H -1.94 V 0.801 H 0 Z"
+ style="fill:#002843;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path182" />
+ </g>
+ <g
+ id="g184"
+ transform="matrix(12.354182,0,0,-12.354182,1398.3947,549.73584)">
+ <path
+ d="m 0,0 h -2.9 v 3.689 h 2.87 V 2.888 H -1.94 V 2.257 h 1.88 V 1.456 H -1.94 V 0.801 h 1.941 z"
+ style="fill:#002843;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path186" />
+ </g>
+ <g
+ id="g188"
+ transform="matrix(12.354182,0,0,-12.354182,-1687.2697,4281.0797)">
+ <g
+ id="g190"
+ clip-path="url(#clipPath194)">
+ <g
+ id="g196"
+ transform="translate(254.0122,305.7197)">
+ <path
+ d="M 0,0 C 1.21,0 2.01,-0.739 2.01,-1.844 2.01,-2.95 1.211,-3.689 0,-3.689 H -1.695 V 0 Z m -0.01,-2.888 c 0.655,0 1.055,0.417 1.055,1.044 0,0.626 -0.4,1.043 -1.055,1.043 h -0.723 v -2.087 z"
+ style="fill:#002843;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path198" />
+ </g>
+ <g
+ id="g200"
+ transform="translate(262.0693,303.8706)">
+ <path
+ d="m 0,0 c 0,-1.078 -0.91,-1.913 -2.03,-1.913 -1.12,0 -2.035,0.835 -2.035,1.913 0,1.077 0.91,1.917 2.035,1.917 C -0.905,1.917 0,1.073 0,0 m -0.965,0 c 0,0.606 -0.47,1.077 -1.066,1.077 -0.595,0 -1.065,-0.471 -1.065,-1.077 0,-0.607 0.47,-1.078 1.065,-1.078 0.596,0 1.066,0.466 1.066,1.078"
+ style="fill:#002843;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path202" />
+ </g>
+ </g>
+ </g>
+ <g
+ id="g204"
+ transform="matrix(12.354182,0,0,-12.354182,1629.3552,549.73584)">
+ <path
+ d="M 0,0 H -0.94 V 1.752 L -2.06,0.256 H -2.35 L -3.47,1.75 v -1.751 h -0.94 v 3.689 h 0.615 l 1.59,-2.17 1.59,2.17 H 0 Z"
+ style="fill:#002843;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path206" />
+ </g>
+ <g
+ id="g208"
+ transform="matrix(12.354182,0,0,-12.354182,-1687.2697,4281.0797)">
+ <g
+ id="g210"
+ clip-path="url(#clipPath214)">
+ <g
+ id="g216"
+ transform="translate(271.6895,328.4058)">
+ <path
+ d="M 0,0 -0.99,1.042 H -1.398 V 0 h -0.455 v 2.468 h 0.95 c 0.533,0 0.856,-0.296 0.856,-0.712 0.008,-0.283 -0.169,-0.54 -0.441,-0.642 L 0.569,0 Z m -0.903,1.441 c 0.267,0 0.405,0.137 0.405,0.315 0,0.179 -0.141,0.311 -0.405,0.311 H -1.398 V 1.44 Z"
+ style="fill:#00ace2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path218" />
+ </g>
+ <g
+ id="g220"
+ transform="translate(270.8284,327.209)">
+ <path
+ d="m 0,0 c -1.307,0 -2.366,1.028 -2.367,2.296 0,1.269 1.059,2.298 2.366,2.298 1.307,0 2.366,-1.028 2.367,-2.296 V 2.297 C 2.365,1.029 1.306,0.002 0,0 m 0,4.269 c -1.122,0 -2.031,-0.883 -2.031,-1.972 0,-1.089 0.909,-1.971 2.031,-1.971 1.122,0 2.031,0.882 2.031,1.971 C 2.03,3.386 1.121,4.268 0,4.269 Z"
+ style="fill:#00ace2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path222" />
+ </g>
+ <g
+ id="g224"
+ transform="translate(130.3613,326.9673)">
+ <path
+ d="m 0,0 c -1.713,0 -3.102,-1.348 -3.102,-3.011 0,-1.663 1.389,-3.011 3.102,-3.011 1.713,0 3.102,1.348 3.102,3.011 C 3.099,-1.35 1.712,-0.003 0,0"
+ style="fill:#00ace2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path226" />
+ </g>
+ <g
+ id="g228"
+ transform="translate(111.3059,342.4536)">
+ <path
+ d="m 0,0 3.229,-3.134 c 4.051,3.933 9.653,6.36 15.826,6.36 6.174,0 11.776,-2.428 15.827,-6.36 L 38.111,0 C 33.236,4.732 26.494,7.682 19.055,7.682 11.617,7.682 4.875,4.732 0,0"
+ style="fill:#00ace2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path230" />
+ </g>
+ <g
+ id="g232"
+ transform="translate(117.1301,336.7998)">
+ <path
+ d="m 0,0 3.229,-3.134 c 2.564,2.488 6.109,4.025 10.001,4.025 3.892,0 7.44,-1.537 10.004,-4.025 L 26.463,0 C 23.076,3.288 18.391,5.348 13.232,5.348 8.072,5.348 3.388,3.289 0,0"
+ style="fill:#00ace2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path234" />
+ </g>
+ <g
+ id="g236"
+ transform="translate(122.9229,331.1763)">
+ <path
+ d="m 0,0 3.229,-3.134 c 2.326,2.253 6.093,2.253 8.419,0 L 14.877,0 C 12.905,1.915 10.228,2.988 7.438,2.98 4.558,2.98 1.93,1.844 0,0"
+ style="fill:#00ace2;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path238" />
+ </g>
+ <g
+ id="g240"
+ transform="translate(141.8201,332.0371)">
+ <path
+ d="m 0,0 c 1.709,-2.274 2.722,-5.07 2.722,-8.081 0,-7.589 -6.362,-13.766 -14.181,-13.766 -7.818,0 -14.18,6.177 -14.18,13.766 0,3.011 1.013,5.807 2.722,8.081 l -3.26,3.165 c -2.533,-3.103 -4.021,-7.006 -4.021,-11.246 0,-10.017 8.42,-18.19 18.739,-18.19 10.32,0 18.739,8.173 18.739,18.19 0,4.24 -1.519,8.143 -4.02,11.246 z"
+ style="fill:#002843;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path242" />
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/include/netfilter.mk b/include/netfilter.mk
index 2d537583bd..803749d931 100644
--- a/include/netfilter.mk
+++ b/include/netfilter.mk
@@ -1,9 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
-# Copyright (C) 2006-2014 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
+# Copyright (C) 2006-2020 OpenWrt.org
ifneq ($(__inc_netfilter),1)
__inc_netfilter:=1
@@ -30,9 +27,10 @@ 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,NF_IPT,CONFIG_NF_REJECT_IPV4, $(P_V4)nf_reject_ipv4),))
$(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),))
@@ -66,9 +64,7 @@ $(eval $(if $(NF_KMOD),,$(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MARK, $(P_XT)
# 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))
@@ -79,26 +75,35 @@ $(eval $(call nf_add,IPT_CONNTRACK,CONFIG_NETFILTER_XT_MATCH_CONNTRACK, $(P_XT)x
$(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_PHYSDEV, $(P_XT)xt_physdev))
$(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_NETFILTER_XT_MATCH_CGROUP, $(P_XT)xt_cgroup))
#$(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
@@ -113,7 +118,6 @@ $(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_STATISTIC, $(P_XT)xt_st
$(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))
@@ -138,25 +142,25 @@ $(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_IPT6,CONFIG_NF_REJECT_IPV6, $(P_V6)nf_reject_ipv6),))
-$(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNTRACK6,CONFIG_NF_DEFRAG_IPV6, $(P_V6)nf_defrag_ipv6),))
-$(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,NF_CONNTRACK,CONFIG_NF_DEFRAG_IPV6, $(P_V6)nf_defrag_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
@@ -172,25 +176,18 @@ $(eval $(call nf_add,IPT_IPV6_EXTRA,CONFIG_IP6_NF_MATCH_RT, $(P_V6)ip6t_rt))
# 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),))
-
-$(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),))
$(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))
+$(eval $(call nf_add,IPT_NAT,CONFIG_NETFILTER_XT_TARGET_MASQUERADE, $(P_XT)xt_MASQUERADE))
+$(eval $(call nf_add,IPT_NAT,CONFIG_NETFILTER_XT_TARGET_REDIRECT, $(P_XT)xt_REDIRECT))
# nat-extra
@@ -209,8 +206,6 @@ $(eval $(call nf_add,NF_NATHELPER,CONFIG_NF_NAT_FTP, $(P_XT)nf_nat_ftp))
$(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))
@@ -247,7 +242,11 @@ $(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))
+$(eval $(call nf_add,IPT_TPROXY,CONFIG_NF_SOCKET_IPV6, $(P_V6)nf_socket_ipv6))
$(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))
+$(eval $(call nf_add,IPT_TPROXY,CONFIG_NF_TPROXY_IPV6, $(P_V6)nf_tproxy_ipv6))
# led
$(eval $(call nf_add,IPT_LED,CONFIG_NETFILTER_XT_TARGET_LED, $(P_XT)xt_LED))
@@ -255,13 +254,17 @@ $(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),))
+$(eval $(if $(NF_KMOD),$(call nf_add,IPT_TEE,CONFIG_NF_DUP_IPV4, $(P_V4)nf_dup_ipv4),))
+$(eval $(if $(NF_KMOD),$(call nf_add,IPT_TEE,CONFIG_NF_DUP_IPV6, $(P_V6)nf_dup_ipv6),))
# 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
@@ -313,35 +316,38 @@ $(eval $(call nf_add,EBTABLES_WATCHERS,CONFIG_BRIDGE_EBT_NFQUEUE, $(P_EBT)ebt_nf
# 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),))
-$(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_NF_TABLES_SET, $(P_XT)nf_tables_set),))
$(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_CT, $(P_XT)nft_ct),))
+$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_HASH, $(P_XT)nft_hash),))
$(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_LOG, $(P_XT)nft_log),))
+$(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),))
+$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_OBJREF, $(P_XT)nft_objref),))
+$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_QUOTA, $(P_XT)nft_quota),))
+$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_REDIR, $(P_XT)nft_redir),))
$(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),))
-$(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),))
-$(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_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_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_NAT,CONFIG_NFT_NAT, $(P_XT)nft_chain_nat),))
+$(eval $(if $(NF_KMOD),$(call nf_add,NFT_NAT,CONFIG_NFT_REDIR_IPV4, $(P_V4)nft_redir_ipv4),))
$(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_NAT,CONFIG_NFT_MASQ_IPV6, $(P_V6)nft_masq_ipv6),))
+
+$(eval $(if $(NF_KMOD),$(call nf_add,NFT_NAT6,CONFIG_NFT_REDIR_IPV6, $(P_V6)nft_redir_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),))
+
+$(eval $(if $(NF_KMOD),$(call nf_add,NFT_QUEUE,CONFIG_NFT_QUEUE, $(P_XT)nft_queue),))
# userland only
IPT_BUILTIN += $(NF_IPT-y) $(NF_IPT-m)
@@ -351,7 +357,9 @@ 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)
@@ -366,7 +374,6 @@ 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_DEBUG-y)
IPT_BUILTIN += $(IPT_TPROXY-y)
IPT_BUILTIN += $(NFNETLINK-y)
IPT_BUILTIN += $(NFNETLINK_LOG-y)
diff --git a/include/nls.mk b/include/nls.mk
index 51463b9f12..742f8c25aa 100644
--- a/include/nls.mk
+++ b/include/nls.mk
@@ -1,9 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
-# Copyright (C) 2011-2012 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
+# Copyright (C) 2011-2020 OpenWrt.org
# iconv full
ifeq ($(CONFIG_BUILD_NLS),y)
@@ -23,7 +20,7 @@ else
endif
PKG_CONFIG_DEPENDS += CONFIG_BUILD_NLS
-PKG_BUILD_DEPENDS += !BUILD_NLS:libiconv !BUILD_NLS:libintl
+PKG_BUILD_DEPENDS += !BUILD_NLS:libiconv !BUILD_NLS:gettext
ICONV_DEPENDS:=+BUILD_NLS:libiconv-full
ICONV_CFLAGS:=-I$(ICONV_PREFIX)/include
diff --git a/include/package-bin.mk b/include/package-bin.mk
index 4ae049af54..192f0726d2 100644
--- a/include/package-bin.mk
+++ b/include/package-bin.mk
@@ -1,9 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
-# Copyright (C) 2007-2014 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
+# Copyright (C) 2007-2020 OpenWrt.org
ifeq ($(DUMP),)
define BuildTarget/bin
diff --git a/include/package-defaults.mk b/include/package-defaults.mk
index 0eecd6c4f8..3ee3a965f2 100644
--- a/include/package-defaults.mk
+++ b/include/package-defaults.mk
@@ -1,11 +1,8 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
-# Copyright (C) 2006 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
+# Copyright (C) 2006-2020 OpenWrt.org
-PKG_DEFAULT_DEPENDS = +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread
+PKG_DEFAULT_DEPENDS = +libc +USE_GLIBC:librt +USE_GLIBC:libpthread
ifneq ($(PKG_NAME),toolchain)
PKG_FIXUP_DEPENDS = $(if $(filter kmod-%,$(1)),$(2),$(PKG_DEFAULT_DEPENDS) $(filter-out $(PKG_DEFAULT_DEPENDS),$(2)))
@@ -57,13 +54,16 @@ define Package/Default
DEFAULT_VARIANT:=
USERID:=
ALTERNATIVES:=
+ LICENSE:=$(PKG_LICENSE)
+ LICENSE_FILES:=$(PKG_LICENSE_FILES)
+ FILE_MODES:=$(PKG_FILE_MODES)
endef
Build/Patch:=$(Build/Patch/Default)
ifneq ($(strip $(PKG_UNPACK)),)
define Build/Prepare/Default
$(PKG_UNPACK)
- [ ! -d ./src/ ] || $(CP) ./src/* $(PKG_BUILD_DIR)
+ [ ! -d ./src/ ] || $(CP) ./src/. $(PKG_BUILD_DIR)
$(Build/Patch)
endef
endif
diff --git a/include/package-dumpinfo.mk b/include/package-dumpinfo.mk
index b717c1b472..597452e4b9 100644
--- a/include/package-dumpinfo.mk
+++ b/include/package-dumpinfo.mk
@@ -1,29 +1,20 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
-# Copyright (C) 2006 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
+# Copyright (C) 2006-2020 OpenWrt.org
ifneq ($(DUMP),)
-dumpinfo: FORCE
-define Config/template
-Preconfig: $(1)
-Preconfig-Type: $(2)
-Preconfig-Default: $(3)
-Preconfig-Label: $(4)
-
-endef
+define SOURCE_INFO
+$(if $(PKG_BUILD_DEPENDS),Build-Depends: $(PKG_BUILD_DEPENDS)
+)$(if $(HOST_BUILD_DEPENDS),Build-Depends/host: $(HOST_BUILD_DEPENDS)
+)$(if $(BUILD_TYPES),Build-Types: $(BUILD_TYPES)
+)
-define Config
- Preconfig/$(1) = $$(call Config/template,$(1),$(2),$(3),$(4))
- preconfig_$$(1) += $(1)
endef
define Dumpinfo/Package
-$(info Package: $(1)
+$(info $(SOURCE_INFO)Package: $(1)
$(if $(MENU),Menu: $(MENU)
)$(if $(SUBMENU),Submenu: $(SUBMENU)
)$(if $(SUBMENUDEP),Submenu-Depends: $(SUBMENUDEP)
@@ -36,18 +27,15 @@ Menu-Depends: $(MDEPENDS)
Provides: $(PROVIDES)
$(if $(VARIANT),Build-Variant: $(VARIANT)
$(if $(DEFAULT_VARIANT),Default-Variant: $(VARIANT)
-))$(if $(PKG_BUILD_DEPENDS),Build-Depends: $(PKG_BUILD_DEPENDS)
-)$(if $(HOST_BUILD_DEPENDS),Build-Depends/host: $(HOST_BUILD_DEPENDS)
-)$(if $(BUILD_TYPES),Build-Types: $(BUILD_TYPES)
-)Section: $(SECTION)
+))Section: $(SECTION)
Category: $(CATEGORY)
$(if $(filter nonshared,$(PKGFLAGS)),,Repository: $(if $(FEED),$(FEED),base)
)Title: $(TITLE)
Maintainer: $(MAINTAINER)
$(if $(USERID),Require-User: $(USERID)
)Source: $(PKG_SOURCE)
-$(if $(PKG_LICENSE),License: $(PKG_LICENSE)
-)$(if $(PKG_LICENSE_FILES),LicenseFiles: $(PKG_LICENSE_FILES)
+$(if $(LICENSE),License: $(LICENSE)
+)$(if $(LICENSE_FILES),LicenseFiles: $(LICENSE_FILES)
)Type: $(if $(Package/$(1)/targets),$(Package/$(1)/targets),$(if $(PKG_TARGETS),$(PKG_TARGETS),ipkg))
$(if $(KCONFIG),Kernel-Config: $(KCONFIG)
)$(if $(BUILDONLY),Build-Only: $(BUILDONLY)
@@ -59,33 +47,11 @@ $(if $(URL),$(URL)
$(if $(Package/$(1)/config),Config:
$(Package/$(1)/config)
@@
-)$(foreach pc,$(preconfig_$(1)),
-$(Preconfig/$(pc))))
-endef
-
-define Feature/Default
- TARGET_NAME:=
- TARGET_TITLE:=
- PRIORITY:=
- NAME:=
-endef
-
-define Feature
- $(eval $(Feature/Default))
- $(eval $(Feature/$(1)))
- $(if $(DUMP),$(call Dumpinfo/Feature,$(1)))
+))
+SOURCE_INFO :=
endef
-define Dumpinfo/Feature
-$(info Feature: $(TARGET_NAME)_$(1)
-Target-Name: $(TARGET_NAME)
-Target-Title: $(TARGET_TITLE)
-Feature-Name: $(NAME)
-$(if $(PRIORITY),Feature-Priority: $(PRIORITY)
-)Feature-Description:
-$(Feature/$(1)/description)
-@@
-)
-endef
+dumpinfo: FORCE
+ $(if $(SOURCE_INFO),$(info $(SOURCE_INFO)))
endif
diff --git a/include/package-ipkg.mk b/include/package-ipkg.mk
index bf508fb493..19f09c2311 100644
--- a/include/package-ipkg.mk
+++ b/include/package-ipkg.mk
@@ -1,20 +1,28 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
-# Copyright (C) 2006-2014 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
+# Copyright (C) 2006-2020 OpenWrt.org
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
+# Generates a make statement to return a wildcard for candidate ipkg files
+# 1: package name
+define gen_ipkg_wildcard
+ $(1)$$(if $$(filter -%,$$(ABIV_$(1))),,[^a-z-])*
+endef
+
+# 1: package name
+# 2: candidate ipk files
+define remove_ipkg_files
+ $(if $(strip $(2)),$(IPKG_REMOVE) $(1) $(2))
+endef
+
# 1: package name
# 2: variable name
# 3: variable suffix
@@ -32,7 +40,8 @@ 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_and=dep_and_res:=$$(and $(subst $(space),$(comma),$(foreach cond,$(subst &&, ,$(1)),$$(CONFIG_$(cond)))))
+dep_confvar=$(strip $(foreach cond,$(subst ||, ,$(call dep_rem,$(1))),$(eval $(call dep_and,$(cond)))$(dep_and_res)))
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)))
@@ -90,8 +99,9 @@ _endef=endef
ifeq ($(DUMP),)
define BuildTarget/ipkg
+ ABIV_$(1):=$(call FormatABISuffix,$(1),$(ABI_VERSION))
PDIR_$(1):=$(call FeedPackageDir,$(1))
- IPKG_$(1):=$$(PDIR_$(1))/$(1)_$(VERSION)_$(PKGARCH).ipk
+ 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))
@@ -119,6 +129,8 @@ ifeq ($(DUMP),)
endif
$(PKG_INSTALL_STAMP).$(1): prepare-package-install
echo "$(1)" >> $(PKG_INSTALL_STAMP)
+ else
+ $(if $(CONFIG_PACKAGE_$(1)),$$(warning WARNING: skipping $(1) -- package has no install section))
endif
endif
@@ -144,27 +156,36 @@ ifeq ($(DUMP),)
$(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)
+ $(if $(ABI_VERSION),echo '$(ABI_VERSION)' | cmp -s - $(PKG_INFO_DIR)/$(1).version || { \
+ echo '$(ABI_VERSION)' > $(PKG_INFO_DIR)/$(1).version; \
+ $(foreach pkg,$(filter-out $(1),$(PROVIDES)), \
+ cp $(PKG_INFO_DIR)/$(1).version $(PKG_INFO_DIR)/$(pkg).version; \
+ ) \
+ } )
$(call locked,$(CP) $(PKG_BUILD_DIR)/.pkgdir/$(1)/. $(STAGING_DIR_ROOT)/,root-copy)
touch $$@
- Package/$(1)/DEPENDS := $$(call mergelist,$$(filter-out @%,$$(IDEPEND_$(1))))
+ 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)
+Package: $(1)$$(ABIV_$(1))
Version: $(VERSION)
$$(call addfield,Depends,$$(Package/$(1)/DEPENDS)
)$$(call addfield,Conflicts,$$(call mergelist,$(CONFLICTS))
-)$$(call addfield,Provides,$$(call mergelist,$(PROVIDES))
+)$$(call addfield,Provides,$$(call mergelist,$$(filter-out $(1)$$(ABIV_$(1)),$(PROVIDES)$$(if $$(ABIV_$(1)), $(1) $(foreach provide,$(PROVIDES),$(provide)$$(ABIV_$(1))))))
)$$(call addfield,Alternatives,$$(call mergelist,$(ALTERNATIVES))
)$$(call addfield,Source,$(SOURCE)
-)$$(call addfield,License,$$(PKG_LICENSE)
-)$$(call addfield,LicenseFiles,$$(PKG_LICENSE_FILES)
+)$$(call addfield,SourceName,$(1)
+)$$(call addfield,License,$(LICENSE)
+)$$(call addfield,LicenseFiles,$(LICENSE_FILES)
)$$(call addfield,Section,$(SECTION)
)$$(call addfield,Require-User,$(USERID)
+)$$(call addfield,SourceDateEpoch,$(PKG_SOURCE_DATE_EPOCH)
+)$$(if $$(ABIV_$(1)),ABIVersion: $$(ABIV_$(1))
+)$(if $(PKG_CPE_ID),CPE-ID: $(PKG_CPE_ID)
)$(if $(filter hold,$(PKG_FLAGS)),Status: unknown hold not-installed
)$(if $(filter essential,$(PKG_FLAGS)),Essential: yes
)$(if $(MAINTAINER),Maintainer: $(MAINTAINER)
@@ -175,8 +196,10 @@ $(_endef)
$$(IPKG_$(1)) : export CONTROL=$$(Package/$(1)/CONTROL)
$$(IPKG_$(1)) : export DESCRIPTION=$$(Package/$(1)/description)
$$(IPKG_$(1)) : export PATH=$$(TARGET_PATH_PKG)
+ $$(IPKG_$(1)) : export PKG_SOURCE_DATE_EPOCH:=$(PKG_SOURCE_DATE_EPOCH)
$(PKG_INFO_DIR)/$(1).provides $$(IPKG_$(1)): $(STAMP_BUILT) $(INCLUDE_DIR)/package-ipkg.mk
- @rm -rf $$(IDIR_$(1)) $$(call opkg_package_files,$(1))
+ @rm -rf $$(IDIR_$(1)); \
+ $$(call remove_ipkg_files,$(1),$$(call opkg_package_files,$(call gen_ipkg_wildcard,$(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)
@@ -190,10 +213,19 @@ $(_endef)
fi; \
done; $(Package/$(1)/extra_provides) \
) | sort -u > $(PKG_INFO_DIR)/$(1).provides
- $(if $(PROVIDES),@for pkg in $(PROVIDES); do cp $(PKG_INFO_DIR)/$(1).provides $(PKG_INFO_DIR)/$$$$pkg.provides; done)
+ $(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 $(MKHASH) sha256 -n \{\} \; 2> /dev/null | \
+ sed 's|\([[:blank:]]\)\./| \1/|' > $$(IDIR_$(1))/CONTROL/files-sha256sum \
+ ) || true \
+ )
+ endif
(cd $$(IDIR_$(1))/CONTROL; \
( \
echo "$$$$CONTROL"; \
@@ -203,13 +235,13 @@ $(_endef)
( \
echo "#!/bin/sh"; \
echo "[ \"\$$$${IPKG_NO_SCRIPT}\" = \"1\" ] && exit 0"; \
- echo "[ -x "\$$$${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; \
+ echo "[ -s "\$$$${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 "[ -s "\$$$${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; \
echo ". \$$$${IPKG_INSTROOT}/lib/functions.sh"; \
echo "default_prerm \$$$$0 \$$$$@"; \
) > prerm; \
@@ -231,11 +263,11 @@ $(_endef)
endif
$(INSTALL_DIR) $$(PDIR_$(1))
- $(IPKG_BUILD) $$(IDIR_$(1)) $$(PDIR_$(1))
+ $(FAKEROOT) $(SCRIPT_DIR)/ipkg-build -m "$(FILE_MODES)" $$(IDIR_$(1)) $$(PDIR_$(1))
@[ -f $$(IPKG_$(1)) ]
$(1)-clean:
- $$(if $$(call opkg_package_files,$(1)),rm -f $$(call opkg_package_files,$(1)))
+ $$(call remove_ipkg_files,$(1),$$(call opkg_package_files,$(call gen_ipkg_wildcard,$(1))))
clean: $(1)-clean
diff --git a/include/package-seccomp.mk b/include/package-seccomp.mk
index fa49617d41..86e834450d 100644
--- a/include/package-seccomp.mk
+++ b/include/package-seccomp.mk
@@ -1,9 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
+# Copyright (C) 2015-2020 OpenWrt.org
PKG_CONFIG_DEPENDS+= CONFIG_KERNEL_SECCOMP
diff --git a/include/package.mk b/include/package.mk
index 5dc4aec70d..db0a869dab 100644
--- a/include/package.mk
+++ b/include/package.mk
@@ -1,9 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
-# Copyright (C) 2006-2008 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
+# Copyright (C) 2006-2020 OpenWrt.org
__package_mk:=1
@@ -11,7 +8,7 @@ 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_BUILD_DIR ?= $(BUILD_DIR)/$(if $(BUILD_VARIANT),$(PKG_NAME)-$(BUILD_VARIANT)/)$(PKG_NAME)$(if $(PKG_VERSION),-$(PKG_VERSION))
PKG_INSTALL_DIR ?= $(PKG_BUILD_DIR)/ipkg-install
PKG_BUILD_PARALLEL ?=
PKG_USE_MIPS16 ?= 1
@@ -19,6 +16,8 @@ PKG_IREMAP ?= 1
MAKE_J:=$(if $(MAKE_JOBSERVER),$(MAKE_JOBSERVER) $(if $(filter 3.% 4.0 4.1,$(MAKE_VERSION)),-j))
+PKG_SOURCE_DATE_EPOCH:=$(if $(DUMP),,$(shell $(TOPDIR)/scripts/get_source_date_epoch.sh $(CURDIR)))
+
ifeq ($(strip $(PKG_BUILD_PARALLEL)),0)
PKG_JOBS?=-j1
else
@@ -40,6 +39,10 @@ include $(INCLUDE_DIR)/prereq.mk
include $(INCLUDE_DIR)/unpack.mk
include $(INCLUDE_DIR)/depends.mk
+ifneq ($(wildcard $(TOPDIR)/git-src/$(PKG_NAME)/.git),)
+ USE_GIT_SRC_CHECKOUT:=1
+ QUILT:=1
+endif
ifneq ($(if $(CONFIG_SRC_TREE_OVERRIDE),$(wildcard ./git-src)),)
USE_GIT_TREE:=1
QUILT:=1
@@ -53,14 +56,26 @@ 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) \
- ) \
- ))))
+find_library_dependencies = \
+ $(wildcard $(patsubst %,$(STAGING_DIR)/pkginfo/%.version, \
+ $(filter-out $(BUILD_PACKAGES), $(sort $(foreach dep4, \
+ $(sort $(foreach dep3, \
+ $(sort $(foreach dep2, \
+ $(sort $(foreach dep1, \
+ $(sort $(foreach dep0, \
+ $(Package/$(1)/depends), \
+ $(Package/$(dep0)/depends) $(dep0) \
+ )), \
+ $(Package/$(dep1)/depends) $(dep1) \
+ )), \
+ $(Package/$(dep2)/depends) $(dep2) \
+ )), \
+ $(Package/$(dep3)/depends) $(dep3) \
+ )), \
+ $(Package/$(dep4)/depends) $(dep4) \
+ ))) \
+ ))
+
PKG_DIR_NAME:=$(lastword $(subst /,$(space),$(CURDIR)))
STAMP_NO_AUTOREBUILD=$(wildcard $(PKG_BUILD_DIR)/.no_autorebuild)
@@ -69,9 +84,9 @@ 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)))
+ 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=$(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
@@ -81,9 +96,10 @@ STAGING_FILES_LIST:=$(PKG_DIR_NAME)$(if $(BUILD_VARIANT),.$(BUILD_VARIANT),).lis
define CleanStaging
rm -f $(STAMP_INSTALLED)
@-(\
- cd "$(STAGING_DIR)"; \
- if [ -f packages/$(STAGING_FILES_LIST) ]; then \
- cat packages/$(STAGING_FILES_LIST) | xargs -r rm -f 2>/dev/null; \
+ if [ -f $(STAGING_DIR)/packages/$(STAGING_FILES_LIST) ]; then \
+ $(SCRIPT_DIR)/clean-package.sh \
+ "$(STAGING_DIR)/packages/$(STAGING_FILES_LIST)" \
+ "$(STAGING_DIR)"; \
fi; \
)
endef
@@ -116,11 +132,28 @@ ifeq ($(DUMP)$(filter prereq clean refresh update,$(MAKECMDGOALS)),)
endif
endif
+ifdef USE_GIT_SRC_CHECKOUT
+ define Build/Prepare/Default
+ mkdir -p $(PKG_BUILD_DIR)
+ ln -s $(TOPDIR)/git-src/$(PKG_NAME)/.git $(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_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 .)
+ ( 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
@@ -139,15 +172,19 @@ define Build/Exports/Default
$(1) : export CONFIG_SITE:=$$(CONFIG_SITE)
$(1) : export PKG_CONFIG_PATH:=$$(PKG_CONFIG_PATH)
$(1) : export PKG_CONFIG_LIBDIR:=$$(PKG_CONFIG_PATH)
- $(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)
+ $(DL_DIR)/$(FILE): FORCE
+
download:
$(foreach hook,$(Hooks/Download),
$(call $(hook))$(sep)
@@ -165,11 +202,11 @@ define Build/CoreTargets
$(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))
- rm -f $(STAMP_CONFIGURED_WILDCARD)
touch $$@
$(call Build/Exports,$(STAMP_BUILT))
@@ -186,7 +223,7 @@ define Build/CoreTargets
$(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
+ mkdir -p $(TMP_DIR)/stage-$(PKG_DIR_NAME)/host $(STAGING_DIR)/packages
$(foreach hook,$(Hooks/InstallDev/Pre),\
$(call $(hook),$(TMP_DIR)/stage-$(PKG_DIR_NAME),$(TMP_DIR)/stage-$(PKG_DIR_NAME)/host)$(sep)\
)
@@ -220,14 +257,14 @@ define Build/CoreTargets
ifneq ($(CONFIG_AUTOREMOVE),)
compile:
- -touch $(PKG_BUILD_DIR)/.autoremove 2>/dev/null >/dev/null
+ -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 $(USE_SOURCE_DIR)$(USE_GIT_TREE)$(USE_GIT_SRC_CHECKOUT),,$(if $(strip $(PKG_SOURCE_URL)),$(call Download,default)))
$(if $(DUMP),,$(Build/CoreTargets))
define Build/DefaultTargets
@@ -249,7 +286,7 @@ endef
endif
BUILD_PACKAGES += $(1)
- $(STAMP_PREPARED): $$(if $(QUILT)$(DUMP),,$(call find_library_dependencies,$(DEPENDS)))
+ $(STAMP_PREPARED): $$(if $(QUILT)$(DUMP),,$(call find_library_dependencies,$(1)))
$(foreach FIELD, TITLE CATEGORY SECTION VERSION,
ifeq ($($(FIELD)),)
@@ -305,9 +342,9 @@ clean-build: $(if $(wildcard $(PKG_BUILD_DIR)/.autoremove),force-clean-build)
clean: force-clean-build
$(CleanStaging)
- $(call Build/UninstallDev,$(STAGING_DIR),$(STAGING_DIR_HOST))
+ $(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)
+ rm -f $(STAGING_DIR)/packages/$(STAGING_FILES_LIST)
dist:
$(Build/Dist)
diff --git a/include/prereq-build.mk b/include/prereq-build.mk
index 7d96921a9c..8fbf6f22c4 100644
--- a/include/prereq-build.mk
+++ b/include/prereq-build.mk
@@ -1,9 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
-# Copyright (C) 2006-2012 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
+# Copyright (C) 2006-2020 OpenWrt.org
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/prereq.mk
@@ -14,45 +11,40 @@ 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]\.)'))
+ Please install GNU make v4.1 or later., \
+ $(MAKE) -v | grep -E 'Make (4\.[1-9]|[5-9]\.)'))
$(eval $(call TestHostCommand,case-sensitive-fs, \
- LEDE can only be built on a case-sensitive filesystem, \
+ 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 00[012][012]))
+ umask | grep -xE 0?0[012][012]))
+ifndef IB
$(eval $(call SetupHostCommand,gcc, \
- Please install the GNU C Compiler (gcc), \
- $(CC) --version | grep gcc, \
- gcc --version | grep gcc, \
- gcc49 --version | grep gcc, \
- gcc48 --version | grep gcc, \
- gcc47 --version | grep gcc, \
- gcc46 --version | grep gcc, \
- gcc --version | grep Apple.LLVM ))
+ Please install the GNU C Compiler (gcc) 6 or later, \
+ $(CC) -dumpversion | grep -E '^([6-9]\.?|1[0-9]\.?)', \
+ gcc -dumpversion | grep -E '^([6-9]\.?|1[0-9]\.?)', \
+ gcc --version | grep -E 'Apple.(LLVM|clang)' ))
$(eval $(call TestHostCommand,working-gcc, \
- Please reinstall the GNU C Compiler - it appears to be broken, \
+ Please reinstall the GNU C Compiler (6 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++), \
- $(CXX) --version | grep g++, \
- g++ --version | grep g++, \
- g++49 --version | grep g++, \
- g++48 --version | grep g++, \
- g++47 --version | grep g++, \
- g++46 --version | grep g++, \
- g++ --version | grep Apple.LLVM ))
+ Please install the GNU C++ Compiler (g++) 6 or later, \
+ $(CXX) -dumpversion | grep -E '^([6-9]\.?|1[0-9]\.?)', \
+ g++ -dumpversion | grep -E '^([6-9]\.?|1[0-9]\.?)', \
+ g++ --version | grep -E 'Apple.(LLVM|clang)' ))
$(eval $(call TestHostCommand,working-g++, \
- Please reinstall the GNU C++ Compiler - it appears to be broken, \
+ Please reinstall the GNU C++ Compiler (6 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))
@@ -61,6 +53,7 @@ $(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))
+endif # IB
ifeq ($(HOST_OS),Linux)
zlib_link_flags := -Wl,-Bstatic -lz -Wl,-Bdynamic
@@ -68,16 +61,26 @@ else
zlib_link_flags := -lz
endif
-$(eval $(call TestHostCommand,zlib, \
- Please install a static zlib. (Missing libz.a or zlib.h), \
- echo 'int main(int argc, char **argv) { gzdopen(0, "rb"); return 0; }' | \
- gcc -include zlib.h -x c -o $(TMP_DIR)/a.out - $(zlib_link_flags)))
+$(eval $(call TestHostCommand,perl-data-dumper, \
+ Please install the Perl Data::Dumper module, \
+ perl -MData::Dumper -e 1))
+
+$(eval $(call TestHostCommand,perl-findbin, \
+ Please install the Perl FindBin module, \
+ perl -MFindBin -e 1))
+
+$(eval $(call TestHostCommand,perl-file-copy, \
+ Please install the Perl File::Copy module, \
+ perl -MFile::Copy -e 1))
+
+$(eval $(call TestHostCommand,perl-file-compare, \
+ Please install the Perl File::Compare module, \
+ perl -MFile::Compare -e 1))
$(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, \
@@ -90,21 +93,26 @@ $(eval $(call SetupHostCommand,find,Please install GNU 'find', \
$(eval $(call SetupHostCommand,bash,Please install GNU 'bash', \
bash --version 2>&1 | grep GNU))
+$(eval $(call SetupHostCommand,xargs, \
+ Please install 'xargs' that supports '-r/--no-run-if-empty', \
+ gxargs -r --version, \
+ xargs -r --version))
+
$(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,diff,Please install GNU diffutils, \
+ gdiff --version 2>&1 | grep GNU, \
+ diff --version 2>&1 | grep GNU))
$(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,, \
+$(eval $(call SetupHostCommand,seq,Please install seq, \
gseq --version, \
- seq --version))
+ seq --version 2>&1 | grep seq))
$(eval $(call SetupHostCommand,awk,Please install GNU 'awk', \
gawk --version 2>&1 | grep GNU, \
@@ -114,11 +122,15 @@ $(eval $(call SetupHostCommand,grep,Please install GNU 'grep', \
ggrep --version 2>&1 | grep GNU, \
grep --version 2>&1 | grep GNU))
+$(eval $(call SetupHostCommand,egrep,Please install GNU 'grep', \
+ gegrep --version 2>&1 | grep GNU, \
+ egrep --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 *--'))
+ getopt -o t --long test -- --test | grep '^ *--test *--', \
+ /usr/local/opt/gnu-getopt/bin/getopt -o t --long test -- --test | grep '^ *--test *--'))
$(eval $(call SetupHostCommand,stat,Cannot find a file stat utility, \
gnustat -c%s $(TOPDIR)/Makefile, \
@@ -135,13 +147,28 @@ $(eval $(call SetupHostCommand,bzip2,Please install 'bzip2', \
$(eval $(call SetupHostCommand,wget,Please install GNU 'wget', \
wget --version | grep GNU))
+$(eval $(call SetupHostCommand,install,Please install GNU 'install', \
+ install --version | grep GNU, \
+ ginstall --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 CleanupPython2))
+
+$(eval $(call SetupHostCommand,python,Please install Python >= 3.6, \
+ python3.9 -V 2>&1 | grep 'Python 3', \
+ python3.8 -V 2>&1 | grep 'Python 3', \
+ python3.7 -V 2>&1 | grep 'Python 3', \
+ python3.6 -V 2>&1 | grep 'Python 3', \
+ python3 -V 2>&1 | grep -E 'Python 3\.[6-9]\.?'))
+
+$(eval $(call SetupHostCommand,python3,Please install Python >= 3.6, \
+ python3.9 -V 2>&1 | grep 'Python 3', \
+ python3.8 -V 2>&1 | grep 'Python 3', \
+ python3.7 -V 2>&1 | grep 'Python 3', \
+ python3.6 -V 2>&1 | grep 'Python 3', \
+ python3 -V 2>&1 | grep -E 'Python 3\.[6-9]\.?'))
$(eval $(call SetupHostCommand,git,Please install Git (git-core) >= 1.7.12.2, \
git --exec-path | xargs -I % -- grep -q -- --recursive %/git-submodule))
@@ -149,6 +176,12 @@ $(eval $(call SetupHostCommand,git,Please install Git (git-core) >= 1.7.12.2, \
$(eval $(call SetupHostCommand,file,Please install the 'file' package, \
file --version 2>&1 | grep file))
+$(eval $(call SetupHostCommand,rsync,Please install 'rsync', \
+ rsync --version </dev/null))
+
+$(eval $(call SetupHostCommand,which,Please install 'which', \
+ which which | grep which))
+
$(STAGING_DIR_HOST)/bin/mkhash: $(SCRIPT_DIR)/mkhash.c
mkdir -p $(dir $@)
$(CC) -O2 -I$(TOPDIR)/tools/include -o $@ $<
diff --git a/include/prereq.mk b/include/prereq.mk
index 6cb590e360..23d5ded9b2 100644
--- a/include/prereq.mk
+++ b/include/prereq.mk
@@ -1,9 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
-# Copyright (C) 2006-2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
+# Copyright (C) 2006-2020 OpenWrt.org
ifneq ($(__prereq_inc),1)
__prereq_inc:=1
@@ -66,6 +63,18 @@ define RequireHeader
$$(eval $$(call Require,$(1),$(2)))
endef
+define CleanupPython2
+ define Require/python2-cleanup
+ if [ -f "$(STAGING_DIR_HOST)/bin/python" ] && \
+ $(STAGING_DIR_HOST)/bin/python -V 2>&1 | \
+ grep -q 'Python 2'; then \
+ rm $(STAGING_DIR_HOST)/bin/python; \
+ fi
+ endef
+
+ $$(eval $$(call Require,python2-cleanup))
+endef
+
define QuoteHostCommand
'$(subst ','"'"',$(strip $(1)))'
endef
@@ -90,7 +99,8 @@ define SetupHostCommand
for cmd in $(call QuoteHostCommand,$(3)) $(call QuoteHostCommand,$(4)) \
$(call QuoteHostCommand,$(5)) $(call QuoteHostCommand,$(6)) \
$(call QuoteHostCommand,$(7)) $(call QuoteHostCommand,$(8)) \
- $(call QuoteHostCommand,$(9)); do \
+ $(call QuoteHostCommand,$(9)) $(call QuoteHostCommand,$(10)) \
+ $(call QuoteHostCommand,$(11)) $(call QuoteHostCommand,$(12)); do \
if [ -n "$$$$$$$$cmd" ]; then \
bin="$$$$$$$$(PATH="$(subst $(space),:,$(filter-out $(STAGING_DIR_HOST)/%,$(subst :,$(space),$(PATH))))" \
which "$$$$$$$${cmd%% *}")"; \
diff --git a/include/quilt.mk b/include/quilt.mk
index 61dcc7964c..6d25469daf 100644
--- a/include/quilt.mk
+++ b/include/quilt.mk
@@ -1,8 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
-# Copyright (C) 2007-2009 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
+# Copyright (C) 2007-2020 OpenWrt.org
ifeq ($(TARGET_BUILD),1)
PKG_BUILD_DIR:=$(LINUX_DIR)
@@ -94,17 +92,17 @@ endef
kernel_files=$(foreach fdir,$(GENERIC_FILES_DIR) $(FILES_DIR),$(fdir)/.)
define Kernel/Patch/Default
- $(if $(QUILT),rm -rf $(PKG_BUILD_DIR)/patches; mkdir -p $(PKG_BUILD_DIR)/patches)
+ $(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,$(PKG_BUILD_DIR),$(GENERIC_BACKPORT_DIR),generic-backport/)
- $(call PatchDir,$(PKG_BUILD_DIR),$(GENERIC_PATCH_DIR),generic/)
- $(call PatchDir,$(PKG_BUILD_DIR),$(GENERIC_HACK_DIR),generic-hack/)
- $(call PatchDir,$(PKG_BUILD_DIR),$(PATCH_DIR),platform/)
+ $(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
@@ -161,7 +159,7 @@ define Quilt/Template
false; \
}
@[ -n "$$$$(ls $(1)/patches/series)" -o \
- "$$$$(cat $(1)/patches/series | mkhash md5)" = "$$(sort $(1)/patches/series | mkhash md5)" ] || { \
+ "$$$$(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; \
}
diff --git a/include/rootfs.mk b/include/rootfs.mk
index 74785cbbd3..f2ed648d2f 100644
--- a/include/rootfs.mk
+++ b/include/rootfs.mk
@@ -1,5 +1,3 @@
-include $(INCLUDE_DIR)/feeds.mk
-
ifdef CONFIG_USE_MKLIBS
define mklibs
rm -rf $(TMP_DIR)/mklibs-progs $(TMP_DIR)/mklibs-out
@@ -49,21 +47,29 @@ TARGET_DIR_ORIG := $(TARGET_ROOTFS_DIR)/root.orig-$(BOARD)
ifdef CONFIG_CLEAN_IPKG
define clean_ipkg
- -find $(1)/usr/lib/opkg -type f -and -not -name '*.control' | $(XARGS) rm -rf
+ -find $(1)/usr/lib/opkg/info -type f -and -not -name '*.control' -delete
-sed -i -ne '/^Require-User: /p' $(1)/usr/lib/opkg/info/*.control
- -find $(1)/usr/lib/opkg -empty | $(XARGS) rm -rf
+ awk ' \
+ BEGIN { conffiles = 0; print "Conffiles:" } \
+ /^Conffiles:/ { conffiles = 1; next } \
+ !/^ / { conffiles = 0; next } \
+ conffiles == 1 { print } \
+ ' $(1)/usr/lib/opkg/status >$(1)/usr/lib/opkg/status.new
+ mv $(1)/usr/lib/opkg/status.new $(1)/usr/lib/opkg/status
+ -find $(1)/usr/lib/opkg -empty -delete
endef
endif
define prepare_rootfs
- @if [ -d $(TOPDIR)/files ]; then \
- $(call file_copy,$(TOPDIR)/files/.,$(1)); \
- fi
+ $(if $(2),@if [ -d '$(2)' ]; then \
+ $(call file_copy,$(2)/.,$(1)); \
+ fi)
@mkdir -p $(1)/etc/rc.d
+ @mkdir -p $(1)/var/lock
@( \
cd $(1); \
for script in ./usr/lib/opkg/info/*.postinst; do \
- IPKG_INSTROOT=$(1) $$(which bash) $$script; \
+ IPKG_INSTROOT=$(1) $$(command -v bash) $$script; \
ret=$$?; \
if [ $$ret -ne 0 ]; then \
echo "postinst script $$script has failed with exit code $$ret" >&2; \
@@ -72,18 +78,24 @@ define prepare_rootfs
done; \
for script in ./etc/init.d/*; do \
grep '#!/bin/sh /etc/rc.common' $$script >/dev/null || continue; \
- IPKG_INSTROOT=$(1) $$(which bash) ./etc/rc.common $$script enable; \
+ if ! echo " $(3) " | grep -q " $$(basename $$script) "; then \
+ IPKG_INSTROOT=$(1) $$(command -v bash) ./etc/rc.common $$script enable; \
+ echo "Enabling" $$(basename $$script); \
+ else \
+ IPKG_INSTROOT=$(1) $$(command -v bash) ./etc/rc.common $$script disable; \
+ echo "Disabling" $$(basename $$script); \
+ fi; \
done || true \
)
$(if $(SOURCE_DATE_EPOCH),sed -i "s/Installed-Time: .*/Installed-Time: $(SOURCE_DATE_EPOCH)/" $(1)/usr/lib/opkg/status)
- @-find $(1) -name CVS | $(XARGS) rm -rf
- @-find $(1) -name .svn | $(XARGS) rm -rf
- @-find $(1) -name .git | $(XARGS) rm -rf
- @-find $(1) -name '.#*' | $(XARGS) rm -f
- rm -rf $(1)/tmp/*
- rm -f $(1)/usr/lib/opkg/lists/*
- rm -f $(1)/usr/lib/opkg/info/*.postinst*
- rm -f $(1)/usr/lib/opkg/info/*.prerm*
+ @-find $(1) -name CVS -o -name .svn -o -name .git -o -name '.#*' | $(XARGS) rm -rf
+ rm -rf \
+ $(1)/boot \
+ $(1)/tmp/* \
+ $(1)/usr/lib/opkg/info/*.postinst* \
+ $(1)/usr/lib/opkg/lists/* \
+ $(1)/var/lock/*.lock
$(call clean_ipkg,$(1))
$(call mklibs,$(1))
+ $(if $(SOURCE_DATE_EPOCH),find $(1)/ -mindepth 1 -execdir touch -hcd "@$(SOURCE_DATE_EPOCH)" "{}" +)
endef
diff --git a/include/scan.mk b/include/scan.mk
index 86d9576c82..aee24cb3e5 100644
--- a/include/scan.mk
+++ b/include/scan.mk
@@ -1,4 +1,5 @@
include $(TOPDIR)/include/verbose.mk
+include $(TOPDIR)/rules.mk
TMP_DIR:=$(TOPDIR)/tmp
all: $(TMP_DIR)/.$(SCAN_TARGET)
@@ -12,20 +13,35 @@ OVERRIDELIST:=$(TMP_DIR)/info/.overrides-$(SCAN_TARGET)-$(SCAN_COOKIE)
export PATH:=$(TOPDIR)/staging_dir/host/bin:$(PATH)
+define feedname
+$(if $(patsubst feeds/%,,$(1)),,$(word 2,$(subst /, ,$(1))))
+endef
+
+ifeq ($(SCAN_NAME),target)
+ SCAN_DEPS=image/Makefile profiles/*.mk $(TOPDIR)/include/kernel*.mk $(TOPDIR)/include/target.mk image/*.mk
+else
+ SCAN_DEPS=$(TOPDIR)/include/package*.mk
+ifneq ($(call feedname,$(SCAN_DIR)),)
+ SCAN_DEPS += $(TOPDIR)/feeds/$(call feedname,$(SCAN_DIR))/*.mk
+endif
+endif
+
ifeq ($(IS_TTY),1)
- define progress
+ ifneq ($(strip $(NO_COLOR)),1)
+ define progress
printf "\033[M\r$(1)" >&2;
- endef
+ endef
+ else
+ define progress
+ printf "\r$(1)" >&2;
+ endef
+ endif
else
define progress
:;
endef
endif
-define feedname
-$(if $(patsubst feeds/%,,$(1)),,$(word 2,$(subst /, ,$(1))))
-endef
-
define PackageDir
$(TMP_DIR)/.$(SCAN_TARGET): $(TMP_DIR)/info/.$(SCAN_TARGET)-$(1)
$(TMP_DIR)/info/.$(SCAN_TARGET)-$(1): $(SCAN_DIR)/$(2)/Makefile $(foreach DEP,$(DEPS_$(SCAN_DIR)/$(2)/Makefile) $(SCAN_DEPS),$(wildcard $(if $(filter /%,$(DEP)),$(DEP),$(SCAN_DIR)/$(2)/$(DEP))))
@@ -85,7 +101,7 @@ $(TMP_DIR)/info/.files-$(SCAN_TARGET).mk: $(FILELIST)
$(TARGET_STAMP)::
+( \
$(NO_TRACE_MAKE) $(FILELIST); \
- MD5SUM=$$(cat $(FILELIST) $(OVERRIDELIST) | mkhash md5 | awk '{print $$1}'); \
+ MD5SUM=$$(cat $(FILELIST) $(OVERRIDELIST) | $(MKHASH) md5 | awk '{print $$1}'); \
[ -f "$@.$$MD5SUM" ] || { \
rm -f $@.*; \
touch $@.$$MD5SUM; \
diff --git a/include/scons.mk b/include/scons.mk
deleted file mode 100644
index 2b76710542..0000000000
--- a/include/scons.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-export PLATFORM=posix
-
-SCONS_VARS = \
- CC="$(TARGET_CC_NOCACHE)" \
- CXX="$(TARGET_CXX_NOCACHE)" \
- CFLAGS="$(TARGET_CFLAGS) $(EXTRA_CFLAGS)" \
- CXXFLAGS="$(TARGET_CXXFLAGS) $(EXTRA_CXXFLAGS)" \
- CPPFLAGS="$(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS)" \
- LDFLAGS="$(TARGET_LDFLAGS) $(EXTRA_LDFLAGS)" \
- DESTDIR="$(PKG_INSTALL_DIR)"
-
-define Build/Configure/Default
- (cd $(PKG_BUILD_DIR); \
- $(SCONS_VARS) \
- scons \
- prefix=/usr \
- $(SCONS_OPTIONS) \
- install \
- )
-endef
-
-define Build/Compile
-endef
diff --git a/include/subdir.mk b/include/subdir.mk
index 79a80528ae..be080859b7 100644
--- a/include/subdir.mk
+++ b/include/subdir.mk
@@ -1,9 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
-# Copyright (C) 2007 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
+# Copyright (C) 2007-2020 OpenWrt.org
ifeq ($(MAKECMDGOALS),prereq)
SUBTARGETS:=prereq
@@ -23,7 +20,7 @@ define subtarget
endef
define ERROR
- ($(call MESSAGE, $(2)); $(if $(BUILD_LOG), echo "$(2)" >> $(BUILD_LOG_DIR)/$(1)/error.txt))
+ ($(call MESSAGE, $(2)); $(if $(BUILD_LOG), echo "$(2)" >> $(BUILD_LOG_DIR)/$(1)/error.txt;) $(if $(3),, exit 1;))
endef
lastdir=$(word $(words $(subst /, ,$(1))),$(subst /, ,$(1)))
@@ -43,6 +40,7 @@ log_make = \
$(if $(BUILD_LOG), \
set -o pipefail; \
mkdir -p $(BUILD_LOG_DIR)/$(1)$(if $(4),/$(4));) \
+ $(SCRIPT_DIR)/time.pl "time: $(1)$(if $(4),/$(4))/$(if $(3),$(3)-)$(2)" \
$$(SUBMAKE) $(subdir_make_opts) $(if $(3),$(3)-)$(2) \
$(if $(BUILD_LOG),SILENT= 2>&1 | tee $(BUILD_LOG_DIR)/$(1)$(if $(4),/$(4))/$(if $(3),$(3)-)$(2).txt)
@@ -65,7 +63,7 @@ define subdir
$(foreach btype,$(buildtypes-$(bd)),
$(call warn_eval,$(1)/$(bd),t,T,$(1)/$(bd)/$(btype)/$(target): $(if $(NO_DEPS)$(QUILT),,$($(1)/$(bd)/$(btype)/$(target)) $(call $(1)//$(btype)/$(target),$(1)/$(bd)/$(btype))))
$(call log_make,$(1)/$(bd),$(target),$(btype),$(filter-out __default,$(variant))) \
- $(if $(findstring $(bd),$($(1)/builddirs-ignore-$(btype)-$(target))), || $(call ERROR,$(1), ERROR: $(1)/$(bd) [$(btype)] failed to build.))
+ || $(call ERROR,$(2), ERROR: $(1)/$(bd) [$(btype)] failed to build.,$(findstring $(bd),$($(1)/builddirs-ignore-$(btype)-$(target))))
$(if $(call diralias,$(bd)),$(call warn_eval,$(1)/$(bd),l,T,$(1)/$(call diralias,$(bd))/$(btype)/$(target): $(1)/$(bd)/$(btype)/$(target)))
)
$(call warn_eval,$(1)/$(bd),t,T,$(1)/$(bd)/$(target): $(if $(NO_DEPS)$(QUILT),,$($(1)/$(bd)/$(target)) $(call $(1)//$(target),$(1)/$(bd))))
@@ -73,7 +71,7 @@ define subdir
$(if $(BUILD_LOG),@mkdir -p $(BUILD_LOG_DIR)/$(1)/$(bd)/$(filter-out __default,$(variant)))
$(if $($(1)/autoremove),$(call rebuild_check,$(1)/$(bd),$(target),,$(filter-out __default,$(variant))))
$(call log_make,$(1)/$(bd),$(target),,$(filter-out __default,$(variant))) \
- $(if $(findstring $(bd),$($(1)/builddirs-ignore-$(target))), || $(call ERROR,$(1), ERROR: $(1)/$(bd) failed to build$(if $(filter-out __default,$(variant)), (build variant: $(variant))).))
+ || $(call ERROR,$(1), ERROR: $(1)/$(bd) failed to build$(if $(filter-out __default,$(variant)), (build variant: $(variant))).,$(findstring $(bd),$($(1)/builddirs-ignore-$(target))))
)
$(if $(PREREQ_ONLY)$(DUMP_TARGET_DB),,
# aliases
diff --git a/include/target.mk b/include/target.mk
index ef7d8555d8..7526224972 100644
--- a/include/target.mk
+++ b/include/target.mk
@@ -1,10 +1,7 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
# 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
@@ -13,12 +10,48 @@ __target_inc=1
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
+DEFAULT_PACKAGES:=\
+ base-files \
+ ca-bundle \
+ dropbear \
+ fstools \
+ libc \
+ libgcc \
+ libustream-wolfssl \
+ logd \
+ mtd \
+ netifd \
+ opkg \
+ uci \
+ uclient-fetch \
+ urandom-seed \
+ urngd
+
+ifneq ($(CONFIG_SELINUX),)
+DEFAULT_PACKAGES+=busybox-selinux procd-selinux
+else
+DEFAULT_PACKAGES+=busybox procd
+endif
+
+# For the basic set
+DEFAULT_PACKAGES.basic:=
# For nas targets
-DEFAULT_PACKAGES.nas:=block-mount fdisk lsblk mdadm
+DEFAULT_PACKAGES.nas:=\
+ block-mount \
+ fdisk \
+ lsblk \
+ mdadm
# For router targets
-DEFAULT_PACKAGES.router:=dnsmasq iptables ip6tables ppp ppp-mod-pppoe firewall odhcpd odhcp6c
-DEFAULT_PACKAGES.bootloader:=
+DEFAULT_PACKAGES.router:=\
+ dnsmasq \
+ firewall \
+ ip6tables \
+ iptables \
+ kmod-ipt-offload \
+ odhcp6c \
+ odhcpd-ipv6only \
+ ppp \
+ ppp-mod-pppoe
ifneq ($(DUMP),)
all: dumpinfo
@@ -55,7 +88,7 @@ endif
DEFAULT_PACKAGES += $(DEFAULT_PACKAGES.$(DEVICE_TYPE))
filter_packages = $(filter-out -% $(patsubst -%,%,$(filter -%,$(1))),$(1))
-extra_packages = $(if $(filter wpad-mini wpad nas,$(1)),iwinfo)
+extra_packages = $(if $(filter wpad wpad-% nas,$(1)),iwinfo)
define ProfileDefault
NAME:=
@@ -68,6 +101,7 @@ 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)"; ) \
@@ -148,11 +182,11 @@ ifeq ($(CONFIG_TARGET),env)
LINUX_RECONFIG_TARGET = $(TOPDIR)/env/kernel-config
endif
-__linux_confcmd = $(SCRIPT_DIR)/kconfig.pl $(2) $(patsubst %,+,$(wordlist 2,9999,$(1))) $(1)
+__linux_confcmd = $(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)),'>')
+LINUX_CONF_CMD = $(SCRIPT_DIR)/kconfig.pl $(call __linux_confcmd,$(LINUX_KCONFIG_LIST))
+LINUX_RECONF_CMD = $(SCRIPT_DIR)/kconfig.pl $(call __linux_confcmd,$(LINUX_RECONFIG_LIST))
+LINUX_RECONF_DIFF = $(SCRIPT_DIR)/kconfig.pl - '>' $(call __linux_confcmd,$(filter-out $(LINUX_RECONFIG_TARGET),$(LINUX_RECONFIG_LIST))) $(1) $(GENERIC_PLATFORM_DIR)/config-filter
ifeq ($(DUMP),1)
BuildTarget=$(BuildTargets/DumpCurrent)
@@ -167,36 +201,19 @@ ifeq ($(DUMP),1)
CPU_CFLAGS += -mno-branch-likely
CPU_CFLAGS_mips32 = -mips32 -mtune=mips32
CPU_CFLAGS_mips64 = -mips64 -mtune=mips64 -mabi=64
+ CPU_CFLAGS_mips64r2 = -mips64r2 -mtune=mips64r2 -mabi=64
+ CPU_CFLAGS_4kec = -mips32r2 -mtune=4kec
CPU_CFLAGS_24kc = -mips32r2 -mtune=24kc
CPU_CFLAGS_74kc = -mips32r2 -mtune=74kc
- CPU_CFLAGS_octeon = -march=octeon -mabi=64
+ CPU_CFLAGS_octeonplus = -march=octeon+ -mabi=64
endif
ifeq ($(ARCH),i386)
- CPU_TYPE ?= pentium
- CPU_CFLAGS_pentium = -march=pentium-mmx
+ CPU_TYPE ?= pentium-mmx
+ CPU_CFLAGS_pentium-mmx = -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_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
@@ -239,6 +256,11 @@ ifeq ($(DUMP),1)
.SILENT: $(TMP_CONFIG)
.PRECIOUS: $(TMP_CONFIG)
+ ifdef KERNEL_TESTING_PATCHVER
+ ifneq ($(KERNEL_TESTING_PATCHVER),$(KERNEL_PATCHVER))
+ FEATURES += testing-kernel
+ endif
+ endif
ifneq ($(CONFIG_OF),)
FEATURES += dt
endif
@@ -269,9 +291,7 @@ ifeq ($(DUMP),1)
FEATURES += virtio
endif
ifneq ($(CONFIG_CPU_MIPS32_R2),)
- ifneq ($(CPU_SUBTYPE),nomips16)
- FEATURES += mips16
- endif
+ FEATURES += mips16
endif
FEATURES += $(foreach v,6 7,$(if $(CONFIG_CPU_V$(v)),arm_v$(v)))
@@ -299,6 +319,7 @@ define BuildTargets/DumpCurrent
echo 'Target-Optimization: $(if $(CFLAGS),$(CFLAGS),$(DEFAULT_CFLAGS))'; \
echo 'CPU-Type: $(CPU_TYPE)$(if $(CPU_SUBTYPE),+$(CPU_SUBTYPE))'; \
echo 'Linux-Version: $(LINUX_VERSION)'; \
+ $(if $(LINUX_TESTING_VERSION),echo 'Linux-Testing-Version: $(LINUX_TESTING_VERSION)';) \
echo 'Linux-Release: $(LINUX_RELEASE)'; \
echo 'Linux-Kernel-Arch: $(LINUX_KARCH)'; \
$(if $(SUBTARGET),,$(if $(DEFAULT_SUBTARGET), echo 'Default-Subtarget: $(DEFAULT_SUBTARGET)'; )) \
diff --git a/include/toolchain-build.mk b/include/toolchain-build.mk
index 883d74d25c..b7a253b71b 100644
--- a/include/toolchain-build.mk
+++ b/include/toolchain-build.mk
@@ -1,9 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
-# Copyright (C) 2009 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
+# Copyright (C) 2009-2020 OpenWrt.org
override CONFIG_AUTOREBUILD=
override CONFIG_AUTOREMOVE=
@@ -12,6 +9,7 @@ HOST_BUILD_PREFIX:=$(TOOLCHAIN_DIR)
BUILD_DIR_HOST:=$(BUILD_DIR_TOOLCHAIN)
include $(INCLUDE_DIR)/host-build.mk
+include $(INCLUDE_DIR)/hardening.mk
HOST_STAMP_PREPARED=$(HOST_BUILD_DIR)/.prepared
diff --git a/include/toplevel.mk b/include/toplevel.mk
index 658eb4ce47..f5a2593a10 100644
--- a/include/toplevel.mk
+++ b/include/toplevel.mk
@@ -1,14 +1,10 @@
-# 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.
+# SPDX-License-Identifier: GPL-2.0-only
#
+# Copyright (C) 2007-2020 OpenWrt.org
PREP_MK= OPENWRT_BUILD= QUIET=0
-export IS_TTY=$(shell tty -s && echo 1 || echo 0)
+export IS_TTY=$(if $(MAKE_TERMOUT),1,0)
include $(TOPDIR)/include/verbose.mk
@@ -19,7 +15,6 @@ else
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'
@@ -29,6 +24,12 @@ export GNU_HOST_NAME:=$(shell $(TOPDIR)/scripts/config.guess)
export HOST_OS:=$(shell uname)
export HOST_ARCH:=$(shell uname -m)
+ifeq ($(HOST_OS),Darwin)
+ ifneq ($(filter /Applications/Xcode.app/% /Library/Developer/%,$(MAKE)),)
+ $(error Please use a newer version of GNU make. The version shipped by Apple is not supported)
+ endif
+endif
+
# prevent perforce from messing with the patch utility
unexport P4PORT P4USER P4CONFIG P4CLIENT
@@ -53,13 +54,6 @@ 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
@@ -82,15 +76,16 @@ _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_DEPS="$(TOPDIR)/include/package*.mk" 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_DEPS="image/Makefile profiles/*.mk $(TOPDIR)/include/kernel*.mk $(TOPDIR)/include/target.mk" SCAN_DEPTH=2 SCAN_EXTRA="" SCAN_MAKEOPTS="TARGET_BUILD=1"
+ $(_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/.packagesubdirs ] || ./scripts/feeds feed_config > tmp/.config-feeds.in
+ [ 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 subdirs tmp/.packageinfo > tmp/.packagesubdirs || { rm -f tmp/.packagesubdirs; false; }
+ ./scripts/package-metadata.pl pkgaux tmp/.packageinfo > tmp/.packageauxvars || { rm -f tmp/.packageauxvars; false; }
+ ./scripts/package-metadata.pl usergroup tmp/.packageinfo > tmp/.packageusergroup || { rm -f tmp/.packageusergroup; false; }
touch $(TOPDIR)/tmp/.build
.config: ./scripts/config/conf $(if $(CONFIG_HAVE_DOT_CONFIG),,prepare-tmpinfo)
@@ -99,17 +94,22 @@ prepare-tmpinfo: FORCE
$(_SINGLE)$(NO_TRACE_MAKE) menuconfig $(PREP_MK); \
fi
-scripts/config/mconf:
- @$(_SINGLE)$(SUBMAKE) -s -C scripts/config all CC="$(HOSTCC_WRAPPER)"
+ifeq ($(RECURSIVE_DEP_IS_ERROR),1)
+ KCONF_FLAGS=--fatalrecursive
+endif
+ifneq ($(DISTRO_PKG_CONFIG),)
+scripts/config/%onf: export PATH:=$(dir $(DISTRO_PKG_CONFIG)):$(PATH)
+endif
+scripts/config/%onf: CFLAGS+= -O2
+scripts/config/%onf:
+ @$(_SINGLE)$(SUBMAKE) $(if $(findstring s,$(OPENWRT_VERBOSE)),,-s) \
+ -C scripts/config $(notdir $@)
$(eval $(call rdep,scripts/config,scripts/config/mconf))
-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
+ $< $(KCONF_FLAGS) Config.in
config-clean: FORCE
$(_SINGLE)$(NO_TRACE_MAKE) -C scripts/config clean
@@ -118,7 +118,7 @@ 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
+ $< $(KCONF_FLAGS) --defconfig=.config Config.in
confdefault-y=allyes
confdefault-m=allmod
@@ -127,7 +127,7 @@ confdefault:=$(confdefault-$(CONFDEFAULT))
oldconfig: scripts/config/conf prepare-tmpinfo FORCE
[ -L .config ] && export KCONFIG_OVERWRITECONFIG=1; \
- $< --$(if $(confdefault),$(confdefault),old)config Config.in
+ $< $(KCONF_FLAGS) --$(if $(confdefault),$(confdefault),old)config Config.in
menuconfig: scripts/config/mconf prepare-tmpinfo FORCE
if [ \! -e .config -a -e $(HOME)/.openwrt/defconfig ]; then \
@@ -136,7 +136,20 @@ menuconfig: scripts/config/mconf prepare-tmpinfo FORCE
[ -L .config ] && export KCONFIG_OVERWRITECONFIG=1; \
$< Config.in
-prepare_kernel_conf: .config FORCE
+nconfig: scripts/config/nconf 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 toolchain/install FORCE
ifeq ($(wildcard staging_dir/host/bin/quilt),)
prepare_kernel_conf:
@@ -148,12 +161,20 @@ endif
kernel_oldconfig: prepare_kernel_conf
$(_SINGLE)$(NO_TRACE_MAKE) -C target/linux oldconfig
+ifneq ($(DISTRO_PKG_CONFIG),)
+kernel_menuconfig: export PATH:=$(dir $(DISTRO_PKG_CONFIG)):$(PATH)
+kernel_nconfig: export PATH:=$(dir $(DISTRO_PKG_CONFIG)):$(PATH)
+kernel_xconfig: export PATH:=$(dir $(DISTRO_PKG_CONFIG)):$(PATH)
+endif
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
+kernel_xconfig: prepare_kernel_conf
+ $(_SINGLE)$(NO_TRACE_MAKE) -C target/linux xconfig
+
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 || { \
@@ -198,7 +219,7 @@ ifeq ($(SDK),1)
%::
@+$(PREP_MK) $(NO_TRACE_MAKE) -r -s prereq
- @./scripts/config/conf --defconfig=.config Config.in
+ @./scripts/config/conf $(KCONF_FLAGS) --defconfig=.config Config.in
@+$(ULIMIT_FIX) $(SUBMAKE) -r $@
else
@@ -207,7 +228,7 @@ 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; \
+ ./scripts/config/conf $(KCONF_FLAGS) --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 \
@@ -234,10 +255,10 @@ package/symlinks-clean:
./scripts/feeds uninstall -a
help:
- cat README
+ cat README.md
distclean:
- rm -rf bin build_dir .config* dl feeds key-build* logs package/feeds package/openwrt-packages staging_dir tmp
+ rm -rf bin build_dir .ccache .config* dl feeds key-build* logs package/feeds staging_dir tmp
@$(_SINGLE)$(SUBMAKE) -C scripts/config clean
ifeq ($(findstring v,$(DEBUG)),)
diff --git a/include/trusted-firmware-a.mk b/include/trusted-firmware-a.mk
new file mode 100644
index 0000000000..dd740c45f2
--- /dev/null
+++ b/include/trusted-firmware-a.mk
@@ -0,0 +1,95 @@
+PKG_NAME ?= trusted-firmware-a
+PKG_CPE_ID ?= cpe:/a:arm:arm_trusted_firmware
+
+ifndef PKG_SOURCE_PROTO
+PKG_SOURCE = trusted-firmware-a-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/snapshot
+endif
+
+PKG_BUILD_DIR = $(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
+
+PKG_TARGETS := bin
+PKG_FLAGS:=nonshared
+
+PKG_LICENSE:=BSD-3-Clause
+PKG_LICENSE_FILES:=docs/license.rst
+
+PKG_BUILD_PARALLEL:=1
+
+export GCC_HONOUR_COPTS=s
+
+define Package/trusted-firmware-a/install/default
+ $(CP) $(patsubst %,$(PKG_BUILD_DIR)/build/$(PLAT)/release/%,$(TFA_IMAGE)) $(1)/
+endef
+
+Package/trusted-firmware-a/install = $(Package/trusted-firmware-a/install/default)
+
+define Trusted-Firmware-A/Init
+ BUILD_TARGET:=
+ BUILD_SUBTARGET:=
+ BUILD_DEVICES:=
+ NAME:=
+ DEPENDS:=
+ HIDDEN:=
+ DEFAULT:=
+ PLAT:=
+ VARIANT:=$(1)
+ TFA_IMAGE:=
+endef
+
+TARGET_DEP = TARGET_$(BUILD_TARGET)$(if $(BUILD_SUBTARGET),_$(BUILD_SUBTARGET))
+
+define Build/Trusted-Firmware-A/Target
+ $(eval $(call Trusted-Firmware-A/Init,$(1)))
+ $(eval $(call Trusted-Firmware-A/Default,$(1)))
+ $(eval $(call Trusted-Firmware-A/$(1),$(1)))
+
+ define Package/trusted-firmware-a-$(1)
+ SECTION:=boot
+ CATEGORY:=Boot Loaders
+ TITLE:=Trusted-Firmware-A for $(NAME)
+ VARIANT:=$(VARIANT)
+ DEPENDS:=@!IN_SDK $(DEPENDS)
+ HIDDEN:=$(HIDDEN)
+ ifneq ($(BUILD_TARGET),)
+ DEPENDS += @$(TARGET_DEP)
+ ifneq ($(BUILD_DEVICES),)
+ DEFAULT := y if ($(TARGET_DEP)_Default \
+ $(patsubst %,|| $(TARGET_DEP)_DEVICE_%,$(BUILD_DEVICES)) \
+ $(patsubst %,|| $(patsubst TARGET_%,TARGET_DEVICE_%,$(TARGET_DEP))_DEVICE_%,$(BUILD_DEVICES)))
+ endif
+ endif
+ $(if $(DEFAULT),DEFAULT:=$(DEFAULT))
+ URL:=https://www.trustedfirmware.org/projects/tf-a/
+ endef
+
+ define Package/trusted-firmware-a-$(1)/install
+ $$(Package/trusted-firmware-a/install)
+ endef
+endef
+
+
+define Build/Compile/Trusted-Firmware-A
+ +$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
+ CROSS_COMPILE=$(TARGET_CROSS) \
+ OPENSSL_DIR=$(STAGING_DIR_HOST) \
+ PLAT=$(PLAT) \
+ BUILD_STRING="OpenWrt v$(PKG_VERSION)-$(PKG_RELEASE) ($(VARIANT))" \
+ $(TFA_MAKE_FLAGS)
+endef
+
+define BuildPackage/Trusted-Firmware-A/Defaults
+ Build/Configure/Default = $$$$(Build/Configure/Trusted-Firmware-A)
+ Build/Compile/Default = $$$$(Build/Compile/Trusted-Firmware-A)
+endef
+
+define BuildPackage/Trusted-Firmware-A
+ $(eval $(call BuildPackage/Trusted-Firmware-A/Defaults))
+ $(foreach type,$(if $(DUMP),$(TFA_TARGETS),$(BUILD_VARIANT)), \
+ $(eval $(call Build/Trusted-Firmware-A/Target,$(type)))
+ )
+ $(eval $(call Build/DefaultTargets))
+ $(foreach type,$(if $(DUMP),$(TFA_TARGETS),$(BUILD_VARIANT)), \
+ $(call BuildPackage,trusted-firmware-a-$(type))
+ )
+endef
diff --git a/include/u-boot.mk b/include/u-boot.mk
index 4b3ff69d6b..c0a1e87bf3 100644
--- a/include/u-boot.mk
+++ b/include/u-boot.mk
@@ -3,7 +3,8 @@ PKG_NAME ?= u-boot
ifndef PKG_SOURCE_PROTO
PKG_SOURCE = $(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL = \
- http://sources.lede-project.org \
+ https://mirror.cyberbits.eu/u-boot \
+ https://ftp.denx.de/pub/u-boot \
ftp://ftp.denx.de/pub/u-boot
endif
@@ -42,8 +43,9 @@ TARGET_DEP = TARGET_$(BUILD_TARGET)$(if $(BUILD_SUBTARGET),_$(BUILD_SUBTARGET))
UBOOT_MAKE_FLAGS = \
HOSTCC="$(HOSTCC)" \
- HOSTCFLAGS='$(HOST_CFLAGS) $$$$(HOSTCPPFLAGS)' \
- HOSTLDFLAGS=""
+ HOSTCFLAGS="$(HOST_CFLAGS) $(HOST_CPPFLAGS) -std=gnu11" \
+ HOSTLDFLAGS="$(HOST_LDFLAGS)" \
+ $(if $(findstring c,$(OPENWRT_VERBOSE)),V=1,V='')
define Build/U-Boot/Target
$(eval $(call U-Boot/Init,$(1)))
diff --git a/include/unpack.mk b/include/unpack.mk
index a139827490..ebece69978 100644
--- a/include/unpack.mk
+++ b/include/unpack.mk
@@ -1,9 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
-# Copyright (C) 2006-2007 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
+# Copyright (C) 2006-2020 OpenWrt.org
HOST_TAR:=$(TAR)
TAR_CMD=$(HOST_TAR) -C $(1)/.. $(TAR_OPTIONS)
@@ -31,6 +28,10 @@ ifeq ($(strip $(UNPACK_CMD)),)
EXT:=$(call ext,$(PKG_SOURCE:.$(EXT)=))
DECOMPRESS_CMD:=xzcat $(DL_DIR)/$(PKG_SOURCE) |
endif
+ ifeq (zst,$(EXT))
+ EXT:=$(call ext,$(PKG_SOURCE:.$(EXT)=))
+ DECOMPRESS_CMD:=zstdcat $(DL_DIR)/$(PKG_SOURCE) |
+ endif
ifeq ($(filter tgz tbz tbz2 txz,$(EXT1)),$(EXT1))
EXT:=tar
endif
@@ -39,7 +40,7 @@ ifeq ($(strip $(UNPACK_CMD)),)
UNPACK_CMD=$(DECOMPRESS_CMD) $(TAR_CMD)
endif
ifeq ($(EXT),cpio)
- UNPACK_CMD=$(DECOMPRESS_CMD) (cd $(1)/..; cpio -i -d)
+ UNPACK_CMD=$(DECOMPRESS_CMD) (cd $(1)/..; $(STAGING_DIR_HOST)/bin/cpio -i -d)
endif
ifeq ($(EXT),zip)
UNPACK_CMD=$(UNZIP_CMD)
@@ -58,18 +59,13 @@ ifeq ($(strip $(UNPACK_CMD)),)
UNPACK_CMD=gzip -dc $(DL_DIR)/$(PKG_SOURCE) | $(TAR_CMD)
endif
endif
- ifneq ($(strip $(CRLF_WORKAROUND)),)
- CRLF_CMD := && find $(PKG_BUILD_DIR) -type f -print0 | xargs -0 perl -pi -e 's!\r$$$$!!g'
- else
- CRLF_CMD :=
- endif
endif
ifdef PKG_BUILD_DIR
- PKG_UNPACK ?= $(SH_FUNC) $(call UNPACK_CMD,$(PKG_BUILD_DIR)) $(call CRLF_CMD,$(PKG_BUILD_DIR))
+ PKG_UNPACK ?= $(SH_FUNC) $(call UNPACK_CMD,$(PKG_BUILD_DIR))
endif
ifdef HOST_BUILD_DIR
- HOST_UNPACK ?= $(SH_FUNC) $(call UNPACK_CMD,$(HOST_BUILD_DIR)) $(call CRLF_CMD,$(HOST_BUILD_DIR))
+ HOST_UNPACK ?= $(SH_FUNC) $(call UNPACK_CMD,$(HOST_BUILD_DIR))
endif
endif # PKG_SOURCE
diff --git a/include/verbose.mk b/include/verbose.mk
index b7e43f7430..3ecf842d11 100644
--- a/include/verbose.mk
+++ b/include/verbose.mk
@@ -1,9 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
-# Copyright (C) 2006 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
+# Copyright (C) 2006-2020 OpenWrt.org
ifndef OPENWRT_VERBOSE
OPENWRT_VERBOSE:=
@@ -54,7 +51,7 @@ ifeq ($(findstring s,$(OPENWRT_VERBOSE)),)
else
SILENT:=>/dev/null $(if $(findstring w,$(OPENWRT_VERBOSE)),,2>&1)
export QUIET:=1
- SUBMAKE=cmd() { $(SILENT) $(MAKE) -s $$* < /dev/null || { echo "make $$*: build failed. Please re-run make with -j1 V=s to see what's going on"; false; } } 8>&1 9>&2; cmd
+ SUBMAKE=cmd() { $(SILENT) $(MAKE) -s "$$@" < /dev/null || { echo "make $$*: build failed. Please re-run make with -j1 V=s or V=sc for a higher verbosity level to see what's going on"; false; } } 8>&1 9>&2; cmd
endif
.SILENT: $(MAKECMDGOALS)
diff --git a/include/version.mk b/include/version.mk
index 1a0d3c990b..f39e35cd09 100644
--- a/include/version.mk
+++ b/include/version.mk
@@ -1,22 +1,17 @@
+# SPDX-License-Identifier: GPL-2.0-only
#
# 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
-RELEASE:=Reboot
-
PKG_CONFIG_DEPENDS += \
+ CONFIG_VERSION_HOME_URL \
CONFIG_VERSION_BUG_URL \
CONFIG_VERSION_NUMBER \
CONFIG_VERSION_CODE \
- CONFIG_VERSION_NICK \
CONFIG_VERSION_REPO \
CONFIG_VERSION_DIST \
CONFIG_VERSION_MANUFACTURER \
@@ -25,43 +20,40 @@ PKG_CONFIG_DEPENDS += \
CONFIG_VERSION_SUPPORT_URL \
CONFIG_VERSION_HWREV \
-qstrip_escape=$(subst ','\'',$(call qstrip,$(1)))
-#'
-
sanitize = $(call tolower,$(subst _,-,$(subst $(space),-,$(1))))
-VERSION_NUMBER:=$(call qstrip_escape,$(CONFIG_VERSION_NUMBER))
+VERSION_NUMBER:=$(call qstrip,$(CONFIG_VERSION_NUMBER))
VERSION_NUMBER:=$(if $(VERSION_NUMBER),$(VERSION_NUMBER),SNAPSHOT)
-VERSION_CODE:=$(call qstrip_escape,$(CONFIG_VERSION_CODE))
+VERSION_CODE:=$(call qstrip,$(CONFIG_VERSION_CODE))
VERSION_CODE:=$(if $(VERSION_CODE),$(VERSION_CODE),$(REVISION))
-VERSION_NICK:=$(call qstrip_escape,$(CONFIG_VERSION_NICK))
-VERSION_NICK:=$(if $(VERSION_NICK),$(VERSION_NICK),$(RELEASE))
-
-VERSION_REPO:=$(call qstrip_escape,$(CONFIG_VERSION_REPO))
-VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),http://downloads.lede-project.org/snapshots)
+VERSION_REPO:=$(call qstrip,$(CONFIG_VERSION_REPO))
+VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),https://downloads.openwrt.org/snapshots)
-VERSION_DIST:=$(call qstrip_escape,$(CONFIG_VERSION_DIST))
-VERSION_DIST:=$(if $(VERSION_DIST),$(VERSION_DIST),LEDE)
+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_escape,$(CONFIG_VERSION_MANUFACTURER))
-VERSION_MANUFACTURER:=$(if $(VERSION_MANUFACTURER),$(VERSION_MANUFACTURER),LEDE)
+VERSION_MANUFACTURER:=$(call qstrip,$(CONFIG_VERSION_MANUFACTURER))
+VERSION_MANUFACTURER:=$(if $(VERSION_MANUFACTURER),$(VERSION_MANUFACTURER),OpenWrt)
-VERSION_MANUFACTURER_URL:=$(call qstrip_escape,$(CONFIG_VERSION_MANUFACTURER_URL))
-VERSION_MANUFACTURER_URL:=$(if $(VERSION_MANUFACTURER_URL),$(VERSION_MANUFACTURER_URL),http://lede-project.org/)
+VERSION_MANUFACTURER_URL:=$(call qstrip,$(CONFIG_VERSION_MANUFACTURER_URL))
+VERSION_MANUFACTURER_URL:=$(if $(VERSION_MANUFACTURER_URL),$(VERSION_MANUFACTURER_URL),https://openwrt.org/)
-VERSION_BUG_URL:=$(call qstrip_escape,$(CONFIG_VERSION_BUG_URL))
-VERSION_BUG_URL:=$(if $(VERSION_BUG_URL),$(VERSION_BUG_URL),http://bugs.lede-project.org/)
+VERSION_BUG_URL:=$(call qstrip,$(CONFIG_VERSION_BUG_URL))
+VERSION_BUG_URL:=$(if $(VERSION_BUG_URL),$(VERSION_BUG_URL),https://bugs.openwrt.org/)
-VERSION_SUPPORT_URL:=$(call qstrip_escape,$(CONFIG_VERSION_SUPPORT_URL))
-VERSION_SUPPORT_URL:=$(if $(VERSION_SUPPORT_URL),$(VERSION_SUPPORT_URL),http://forum.lede-project.org/)
+VERSION_HOME_URL:=$(call qstrip,$(CONFIG_VERSION_HOME_URL))
+VERSION_HOME_URL:=$(if $(VERSION_HOME_URL),$(VERSION_HOME_URL),https://openwrt.org/)
-VERSION_PRODUCT:=$(call qstrip_escape,$(CONFIG_VERSION_PRODUCT))
+VERSION_SUPPORT_URL:=$(call qstrip,$(CONFIG_VERSION_SUPPORT_URL))
+VERSION_SUPPORT_URL:=$(if $(VERSION_SUPPORT_URL),$(VERSION_SUPPORT_URL),https://forum.openwrt.org/)
+
+VERSION_PRODUCT:=$(call qstrip,$(CONFIG_VERSION_PRODUCT))
VERSION_PRODUCT:=$(if $(VERSION_PRODUCT),$(VERSION_PRODUCT),Generic)
-VERSION_HWREV:=$(call qstrip_escape,$(CONFIG_VERSION_HWREV))
+VERSION_HWREV:=$(call qstrip,$(CONFIG_VERSION_HWREV))
VERSION_HWREV:=$(if $(VERSION_HWREV),$(VERSION_HWREV),v0)
define taint2sym
@@ -88,25 +80,29 @@ VERSION_TAINTS := $(strip $(foreach taint,$(VERSION_TAINT_SPECS), \
PKG_CONFIG_DEPENDS += $(foreach taint,$(VERSION_TAINT_SPECS),$(call taint2sym,$(taint)))
-VERSION_SED:=$(SED) 's,%U,$(VERSION_REPO),g' \
- -e 's,%V,$(VERSION_NUMBER),g' \
- -e 's,%v,\L$(subst $(space),_,$(VERSION_NUMBER)),g' \
- -e 's,%C,$(VERSION_CODE),g' \
- -e 's,%c,\L$(subst $(space),_,$(VERSION_CODE)),g' \
- -e 's,%N,$(VERSION_NICK),g' \
- -e 's,%n,\L$(subst $(space),_,$(VERSION_NICK)),g' \
- -e 's,%D,$(VERSION_DIST),g' \
- -e 's,%d,\L$(subst $(space),_,$(VERSION_DIST)),g' \
- -e 's,%R,$(REVISION),g' \
- -e 's,%T,$(BOARD),g' \
- -e 's,%S,$(BOARD)/$(if $(SUBTARGET),$(SUBTARGET),generic),g' \
- -e 's,%A,$(ARCH_PACKAGES),g' \
- -e 's,%t,$(VERSION_TAINTS),g' \
- -e 's,%M,$(VERSION_MANUFACTURER),g' \
- -e 's,%m,$(VERSION_MANUFACTURER_URL),g' \
- -e 's,%b,$(VERSION_BUG_URL),g' \
- -e 's,%s,$(VERSION_SUPPORT_URL),g' \
- -e 's,%P,$(VERSION_PRODUCT),g' \
- -e 's,%h,$(VERSION_HWREV),g'
-
-VERSION_SED_SCRIPT:=$(subst '\'','\'\\\\\'\'',$(VERSION_SED))
+# 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'
+