aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJames <>2015-11-04 11:49:21 +0000
committerJames <>2015-11-04 11:49:21 +0000
commit716ca530e1c4515d8683c9d5be3d56b301758b66 (patch)
tree700eb5bcc1a462a5f21dcec15ce7c97ecfefa772 /include
downloadtrunk-47381-master.tar.gz
trunk-47381-master.tar.bz2
trunk-47381-master.zip
trunk-47381HEADmaster
Diffstat (limited to 'include')
-rw-r--r--include/autotools.mk170
-rw-r--r--include/cmake.mk106
-rw-r--r--include/debug.mk51
-rw-r--r--include/depends.mk48
-rw-r--r--include/device_table.txt5
-rw-r--r--include/download.mk184
-rw-r--r--include/feeds.mk39
-rw-r--r--include/hardening.mk50
-rw-r--r--include/host-build.mk206
-rw-r--r--include/host.mk51
-rw-r--r--include/image.mk585
-rw-r--r--include/kernel-build.mk144
-rw-r--r--include/kernel-defaults.mk170
-rw-r--r--include/kernel-version.mk27
-rw-r--r--include/kernel.mk240
-rw-r--r--include/netfilter.mk377
-rw-r--r--include/nls.mk40
-rw-r--r--include/package-bin.mk33
-rw-r--r--include/package-defaults.mk161
-rw-r--r--include/package-dumpinfo.mk91
-rw-r--r--include/package-ipkg.mk234
-rw-r--r--include/package-seccomp.mk15
-rw-r--r--include/package.mk315
-rw-r--r--include/prereq-build.mk170
-rw-r--r--include/prereq.mk108
-rw-r--r--include/quilt.mk170
-rw-r--r--include/scan.awk19
-rw-r--r--include/scan.mk102
-rw-r--r--include/scons.mk23
-rw-r--r--include/shell.sh37
-rw-r--r--include/site/aarch6430
-rw-r--r--include/site/aarch64_be30
-rw-r--r--include/site/arm30
-rw-r--r--include/site/armeb30
-rw-r--r--include/site/i3863
-rw-r--r--include/site/i48630
-rw-r--r--include/site/i6863
-rw-r--r--include/site/linux78
-rw-r--r--include/site/m68k28
-rw-r--r--include/site/mips30
-rw-r--r--include/site/mips6430
-rw-r--r--include/site/mips64el30
-rw-r--r--include/site/mipsel30
-rw-r--r--include/site/powerpc30
-rw-r--r--include/site/sparc30
-rw-r--r--include/site/x86_6430
-rw-r--r--include/subdir.mk76
-rw-r--r--include/target.mk298
-rw-r--r--include/toolchain-build.mk25
-rw-r--r--include/toplevel.mk224
-rw-r--r--include/uclibc++.mk16
-rw-r--r--include/unpack.mk81
-rw-r--r--include/verbose.mk67
-rw-r--r--include/version.mk93
54 files changed, 5323 insertions, 0 deletions
diff --git a/include/autotools.mk b/include/autotools.mk
new file mode 100644
index 0000000..3316998
--- /dev/null
+++ b/include/autotools.mk
@@ -0,0 +1,170 @@
+#
+# Copyright (C) 2007-2012 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+autoconf_bool = $(patsubst %,$(if $($(1)),--enable,--disable)-%,$(2))
+
+# delete *.la-files from staging_dir - we can not yet remove respective lines within all package
+# Makefiles, since backfire still uses libtool v1.5.x which (may) require those files
+define libtool_remove_files
+ find $(1) -name '*.la' | $(XARGS) rm -f;
+endef
+
+
+AM_TOOL_PATHS:= \
+ AUTOM4TE=$(STAGING_DIR_HOST)/bin/autom4te \
+ AUTOCONF=$(STAGING_DIR_HOST)/bin/autoconf \
+ AUTOMAKE=$(STAGING_DIR_HOST)/bin/automake \
+ ACLOCAL=$(STAGING_DIR_HOST)/bin/aclocal \
+ AUTOHEADER=$(STAGING_DIR_HOST)/bin/autoheader \
+ LIBTOOLIZE=$(STAGING_DIR_HOST)/bin/libtoolize \
+ LIBTOOL=$(STAGING_DIR_HOST)/bin/libtool \
+ M4=$(STAGING_DIR_HOST)/bin/m4 \
+ AUTOPOINT=true
+
+# 1: build dir
+# 2: remove files
+# 3: automake paths
+# 4: libtool paths
+# 5: extra m4 dirs
+define autoreconf
+ (cd $(1); \
+ $(patsubst %,rm -f %;,$(2)) \
+ $(foreach p,$(3), \
+ if [ -f $(p)/configure.ac ] || [ -f $(p)/configure.in ]; then \
+ [ -d $(p)/autom4te.cache ] && rm -rf autom4te.cache; \
+ [ -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 \
+ $(if $(word 2,$(3)),--no-recursive) \
+ -B $(STAGING_DIR_HOST)/share/aclocal \
+ $(patsubst %,-I %,$(5)) \
+ $(patsubst %,-I %,$(4)) $(p) || true; \
+ fi; \
+ ) \
+ );
+endef
+
+# 1: build dir
+define patch_libtool
+ @(cd $(1); \
+ for lt in $$$$($$(STAGING_DIR_HOST)/bin/find . -name ltmain.sh); do \
+ lt_version="$$$$($$(STAGING_DIR_HOST)/bin/sed -ne 's,^[[:space:]]*VERSION="\?\([0-9]\.[0-9]\+\).*,\1,p' $$$$lt)"; \
+ case "$$$$lt_version" in \
+ 1.5|2.2|2.4) echo "autotools.mk: Found libtool v$$$$lt_version - applying patch to $$$$lt"; \
+ (cd $$$$(dirname $$$$lt) && $$(PATCH) -N -s -p1 < $$(TOPDIR)/tools/libtool/files/libtool-v$$$$lt_version.patch || true) ;; \
+ *) echo "autotools.mk: error: Unsupported libtool version v$$$$lt_version - cannot patch $$$$lt"; exit 1 ;; \
+ esac; \
+ done; \
+ );
+endef
+
+
+PKG_LIBTOOL_PATHS?=$(CONFIGURE_PATH)
+PKG_AUTOMAKE_PATHS?=$(CONFIGURE_PATH)
+PKG_MACRO_PATHS?=m4
+PKG_REMOVE_FILES?=aclocal.m4
+
+Hooks/InstallDev/Post += libtool_remove_files
+
+define autoreconf_target
+ $(strip $(call autoreconf, \
+ $(PKG_BUILD_DIR), $(PKG_REMOVE_FILES), \
+ $(PKG_AUTOMAKE_PATHS), $(PKG_LIBTOOL_PATHS), \
+ $(STAGING_DIR)/host/share/aclocal $(STAGING_DIR)/usr/share/aclocal $(PKG_MACRO_PATHS)))
+endef
+
+define patch_libtool_target
+ $(strip $(call patch_libtool, \
+ $(PKG_BUILD_DIR)))
+endef
+
+define gettext_version_target
+ (cd $(PKG_BUILD_DIR) && \
+ GETTEXT_VERSION=$(shell $(STAGING_DIR_HOST)/bin/gettext -V | $(STAGING_DIR_HOST)/bin/sed -ne '1s/.* //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" && \
+ $(STAGING_DIR_HOST)/bin/autopoint --force \
+ );
+endef
+
+ifneq ($(filter gettext-version,$(PKG_FIXUP)),)
+ Hooks/Configure/Pre += gettext_version_target
+ ifeq ($(filter no-autoreconf,$(PKG_FIXUP)),)
+ Hooks/Configure/Pre += autoreconf_target
+ endif
+endif
+
+ifneq ($(filter patch-libtool,$(PKG_FIXUP)),)
+ Hooks/Configure/Pre += patch_libtool_target
+endif
+
+ifneq ($(filter libtool,$(PKG_FIXUP)),)
+ PKG_BUILD_DEPENDS += libtool libintl libiconv
+ ifeq ($(filter no-autoreconf,$(PKG_FIXUP)),)
+ Hooks/Configure/Pre += autoreconf_target
+ endif
+endif
+
+ifneq ($(filter libtool-ucxx,$(PKG_FIXUP)),)
+ PKG_BUILD_DEPENDS += libtool libintl libiconv
+ ifeq ($(filter no-autoreconf,$(PKG_FIXUP)),)
+ Hooks/Configure/Pre += autoreconf_target
+ endif
+endif
+
+ifneq ($(filter autoreconf,$(PKG_FIXUP)),)
+ ifeq ($(filter autoreconf,$(Hooks/Configure/Pre)),)
+ Hooks/Configure/Pre += autoreconf_target
+ endif
+endif
+
+
+HOST_FIXUP?=$(PKG_FIXUP)
+HOST_LIBTOOL_PATHS?=$(if $(PKG_LIBTOOL_PATHS),$(PKG_LIBTOOL_PATHS),.)
+HOST_AUTOMAKE_PATHS?=$(if $(PKG_AUTOMAKE_PATHS),$(PKG_AUTOMAKE_PATHS),.)
+HOST_MACRO_PATHS?=$(if $(PKG_MACRO_PATHS),$(PKG_MACRO_PATHS),m4)
+HOST_REMOVE_FILES?=$(PKG_REMOVE_FILES)
+
+define autoreconf_host
+ $(strip $(call autoreconf, \
+ $(HOST_BUILD_DIR), $(HOST_REMOVE_FILES), \
+ $(HOST_AUTOMAKE_PATHS), $(HOST_LIBTOOL_PATHS), \
+ $(HOST_MACRO_PATHS)))
+endef
+
+define patch_libtool_host
+ $(strip $(call patch_libtool, \
+ $(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)))
+endif
+
+ifneq ($(filter libtool,$(HOST_FIXUP)),)
+ ifeq ($(filter no-autoreconf,$(HOST_FIXUP)),)
+ Hooks/HostConfigure/Pre += autoreconf_host
+ endif
+endif
+
+ifneq ($(filter libtool-ucxx,$(HOST_FIXUP)),)
+ ifeq ($(filter no-autoreconf,$(HOST_FIXUP)),)
+ Hooks/HostConfigure/Pre += autoreconf_host
+ endif
+endif
+
+ifneq ($(filter autoreconf,$(HOST_FIXUP)),)
+ ifeq ($(filter autoreconf,$(Hooks/HostConfigure/Pre)),)
+ Hooks/HostConfigure/Pre += autoreconf_host
+ endif
+endif
diff --git a/include/cmake.mk b/include/cmake.mk
new file mode 100644
index 0000000..4207a4d
--- /dev/null
+++ b/include/cmake.mk
@@ -0,0 +1,106 @@
+PKG_INSTALL:=1
+
+ifneq ($(findstring c,$(OPENWRT_VERBOSE)),)
+ MAKE_FLAGS+=VERBOSE=1
+endif
+
+CMAKE_SOURCE_DIR:=.
+
+ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
+ cmake_tool=$(TOOLCHAIN_DIR)/bin/$(1)
+else
+ cmake_tool=$(shell which $(1))
+endif
+
+ifeq ($(CONFIG_CCACHE),)
+ CMAKE_C_COMPILER:=$(call cmake_tool,$(TARGET_CC))
+ CMAKE_CXX_COMPILER:=$(call cmake_tool,$(TARGET_CXX))
+ CMAKE_C_COMPILER_ARG1:=
+ CMAKE_CXX_COMPILER_ARG1:=
+else
+ CCACHE:=$(shell which ccache)
+ ifeq ($(CCACHE),)
+ CCACHE:=$(STAGING_DIR_HOST)/bin/ccache
+ endif
+ CMAKE_C_COMPILER:=$(CCACHE)
+ CMAKE_C_COMPILER_ARG1:=$(TARGET_CC_NOCACHE)
+ CMAKE_CXX_COMPILER:=$(CCACHE)
+ CMAKE_CXX_COMPILER_ARG1:=$(TARGET_CXX_NOCACHE)
+endif
+CMAKE_AR:=$(call cmake_tool,$(TARGET_AR))
+CMAKE_NM:=$(call cmake_tool,$(TARGET_NM))
+CMAKE_RANLIB:=$(call cmake_tool,$(TARGET_RANLIB))
+
+CMAKE_FIND_ROOT_PATH:=$(STAGING_DIR);$(TOOLCHAIN_DIR)$(if $(CONFIG_EXTERNAL_TOOLCHAIN),;$(CONFIG_TOOLCHAIN_ROOT))
+CMAKE_HOST_FIND_ROOT_PATH:=$(STAGING_DIR_HOST)
+CMAKE_SHARED_LDFLAGS:=-Wl,-Bsymbolic-functions
+
+define Build/Configure/Default
+ (cd $(PKG_BUILD_DIR); \
+ CFLAGS="$(TARGET_CFLAGS) $(EXTRA_CFLAGS)" \
+ CXXFLAGS="$(TARGET_CFLAGS) $(EXTRA_CFLAGS)" \
+ LDFLAGS="$(TARGET_LDFLAGS) $(EXTRA_LDFLAGS)" \
+ cmake \
+ -DCMAKE_SYSTEM_NAME=Linux \
+ -DCMAKE_SYSTEM_VERSION=1 \
+ -DCMAKE_SYSTEM_PROCESSOR=$(ARCH) \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_C_FLAGS_RELEASE="-DNDEBUG" \
+ -DCMAKE_CXX_FLAGS_RELEASE="-DNDEBUG" \
+ -DCMAKE_C_COMPILER="$(CMAKE_C_COMPILER)" \
+ -DCMAKE_C_COMPILER_ARG1="$(CMAKE_C_COMPILER_ARG1)" \
+ -DCMAKE_CXX_COMPILER="$(CMAKE_CXX_COMPILER)" \
+ -DCMAKE_CXX_COMPILER_ARG1="$(CMAKE_CXX_COMPILER_ARG1)" \
+ -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)" \
+ -DCMAKE_AR="$(CMAKE_AR)" \
+ -DCMAKE_NM="$(CMAKE_NM)" \
+ -DCMAKE_RANLIB="$(CMAKE_RANLIB)" \
+ -DCMAKE_FIND_ROOT_PATH="$(CMAKE_FIND_ROOT_PATH)" \
+ -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=BOTH \
+ -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
+ -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \
+ -DCMAKE_STRIP=: \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DDL_LIBRARY=$(STAGING_DIR) \
+ -DCMAKE_PREFIX_PATH=$(STAGING_DIR) \
+ -DCMAKE_SKIP_RPATH=TRUE \
+ $(CMAKE_OPTIONS) \
+ $(CMAKE_SOURCE_DIR) \
+ )
+endef
+
+define Build/InstallDev/cmake
+ $(INSTALL_DIR) $(1)
+ $(CP) $(PKG_INSTALL_DIR)/* $(1)/
+endef
+
+Build/InstallDev = $(if $(CMAKE_INSTALL),$(Build/InstallDev/cmake))
+
+define Host/Configure/Default
+ (cd $(HOST_BUILD_DIR); \
+ CFLAGS="$(HOST_CFLAGS)" \
+ CXXFLAGS="$(HOST_CFLAGS)" \
+ LDFLAGS="$(HOST_LDFLAGS)" \
+ cmake \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_C_FLAGS_RELEASE="-DNDEBUG" \
+ -DCMAKE_CXX_FLAGS_RELEASE="-DNDEBUG" \
+ -DCMAKE_EXE_LINKER_FLAGS:STRING="$(HOST_LDFLAGS)" \
+ -DCMAKE_MODULE_LINKER_FLAGS:STRING="$(HOST_LDFLAGS)" \
+ -DCMAKE_SHARED_LINKER_FLAGS:STRING="$(HOST_LDFLAGS)" \
+ -DCMAKE_FIND_ROOT_PATH="$(CMAKE_HOST_FIND_ROOT_PATH)" \
+ -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=BOTH \
+ -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
+ -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \
+ -DCMAKE_STRIP=: \
+ -DCMAKE_INSTALL_PREFIX=$(STAGING_DIR_HOST) \
+ -DCMAKE_PREFIX_PATH=$(STAGING_DIR_HOST) \
+ -DCMAKE_SKIP_RPATH=TRUE \
+ $(CMAKE_HOST_OPTIONS) \
+ $(CMAKE_SOURCE_DIR) \
+ )
+endef
diff --git a/include/debug.mk b/include/debug.mk
new file mode 100644
index 0000000..59a99c0
--- /dev/null
+++ b/include/debug.mk
@@ -0,0 +1,51 @@
+#
+# Copyright (C) 2007 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+# debug flags:
+#
+# d: show subdirectory tree
+# t: show added targets
+# l: show legacy targets
+# r: show autorebuild messages
+# v: verbose (no .SILENCE for common targets)
+
+ifeq ($(DUMP),)
+ ifeq ($(DEBUG),all)
+ build_debug:=dltvr
+ else
+ build_debug:=$(DEBUG)
+ endif
+endif
+
+ifneq ($(DEBUG),)
+
+define debug
+$$(findstring $(2),$$(if $$(DEBUG_SCOPE_DIR),$$(if $$(filter $$(DEBUG_SCOPE_DIR)%,$(1)),$(build_debug)),$(build_debug)))
+endef
+
+define warn
+$$(if $(call debug,$(1),$(2)),$$(warning $(3)))
+endef
+
+define debug_eval
+$$(if $(call debug,$(1),$(2)),$(3))
+endef
+
+define warn_eval
+$(call warn,$(1),$(2),$(3) $(4))
+$(4)
+endef
+
+else
+
+debug:=
+warn:=
+debug_eval:=
+warn_eval = $(4)
+
+endif
+
diff --git a/include/depends.mk b/include/depends.mk
new file mode 100644
index 0000000..53e5b1e
--- /dev/null
+++ b/include/depends.mk
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2007 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+# define a dependency on a subtree
+# parameters:
+# 1: directories/files
+# 2: directory dependency
+# 3: tempfile for file listings
+# 4: find options
+
+DEP_FINDPARAMS := -x "*/.svn*" -x ".*" -x "*:*" -x "*\!*" -x "* *" -x "*\\\#*" -x "*/.*_check" -x "*/.*.swp"
+
+find_md5=$(SH_FUNC) find $(1) -type f $(patsubst -x,-and -not -path,$(DEP_FINDPARAMS) $(2)) | md5s
+
+define rdep
+ .PRECIOUS: $(2)
+ .SILENT: $(2)_check
+
+ $(2): $(2)_check
+
+ifneq ($(wildcard $(2)),)
+ $(2)_check::
+ $(if $(3), \
+ $(call find_md5,$(1),$(4)) > $(3).1; \
+ { [ \! -f "$(3)" ] || diff $(3) $(3).1 >/dev/null; } && \
+ ) \
+ { \
+ [ -f "$(2)_check.1" ] && mv "$(2)_check.1"; \
+ $(TOPDIR)/scripts/timestamp.pl $(DEP_FINDPARAMS) $(4) -n $(2) $(1) && { \
+ $(call debug_eval,$(SUBDIR),r,echo "No need to rebuild $(2)";) \
+ touch -r "$(2)" "$(2)_check"; \
+ } \
+ } || { \
+ $(call debug_eval,$(SUBDIR),r,echo "Need to rebuild $(2)";) \
+ touch "$(2)_check"; \
+ }
+ $(if $(3), mv $(3).1 $(3))
+else
+ $(2)_check::
+ $(if $(3), rm -f $(3) $(3).1)
+ $(call debug_eval,$(SUBDIR),r,echo "Target $(2) not built")
+endif
+
+endef
+
diff --git a/include/device_table.txt b/include/device_table.txt
new file mode 100644
index 0000000..f45b158
--- /dev/null
+++ b/include/device_table.txt
@@ -0,0 +1,5 @@
+# minimal device table file for OpenWrt
+
+#<name> <type> <mode> <uid> <gid> <major> <minor> <start> <inc> <count>
+/dev d 755 0 0 - - - - -
+/dev/console c 600 0 0 5 1 0 0 -
diff --git a/include/download.mk b/include/download.mk
new file mode 100644
index 0000000..adaa2e6
--- /dev/null
+++ b/include/download.mk
@@ -0,0 +1,184 @@
+#
+# Copyright (C) 2006-2012 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+DOWNLOAD_RDEP=$(STAMP_PREPARED) $(HOST_STAMP_PREPARED)
+
+# Try to guess the download method from the URL
+define dl_method
+$(strip \
+ $(if $(2),$(2), \
+ $(if $(filter @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 \
+ ) \
+ ) \
+ ) \
+ ) \
+ ) \
+ ) \
+ ) \
+)
+endef
+
+# code for creating tarballs from cvs/svn/git/bzr/hg/darcs checkouts - useful for mirror support
+dl_pack/bz2=$(TAR) cjf $(1) $(2)
+dl_pack/gz=$(TAR) czf $(1) $(2)
+dl_pack/xz=$(TAR) c $(2) | xz -zc > $(1)
+dl_pack/unknown=echo "ERROR: Unknown pack format for file $(1)"; false
+define dl_pack
+ $(if $(dl_pack/$(call ext,$(1))),$(dl_pack/$(call ext,$(1))),$(dl_pack/unknown))
+endef
+
+define DownloadMethod/unknown
+ @echo "ERROR: No download method available"; false
+endef
+
+define DownloadMethod/default
+ $(SCRIPT_DIR)/download.pl "$(DL_DIR)" "$(FILE)" "$(MD5SUM)" $(foreach url,$(URL),"$(url)")
+endef
+
+define wrap_mirror
+ $(if $(if $(MIRROR),$(filter-out x,$(MIRROR_MD5SUM))),@$(SCRIPT_DIR)/download.pl "$(DL_DIR)" "$(FILE)" "$(MIRROR_MD5SUM)" || ( $(1) ),$(1))
+endef
+
+define DownloadMethod/cvs
+ $(call wrap_mirror, \
+ echo "Checking out files from the cvs repository..."; \
+ mkdir -p $(TMP_DIR)/dl && \
+ cd $(TMP_DIR)/dl && \
+ rm -rf $(SUBDIR) && \
+ [ \! -d $(SUBDIR) ] && \
+ cvs -d $(URL) export $(VERSION) $(SUBDIR) && \
+ echo "Packing checkout..." && \
+ $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
+ mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \
+ rm -rf $(SUBDIR); \
+ )
+endef
+
+define DownloadMethod/svn
+ $(call wrap_mirror, \
+ echo "Checking out files from the svn repository..."; \
+ mkdir -p $(TMP_DIR)/dl && \
+ cd $(TMP_DIR)/dl && \
+ rm -rf $(SUBDIR) && \
+ [ \! -d $(SUBDIR) ] && \
+ ( svn help export | grep -q trust-server-cert && \
+ svn export --non-interactive --trust-server-cert -r$(VERSION) $(URL) $(SUBDIR) || \
+ svn export --non-interactive -r$(VERSION) $(URL) $(SUBDIR) ) && \
+ echo "Packing checkout..." && \
+ $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
+ mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \
+ rm -rf $(SUBDIR); \
+ )
+endef
+
+define DownloadMethod/git
+ $(call wrap_mirror, \
+ echo "Checking out files from the git repository..."; \
+ mkdir -p $(TMP_DIR)/dl && \
+ cd $(TMP_DIR)/dl && \
+ rm -rf $(SUBDIR) && \
+ [ \! -d $(SUBDIR) ] && \
+ git clone $(URL) $(SUBDIR) --recursive && \
+ (cd $(SUBDIR) && git checkout $(VERSION) && git submodule update) && \
+ echo "Packing checkout..." && \
+ rm -rf $(SUBDIR)/.git && \
+ $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
+ mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \
+ rm -rf $(SUBDIR); \
+ )
+endef
+
+define DownloadMethod/bzr
+ $(call wrap_mirror, \
+ echo "Checking out files from the bzr repository..."; \
+ mkdir -p $(TMP_DIR)/dl && \
+ cd $(TMP_DIR)/dl && \
+ rm -rf $(SUBDIR) && \
+ [ \! -d $(SUBDIR) ] && \
+ bzr export -r$(VERSION) $(SUBDIR) $(URL) && \
+ echo "Packing checkout..." && \
+ $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
+ mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \
+ rm -rf $(SUBDIR); \
+ )
+endef
+
+define DownloadMethod/hg
+ $(call wrap_mirror, \
+ echo "Checking out files from the hg repository..."; \
+ mkdir -p $(TMP_DIR)/dl && \
+ cd $(TMP_DIR)/dl && \
+ rm -rf $(SUBDIR) && \
+ [ \! -d $(SUBDIR) ] && \
+ hg clone -r $(VERSION) $(URL) $(SUBDIR) && \
+ find $(SUBDIR) -name .hg | xargs rm -rf && \
+ echo "Packing checkout..." && \
+ $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
+ mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \
+ rm -rf $(SUBDIR); \
+ )
+endef
+
+define DownloadMethod/darcs
+ $(call wrap_mirror, \
+ echo "Checking out files from the darcs repository..."; \
+ mkdir -p $(TMP_DIR)/dl && \
+ cd $(TMP_DIR)/dl && \
+ rm -rf $(SUBDIR) && \
+ [ \! -d $(SUBDIR) ] && \
+ darcs get -t $(VERSION) $(URL) $(SUBDIR) && \
+ find $(SUBDIR) -name _darcs | xargs rm -rf && \
+ echo "Packing checkout..." && \
+ $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
+ mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \
+ rm -rf $(SUBDIR); \
+ )
+endef
+
+Validate/cvs=VERSION SUBDIR
+Validate/svn=VERSION SUBDIR
+Validate/git=VERSION SUBDIR
+Validate/bzr=VERSION SUBDIR
+Validate/hg=VERSION SUBDIR
+Validate/darcs=VERSION SUBDIR
+
+define Download/Defaults
+ URL:=
+ FILE:=
+ PROTO:=
+ MD5SUM:=
+ SUBDIR:=
+ MIRROR:=1
+ MIRROR_MD5SUM:=x
+ VERSION:=
+endef
+
+define Download
+ $(eval $(Download/Defaults))
+ $(eval $(Download/$(1)))
+ $(foreach FIELD,URL FILE $(Validate/$(call dl_method,$(URL),$(PROTO))),
+ ifeq ($($(FIELD)),)
+ $$(error Download/$(1) is missing the $(FIELD) field.)
+ endif
+ )
+
+ $(foreach dep,$(DOWNLOAD_RDEP),
+ $(dep): $(DL_DIR)/$(FILE)
+ )
+ download: $(DL_DIR)/$(FILE)
+
+ $(DL_DIR)/$(FILE):
+ mkdir -p $(DL_DIR)
+ $(if $(DownloadMethod/$(call dl_method,$(URL),$(PROTO))),$(DownloadMethod/$(call dl_method,$(URL),$(PROTO))),$(DownloadMethod/unknown))
+
+endef
diff --git a/include/feeds.mk b/include/feeds.mk
new file mode 100644
index 0000000..b1a8f81
--- /dev/null
+++ b/include/feeds.mk
@@ -0,0 +1,39 @@
+#
+# Copyright (C) 2014 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+-include $(TMP_DIR)/.packagefeeds
+
+FEEDS_AVAILABLE:=$(shell $(SCRIPT_DIR)/feeds list -n)
+FEEDS_INSTALLED:=$(notdir $(wildcard $(TOPDIR)/package/feeds/*))
+FEEDS_ENABLED:=$(foreach feed,$(FEEDS_INSTALLED),$(if $(CONFIG_FEED_$(feed)),$(feed)))
+FEEDS_DISABLED:=$(filter-out $(FEEDS_ENABLED),$(FEEDS_AVAILABLE))
+
+PKG_CONFIG_DEPENDS += \
+ CONFIG_PER_FEED_REPO \
+ CONFIG_PER_FEED_REPO_ADD_DISABLED \
+ CONFIG_PER_FEED_REPO_ADD_COMMENTED \
+ $(foreach feed,$(FEEDS_INSTALLED),CONFIG_FEED_$(feed))
+
+# 1: package name
+define FeedPackageDir
+$(strip $(if $(CONFIG_PER_FEED_REPO), \
+ $(abspath $(PACKAGE_DIR)/$(if $(Package/$(1)/feed),$(Package/$(1)/feed),base)), \
+ $(PACKAGE_DIR)))
+endef
+
+# 1: destination file
+define FeedSourcesAppend
+( \
+ $(strip $(if $(CONFIG_PER_FEED_REPO), \
+ $(foreach feed,base $(FEEDS_ENABLED),echo "src/gz %n_$(feed) %U/$(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/$(feed)";)) \
+ , \
+ echo "src/gz %n %U"; \
+ )) \
+) >> $(1)
+endef
diff --git a/include/hardening.mk b/include/hardening.mk
new file mode 100644
index 0000000..c277081
--- /dev/null
+++ b/include/hardening.mk
@@ -0,0 +1,50 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+PKG_CHECK_FORMAT_SECURITY ?= 1
+PKG_SSP ?= 1
+PKG_FORTIFY_SOURCE ?= 1
+PKG_RELRO ?= 1
+
+ifdef CONFIG_PKG_CHECK_FORMAT_SECURITY
+ ifeq ($(strip $(PKG_CHECK_FORMAT_SECURITY)),1)
+ TARGET_CFLAGS += -Wformat -Werror=format-security
+ endif
+endif
+ifdef CONFIG_PKG_CC_STACKPROTECTOR_REGULAR
+ ifeq ($(strip $(PKG_SSP)),1)
+ TARGET_CFLAGS += -fstack-protector
+ endif
+endif
+ifdef CONFIG_PKG_CC_STACKPROTECTOR_STRONG
+ ifeq ($(strip $(PKG_SSP)),1)
+ TARGET_CFLAGS += -fstack-protector-strong
+ endif
+endif
+ifdef CONFIG_PKG_FORTIFY_SOURCE_1
+ ifeq ($(strip $(PKG_FORTIFY_SOURCE)),1)
+ TARGET_CFLAGS += -D_FORTIFY_SOURCE=1
+ endif
+endif
+ifdef CONFIG_PKG_FORTIFY_SOURCE_2
+ ifeq ($(strip $(PKG_FORTIFY_SOURCE)),1)
+ TARGET_CFLAGS += -D_FORTIFY_SOURCE=2
+ endif
+endif
+ifdef CONFIG_PKG_RELRO_PARTIAL
+ ifeq ($(strip $(PKG_RELRO)),1)
+ TARGET_CFLAGS += -Wl,-z,relro
+ TARGET_LDFLAGS += -zrelro
+ endif
+endif
+ifdef CONFIG_PKG_RELRO_FULL
+ ifeq ($(strip $(PKG_RELRO)),1)
+ TARGET_CFLAGS += -Wl,-z,now -Wl,-z,relro
+ TARGET_LDFLAGS += -znow -zrelro
+ endif
+endif
+
diff --git a/include/host-build.mk b/include/host-build.mk
new file mode 100644
index 0000000..e2b5f2f
--- /dev/null
+++ b/include/host-build.mk
@@ -0,0 +1,206 @@
+#
+# Copyright (C) 2006-2010 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+HOST_BUILD_DIR ?= $(BUILD_DIR_HOST)/$(PKG_NAME)$(if $(PKG_VERSION),-$(PKG_VERSION))
+HOST_INSTALL_DIR ?= $(HOST_BUILD_DIR)/host-install
+HOST_BUILD_PARALLEL ?=
+
+ifneq ($(CONFIG_PKG_BUILD_USE_JOBSERVER),)
+ HOST_MAKE_J:=$(if $(MAKE_JOBSERVER),$(MAKE_JOBSERVER) -j)
+else
+ HOST_MAKE_J:=-j$(CONFIG_PKG_BUILD_JOBS)
+endif
+
+ifeq ($(strip $(HOST_BUILD_PARALLEL)),0)
+HOST_JOBS?=-j1
+else
+HOST_JOBS?=$(if $(HOST_BUILD_PARALLEL)$(CONFIG_PKG_DEFAULT_PARALLEL),\
+ $(if $(CONFIG_PKG_BUILD_PARALLEL),$(HOST_MAKE_J),-j1),-j1)
+endif
+
+include $(INCLUDE_DIR)/host.mk
+include $(INCLUDE_DIR)/unpack.mk
+include $(INCLUDE_DIR)/depends.mk
+
+BUILD_TYPES += host
+HOST_STAMP_PREPARED=$(HOST_BUILD_DIR)/.prepared$(if $(HOST_QUILT)$(DUMP),,$(shell $(call find_md5,${CURDIR} $(PKG_FILE_DEPENDS),)))
+HOST_STAMP_CONFIGURED:=$(HOST_BUILD_DIR)/.configured
+HOST_STAMP_BUILT:=$(HOST_BUILD_DIR)/.built
+HOST_STAMP_INSTALLED:=$(STAGING_DIR_HOST)/stamp/.$(PKG_NAME)_installed
+
+override MAKEFLAGS=
+
+include $(INCLUDE_DIR)/download.mk
+include $(INCLUDE_DIR)/quilt.mk
+include $(INCLUDE_DIR)/autotools.mk
+
+Host/Patch:=$(Host/Patch/Default)
+ifneq ($(strip $(HOST_UNPACK)),)
+ define Host/Prepare/Default
+ $(HOST_UNPACK)
+ $(Host/Patch)
+ endef
+endif
+
+define Host/Prepare
+ $(call Host/Prepare/Default)
+endef
+
+ifeq ($(HOST_OS),Darwin)
+ HOST_CFLAGS += -I/usr/local/opt/openssl/include
+ HOST_LDFLAGS += -L/usr/local/opt/openssl/lib
+endif
+
+HOST_CONFIGURE_VARS = \
+ CC="$(HOSTCC)" \
+ CFLAGS="$(HOST_CFLAGS)" \
+ CPPFLAGS="$(HOST_CPPFLAGS)" \
+ LDFLAGS="$(HOST_LDFLAGS)" \
+ SHELL="$(SHELL)"
+
+HOST_CONFIGURE_ARGS = \
+ --target=$(GNU_HOST_NAME) \
+ --host=$(GNU_HOST_NAME) \
+ --build=$(GNU_HOST_NAME) \
+ --program-prefix="" \
+ --program-suffix="" \
+ --prefix=$(STAGING_DIR_HOST) \
+ --exec-prefix=$(STAGING_DIR_HOST) \
+ --sysconfdir=$(STAGING_DIR_HOST)/etc \
+ --localstatedir=$(STAGING_DIR_HOST)/var \
+ --sbindir=$(STAGING_DIR_HOST)/bin
+
+HOST_MAKE_FLAGS =
+
+HOST_CONFIGURE_CMD = $(BASH) ./configure
+
+define Host/Configure/Default
+ $(if $(HOST_CONFIGURE_PARALLEL),+)(cd $(HOST_BUILD_DIR)/$(3); \
+ if [ -x configure ]; then \
+ $(CP) $(SCRIPT_DIR)/config.{guess,sub} $(HOST_BUILD_DIR)/$(3)/ && \
+ $(2) \
+ $(HOST_CONFIGURE_CMD) \
+ $(HOST_CONFIGURE_VARS) \
+ $(HOST_CONFIGURE_ARGS) \
+ $(1); \
+ fi \
+ )
+endef
+
+define Host/Configure
+ $(call Host/Configure/Default)
+endef
+
+define Host/Compile/Default
+ +$(MAKE) $(HOST_JOBS) -C $(HOST_BUILD_DIR) \
+ $(HOST_MAKE_FLAGS) \
+ $(1)
+endef
+
+define Host/Compile
+ $(call Host/Compile/Default)
+endef
+
+define Host/Install/Default
+ $(_SINGLE)$(MAKE) -C $(HOST_BUILD_DIR) install
+endef
+
+define Host/Install
+ $(call Host/Install/Default)
+endef
+
+
+ifneq ($(if $(HOST_QUILT),,$(CONFIG_AUTOREBUILD)),)
+ define HostHost/Autoclean
+ $(call rdep,${CURDIR} $(PKG_FILE_DEPENDS),$(HOST_STAMP_PREPARED))
+ $(if $(if $(Host/Compile),$(filter prepare,$(MAKECMDGOALS)),1),,$(call rdep,$(HOST_BUILD_DIR),$(HOST_STAMP_BUILT)))
+ endef
+endif
+
+define Download/default
+ FILE:=$(PKG_SOURCE)
+ URL:=$(PKG_SOURCE_URL)
+ PROTO:=$(PKG_SOURCE_PROTO)
+ SUBDIR:=$(PKG_SOURCE_SUBDIR)
+ VERSION:=$(PKG_SOURCE_VERSION)
+ MD5SUM:=$(PKG_MD5SUM)
+ MIRROR_MD5SUM:=$(PKG_MIRROR_MD5SUM)
+endef
+
+define Host/Exports/Default
+ $(1) : export ACLOCAL_INCLUDE=$$(foreach p,$$(wildcard $$(STAGING_DIR_HOST)/share/aclocal $$(STAGING_DIR_HOST)/share/aclocal-*),-I $$(p))
+ $(1) : export STAGING_PREFIX=$$(STAGING_DIR_HOST)
+ $(1) : export PKG_CONFIG_PATH=$$(STAGING_DIR_HOST)/lib/pkgconfig
+ $(1) : export PKG_CONFIG_LIBDIR=$$(STAGING_DIR_HOST)/lib/pkgconfig
+ $(1) : export CCACHE_DIR:=$(STAGING_DIR_HOST)/ccache
+endef
+Host/Exports=$(Host/Exports/Default)
+
+.NOTPARALLEL:
+
+ifndef DUMP
+ define HostBuild
+ $(if $(HOST_QUILT),$(Host/Quilt))
+ $(if $(if $(PKG_HOST_ONLY),,$(STAMP_PREPARED)),,$(if $(strip $(PKG_SOURCE_URL)),$(call Download,default)))
+ $(if $(DUMP),,$(call HostHost/Autoclean))
+
+ $(HOST_STAMP_PREPARED):
+ @-rm -rf $(HOST_BUILD_DIR)
+ @mkdir -p $(HOST_BUILD_DIR)
+ $(foreach hook,$(Hooks/HostPrepare/Pre),$(call $(hook))$(sep))
+ $(call Host/Prepare)
+ $(foreach hook,$(Hooks/HostPrepare/Post),$(call $(hook))$(sep))
+ touch $$@
+
+ $(call Host/Exports,$(HOST_STAMP_CONFIGURED))
+ $(HOST_STAMP_CONFIGURED): $(HOST_STAMP_PREPARED)
+ $(foreach hook,$(Hooks/HostConfigure/Pre),$(call $(hook))$(sep))
+ $(call Host/Configure)
+ $(foreach hook,$(Hooks/HostConfigure/Post),$(call $(hook))$(sep))
+ touch $$@
+
+ $(call Host/Exports,$(HOST_STAMP_BUILT))
+ $(HOST_STAMP_BUILT): $(HOST_STAMP_CONFIGURED)
+ $(foreach hook,$(Hooks/HostCompile/Pre),$(call $(hook))$(sep))
+ $(call Host/Compile)
+ $(foreach hook,$(Hooks/HostCompile/Post),$(call $(hook))$(sep))
+ touch $$@
+
+ $(HOST_STAMP_INSTALLED): $(HOST_STAMP_BUILT) $(if $(FORCE_HOST_INSTALL),FORCE)
+ $(call Host/Install)
+ $(foreach hook,$(Hooks/HostInstall/Post),$(call $(hook))$(sep))
+ mkdir -p $$(shell dirname $$@)
+ touch $(HOST_STAMP_BUILT)
+ touch $$@
+
+ ifndef STAMP_BUILT
+ prepare: host-prepare
+ compile: host-compile
+ install: host-install
+ clean: host-clean
+ update: host-update
+ refresh: host-refresh
+ endif
+
+ host-prepare: $(HOST_STAMP_PREPARED)
+ host-configure: $(HOST_STAMP_CONFIGURED)
+ host-compile: $(HOST_STAMP_BUILT) $(if $(STAMP_BUILT),$(HOST_STAMP_INSTALLED))
+ host-install: $(HOST_STAMP_INSTALLED)
+ host-clean: FORCE
+ $(call Host/Clean)
+ $(call Host/Uninstall)
+ rm -rf $(HOST_BUILD_DIR) $(HOST_STAMP_INSTALLED) $(HOST_STAMP_BUILT)
+
+ endef
+
+ download:
+ prepare:
+ compile:
+ install:
+ clean:
+
+endif
diff --git a/include/host.mk b/include/host.mk
new file mode 100644
index 0000000..ec3ae27
--- /dev/null
+++ b/include/host.mk
@@ -0,0 +1,51 @@
+#
+# Copyright (C) 2007-2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+TMP_DIR ?= $(TOPDIR)/tmp
+ifeq ($(if $(TARGET_BUILD),,$(DUMP)),)
+ -include $(TMP_DIR)/.host.mk
+endif
+
+ifneq ($(__host_inc),1)
+__host_inc:=1
+
+export PATH:=$(TOPDIR)/staging_dir/host/bin:$(PATH)
+
+try-run = $(shell set -e; \
+ TMP_F="$(TMP_DIR)/try-run.$$$$.tmp"; \
+ if ($(1)) >/dev/null 2>&1; then echo "$(2)"; else echo "$(3)"; fi; \
+ rm -f "$$TMP_F"; \
+)
+
+host-cc-option = $(call try-run, \
+ $(HOSTCC) $(HOST_CFLAGS) $(1) -c -xc /dev/null -o "$$TMP_F",$(1),$(2) \
+)
+
+.PRECIOUS: $(TMP_DIR)/.host.mk
+$(TMP_DIR)/.host.mk: $(TOPDIR)/include/host.mk
+ @mkdir -p $(TMP_DIR)
+ @( \
+ HOST_OS=`uname`; \
+ case "$$HOST_OS" in \
+ Linux) HOST_ARCH=`uname -m`;; \
+ Darwin) HOST_ARCH=`uname -m`;; \
+ *) HOST_ARCH=`uname -p`;; \
+ esac; \
+ GNU_HOST_NAME=`gcc -dumpmachine`; \
+ [ -z "$$GNU_HOST_NAME" -o "$$HOST_OS" = "Darwin" ] && \
+ GNU_HOST_NAME=`$(TOPDIR)/scripts/config.guess`; \
+ echo "HOST_OS:=$$HOST_OS" > $@; \
+ echo "HOST_ARCH:=$$HOST_ARCH" >> $@; \
+ echo "GNU_HOST_NAME:=$$GNU_HOST_NAME" >> $@; \
+ if gfind -L /dev/null || find -L /dev/null; then \
+ echo "FIND_L=find -L \$$(1)" >> $@; \
+ else \
+ echo "FIND_L=find \$$(1) -follow" >> $@; \
+ fi \
+ ) >/dev/null 2>/dev/null
+
+endif
diff --git a/include/image.mk b/include/image.mk
new file mode 100644
index 0000000..43980bc
--- /dev/null
+++ b/include/image.mk
@@ -0,0 +1,585 @@
+#
+# Copyright (C) 2006-2010 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+override TARGET_BUILD=
+include $(INCLUDE_DIR)/prereq.mk
+include $(INCLUDE_DIR)/kernel.mk
+include $(INCLUDE_DIR)/host.mk
+include $(INCLUDE_DIR)/version.mk
+
+override MAKE:=$(_SINGLE)$(SUBMAKE)
+override NO_TRACE_MAKE:=$(_SINGLE)$(NO_TRACE_MAKE)
+
+KDIR=$(KERNEL_BUILD_DIR)
+KDIR_TMP=$(KDIR)/tmp
+DTS_DIR:=$(LINUX_DIR)/arch/$(ARCH)/boot/dts/
+
+IMG_PREFIX:=openwrt-$(if $(CONFIG_VERSION_FILENAMES),$(VERSION_NUMBER)-)$(BOARD)$(if $(SUBTARGET),-$(SUBTARGET))
+
+MKFS_DEVTABLE_OPT := -D $(INCLUDE_DIR)/device_table.txt
+
+ifneq ($(CONFIG_BIG_ENDIAN),)
+ JFFS2OPTS := --big-endian --squash-uids -v
+else
+ JFFS2OPTS := --little-endian --squash-uids -v
+endif
+
+ifeq ($(CONFIG_JFFS2_RTIME),y)
+ JFFS2OPTS += -X rtime
+endif
+ifeq ($(CONFIG_JFFS2_ZLIB),y)
+ JFFS2OPTS += -X zlib
+endif
+ifeq ($(CONFIG_JFFS2_LZMA),y)
+ JFFS2OPTS += -X lzma --compression-mode=size
+endif
+ifneq ($(CONFIG_JFFS2_RTIME),y)
+ JFFS2OPTS += -x rtime
+endif
+ifneq ($(CONFIG_JFFS2_ZLIB),y)
+ JFFS2OPTS += -x zlib
+endif
+ifneq ($(CONFIG_JFFS2_LZMA),y)
+ JFFS2OPTS += -x lzma
+endif
+
+JFFS2OPTS += $(MKFS_DEVTABLE_OPT)
+
+SQUASHFS_BLOCKSIZE := $(CONFIG_TARGET_SQUASHFS_BLOCK_SIZE)k
+SQUASHFSOPT := -b $(SQUASHFS_BLOCKSIZE)
+SQUASHFSOPT += -p '/dev d 755 0 0' -p '/dev/console c 600 0 0 5 1'
+SQUASHFSCOMP := gzip
+LZMA_XZ_OPTIONS := -Xpreset 9 -Xe -Xlc 0 -Xlp 2 -Xpb 2
+ifeq ($(CONFIG_SQUASHFS_LZMA),y)
+ SQUASHFSCOMP := lzma $(LZMA_XZ_OPTIONS)
+endif
+ifeq ($(CONFIG_SQUASHFS_XZ),y)
+ ifneq ($(filter arm x86 powerpc sparc,$(LINUX_KARCH)),)
+ BCJ_FILTER:=-Xbcj $(LINUX_KARCH)
+ endif
+ SQUASHFSCOMP := xz $(LZMA_XZ_OPTIONS) $(BCJ_FILTER)
+endif
+
+JFFS2_BLOCKSIZE ?= 64k 128k
+
+fs-types-$(CONFIG_TARGET_ROOTFS_SQUASHFS) += squashfs
+fs-types-$(CONFIG_TARGET_ROOTFS_JFFS2) += $(addprefix jffs2-,$(JFFS2_BLOCKSIZE))
+fs-types-$(CONFIG_TARGET_ROOTFS_JFFS2_NAND) += $(addprefix jffs2-nand-,$(NAND_BLOCKSIZE))
+fs-types-$(CONFIG_TARGET_ROOTFS_EXT4FS) += ext4
+fs-types-$(CONFIG_TARGET_ROOTFS_ISO) += iso
+fs-subtypes-$(CONFIG_TARGET_ROOTFS_JFFS2) += $(addsuffix -raw,$(addprefix jffs2-,$(JFFS2_BLOCKSIZE)))
+fs-subtypes-$(CONFIG_TARGET_ROOTFS_CPIOGZ) += cpiogz
+fs-subtypes-$(CONFIG_TARGET_ROOTFS_TARGZ) += targz
+
+TARGET_FILESYSTEMS := $(fs-types-y)
+
+FS_64K := $(filter-out jffs2-%,$(TARGET_FILESYSTEMS)) jffs2-64k
+FS_128K := $(filter-out jffs2-%,$(TARGET_FILESYSTEMS)) jffs2-128k
+FS_256K := $(filter-out jffs2-%,$(TARGET_FILESYSTEMS)) jffs2-256k
+
+define add_jffs2_mark
+ echo -ne '\xde\xad\xc0\xde' >> $(1)
+endef
+
+define toupper
+$(shell echo $(1) | tr '[:lower:]' '[:upper:]')
+endef
+
+define tolower
+$(shell echo $(1) | tr '[:upper:]' '[:lower:]')
+endef
+
+define sanitize
+$(shell echo $(call tolower,$(1)) | sed 's/_/-/g')
+endef
+
+PROFILE_SANITIZED := $(call sanitize,$(PROFILE))
+
+define split_args
+$(foreach data, \
+ $(subst |,$(space),\
+ $(subst $(space),^,$(1))), \
+ $(call $(2),$(strip $(subst ^,$(space),$(data)))))
+endef
+
+define build_cmd
+$(if $(Build/$(word 1,$(1))),,$(error Missing Build/$(word 1,$(1))))
+$(call Build/$(word 1,$(1)),$(wordlist 2,$(words $(1)),$(1)))
+
+endef
+
+define concat_cmd
+$(call split_args,$(1),build_cmd)
+endef
+
+# pad to 4k, 8k, 16k, 64k, 128k, 256k and add jffs2 end-of-filesystem mark
+define prepare_generic_squashfs
+ $(STAGING_DIR_HOST)/bin/padjffs2 $(1) 4 8 16 64 128 256
+endef
+
+define Image/BuildKernel/Initramfs
+ $(call Image/Build/Initramfs)
+endef
+
+define Image/BuildKernel/MkuImage
+ mkimage -A $(ARCH) -O linux -T kernel -C $(1) -a $(2) -e $(3) \
+ -n '$(call toupper,$(ARCH)) OpenWrt 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) \
+ -A $(ARCH) -v $(LINUX_VERSION)
+ PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage -f $(KDIR)/fit-$(1).its $(KDIR)/fit-$(1)$(7).itb
+endef
+
+# $(1) source dts file
+# $(2) target dtb file
+# $(3) extra CPP flags
+# $(4) extra DTC flags
+define Image/BuildDTB
+ $(CPP) -nostdinc -x assembler-with-cpp \
+ -I$(LINUX_DIR)/arch/$(ARCH)/boot/dts \
+ -I$(LINUX_DIR)/arch/$(ARCH)/boot/dts/include \
+ -undef -D__DTS__ $(3) \
+ -o $(2).tmp $(1)
+ $(LINUX_DIR)/scripts/dtc/dtc -O dtb \
+ -i$(dir $(1)) $(4) \
+ -o $(2) $(2).tmp
+ $(RM) $(2).tmp
+endef
+
+define Image/mkfs/jffs2/sub
+ $(STAGING_DIR_HOST)/bin/mkfs.jffs2 $(3) --pad -e $(patsubst %k,%KiB,$(1)) -o $(KDIR)/root.jffs2-$(2) -d $(TARGET_DIR) -v 2>&1 1>/dev/null | awk '/^.+$$$$/'
+ $(call add_jffs2_mark,$(KDIR)/root.jffs2-$(2))
+endef
+
+define Image/mkfs/jffs2/sub-raw
+ $(STAGING_DIR_HOST)/bin/mkfs.jffs2 $(3) -e $(patsubst %k,%KiB,$(1)) -o $(KDIR)/root.jffs2-$(2)-raw -d $(TARGET_DIR) -v 2>&1 1>/dev/null | awk '/^.+$$$$/'
+endef
+
+define Image/mkfs/jffs2/template
+ Image/mkfs/jffs2-$(1) = $$(call Image/mkfs/jffs2/sub,$(1),$(1),$(JFFS2OPTS))
+ Image/mkfs/jffs2-$(1)-raw = $$(call Image/mkfs/jffs2/sub-raw,$(1),$(1),$(JFFS2OPTS))
+
+endef
+
+define Image/mkfs/jffs2-nand/template
+ Image/mkfs/jffs2-nand-$(1) = \
+ $$(call Image/mkfs/jffs2/sub, \
+ $(word 2,$(subst -, ,$(1))),nand-$(1), \
+ $(JFFS2OPTS) --no-cleanmarkers --pagesize=$(word 1,$(subst -, ,$(1))))
+
+endef
+
+$(eval $(foreach S,$(JFFS2_BLOCKSIZE),$(call Image/mkfs/jffs2/template,$(S))))
+$(eval $(foreach S,$(NAND_BLOCKSIZE),$(call Image/mkfs/jffs2-nand/template,$(S))))
+
+define Image/mkfs/squashfs
+ $(STAGING_DIR_HOST)/bin/mksquashfs4 $(TARGET_DIR) $(KDIR)/root.squashfs -nopad -noappend -root-owned -comp $(SQUASHFSCOMP) $(SQUASHFSOPT) -processors $(if $(CONFIG_PKG_BUILD_JOBS),$(CONFIG_PKG_BUILD_JOBS),1)
+endef
+
+# $(1): board name
+# $(2): rootfs type
+# $(3): kernel image
+ifneq ($(CONFIG_NAND_SUPPORT),)
+ define Image/Build/SysupgradeNAND
+ mkdir -p "$(KDIR_TMP)/sysupgrade-$(1)/"
+ echo "BOARD=$(1)" > "$(KDIR_TMP)/sysupgrade-$(1)/CONTROL"
+ [ -z "$(2)" ] || $(CP) "$(KDIR)/root.$(2)" "$(KDIR_TMP)/sysupgrade-$(1)/root"
+ [ -z "$(3)" ] || $(CP) "$(3)" "$(KDIR_TMP)/sysupgrade-$(1)/kernel"
+ (cd "$(KDIR_TMP)"; $(TAR) cvf \
+ "$(BIN_DIR)/$(IMG_PREFIX)-$(1)-$(2)-sysupgrade.tar" sysupgrade-$(1))
+ endef
+
+# $(1) board name
+# $(2) ubinize-image options (e.g. --uboot-env and/or --kernel kernelimage)
+# $(3) rootfstype (e.g. squashfs or ubifs)
+# $(4) options to pass-through to ubinize (i.e. $($(PROFILE)_UBI_OPTS)))
+ define Image/Build/UbinizeImage
+ sh $(TOPDIR)/scripts/ubinize-image.sh $(2) \
+ "$(KDIR)/root.$(3)" \
+ "$(KDIR)/$(IMG_PREFIX)-$(1)-$(3)-ubinized.bin" \
+ $(4)
+ endef
+
+endif
+
+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), \
+ $(shell echo $($(PROFILE)_UBI_OPTS)), \
+ $(shell echo $(UBI_OPTS)) \
+ ) \
+ -o $(KDIR)/root$(1).ubi \
+ ubinize$(1).cfg \
+ )
+ endef
+
+ define Image/mkfs/ubifs
+
+ ifneq ($($(PROFILE)_UBIFS_OPTS)$(UBIFS_OPTS),)
+ $(STAGING_DIR_HOST)/bin/mkfs.ubifs \
+ $(if $($(PROFILE)_UBIFS_OPTS), \
+ $(shell echo $($(PROFILE)_UBIFS_OPTS)), \
+ $(shell echo $(UBIFS_OPTS)) \
+ ) \
+ $(if $(CONFIG_TARGET_UBIFS_FREE_SPACE_FIXUP),--space-fixup) \
+ $(if $(CONFIG_TARGET_UBIFS_COMPRESSION_NONE),--force-compr=none) \
+ $(if $(CONFIG_TARGET_UBIFS_COMPRESSION_LZO),--force-compr=lzo) \
+ $(if $(CONFIG_TARGET_UBIFS_COMPRESSION_ZLIB),--force-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)
+ endif
+ $(call Image/Build,ubifs)
+
+ ifneq ($($(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))
+ endif
+ $(if $(wildcard ./ubinize.cfg),$(call Image/Build,ubi))
+ endef
+endif
+
+define Image/mkfs/cpiogz
+ ( cd $(TARGET_DIR); find . | cpio -o -H newc | gzip -9n >$(BIN_DIR)/$(IMG_PREFIX)-rootfs.cpio.gz )
+endef
+
+define Image/mkfs/targz
+ $(TAR) -czpf $(BIN_DIR)/$(IMG_PREFIX)$(if $(PROFILE_SANITIZED),-$(PROFILE_SANITIZED))-rootfs.tar.gz --numeric-owner --owner=0 --group=0 --sort=name -C $(TARGET_DIR)/ .
+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) \
+ -i $(CONFIG_TARGET_EXT4_MAXINODE) \
+ -m $(CONFIG_TARGET_EXT4_RESERVED_PCT) \
+ $(if $(CONFIG_TARGET_EXT4_JOURNAL),,-J) \
+ $(KDIR)/root.ext4 $(TARGET_DIR)/
+endef
+
+define Image/mkfs/prepare/default
+ # Use symbolic permissions to avoid clobbering SUID/SGID/sticky bits
+ - $(FIND) $(TARGET_DIR) -type f -not -perm /0100 -not -name 'ssh_host*' -not -name 'shadow' -print0 | $(XARGS) -0 chmod u+rw,g+r,o+r
+ - $(FIND) $(TARGET_DIR) -type f -perm /0100 -print0 | $(XARGS) -0 chmod u+rwx,g+rx,o+rx
+ - $(FIND) $(TARGET_DIR) -type d -print0 | $(XARGS) -0 chmod u+rwx,g+rx,o+rx
+ $(INSTALL_DIR) $(TARGET_DIR)/tmp $(TARGET_DIR)/overlay
+ chmod 1777 $(TARGET_DIR)/tmp
+endef
+
+define Image/mkfs/prepare
+ $(call Image/mkfs/prepare/default)
+endef
+
+
+define Image/Checksum
+ ( cd ${BIN_DIR} ; \
+ $(FIND) -maxdepth 1 -type f \! -name 'md5sums' -printf "%P\n" | sort | xargs $1 > $2 \
+ )
+endef
+
+define BuildImage/mkfs
+ install: mkfs-$(1)
+ .PHONY: mkfs-$(1)
+ mkfs-$(1): kernel_prepare
+ $(Image/mkfs/$(1))
+ $(call Build/mkfs/default,$(1))
+ $(call Build/mkfs/$(1),$(1))
+ $(KDIR)/root.$(1): mkfs-$(1)
+
+endef
+
+# Build commands that can be called from Device/* templates
+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 '$(call toupper,$(LINUX_KARCH)) OpenWrt Linux-$(LINUX_VERSION)' -d $@ $@.new
+ @mv $@.new $@
+endef
+
+define Build/netgear-chk
+ $(STAGING_DIR_HOST)/bin/mkchkimg \
+ -o $@.new \
+ -k $@ \
+ -b $(NETGEAR_BOARD_ID) \
+ -r $(NETGEAR_REGION)
+ mv $@.new $@
+endef
+
+define Build/netgear-dni
+ $(STAGING_DIR_HOST)/bin/mkdniimg \
+ -B $(NETGEAR_BOARD_ID) -v OpenWrt.$(REVISION) \
+ $(if $(NETGEAR_HW_ID),-H $(NETGEAR_HW_ID)) \
+ -r "$(1)" \
+ -i $@ -o $@.new
+ mv $@.new $@
+endef
+
+define Build/fit
+ $(TOPDIR)/scripts/mkits.sh \
+ -D $(DEVICE_NAME) -o $@.its -k $@ \
+ $(if $(word 2,$(1)),-d $(word 2,$(1))) -C $(word 1,$(1)) \
+ -a $(KERNEL_LOADADDR) -e $(if $(KERNEL_ENTRY),$(KERNEL_ENTRY),$(KERNEL_LOADADDR)) \
+ -A $(ARCH) -v $(LINUX_VERSION)
+ PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage -f $@.its $@.new
+ @mv $@.new $@
+endef
+
+define Build/lzma
+ $(STAGING_DIR_HOST)/bin/lzma e $@ -lc1 -lp2 -pb2 $(1) $@.new
+ @mv $@.new $@
+endef
+
+define Build/gzip
+ gzip -9n -c $@ $(1) > $@.new
+ @mv $@.new $@
+endef
+
+define Build/kernel-bin
+ rm -f $@
+ cp $^ $@
+endef
+
+define Build/patch-cmdline
+ $(STAGING_DIR_HOST)/bin/patch-cmdline $@ '$(CMDLINE)'
+endef
+
+define Build/append-kernel
+ dd if=$(word 1,$^) $(if $(1),bs=$(1) conv=sync) >> $@
+endef
+
+define Build/append-rootfs
+ dd if=$(word 2,$^) $(if $(1),bs=$(1) conv=sync) >> $@
+endef
+
+define Build/append-ubi
+ sh $(TOPDIR)/scripts/ubinize-image.sh \
+ $(if $(KERNEL_IN_UBI),--kernel $(word 1,$^)) \
+ $(word 2,$^) \
+ $@.tmp \
+ -p $(BLOCKSIZE) -m $(PAGESIZE) -E 5
+ cat $@.tmp >> $@
+ rm $@.tmp
+endef
+
+define Build/pad-to
+ dd if=$@ of=$@.new bs=$(1) conv=sync
+ mv $@.new $@
+endef
+
+define Build/pad-rootfs
+ $(call prepare_generic_squashfs,$@ $(1))
+endef
+
+define Build/pad-offset
+ let \
+ size="$$(stat -c%s $@)" \
+ pad="$(word 1, $(1))" \
+ offset="$(word 2, $(1))" \
+ pad="(pad - ((size + offset) % pad)) % pad" \
+ newsize='size + pad'; \
+ dd if=$@ of=$@.new bs=$$newsize count=1 conv=sync
+ mv $@.new $@
+endef
+
+define Build/check-size
+ @[ $$(($(subst k,* 1024,$(subst m, * 1024k,$(1))))) -ge "$$(stat -c%s $@)" ] || { \
+ echo "WARNING: Image file $@ is too big" >&2; \
+ rm -f $@; \
+ }
+endef
+
+define Build/combined-image
+ -sh $(TOPDIR)/scripts/combined-image.sh \
+ "$(word 1,$^)" \
+ "$@" \
+ "$@.new"
+ @mv $@.new $@
+endef
+
+define Build/sysupgrade-nand
+ sh $(TOPDIR)/scripts/sysupgrade-nand.sh \
+ --board $(if $(BOARD_NAME),$(BOARD_NAME),$(DEVICE_NAME)) \
+ --kernel $(word 1,$^) \
+ --rootfs $(word 2,$^) \
+ $@
+endef
+
+define Device/Init
+ PROFILES := $(PROFILE)
+ DEVICE_NAME := $(1)
+ KERNEL:=
+ KERNEL_INITRAMFS = $$(KERNEL)
+ KERNEL_SIZE:=
+ CMDLINE:=
+
+ IMAGE_PREFIX := $(IMG_PREFIX)-$(1)
+ IMAGE_NAME = $$(IMAGE_PREFIX)-$$(1)-$$(2)
+ KERNEL_PREFIX = $(1)
+ KERNEL_SUFFIX := -kernel.bin
+ KERNEL_IMAGE = $$(KERNEL_PREFIX)$$(KERNEL_SUFFIX)
+ KERNEL_INITRAMFS_PREFIX = $$(IMAGE_PREFIX)-initramfs
+ KERNEL_INITRAMFS_IMAGE = $$(KERNEL_INITRAMFS_PREFIX)$$(KERNEL_SUFFIX)
+ KERNEL_INSTALL :=
+ KERNEL_NAME := vmlinux
+ KERNEL_SIZE :=
+
+ FILESYSTEMS := $(TARGET_FILESYSTEMS)
+endef
+
+define Device/ExportVar
+ $(1) : $(2):=$$($(2))
+
+endef
+define Device/Export
+ $(foreach var,$(DEVICE_VARS) DEVICE_NAME KERNEL KERNEL_INITRAMFS,$(call Device/ExportVar,$(1),$(var)))
+ $(1) : FILESYSTEM:=$(2)
+endef
+
+define Device/Check
+ _TARGET = $$(if $$(filter $(PROFILE),$$(PROFILES)),install,install-disabled)
+ _COMPILE_TARGET = $$(if $(if $(IB),,$(CONFIG_IB)$$(filter $(PROFILE),$$(PROFILES))),compile,compile-disabled)
+endef
+
+ifndef IB
+define Device/Build/initramfs
+ $(call Device/Export,$(KDIR)/tmp/$$(KERNEL_INITRAMFS_IMAGE),$(1))
+ $$(_TARGET): $(BIN_DIR)/$$(KERNEL_INITRAMFS_IMAGE)
+
+ $(KDIR)/$$(KERNEL_NAME)-initramfs: image_prepare
+ $(BIN_DIR)/$$(KERNEL_INITRAMFS_IMAGE): $(KDIR)/tmp/$$(KERNEL_INITRAMFS_IMAGE)
+ cp $$^ $$@
+
+ $(KDIR)/tmp/$$(KERNEL_INITRAMFS_IMAGE): $(KDIR)/$$(KERNEL_NAME)-initramfs
+ @rm -f $$@
+ $$(call concat_cmd,$$(KERNEL_INITRAMFS))
+endef
+endif
+
+define Device/Build/check_size
+ @[ $$(($(subst k,* 1024,$(subst m, * 1024k,$(1))))) -ge "$$(stat -c%s $@)" ] || { \
+ echo "WARNING: Image file $@ is too big" >&2; \
+ rm -f $@; \
+ }
+endef
+
+define Device/Build/compile
+ $$(_COMPILE_TARGET): $(KDIR)/$(1)
+ $(eval $(call Device/Export,$(KDIR)/$(1)))
+ $(KDIR)/$(1):
+ $$(call concat_cmd,$(COMPILE/$(1)))
+
+endef
+
+define Device/Build/kernel
+ _KERNEL_IMAGES += $(KDIR)/$$(KERNEL_NAME)
+ $(KDIR)/$$(KERNEL_NAME): image_prepare
+ $$(_TARGET): $$(if $$(KERNEL_INSTALL),$(BIN_DIR)/$$(KERNEL_IMAGE))
+ $(call Device/Export,$(KDIR)/$$(KERNEL_IMAGE),$(1))
+ $(BIN_DIR)/$$(KERNEL_IMAGE): $(KDIR)/$$(KERNEL_IMAGE)
+ cp $$^ $$@
+ ifndef IB
+ ifdef CONFIG_IB
+ install: $(KDIR)/$$(KERNEL_IMAGE)
+ endif
+ $(KDIR)/$$(KERNEL_IMAGE): $(KDIR)/$$(KERNEL_NAME)
+ @rm -f $$@
+ $$(call concat_cmd,$$(KERNEL))
+ $$(if $$(KERNEL_SIZE),$$(call Device/Build/check_size,$$(KERNEL_SIZE)))
+ endif
+endef
+
+define Device/Build/image
+ $$(_TARGET): $(BIN_DIR)/$(call IMAGE_NAME,$(1),$(2))
+ $(eval $(call Device/Export,$(KDIR)/tmp/$(call IMAGE_NAME,$(1),$(2)),$(1)))
+ $(KDIR)/tmp/$(call IMAGE_NAME,$(1),$(2)): $(KDIR)/$$(KERNEL_IMAGE) $(KDIR)/root.$(1)
+ @rm -f $$@
+ [ -f $$(word 1,$$^) -a -f $$(word 2,$$^) ]
+ $$(call concat_cmd,$(if $(IMAGE/$(2)/$(1)),$(IMAGE/$(2)/$(1)),$(IMAGE/$(2))))
+
+ .IGNORE: $(BIN_DIR)/$(call IMAGE_NAME,$(1),$(2))
+ $(BIN_DIR)/$(call IMAGE_NAME,$(1),$(2)): $(KDIR)/tmp/$(call IMAGE_NAME,$(1),$(2))
+ cp $$^ $$@
+
+endef
+
+define Device/Build
+ $(if $(CONFIG_TARGET_ROOTFS_INITRAMFS),$(call Device/Build/initramfs,$(1)))
+ $(call Device/Build/kernel,$(1))
+
+ $$(eval $$(foreach compile,$$(COMPILE), \
+ $$(call Device/Build/compile,$$(compile),$(1))))
+
+ $$(eval $$(foreach image,$$(IMAGES), \
+ $$(foreach fs,$$(filter $(TARGET_FILESYSTEMS),$$(FILESYSTEMS)), \
+ $$(call Device/Build/image,$$(fs),$$(image),$(1)))))
+endef
+
+define Device
+ $(call Device/Init,$(1))
+ $(call Device/Default,$(1))
+ $(call Device/Check,$(1))
+ $(call Device/$(1),$(1))
+ $(call Device/Build,$(1))
+
+endef
+
+define BuildImage
+
+ download:
+ prepare:
+ compile:
+ clean:
+ image_prepare:
+
+ ifeq ($(IB),)
+ .PHONY: download prepare compile clean image_prepare mkfs_prepare kernel_prepare install
+ compile:
+ $(call Build/Compile)
+
+ clean:
+ $(call Build/Clean)
+
+ image_prepare: compile
+ mkdir -p $(KDIR)/tmp
+ $(call Image/Prepare)
+ else
+ image_prepare:
+ mkdir -p $(KDIR)/tmp
+ endif
+
+ mkfs_prepare: image_prepare
+ $(call Image/mkfs/prepare)
+
+ kernel_prepare: mkfs_prepare
+ $(call Image/BuildKernel)
+ $(if $(CONFIG_TARGET_ROOTFS_INITRAMFS),$(if $(IB),,$(call Image/BuildKernel/Initramfs)))
+ $(call Image/InstallKernel)
+
+ $(foreach device,$(TARGET_DEVICES),$(call Device,$(device)))
+ $(foreach fs,$(TARGET_FILESYSTEMS) $(fs-subtypes-y),$(call BuildImage/mkfs,$(fs)))
+
+ $$(sort $$(_KERNEL_IMAGES)):
+ @touch $$@
+
+ install: kernel_prepare
+ $(foreach fs,$(TARGET_FILESYSTEMS),
+ $(call Image/Build,$(fs))
+ )
+ $(call Image/mkfs/ubifs)
+ $(call Image/Checksum,md5sum --binary,md5sums)
+ $(call Image/Checksum,openssl dgst -sha256,sha256sums)
+
+endef
diff --git a/include/kernel-build.mk b/include/kernel-build.mk
new file mode 100644
index 0000000..9abfd54
--- /dev/null
+++ b/include/kernel-build.mk
@@ -0,0 +1,144 @@
+#
+# Copyright (C) 2006-2007 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+include $(INCLUDE_DIR)/host.mk
+include $(INCLUDE_DIR)/prereq.mk
+
+ifneq ($(DUMP),1)
+ all: compile
+endif
+
+export QUILT=1
+STAMP_PREPARED:=$(LINUX_DIR)/.prepared
+STAMP_CONFIGURED:=$(LINUX_DIR)/.configured
+include $(INCLUDE_DIR)/download.mk
+include $(INCLUDE_DIR)/quilt.mk
+include $(INCLUDE_DIR)/kernel-defaults.mk
+
+define Kernel/Prepare
+ $(call Kernel/Prepare/Default)
+endef
+
+define Kernel/Configure
+ $(call Kernel/Configure/Default)
+endef
+
+define Kernel/CompileModules
+ $(call Kernel/CompileModules/Default)
+endef
+
+define Kernel/CompileImage
+ $(call Kernel/CompileImage/Default)
+ $(call Kernel/CompileImage/Initramfs)
+endef
+
+define Kernel/Clean
+ $(call Kernel/Clean/Default)
+endef
+
+define Download/kernel
+ URL:=$(LINUX_SITE)
+ FILE:=$(LINUX_SOURCE)
+ MD5SUM:=$(LINUX_KERNEL_MD5SUM)
+endef
+
+ifdef CONFIG_COLLECT_KERNEL_DEBUG
+ define Kernel/CollectDebug
+ rm -rf $(KERNEL_BUILD_DIR)/debug
+ mkdir -p $(KERNEL_BUILD_DIR)/debug/modules
+ $(CP) $(LINUX_DIR)/vmlinux $(KERNEL_BUILD_DIR)/debug/
+ -$(CP) \
+ $(STAGING_DIR_ROOT)/lib/modules/$(LINUX_VERSION)/* \
+ $(KERNEL_BUILD_DIR)/debug/modules/
+ $(FIND) $(KERNEL_BUILD_DIR)/debug -type f | $(XARGS) $(KERNEL_CROSS)strip --only-keep-debug
+ $(TAR) c -C $(KERNEL_BUILD_DIR) debug | bzip2 -c -9 > $(BIN_DIR)/kernel-debug.tar.bz2
+ endef
+endif
+
+define BuildKernel
+ $(if $(QUILT),$(Build/Quilt))
+ $(if $(LINUX_SITE),$(call Download,kernel))
+
+ .NOTPARALLEL:
+
+ $(STAMP_PREPARED): $(if $(LINUX_SITE),$(DL_DIR)/$(LINUX_SOURCE))
+ -rm -rf $(KERNEL_BUILD_DIR)
+ -mkdir -p $(KERNEL_BUILD_DIR)
+ $(Kernel/Prepare)
+ touch $$@
+
+ $(KERNEL_BUILD_DIR)/symtab.h: FORCE
+ rm -f $(KERNEL_BUILD_DIR)/symtab.h
+ touch $(KERNEL_BUILD_DIR)/symtab.h
+ +$(MAKE) $(KERNEL_MAKEOPTS) vmlinux
+ find $(LINUX_DIR) $(STAGING_DIR_ROOT)/lib/modules -name \*.ko | \
+ 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
+ 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
+ ( \
+ echo '#define SYMTAB_KEEP \'; \
+ cat $(KERNEL_BUILD_DIR)/sym_include.txt | \
+ awk '{print "KEEP(*(___ksymtab+" $$$$1 ")) \\" }'; \
+ echo; \
+ echo '#define SYMTAB_KEEP_GPL \'; \
+ cat $(KERNEL_BUILD_DIR)/sym_include.txt | \
+ awk '{print "KEEP(*(___ksymtab_gpl+" $$$$1 ")) \\" }'; \
+ echo; \
+ echo '#define SYMTAB_DISCARD \'; \
+ cat $(KERNEL_BUILD_DIR)/sym_exclude.txt | \
+ awk '{print "*(___ksymtab+" $$$$1 ") \\" }'; \
+ echo; \
+ echo '#define SYMTAB_DISCARD_GPL \'; \
+ cat $(KERNEL_BUILD_DIR)/sym_exclude.txt | \
+ awk '{print "*(___ksymtab_gpl+" $$$$1 ") \\" }'; \
+ echo; \
+ ) > $$@
+
+ $(STAMP_CONFIGURED): $(STAMP_PREPARED) $(LINUX_KCONFIG_LIST) $(TOPDIR)/.config
+ $(Kernel/Configure)
+ touch $$@
+
+ $(LINUX_DIR)/.modules: $(STAMP_CONFIGURED) $(LINUX_DIR)/.config FORCE
+ $(Kernel/CompileModules)
+ touch $$@
+
+ $(LINUX_DIR)/.image: $(STAMP_CONFIGURED) $(if $(CONFIG_STRIP_KERNEL_EXPORTS),$(KERNEL_BUILD_DIR)/symtab.h) FORCE
+ $(Kernel/CompileImage)
+ $(Kernel/CollectDebug)
+ touch $$@
+
+ mostlyclean: FORCE
+ $(Kernel/Clean)
+
+ define BuildKernel
+ endef
+
+ download: $(if $(LINUX_SITE),$(DL_DIR)/$(LINUX_SOURCE))
+ prepare: $(STAMP_CONFIGURED)
+ compile: $(LINUX_DIR)/.modules
+ $(MAKE) -C image compile TARGET_BUILD=
+
+ oldconfig menuconfig nconfig: $(STAMP_PREPARED) $(STAMP_CHECKED) FORCE
+ rm -f $(STAMP_CONFIGURED)
+ $(LINUX_RECONF_CMD) > $(LINUX_DIR)/.config
+ $(_SINGLE)$(MAKE) -C $(LINUX_DIR) $(KERNEL_MAKEOPTS) $$@
+ $(LINUX_RECONF_DIFF) $(LINUX_DIR)/.config > $(LINUX_RECONFIG_TARGET)
+
+ install: $(LINUX_DIR)/.image
+ +$(MAKE) -C image compile install TARGET_BUILD=
+
+ clean: FORCE
+ rm -rf $(KERNEL_BUILD_DIR)
+
+ image-prereq:
+ @+$(NO_TRACE_MAKE) -s -C image prereq TARGET_BUILD=
+
+ prereq: image-prereq
+
+endef
diff --git a/include/kernel-defaults.mk b/include/kernel-defaults.mk
new file mode 100644
index 0000000..d37787a
--- /dev/null
+++ b/include/kernel-defaults.mk
@@ -0,0 +1,170 @@
+#
+# Copyright (C) 2006-2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+KERNEL_MAKEOPTS := -C $(LINUX_DIR) \
+ HOSTCFLAGS="$(HOST_CFLAGS) -Wall -Wmissing-prototypes -Wstrict-prototypes" \
+ CROSS_COMPILE="$(KERNEL_CROSS)" \
+ ARCH="$(LINUX_KARCH)" \
+ KBUILD_HAVE_NLS=no \
+ CONFIG_SHELL="$(BASH)" \
+ $(if $(findstring c,$(OPENWRT_VERBOSE)),V=1,V='') \
+ $(if $(PKG_BUILD_ID),LDFLAGS_MODULE=--build-id=0x$(PKG_BUILD_ID))
+
+ifdef CONFIG_STRIP_KERNEL_EXPORTS
+ KERNEL_MAKEOPTS += \
+ EXTRA_LDSFLAGS="-I$(KERNEL_BUILD_DIR) -include symtab.h"
+endif
+
+INITRAMFS_EXTRA_FILES ?= $(GENERIC_PLATFORM_DIR)/image/initramfs-base-files.txt
+
+ifneq (,$(KERNEL_CC))
+ KERNEL_MAKEOPTS += CC="$(KERNEL_CC)"
+endif
+
+ifdef CONFIG_USE_SPARSE
+ KERNEL_MAKEOPTS += C=1 CHECK=$(STAGING_DIR_HOST)/bin/sparse
+endif
+
+export HOST_EXTRACFLAGS=-I$(STAGING_DIR_HOST)/include
+
+# defined in quilt.mk
+Kernel/Patch:=$(Kernel/Patch/Default)
+
+KERNEL_GIT_OPTS:=
+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
+
+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)
+ $(Kernel/Patch)
+ touch $(LINUX_DIR)/.quilt_used
+ endef
+ else
+ define Kernel/Prepare/Default
+ git clone $(KERNEL_GIT_OPTS) $(CONFIG_KERNEL_GIT_CLONE_URI) $(LINUX_DIR)
+ endef
+ endif
+else
+ define Kernel/Prepare/Default
+ mkdir -p $(KERNEL_BUILD_DIR)
+ if [ -d $(LINUX_DIR) ]; then \
+ rmdir $(LINUX_DIR); \
+ fi
+ ln -s $(CONFIG_EXTERNAL_KERNEL_TREE) $(LINUX_DIR)
+ endef
+endif
+
+ifeq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y)
+ 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
+ echo 'CONFIG_BLK_DEV_INITRD=y' >> $(LINUX_DIR)/.config
+ echo 'CONFIG_INITRAMFS_SOURCE="$(strip $(TARGET_DIR) $(INITRAMFS_EXTRA_FILES))"' >> $(LINUX_DIR)/.config
+ endef
+ else
+ define Kernel/SetInitramfs/PreConfigure
+ grep -v INITRAMFS $(LINUX_DIR)/.config.old > $(LINUX_DIR)/.config
+ echo 'CONFIG_INITRAMFS_SOURCE="$(call qstrip,$(CONFIG_EXTERNAL_CPIO))"' >> $(LINUX_DIR)/.config
+ endef
+ endif
+
+ define Kernel/SetInitramfs
+ mv $(LINUX_DIR)/.config $(LINUX_DIR)/.config.old
+ $(call Kernel/SetInitramfs/PreConfigure)
+ 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_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
+ echo -e "$(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZMA),CONFIG_INITRAMFS_COMPRESSION_LZMA=y\nCONFIG_RD_LZMA=y,# CONFIG_INITRAMFS_COMPRESSION_LZMA is not set\n# CONFIG_RD_LZMA is not set)" >> $(LINUX_DIR)/.config
+ 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
+ endef
+else
+endif
+
+define Kernel/SetNoInitramfs
+ mv $(LINUX_DIR)/.config $(LINUX_DIR)/.config.old
+ grep -v INITRAMFS $(LINUX_DIR)/.config.old > $(LINUX_DIR)/.config
+ echo 'CONFIG_INITRAMFS_SOURCE=""' >> $(LINUX_DIR)/.config
+endef
+
+define Kernel/Configure/Default
+ $(LINUX_CONF_CMD) > $(LINUX_DIR)/.config.target
+# copy CONFIG_KERNEL_* settings over to .config.target
+ awk '/^(#[[:space:]]+)?CONFIG_KERNEL/{sub("CONFIG_KERNEL_","CONFIG_");print}' $(TOPDIR)/.config >> $(LINUX_DIR)/.config.target
+ echo "# CONFIG_KALLSYMS_EXTRA_PASS is not set" >> $(LINUX_DIR)/.config.target
+ echo "# CONFIG_KALLSYMS_ALL is not set" >> $(LINUX_DIR)/.config.target
+ echo "# CONFIG_KALLSYMS_UNCOMPRESSED is not set" >> $(LINUX_DIR)/.config.target
+ $(SCRIPT_DIR)/metadata.pl kconfig $(TMP_DIR)/.packageinfo $(TOPDIR)/.config $(KERNEL_PATCHVER) > $(LINUX_DIR)/.config.override
+ $(SCRIPT_DIR)/kconfig.pl 'm+' '+' $(LINUX_DIR)/.config.target /dev/null $(LINUX_DIR)/.config.override > $(LINUX_DIR)/.config
+ $(call Kernel/SetNoInitramfs)
+ rm -rf $(KERNEL_BUILD_DIR)/modules
+ $(_SINGLE) [ -d $(LINUX_DIR)/user_headers ] || $(MAKE) $(KERNEL_MAKEOPTS) INSTALL_HDR_PATH=$(LINUX_DIR)/user_headers headers_install
+ $(SH_FUNC) grep '=[ym]' $(LINUX_DIR)/.config | LC_ALL=C sort | md5s > $(LINUX_DIR)/.vermagic
+endef
+
+define Kernel/Configure/Initramfs
+ $(call Kernel/SetInitramfs)
+endef
+
+define Kernel/CompileModules/Default
+ rm -f $(LINUX_DIR)/vmlinux $(LINUX_DIR)/System.map
+ +$(MAKE) $(KERNEL_MAKEOPTS) modules
+endef
+
+OBJCOPY_STRIP = -R .reginfo -R .notes -R .note -R .comment -R .mdebug -R .note.gnu.build-id
+
+# AMD64 shares the location with x86
+ifeq ($(LINUX_KARCH),x86_64)
+IMAGES_DIR:=../../x86/boot
+endif
+
+define Kernel/CopyImage
+ $(KERNEL_CROSS)objcopy -O binary $(OBJCOPY_STRIP) -S $(LINUX_DIR)/vmlinux $(LINUX_KERNEL)$(1)
+ $(KERNEL_CROSS)objcopy $(OBJCOPY_STRIP) -S $(LINUX_DIR)/vmlinux $(KERNEL_BUILD_DIR)/vmlinux$(1).elf
+ $(CP) $(LINUX_DIR)/vmlinux $(KERNEL_BUILD_DIR)/vmlinux.debug
+ $(foreach k, \
+ $(if $(KERNEL_IMAGES),$(KERNEL_IMAGES),$(filter-out dtbs,$(KERNELNAME))), \
+ $(CP) $(LINUX_DIR)/arch/$(LINUX_KARCH)/boot/$(IMAGES_DIR)/$(k) $(KERNEL_BUILD_DIR)/$(k)$(1); \
+ )
+endef
+
+define Kernel/CompileImage/Default
+ rm -f $(TARGET_DIR)/init
+ +$(MAKE) $(KERNEL_MAKEOPTS) $(if $(KERNELNAME),$(KERNELNAME),all) modules
+ $(call Kernel/CopyImage)
+endef
+
+ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),)
+define Kernel/CompileImage/Initramfs
+ $(call Kernel/Configure/Initramfs)
+ $(CP) $(GENERIC_PLATFORM_DIR)/base-files/init $(TARGET_DIR)/init
+ rm -rf $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)/usr/initramfs_data.cpio*
+ +$(MAKE) $(KERNEL_MAKEOPTS) $(if $(KERNELNAME),$(KERNELNAME),all) modules
+ $(call Kernel/CopyImage,-initramfs)
+endef
+else
+define Kernel/CompileImage/Initramfs
+endef
+endif
+
+define Kernel/Clean/Default
+ rm -f $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)/.configured
+ 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
new file mode 100644
index 0000000..1ecb37c
--- /dev/null
+++ b/include/kernel-version.mk
@@ -0,0 +1,27 @@
+# Use the default kernel version if the Makefile doesn't override it
+
+LINUX_RELEASE?=1
+
+LINUX_VERSION-3.18 = .23
+LINUX_VERSION-4.0 = .9
+LINUX_VERSION-4.1 = .11
+LINUX_VERSION-4.3 = -rc7
+
+LINUX_KERNEL_MD5SUM-3.18.23 = dc6d265ab38716be3676ac294b481ad8
+LINUX_KERNEL_MD5SUM-4.0.9 = 40fc5f6e2d718e539b45e6601c71985b
+LINUX_KERNEL_MD5SUM-4.1.11 = 63e5981e38f935772a5309289fe76972
+LINUX_KERNEL_MD5SUM-4.3-rc7 = b33f9c9c1a597bb8e0d6f84c074e733f
+
+ifdef KERNEL_PATCHVER
+ LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER)))
+endif
+
+split_version=$(subst ., ,$(1))
+merge_version=$(subst $(space),.,$(1))
+KERNEL_BASE=$(firstword $(subst -, ,$(LINUX_VERSION)))
+KERNEL=$(call merge_version,$(wordlist 1,2,$(call split_version,$(KERNEL_BASE))))
+KERNEL_PATCHVER ?= $(KERNEL)
+
+# disable the md5sum check for unknown kernel versions
+LINUX_KERNEL_MD5SUM:=$(LINUX_KERNEL_MD5SUM-$(strip $(LINUX_VERSION)))
+LINUX_KERNEL_MD5SUM?=x
diff --git a/include/kernel.mk b/include/kernel.mk
new file mode 100644
index 0000000..6a613fe
--- /dev/null
+++ b/include/kernel.mk
@@ -0,0 +1,240 @@
+#
+# Copyright (C) 2006-2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+ifeq ($(__target_inc),)
+ include $(INCLUDE_DIR)/target.mk
+endif
+
+ifeq ($(DUMP),1)
+ KERNEL?=<KERNEL>
+ BOARD?=<BOARD>
+ LINUX_VERSION?=<LINUX_VERSION>
+ LINUX_VERMAGIC?=<LINUX_VERMAGIC>
+else
+ ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
+ export GCC_HONOUR_COPTS=s
+ endif
+
+ LINUX_KMOD_SUFFIX=ko
+
+ ifneq (,$(findstring uml,$(BOARD)))
+ KERNEL_CC?=$(HOSTCC)
+ KERNEL_CROSS?=
+ else
+ KERNEL_CC?=$(TARGET_CC)
+ KERNEL_CROSS?=$(TARGET_CROSS)
+ endif
+
+ ifeq ($(TARGET_BUILD),1)
+ PATCH_DIR ?= ./patches$(if $(wildcard ./patches-$(KERNEL_PATCHVER)),-$(KERNEL_PATCHVER))
+ FILES_DIR ?= $(foreach dir,$(wildcard ./files ./files-$(KERNEL_PATCHVER)),"$(dir)")
+ endif
+ KERNEL_BUILD_DIR ?= $(BUILD_DIR)/linux-$(BOARD)$(if $(SUBTARGET),_$(SUBTARGET))
+ LINUX_DIR ?= $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)
+ LINUX_UAPI_DIR=uapi/
+ LINUX_VERMAGIC:=$(strip $(shell cat $(LINUX_DIR)/.vermagic 2>/dev/null))
+ LINUX_VERMAGIC:=$(if $(LINUX_VERMAGIC),$(LINUX_VERMAGIC),unknown)
+
+ LINUX_UNAME_VERSION:=$(if $(word 3,$(subst ., ,$(KERNEL_BASE))),$(KERNEL_BASE),$(KERNEL_BASE).0)
+ ifneq ($(findstring -rc,$(LINUX_VERSION)),)
+ LINUX_UNAME_VERSION:=$(LINUX_UNAME_VERSION)-$(strip $(lastword $(subst -, ,$(LINUX_VERSION))))
+ endif
+
+ MODULES_SUBDIR:=lib/modules/$(LINUX_UNAME_VERSION)
+ TARGET_MODULES_DIR := $(LINUX_TARGET_DIR)/$(MODULES_SUBDIR)
+
+ 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)
+ endif
+
+ ifneq ($(TARGET_BUILD),1)
+ PKG_BUILD_DIR ?= $(KERNEL_BUILD_DIR)/$(PKG_NAME)$(if $(PKG_VERSION),-$(PKG_VERSION))
+ endif
+endif
+
+ifneq (,$(findstring uml,$(BOARD)))
+ LINUX_KARCH=um
+else ifneq (,$(findstring $(ARCH) , aarch64 aarch64_be ))
+ LINUX_KARCH := arm64
+else ifneq (,$(findstring $(ARCH) , armeb ))
+ LINUX_KARCH := arm
+else ifneq (,$(findstring $(ARCH) , mipsel mips64 mips64el ))
+ LINUX_KARCH := mips
+else ifneq (,$(findstring $(ARCH) , sh2 sh3 sh4 ))
+ LINUX_KARCH := sh
+else ifneq (,$(findstring $(ARCH) , i386 x86_64 ))
+ LINUX_KARCH := x86
+else
+ LINUX_KARCH := $(ARCH)
+endif
+
+define KernelPackage/Defaults
+ FILES:=
+ AUTOLOAD:=
+endef
+
+define ModuleAutoLoad
+ $(SH_FUNC) \
+ export modules=; \
+ probe_module() { \
+ mods="$$$$$$$$1"; \
+ boot="$$$$$$$$2"; \
+ 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" ]; 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() { \
+ priority="$$$$$$$$1"; \
+ mods="$$$$$$$$2"; \
+ boot="$$$$$$$$3"; \
+ 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" ]; 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 \
+ 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
+endef
+
+ifeq ($(DUMP)$(TARGET_BUILD),)
+ -include $(LINUX_DIR)/.config
+endif
+
+define KernelPackage/depends
+ $(STAMP_BUILT): $(LINUX_DIR)/.config
+ define KernelPackage/depends
+ endef
+endef
+
+define KernelPackage
+ NAME:=$(1)
+ $(eval $(call Package/Default))
+ $(eval $(call KernelPackage/Defaults))
+ $(eval $(call KernelPackage/$(1)))
+ $(eval $(call KernelPackage/$(1)/$(BOARD)))
+
+ define Package/kmod-$(1)
+ TITLE:=$(TITLE)
+ SECTION:=kernel
+ CATEGORY:=Kernel modules
+ DESCRIPTION:=$(DESCRIPTION)
+ EXTRA_DEPENDS:=kernel (=$(LINUX_VERSION)-$(LINUX_RELEASE)-$(LINUX_VERMAGIC))
+ VERSION:=$(LINUX_VERSION)$(if $(PKG_VERSION),+$(PKG_VERSION))-$(if $(PKG_RELEASE),$(PKG_RELEASE),$(LINUX_RELEASE))
+ $(call KernelPackage/$(1))
+ $(call KernelPackage/$(1)/$(BOARD))
+ endef
+
+ ifdef KernelPackage/$(1)/conffiles
+ define Package/kmod-$(1)/conffiles
+$(call KernelPackage/$(1)/conffiles)
+ endef
+ endif
+
+ ifdef KernelPackage/$(1)/description
+ define Package/kmod-$(1)/description
+$(call KernelPackage/$(1)/description)
+ endef
+ endif
+
+ ifdef KernelPackage/$(1)/config
+ define Package/kmod-$(1)/config
+$(call KernelPackage/$(1)/config)
+ endef
+ endif
+
+ $(call KernelPackage/depends)
+
+ ifneq ($(if $(filter-out %=y %=n %=m,$(KCONFIG)),$(filter m y,$(foreach c,$(filter-out %=y %=n %=m,$(KCONFIG)),$($(c)))),.),)
+ ifneq ($(if $(SDK),$(filter-out $(LINUX_DIR)/%.ko,$(FILES)),$(strip $(FILES))),)
+ define Package/kmod-$(1)/install
+ @for mod in $$(call version_filter,$$(FILES)); do \
+ if grep -q "$$$$$$$${mod##$(LINUX_DIR)/}" "$(LINUX_DIR)/modules.builtin"; then \
+ echo "NOTICE: module '$$$$$$$$mod' is built-in."; \
+ elif [ -e $$$$$$$$mod ]; then \
+ mkdir -p $$(1)/$(MODULES_SUBDIR) ; \
+ $(CP) -L $$$$$$$$mod $$(1)/$(MODULES_SUBDIR)/ ; \
+ else \
+ echo "ERROR: module '$$$$$$$$mod' is missing." >&2; \
+ exit 1; \
+ fi; \
+ done;
+ $(call ModuleAutoLoad,$(1),$$(1),$(AUTOLOAD))
+ $(call KernelPackage/$(1)/install,$$(1))
+ endef
+ endif
+ $(if $(CONFIG_PACKAGE_kmod-$(1)),
+ else
+ compile: $(1)-disabled
+ $(1)-disabled:
+ @echo "WARNING: kmod-$(1) is not available in the kernel config - generating empty package" >&2
+
+ define Package/kmod-$(1)/install
+ true
+ endef
+ )
+ endif
+ $$(eval $$(call BuildPackage,kmod-$(1)))
+
+ $$(IPKG_kmod-$(1)): $$(wildcard $$(FILES))
+endef
+
+version_filter=$(if $(findstring @,$(1)),$(shell $(SCRIPT_DIR)/metadata.pl version_filter $(KERNEL_PATCHVER) $(1)),$(1))
+
+define AutoLoad
+ add_module "$(1)" "$(call version_filter,$(2))" "$(3)";
+endef
+
+define AutoProbe
+ probe_module "$(call version_filter,$(1))" "$(2)";
+endef
+
+version_field=$(if $(word $(1),$(2)),$(word $(1),$(2)),0)
+kernel_version_merge=$$(( ($(call version_field,1,$(1)) << 24) + ($(call version_field,2,$(1)) << 16) + ($(call version_field,3,$(1)) << 8) + $(call version_field,4,$(1)) ))
+
+ifdef DUMP
+ kernel_version_cmp=
+else
+ kernel_version_cmp=$(shell [ $(call kernel_version_merge,$(call split_version,$(2))) $(1) $(call kernel_version_merge,$(call split_version,$(3))) ] && echo 1 )
+endif
+
+CompareKernelPatchVer=$(if $(call kernel_version_cmp,-$(2),$(1),$(3)),1,0)
+
+kernel_patchver_gt=$(call kernel_version_cmp,-gt,$(KERNEL_PATCHVER),$(1))
+kernel_patchver_ge=$(call kernel_version_cmp,-ge,$(KERNEL_PATCHVER),$(1))
+kernel_patchver_eq=$(call kernel_version_cmp,-eq,$(KERNEL_PATCHVER),$(1))
+kernel_patchver_le=$(call kernel_version_cmp,-le,$(KERNEL_PATCHVER),$(1))
+kernel_patchver_lt=$(call kernel_version_cmp,-lt,$(KERNEL_PATCHVER),$(1))
+
diff --git a/include/netfilter.mk b/include/netfilter.mk
new file mode 100644
index 0000000..68af50b
--- /dev/null
+++ b/include/netfilter.mk
@@ -0,0 +1,377 @@
+#
+# Copyright (C) 2006-2014 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+ifneq ($(__inc_netfilter),1)
+__inc_netfilter:=1
+
+ifeq ($(NF_KMOD),1)
+P_V4:=ipv4/netfilter/
+P_V6:=ipv6/netfilter/
+P_XT:=netfilter/
+P_EBT:=bridge/netfilter/
+endif
+
+# 1: variable
+# 2: kconfig symbols
+# 3: file list
+# 4: version dependency
+define nf_add
+ $(if $(4),ifeq ($$(strip $$(call CompareKernelPatchVer,$$(KERNEL_PATCHVER),$(firstword $(4)),$(lastword $(4)))),1))
+ $(1)-$$($(2)) += $(3)
+ $(if $(4),endif)
+ KCONFIG_$(1) = $(filter-out $(2),$(KCONFIG_$(1))) $(2)
+endef
+
+
+# core
+
+# kernel only
+$(eval $(if $(NF_KMOD),$(call nf_add,NF_IPT,CONFIG_IP_NF_IPTABLES, $(P_V4)ip_tables),))
+$(eval $(if $(NF_KMOD),$(call nf_add,NF_IPT,CONFIG_NETFILTER_XTABLES, $(P_XT)x_tables),))
+
+$(eval $(if $(NF_KMOD),$(call nf_add,IPT_CORE,CONFIG_NETFILTER_XTABLES, $(P_XT)xt_tcpudp),))
+$(eval $(if $(NF_KMOD),$(call nf_add,IPT_CORE,CONFIG_IP_NF_FILTER, $(P_V4)iptable_filter),))
+$(eval $(if $(NF_KMOD),$(call nf_add,IPT_CORE,CONFIG_IP_NF_MANGLE, $(P_V4)iptable_mangle),))
+
+# userland only
+$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_CORE,CONFIG_IP_NF_IPTABLES, xt_standard ipt_icmp xt_tcp xt_udp xt_comment xt_id xt_set xt_SET)))
+
+$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MATCH_LIMIT, $(P_XT)xt_limit))
+$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MATCH_MAC, $(P_XT)xt_mac))
+$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MATCH_MULTIPORT, $(P_XT)xt_multiport))
+$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MATCH_COMMENT, $(P_XT)xt_comment))
+$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MATCH_ID, $(P_XT)xt_id))
+
+#cluster
+$(eval $(call nf_add,IPT_CLUSTER,CONFIG_NETFILTER_XT_MATCH_CLUSTER, $(P_XT)xt_cluster))
+
+$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_TARGET_LOG, $(P_XT)xt_LOG))
+$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_TARGET_LOG, $(P_XT)nf_log_common))
+$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_TARGET_LOG, $(P_V4)nf_log_ipv4))
+$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_TARGET_TCPMSS, $(P_XT)xt_TCPMSS))
+$(eval $(call nf_add,IPT_CORE,CONFIG_IP_NF_TARGET_REJECT, $(P_V4)ipt_REJECT))
+$(eval $(call nf_add,IPT_CORE,CONFIG_IP_NF_TARGET_REJECT, $(P_V4)nf_reject_ipv4))
+$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MATCH_TIME, $(P_XT)xt_time))
+$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MARK, $(P_XT)xt_mark))
+
+# kernel has xt_MARK.ko merged into xt_mark.ko, userspace is still separate
+# userland: xt_MARK.so
+$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MARK, $(P_XT)xt_MARK)))
+
+
+# conntrack
+
+# kernel only
+$(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNTRACK,CONFIG_NF_CONNTRACK, $(P_XT)nf_conntrack),))
+$(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNTRACK,CONFIG_NF_CONNTRACK_RTCACHE, $(P_XT)nf_conntrack_rtcache),))
+$(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNTRACK,CONFIG_NF_DEFRAG_IPV4, $(P_V4)nf_defrag_ipv4),))
+$(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNTRACK,CONFIG_NF_CONNTRACK_IPV4, $(P_V4)nf_conntrack_ipv4),))
+
+$(eval $(call nf_add,IPT_CONNTRACK,CONFIG_NETFILTER_XT_MATCH_STATE, $(P_XT)xt_state))
+$(eval $(call nf_add,IPT_CONNTRACK,CONFIG_IP_NF_RAW, $(P_V4)iptable_raw))
+$(eval $(call nf_add,IPT_CONNTRACK,CONFIG_NETFILTER_XT_TARGET_CT, $(P_XT)xt_CT))
+$(eval $(call nf_add,IPT_CONNTRACK,CONFIG_NETFILTER_XT_MATCH_CONNTRACK, $(P_XT)xt_conntrack))
+
+
+# conntrack-extra
+
+$(eval $(call nf_add,IPT_CONNTRACK_EXTRA,CONFIG_NETFILTER_XT_MATCH_CONNBYTES, $(P_XT)xt_connbytes))
+$(eval $(call nf_add,IPT_CONNTRACK_EXTRA,CONFIG_NETFILTER_XT_MATCH_CONNLIMIT, $(P_XT)xt_connlimit))
+$(eval $(call nf_add,IPT_CONNTRACK_EXTRA,CONFIG_NETFILTER_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)))
+
+# 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_IP_NF_TARGET_ROUTE, $(P_V4)ipt_ROUTE))
+
+
+# filter
+
+$(eval $(call nf_add,IPT_FILTER,CONFIG_NETFILTER_XT_MATCH_STRING, $(P_XT)xt_string))
+
+
+# ipopt
+
+$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_DSCP, $(P_XT)xt_dscp))
+$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_TARGET_DSCP, $(P_XT)xt_DSCP))
+$(eval $(call nf_add,IPT_HASHLIMIT,CONFIG_NETFILTER_XT_MATCH_HASHLIMIT, $(P_XT)xt_hashlimit))
+$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_LENGTH, $(P_XT)xt_length))
+$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_STATISTIC, $(P_XT)xt_statistic))
+$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_TCPMSS, $(P_XT)xt_tcpmss))
+
+$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_TARGET_CLASSIFY, $(P_XT)xt_CLASSIFY))
+$(eval $(call nf_add,IPT_IPOPT,CONFIG_IP_NF_MATCH_DSCP, $(P_V4)ipt_dscp))
+$(eval $(call nf_add,IPT_IPOPT,CONFIG_IP_NF_TARGET_ECN, $(P_V4)ipt_ECN))
+
+$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_ECN, $(P_XT)xt_ecn))
+
+# userland only
+$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_DSCP, xt_tos)))
+$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_TARGET_DSCP, xt_TOS)))
+$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_HL, ipt_ttl)))
+$(eval $(if $(NF_KMOD),,$(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_TARGET_HL, ipt_TTL)))
+
+$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_MATCH_HL, $(P_XT)xt_hl))
+$(eval $(call nf_add,IPT_IPOPT,CONFIG_NETFILTER_XT_TARGET_HL, $(P_XT)xt_HL))
+
+# iprange
+$(eval $(call nf_add,IPT_IPRANGE,CONFIG_NETFILTER_XT_MATCH_IPRANGE, $(P_XT)xt_iprange))
+
+#clusterip
+$(eval $(call nf_add,IPT_CLUSTERIP,CONFIG_IP_NF_TARGET_CLUSTERIP, $(P_V4)ipt_CLUSTERIP))
+
+# ipsec
+$(eval $(call nf_add,IPT_IPSEC,CONFIG_IP_NF_MATCH_AH, $(P_V4)ipt_ah))
+$(eval $(call nf_add,IPT_IPSEC,CONFIG_NETFILTER_XT_MATCH_ESP, $(P_XT)xt_esp))
+$(eval $(call nf_add,IPT_IPSEC,CONFIG_NETFILTER_XT_MATCH_POLICY, $(P_XT)xt_policy))
+
+
+# IPv6
+
+# kernel only
+$(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_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,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_IP6_NF_RAW, $(P_V6)ip6table_raw),))
+$(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))
+$(eval $(call nf_add,IPT_IPV6,CONFIG_IP6_NF_TARGET_REJECT, $(P_V6)nf_reject_ipv6))
+
+# ipv6 extra
+$(eval $(call nf_add,IPT_IPV6_EXTRA,CONFIG_IP6_NF_MATCH_IPV6HEADER, $(P_V6)ip6t_ipv6header))
+$(eval $(call nf_add,IPT_IPV6_EXTRA,CONFIG_IP6_NF_MATCH_AH, $(P_V6)ip6t_ah))
+$(eval $(call nf_add,IPT_IPV6_EXTRA,CONFIG_IP6_NF_MATCH_MH, $(P_V6)ip6t_mh))
+$(eval $(call nf_add,IPT_IPV6_EXTRA,CONFIG_IP6_NF_MATCH_EUI64, $(P_V6)ip6t_eui64))
+$(eval $(call nf_add,IPT_IPV6_EXTRA,CONFIG_IP6_NF_MATCH_OPTS, $(P_V6)ip6t_hbh))
+$(eval $(call nf_add,IPT_IPV6_EXTRA,CONFIG_IP6_NF_MATCH_FRAG, $(P_V6)ip6t_frag))
+$(eval $(call nf_add,IPT_IPV6_EXTRA,CONFIG_IP6_NF_MATCH_RT, $(P_V6)ip6t_rt))
+
+# nat
+
+# kernel only
+$(eval $(if $(NF_KMOD),$(call nf_add,NF_NAT,CONFIG_NF_NAT, $(P_XT)nf_nat),))
+$(eval $(if $(NF_KMOD),$(call nf_add,NF_NAT,CONFIG_NF_NAT_REDIRECT, $(P_XT)nf_nat_redirect, ge 3.19.0),))
+$(eval $(if $(NF_KMOD),$(call nf_add,NF_NAT,CONFIG_NF_NAT_IPV4, $(P_V4)nf_nat_ipv4),))
+$(eval $(if $(NF_KMOD),$(call nf_add,NF_NAT6,CONFIG_NF_NAT_IPV6, $(P_V6)nf_nat_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_NAT, $(P_V6)nf_nat_masquerade_ipv6),))
+$(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_MASQUERADE, $(P_V4)nf_nat_masquerade_ipv4))
+$(eval $(call nf_add,IPT_NAT,CONFIG_IP_NF_TARGET_REDIRECT, $(P_XT)xt_REDIRECT))
+
+
+# nat-extra
+
+$(eval $(call nf_add,IPT_NAT_EXTRA,CONFIG_IP_NF_TARGET_NETMAP, $(P_XT)xt_NETMAP))
+
+
+# nathelper
+
+$(eval $(call nf_add,NF_NATHELPER,CONFIG_NF_CONNTRACK_FTP, $(P_XT)nf_conntrack_ftp))
+$(eval $(call nf_add,NF_NATHELPER,CONFIG_NF_NAT_FTP, $(P_XT)nf_nat_ftp))
+
+
+# nathelper-extra
+
+$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_BROADCAST, $(P_XT)nf_conntrack_broadcast))
+$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_AMANDA, $(P_XT)nf_conntrack_amanda))
+$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_NAT_AMANDA, $(P_XT)nf_nat_amanda))
+$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CT_PROTO_GRE, $(P_XT)nf_conntrack_proto_gre))
+$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_NAT_PROTO_GRE, $(P_V4)nf_nat_proto_gre))
+$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_H323, $(P_XT)nf_conntrack_h323))
+$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_NAT_H323, $(P_V4)nf_nat_h323))
+$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_PPTP, $(P_XT)nf_conntrack_pptp))
+$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_NAT_PPTP, $(P_V4)nf_nat_pptp))
+$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_SIP, $(P_XT)nf_conntrack_sip))
+$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_NAT_SIP, $(P_XT)nf_nat_sip))
+$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_SNMP, $(P_XT)nf_conntrack_snmp))
+$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_NAT_SNMP_BASIC, $(P_V4)nf_nat_snmp_basic))
+$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_TFTP, $(P_XT)nf_conntrack_tftp))
+$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_NAT_TFTP, $(P_XT)nf_nat_tftp))
+$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_CONNTRACK_IRC, $(P_XT)nf_conntrack_irc))
+$(eval $(call nf_add,NF_NATHELPER_EXTRA,CONFIG_NF_NAT_IRC, $(P_XT)nf_nat_irc))
+
+
+# ulog
+
+$(eval $(call nf_add,IPT_ULOG,CONFIG_IP_NF_TARGET_ULOG, $(P_V4)ipt_ULOG))
+
+
+# nflog
+
+$(eval $(call nf_add,IPT_NFLOG,CONFIG_NETFILTER_XT_TARGET_NFLOG, $(P_XT)xt_NFLOG))
+
+
+# nfqueue
+
+$(eval $(call nf_add,IPT_NFQUEUE,CONFIG_NETFILTER_XT_TARGET_NFQUEUE, $(P_XT)xt_NFQUEUE))
+
+
+# debugging
+
+$(eval $(call nf_add,IPT_DEBUG,CONFIG_NETFILTER_XT_TARGET_TRACE, $(P_XT)xt_TRACE))
+
+# tproxy
+
+$(eval $(call nf_add,IPT_TPROXY,CONFIG_NETFILTER_XT_MATCH_SOCKET, $(P_XT)xt_socket))
+$(eval $(call nf_add,IPT_TPROXY,CONFIG_NETFILTER_XT_TARGET_TPROXY, $(P_XT)xt_TPROXY))
+
+# led
+$(eval $(call nf_add,IPT_LED,CONFIG_NETFILTER_XT_TARGET_LED, $(P_XT)xt_LED))
+
+# tee
+
+$(eval $(call nf_add,IPT_TEE,CONFIG_NETFILTER_XT_TARGET_TEE, $(P_XT)xt_TEE))
+
+# u32
+
+$(eval $(call nf_add,IPT_U32,CONFIG_NETFILTER_XT_MATCH_U32, $(P_XT)xt_u32))
+
+
+# netlink
+
+$(eval $(call nf_add,NFNETLINK,CONFIG_NETFILTER_NETLINK, $(P_XT)nfnetlink))
+
+# nflog
+
+$(eval $(call nf_add,NFNETLINK_LOG,CONFIG_NETFILTER_NETLINK_LOG, $(P_XT)nfnetlink_log))
+
+# nfqueue
+
+$(eval $(call nf_add,NFNETLINK_QUEUE,CONFIG_NETFILTER_NETLINK_QUEUE, $(P_XT)nfnetlink_queue))
+
+#
+# ebtables
+#
+
+$(eval $(if $(NF_KMOD),$(call nf_add,EBTABLES,CONFIG_BRIDGE_NF_EBTABLES, $(P_EBT)ebtables),))
+
+# ebtables: tables
+$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_BROUTE, $(P_EBT)ebtable_broute))
+$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_T_FILTER, $(P_EBT)ebtable_filter))
+$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_T_NAT, $(P_EBT)ebtable_nat))
+
+# ebtables: matches
+$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_802_3, $(P_EBT)ebt_802_3))
+$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_AMONG, $(P_EBT)ebt_among))
+$(eval $(call nf_add,EBTABLES_IP4,CONFIG_BRIDGE_EBT_ARP, $(P_EBT)ebt_arp))
+$(eval $(call nf_add,EBTABLES_IP4,CONFIG_BRIDGE_EBT_IP, $(P_EBT)ebt_ip))
+$(eval $(call nf_add,EBTABLES_IP6,CONFIG_BRIDGE_EBT_IP6, $(P_EBT)ebt_ip6))
+$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_LIMIT, $(P_EBT)ebt_limit))
+$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_MARK, $(P_EBT)ebt_mark_m))
+$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_PKTTYPE, $(P_EBT)ebt_pkttype))
+$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_STP, $(P_EBT)ebt_stp))
+$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_VLAN, $(P_EBT)ebt_vlan))
+
+# targets
+$(eval $(call nf_add,EBTABLES_IP4,CONFIG_BRIDGE_EBT_ARPREPLY, $(P_EBT)ebt_arpreply))
+$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_MARK_T, $(P_EBT)ebt_mark))
+$(eval $(call nf_add,EBTABLES_IP4,CONFIG_BRIDGE_EBT_DNAT, $(P_EBT)ebt_dnat))
+$(eval $(call nf_add,EBTABLES,CONFIG_BRIDGE_EBT_REDIRECT, $(P_EBT)ebt_redirect))
+$(eval $(call nf_add,EBTABLES_IP4,CONFIG_BRIDGE_EBT_SNAT, $(P_EBT)ebt_snat))
+
+# watchers
+$(eval $(call nf_add,EBTABLES_WATCHERS,CONFIG_BRIDGE_EBT_LOG, $(P_EBT)ebt_log))
+$(eval $(call nf_add,EBTABLES_WATCHERS,CONFIG_BRIDGE_EBT_ULOG, $(P_EBT)ebt_ulog))
+$(eval $(call nf_add,EBTABLES_WATCHERS,CONFIG_BRIDGE_EBT_NFLOG, $(P_EBT)ebt_nflog))
+$(eval $(call nf_add,EBTABLES_WATCHERS,CONFIG_BRIDGE_EBT_NFQUEUE, $(P_EBT)ebt_nfqueue))
+
+# nftables
+$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NF_TABLES, $(P_XT)nf_tables),))
+$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NF_TABLES_INET, $(P_XT)nf_tables_inet),))
+$(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_CT, $(P_XT)nft_ct),))
+$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_RBTREE, $(P_XT)nft_rbtree),))
+$(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_COUNTER, $(P_XT)nft_counter),))
+$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_LOG, $(P_XT)nft_log),))
+$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_LIMIT, $(P_XT)nft_limit),))
+$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_REJECT, $(P_XT)nft_reject $(P_V4)nft_reject_ipv4 $(P_V6)nft_reject_ipv6),))
+$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_REJECT_INET, $(P_XT)nft_reject_inet),))
+$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NF_REJECT_IPV4, $(P_V4)nf_reject_ipv4),))
+$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NF_REJECT_IPV6, $(P_V6)nf_reject_ipv6),))
+$(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_NAT,CONFIG_NFT_NAT, $(P_XT)nft_nat),))
+$(eval $(if $(NF_KMOD),$(call nf_add,NFT_NAT,CONFIG_NF_NAT_MASQUERADE_IPV4, $(P_V4)nf_nat_masquerade_ipv4),))
+$(eval $(if $(NF_KMOD),$(call nf_add,NFT_NAT,CONFIG_NF_NAT_MASQUERADE_IPV6, $(P_V6)nf_nat_masquerade_ipv6),))
+$(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_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),))
+
+# userland only
+IPT_BUILTIN += $(NF_IPT-y) $(NF_IPT-m)
+IPT_BUILTIN += $(IPT_CORE-y) $(IPT_CORE-m)
+IPT_BUILTIN += $(NF_CONNTRACK-y)
+IPT_BUILTIN += $(NF_CONNTRACK6-y)
+IPT_BUILTIN += $(IPT_CONNTRACK-y)
+IPT_BUILTIN += $(IPT_CONNTRACK_EXTRA-y)
+IPT_BUILTIN += $(IPT_EXTRA-y)
+IPT_BUILTIN += $(IPT_FILTER-y)
+IPT_BUILTIN += $(IPT_IPOPT-y)
+IPT_BUILTIN += $(IPT_IPRANGE-y)
+IPT_BUILTIN += $(IPT_CLUSTER-y)
+IPT_BUILTIN += $(IPT_CLUSTERIP-y)
+IPT_BUILTIN += $(IPT_IPSEC-y)
+IPT_BUILTIN += $(IPT_IPV6-y) $(IPT_IPV6-m)
+IPT_BUILTIN += $(NF_NAT-y)
+IPT_BUILTIN += $(NF_NAT6-y)
+IPT_BUILTIN += $(IPT_NAT-y)
+IPT_BUILTIN += $(IPT_NAT6-y)
+IPT_BUILTIN += $(IPT_NAT_EXTRA-y)
+IPT_BUILTIN += $(NF_NATHELPER-y)
+IPT_BUILTIN += $(NF_NATHELPER_EXTRA-y)
+IPT_BUILTIN += $(IPT_ULOG-y)
+IPT_BUILTIN += $(IPT_DEBUG-y)
+IPT_BUILTIN += $(IPT_TPROXY-y)
+IPT_BUILTIN += $(NFNETLINK-y)
+IPT_BUILTIN += $(NFNETLINK_LOG-y)
+IPT_BUILTIN += $(NFNETLINK_QUEUE-y)
+IPT_BUILTIN += $(EBTABLES-y)
+IPT_BUILTIN += $(EBTABLES_IP4-y)
+IPT_BUILTIN += $(EBTABLES_IP6-y)
+IPT_BUILTIN += $(EBTABLES_WATCHERS-y)
+
+endif # __inc_netfilter
diff --git a/include/nls.mk b/include/nls.mk
new file mode 100644
index 0000000..51463b9
--- /dev/null
+++ b/include/nls.mk
@@ -0,0 +1,40 @@
+#
+# Copyright (C) 2011-2012 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+# iconv full
+ifeq ($(CONFIG_BUILD_NLS),y)
+ ICONV_PREFIX:=$(STAGING_DIR)/usr/lib/libiconv-full
+ ICONV_FULL:=1
+
+ INTL_PREFIX:=$(STAGING_DIR)/usr/lib/libintl-full
+ INTL_FULL:=1
+
+# iconv stub
+else
+ ICONV_PREFIX:=$(STAGING_DIR)/usr/lib/libiconv-stub
+ ICONV_FULL:=
+
+ INTL_PREFIX:=$(STAGING_DIR)/usr/lib/libintl-stub
+ INTL_FULL:=
+endif
+
+PKG_CONFIG_DEPENDS += CONFIG_BUILD_NLS
+PKG_BUILD_DEPENDS += !BUILD_NLS:libiconv !BUILD_NLS:libintl
+
+ICONV_DEPENDS:=+BUILD_NLS:libiconv-full
+ICONV_CFLAGS:=-I$(ICONV_PREFIX)/include
+ICONV_CPPFLAGS:=-I$(ICONV_PREFIX)/include
+ICONV_LDFLAGS:=-L$(ICONV_PREFIX)/lib -Wl,-rpath-link=$(ICONV_PREFIX)/lib
+
+INTL_DEPENDS:=+BUILD_NLS:libintl-full
+INTL_CFLAGS:=-I$(INTL_PREFIX)/include
+INTL_CPPFLAGS:=-I$(INTL_PREFIX)/include
+INTL_LDFLAGS:=-L$(INTL_PREFIX)/lib -Wl,-rpath-link=$(INTL_PREFIX)/lib
+
+TARGET_CFLAGS += $(ICONV_CFLAGS) $(INTL_CFLAGS)
+TARGET_CPPFLAGS += $(ICONV_CPPFLAGS) $(INTL_CPPFLAGS)
+TARGET_LDFLAGS += $(ICONV_LDFLAGS) $(INTL_LDFLAGS)
diff --git a/include/package-bin.mk b/include/package-bin.mk
new file mode 100644
index 0000000..e522451
--- /dev/null
+++ b/include/package-bin.mk
@@ -0,0 +1,33 @@
+#
+# Copyright (C) 2007-2014 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+ifeq ($(DUMP),)
+ define BuildTarget/bin
+ ifeq ($(if $(VARIANT),$(BUILD_VARIANT)),$(VARIANT))
+ ifdef Package/$(1)/install
+ ifneq ($(CONFIG_PACKAGE_$(1))$(DEVELOPER),)
+ compile: install-bin-$(1)
+ else
+ compile: $(1)-disabled
+ $(1)-disabled:
+ @echo "WARNING: skipping $(1) -- package not selected" >&2
+ endif
+ endif
+ endif
+
+ install-bin-$(1): $(STAMP_BUILT)
+ rm -rf $(BIN_DIR)/$(1)
+ $(INSTALL_DIR) $(BIN_DIR)/$(1)
+ $(call Package/$(1)/install,$(BIN_DIR)/$(1))
+
+ clean-$(1):
+ rm -rf $(BIN_DIR)/$(1)
+
+ clean: clean-$(1)
+ .PHONY: install-bin-$(1)
+ endef
+endif
diff --git a/include/package-defaults.mk b/include/package-defaults.mk
new file mode 100644
index 0000000..2896b4c
--- /dev/null
+++ b/include/package-defaults.mk
@@ -0,0 +1,161 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+PKG_DEFAULT_DEPENDS = +libc +SSP_SUPPORT:libssp +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)))
+else
+ PKG_FIXUP_DEPENDS = $(2)
+endif
+
+define Package/Default
+ CONFIGFILE:=
+ SECTION:=opt
+ CATEGORY:=Extra packages
+ DEPENDS:=
+ MDEPENDS:=
+ CONFLICTS:=
+ PROVIDES:=
+ EXTRA_DEPENDS:=
+ MAINTAINER:=$(PKG_MAINTAINER)
+ SOURCE:=$(patsubst $(TOPDIR)/%,%,$(CURDIR))
+ ifneq ($(PKG_VERSION),)
+ ifneq ($(PKG_RELEASE),)
+ VERSION:=$(PKG_VERSION)-$(PKG_RELEASE)
+ else
+ VERSION:=$(PKG_VERSION)
+ endif
+ else
+ VERSION:=$(PKG_RELEASE)
+ endif
+ ABI_VERSION:=
+ ifneq ($(PKG_FLAGS),)
+ PKGFLAGS:=$(PKG_FLAGS)
+ else
+ PKGFLAGS:=
+ endif
+ ifneq ($(ARCH_PACKAGES),)
+ PKGARCH:=$(ARCH_PACKAGES)
+ else
+ PKGARCH:=$(BOARD)
+ endif
+ DEFAULT:=
+ MENU:=
+ SUBMENU:=
+ SUBMENUDEP:=
+ TITLE:=
+ KCONFIG:=
+ BUILDONLY:=
+ HIDDEN:=
+ URL:=
+ VARIANT:=
+ DEFAULT_VARIANT:=
+ USERID:=
+endef
+
+Build/Patch:=$(Build/Patch/Default)
+ifneq ($(strip $(PKG_UNPACK)),)
+ define Build/Prepare/Default
+ $(PKG_UNPACK)
+ $(Build/Patch)
+ endef
+endif
+
+EXTRA_CXXFLAGS = $(EXTRA_CFLAGS)
+ifeq ($(CONFIG_BUILD_NLS),y)
+ DISABLE_NLS:=
+else
+ DISABLE_NLS:=--disable-nls
+endif
+
+CONFIGURE_PREFIX:=/usr
+CONFIGURE_ARGS = \
+ --target=$(GNU_TARGET_NAME) \
+ --host=$(GNU_TARGET_NAME) \
+ --build=$(GNU_HOST_NAME) \
+ --program-prefix="" \
+ --program-suffix="" \
+ --prefix=$(CONFIGURE_PREFIX) \
+ --exec-prefix=$(CONFIGURE_PREFIX) \
+ --bindir=$(CONFIGURE_PREFIX)/bin \
+ --sbindir=$(CONFIGURE_PREFIX)/sbin \
+ --libexecdir=$(CONFIGURE_PREFIX)/lib \
+ --sysconfdir=/etc \
+ --datadir=$(CONFIGURE_PREFIX)/share \
+ --localstatedir=/var \
+ --mandir=$(CONFIGURE_PREFIX)/man \
+ --infodir=$(CONFIGURE_PREFIX)/info \
+ $(DISABLE_NLS) \
+ $(DISABLE_LARGEFILE) \
+ $(DISABLE_IPV6)
+
+CONFIGURE_VARS = \
+ $(TARGET_CONFIGURE_OPTS) \
+ CFLAGS="$(TARGET_CFLAGS) $(EXTRA_CFLAGS)" \
+ CXXFLAGS="$(TARGET_CXXFLAGS) $(EXTRA_CFLAGS)" \
+ CPPFLAGS="$(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS)" \
+ LDFLAGS="$(TARGET_LDFLAGS) $(EXTRA_LDFLAGS)" \
+
+CONFIGURE_PATH = .
+CONFIGURE_CMD = ./configure
+
+replace_script=$(FIND) $(1) -name $(2) | $(XARGS) chmod u+w; \
+ $(FIND) $(1) -name $(2) | $(XARGS) -n1 cp --remove-destination \
+ $(SCRIPT_DIR)/$(2);
+
+define Build/Configure/Default
+ (cd $(PKG_BUILD_DIR)/$(CONFIGURE_PATH)/$(strip $(3)); \
+ if [ -x $(CONFIGURE_CMD) ]; then \
+ $(call replace_script,$(PKG_BUILD_DIR)/$(3),config.guess) \
+ $(call replace_script,$(PKG_BUILD_DIR)/$(3),config.sub) \
+ $(CONFIGURE_VARS) \
+ $(2) \
+ $(CONFIGURE_CMD) \
+ $(CONFIGURE_ARGS) \
+ $(1); \
+ fi; \
+ )
+endef
+
+MAKE_VARS = \
+ CFLAGS="$(TARGET_CFLAGS) $(EXTRA_CFLAGS) $(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS)" \
+ CXXFLAGS="$(TARGET_CXXFLAGS) $(EXTRA_CXXFLAGS) $(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS)" \
+ LDFLAGS="$(TARGET_LDFLAGS) $(EXTRA_LDFLAGS)"
+
+MAKE_FLAGS = \
+ $(TARGET_CONFIGURE_OPTS) \
+ CROSS="$(TARGET_CROSS)" \
+ ARCH="$(ARCH)"
+
+MAKE_INSTALL_FLAGS = \
+ $(MAKE_FLAGS) \
+ DESTDIR="$(PKG_INSTALL_DIR)"
+
+MAKE_PATH = .
+
+define Build/Compile/Default
+ +$(MAKE_VARS) \
+ $(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR)/$(MAKE_PATH) \
+ $(MAKE_FLAGS) \
+ $(1);
+endef
+
+define Build/Install/Default
+ $(MAKE_VARS) \
+ $(MAKE) -C $(PKG_BUILD_DIR)/$(MAKE_PATH) \
+ $(MAKE_INSTALL_FLAGS) \
+ $(if $(1), $(1), install);
+endef
+
+define Build/Dist/Default
+ $(call Build/Compile/Default, DESTDIR="$(PKG_BUILD_DIR)/tmp" CC="$(TARGET_CC)" dist)
+endef
+
+define Build/DistCheck/Default
+ $(call Build/Compile/Default, DESTDIR="$(PKG_BUILD_DIR)/tmp" CC="$(TARGET_CC)" distcheck)
+endef
diff --git a/include/package-dumpinfo.mk b/include/package-dumpinfo.mk
new file mode 100644
index 0000000..5bc931e
--- /dev/null
+++ b/include/package-dumpinfo.mk
@@ -0,0 +1,91 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+ifneq ($(DUMP),)
+
+dumpinfo: FORCE
+
+define Config/template
+Preconfig: $(1)
+Preconfig-Type: $(2)
+Preconfig-Default: $(3)
+Preconfig-Label: $(4)
+
+endef
+
+define Config
+ Preconfig/$(1) = $$(call Config/template,$(1),$(2),$(3),$(4))
+ preconfig_$$(1) += $(1)
+endef
+
+define Dumpinfo/Package
+$(info Package: $(1)
+$(if $(MENU),Menu: $(MENU)
+)$(if $(SUBMENU),Submenu: $(SUBMENU)
+)$(if $(SUBMENUDEP),Submenu-Depends: $(SUBMENUDEP)
+)$(if $(DEFAULT),Default: $(DEFAULT)
+)$(if $(findstring $(PREREQ_CHECK),1),Prereq-Check: 1
+)Version: $(VERSION)
+Depends: $(call PKG_FIXUP_DEPENDS,$(1),$(DEPENDS))
+Conflicts: $(CONFLICTS)
+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)
+Category: $(CATEGORY)
+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)
+)Type: $(if $(Package/$(1)/targets),$(Package/$(1)/targets),$(if $(PKG_TARGETS),$(PKG_TARGETS),ipkg))
+$(if $(KCONFIG),Kernel-Config: $(KCONFIG)
+)$(if $(BUILDONLY),Build-Only: $(BUILDONLY)
+)$(if $(HIDDEN),Hidden: $(HIDDEN)
+)$(if $(FEED),Feed: $(FEED)
+)Description: $(if $(Package/$(1)/description),$(Package/$(1)/description),$(TITLE))
+$(if $(URL),$(URL)
+)$(MAINTAINER)
+@@
+$(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)))
+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
+
+endif
diff --git a/include/package-ipkg.mk b/include/package-ipkg.mk
new file mode 100644
index 0000000..eb4c874
--- /dev/null
+++ b/include/package-ipkg.mk
@@ -0,0 +1,234 @@
+#
+# Copyright (C) 2006-2014 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(INCLUDE_DIR)/feeds.mk
+
+# invoke ipkg-build with some default options
+IPKG_BUILD:= \
+ $(SCRIPT_DIR)/ipkg-build -c -o 0 -g 0
+
+IPKG_STATE_DIR:=$(TARGET_DIR)/usr/lib/opkg
+
+# 1: package name
+# 2: variable name
+# 3: variable suffix
+# 4: file is a script
+define BuildIPKGVariable
+ifdef Package/$(1)/$(2)
+ $$(IPKG_$(1)) : VAR_$(2)$(3)=$$(Package/$(1)/$(2))
+ $(call shexport,Package/$(1)/$(2))
+ $(1)_COMMANDS += echo "$$$$$$$$$(call shvar,Package/$(1)/$(2))" > $(2)$(3); $(if $(4),chmod 0755 $(2)$(3);)
+endif
+endef
+
+PARENL :=(
+PARENR :=)
+
+dep_split=$(subst :,$(space),$(1))
+dep_rem=$(subst !,,$(subst $(strip $(PARENL)),,$(subst $(strip $(PARENR)),,$(word 1,$(call dep_split,$(1))))))
+dep_confvar=$(strip $(foreach cond,$(subst ||, ,$(call dep_rem,$(1))),$(CONFIG_$(cond))))
+dep_pos=$(if $(call dep_confvar,$(1)),$(call dep_val,$(1)))
+dep_neg=$(if $(call dep_confvar,$(1)),,$(call dep_val,$(1)))
+dep_if=$(if $(findstring !,$(1)),$(call dep_neg,$(1)),$(call dep_pos,$(1)))
+dep_val=$(word 2,$(call dep_split,$(1)))
+strip_deps=$(strip $(subst +,,$(filter-out @%,$(1))))
+filter_deps=$(foreach dep,$(call strip_deps,$(1)),$(if $(findstring :,$(dep)),$(call dep_if,$(dep)),$(dep)))
+
+define AddDependency
+ $$(if $(1),$$(if $(2),$$(foreach pkg,$(1),$$(IPKG_$$(pkg))): $$(foreach pkg,$(2),$$(IPKG_$$(pkg)))))
+endef
+
+define FixupReverseDependencies
+ DEPS := $$(filter %:$(1),$$(IDEPEND))
+ DEPS := $$(patsubst %:$(1),%,$$(DEPS))
+ DEPS := $$(filter $$(DEPS),$$(IPKGS))
+ $(call AddDependency,$$(DEPS),$(1))
+endef
+
+define FixupDependencies
+ DEPS := $$(filter $(1):%,$$(IDEPEND))
+ DEPS := $$(patsubst $(1):%,%,$$(DEPS))
+ DEPS := $$(filter $$(DEPS),$$(IPKGS))
+ $(call AddDependency,$(1),$$(DEPS))
+endef
+
+ifneq ($(PKG_NAME),toolchain)
+ define CheckDependencies
+ @( \
+ rm -f $(PKG_INFO_DIR)/$(1).missing; \
+ ( \
+ export \
+ READELF=$(TARGET_CROSS)readelf \
+ OBJCOPY=$(TARGET_CROSS)objcopy \
+ XARGS="$(XARGS)"; \
+ $(SCRIPT_DIR)/gen-dependencies.sh "$$(IDIR_$(1))"; \
+ ) | while read FILE; do \
+ grep -qxF "$$$$FILE" $(PKG_INFO_DIR)/$(1).provides || \
+ echo "$$$$FILE" >> $(PKG_INFO_DIR)/$(1).missing; \
+ done; \
+ if [ -f "$(PKG_INFO_DIR)/$(1).missing" ]; then \
+ echo "Package $(1) is missing dependencies for the following libraries:" >&2; \
+ cat "$(PKG_INFO_DIR)/$(1).missing" >&2; \
+ false; \
+ fi; \
+ )
+ endef
+endif
+
+_addsep=$(word 1,$(1))$(foreach w,$(wordlist 2,$(words $(1)),$(1)),$(strip $(2) $(w)))
+_cleansep=$(subst $(space)$(2)$(space),$(2)$(space),$(1))
+mergelist=$(call _cleansep,$(call _addsep,$(1),$(comma)),$(comma))
+addfield=$(if $(strip $(2)),$(1): $(2))
+_define=define
+_endef=endef
+
+ifeq ($(DUMP),)
+ define BuildTarget/ipkg
+ PDIR_$(1):=$(call FeedPackageDir,$(1))
+ IPKG_$(1):=$$(PDIR_$(1))/$(1)_$(VERSION)_$(PKGARCH).ipk
+ IDIR_$(1):=$(PKG_BUILD_DIR)/ipkg-$(PKGARCH)/$(1)
+ KEEP_$(1):=$(strip $(call Package/$(1)/conffiles))
+
+ ifeq ($(BUILD_VARIANT),$$(if $$(VARIANT),$$(VARIANT),$(BUILD_VARIANT)))
+ ifdef Package/$(1)/install
+ ifneq ($(CONFIG_PACKAGE_$(1))$(DEVELOPER),)
+ IPKGS += $(1)
+ compile: $$(IPKG_$(1)) $(PKG_INFO_DIR)/$(1).provides $(STAGING_DIR_ROOT)/stamp/.$(1)_installed
+ ifneq ($(ABI_VERSION),)
+ compile: $(PKG_INFO_DIR)/$(1).version
+ endif
+
+ ifeq ($(CONFIG_PACKAGE_$(1)),y)
+ .PHONY: $(PKG_INSTALL_STAMP).$(1)
+ compile: $(PKG_INSTALL_STAMP).$(1)
+ $(PKG_INSTALL_STAMP).$(1):
+ if [ -f $(PKG_INSTALL_STAMP).clean ]; then \
+ rm -f \
+ $(PKG_INSTALL_STAMP) \
+ $(PKG_INSTALL_STAMP).clean; \
+ fi; \
+ echo "$(1)" >> $(PKG_INSTALL_STAMP)
+ endif
+ else
+ $(if $(CONFIG_PACKAGE_$(1)),$$(info WARNING: skipping $(1) -- package not selected))
+ endif
+ endif
+ endif
+
+ DEPENDS:=$(call PKG_FIXUP_DEPENDS,$(1),$(DEPENDS))
+ IDEPEND_$(1):=$$(call filter_deps,$$(DEPENDS))
+ IDEPEND += $$(patsubst %,$(1):%,$$(IDEPEND_$(1)))
+ $(FixupDependencies)
+ $(FixupReverseDependencies)
+
+ $(eval $(call BuildIPKGVariable,$(1),conffiles))
+ $(eval $(call BuildIPKGVariable,$(1),preinst,,1))
+ $(eval $(call BuildIPKGVariable,$(1),postinst,-pkg,1))
+ $(eval $(call BuildIPKGVariable,$(1),prerm,-pkg,1))
+ $(eval $(call BuildIPKGVariable,$(1),postrm,,1))
+
+ $(STAGING_DIR_ROOT)/stamp/.$(1)_installed: $(STAMP_BUILT)
+ rm -rf $(STAGING_DIR_ROOT)/tmp-$(1)
+ mkdir -p $(STAGING_DIR_ROOT)/stamp $(STAGING_DIR_ROOT)/tmp-$(1)
+ $(call Package/$(1)/install,$(STAGING_DIR_ROOT)/tmp-$(1))
+ $(call Package/$(1)/install_lib,$(STAGING_DIR_ROOT)/tmp-$(1))
+ $(call locked,$(CP) $(STAGING_DIR_ROOT)/tmp-$(1)/. $(STAGING_DIR_ROOT)/,root-copy)
+ rm -rf $(STAGING_DIR_ROOT)/tmp-$(1)
+ touch $$@
+
+ $(PKG_INFO_DIR)/$(1).version: $$(IPKG_$(1))
+ echo '$(ABI_VERSION)' | cmp -s - $$@ || \
+ echo '$(ABI_VERSION)' > $$@
+
+ Package/$(1)/DEPENDS := $$(call mergelist,$$(filter-out @%,$$(IDEPEND_$(1))))
+ ifneq ($$(EXTRA_DEPENDS),)
+ Package/$(1)/DEPENDS := $$(EXTRA_DEPENDS)$$(if $$(Package/$(1)/DEPENDS),$$(comma) $$(Package/$(1)/DEPENDS))
+ endif
+
+$(_define) Package/$(1)/CONTROL
+Package: $(1)
+Version: $(VERSION)
+$$(call addfield,Depends,$$(Package/$(1)/DEPENDS)
+)$$(call addfield,Conflicts,$$(call mergelist,$(CONFLICTS))
+)$$(call addfield,Provides,$(PROVIDES)
+)$$(call addfield,Source,$(SOURCE)
+)$$(call addfield,License,$$(PKG_LICENSE)
+)$$(call addfield,LicenseFiles,$$(PKG_LICENSE_FILES)
+)$$(call addfield,Section,$(SECTION)
+)$$(call addfield,Require-User,$(USERID)
+)$(if $(filter hold,$(PKG_FLAGS)),Status: unknown hold not-installed
+)$(if $(filter essential,$(PKG_FLAGS)),Essential: yes
+)$(if $(MAINTAINER),Maintainer: $(MAINTAINER)
+)Architecture: $(PKGARCH)
+Installed-Size: 0
+$(_endef)
+
+ $(PKG_INFO_DIR)/$(1).provides: $$(IPKG_$(1))
+ $$(IPKG_$(1)) : export CONTROL=$$(Package/$(1)/CONTROL)
+ $$(IPKG_$(1)) : export DESCRIPTION=$$(Package/$(1)/description)
+ $$(IPKG_$(1)): $(STAMP_BUILT) $(INCLUDE_DIR)/package-ipkg.mk
+ @rm -rf $$(PDIR_$(1))/$(1)_* $$(IDIR_$(1))
+ mkdir -p $(PACKAGE_DIR) $$(IDIR_$(1))/CONTROL $(PKG_INFO_DIR)
+ $(call Package/$(1)/install,$$(IDIR_$(1)))
+ -find $$(IDIR_$(1)) -name 'CVS' -o -name '.svn' -o -name '.#*' -o -name '*~'| $(XARGS) rm -rf
+ @( \
+ find $$(IDIR_$(1)) -name lib\*.so\* -or -name \*.ko | awk -F/ '{ print $$$$NF }'; \
+ for file in $$(patsubst %,$(PKG_INFO_DIR)/%.provides,$$(IDEPEND_$(1))); do \
+ if [ -f "$$$$file" ]; then \
+ cat $$$$file; \
+ fi; \
+ done; $(Package/$(1)/extra_provides) \
+ ) | sort -u > $(PKG_INFO_DIR)/$(1).provides
+ $(if $(PROVIDES),@for pkg in $(PROVIDES); do cp $(PKG_INFO_DIR)/$(1).provides $(PKG_INFO_DIR)/$$$$pkg.provides; done)
+ $(CheckDependencies)
+
+ $(RSTRIP) $$(IDIR_$(1))
+ (cd $$(IDIR_$(1))/CONTROL; \
+ ( \
+ echo "$$$$CONTROL"; \
+ printf "Description: "; echo "$$$$DESCRIPTION" | sed -e 's,^[[:space:]]*, ,g'; \
+ ) > control; \
+ chmod 644 control; \
+ ( \
+ echo "#!/bin/sh"; \
+ echo "[ \"\$$$${IPKG_NO_SCRIPT}\" = \"1\" ] && exit 0"; \
+ echo ". \$$$${IPKG_INSTROOT}/lib/functions.sh"; \
+ echo "default_postinst \$$$$0 \$$$$@"; \
+ ) > postinst; \
+ ( \
+ echo "#!/bin/sh"; \
+ echo ". \$$$${IPKG_INSTROOT}/lib/functions.sh"; \
+ echo "default_prerm \$$$$0 \$$$$@"; \
+ ) > prerm; \
+ chmod 0755 postinst prerm; \
+ $($(1)_COMMANDS) \
+ )
+
+ ifneq ($$(KEEP_$(1)),)
+ @( \
+ keepfiles=""; \
+ for x in $$(KEEP_$(1)); do \
+ [ -f "$$(IDIR_$(1))/$$$$x" ] || keepfiles="$$$${keepfiles:+$$$$keepfiles }$$$$x"; \
+ done; \
+ [ -z "$$$$keepfiles" ] || { \
+ mkdir -p $$(IDIR_$(1))/lib/upgrade/keep.d; \
+ for x in $$$$keepfiles; do echo $$$$x >> $$(IDIR_$(1))/lib/upgrade/keep.d/$(1); done; \
+ }; \
+ )
+ endif
+
+ $(INSTALL_DIR) $$(PDIR_$(1))
+ $(IPKG_BUILD) $$(IDIR_$(1)) $$(PDIR_$(1))
+ @[ -f $$(IPKG_$(1)) ]
+
+ $(1)-clean:
+ rm -f $$(PDIR_$(1))/$(1)_*
+
+ clean: $(1)-clean
+
+ endef
+endif
diff --git a/include/package-seccomp.mk b/include/package-seccomp.mk
new file mode 100644
index 0000000..fa49617
--- /dev/null
+++ b/include/package-seccomp.mk
@@ -0,0 +1,15 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+PKG_CONFIG_DEPENDS+= CONFIG_KERNEL_SECCOMP
+
+ifeq ($(CONFIG_KERNEL_SECCOMP),y)
+ define InstallSeccomp
+ $(INSTALL_DIR) $(1)/etc/seccomp
+ $(INSTALL_DATA) $(2) $(1)/etc/seccomp/
+ endef
+endif
diff --git a/include/package.mk b/include/package.mk
new file mode 100644
index 0000000..6538afe
--- /dev/null
+++ b/include/package.mk
@@ -0,0 +1,315 @@
+#
+# Copyright (C) 2006-2008 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+__package_mk:=1
+
+all: $(if $(DUMP),dumpinfo,compile)
+
+PKG_BUILD_DIR ?= $(BUILD_DIR)/$(PKG_NAME)$(if $(PKG_VERSION),-$(PKG_VERSION))
+PKG_INSTALL_DIR ?= $(PKG_BUILD_DIR)/ipkg-install
+PKG_MD5SUM ?= unknown
+PKG_BUILD_PARALLEL ?=
+PKG_USE_MIPS16 ?= 1
+
+ifneq ($(CONFIG_PKG_BUILD_USE_JOBSERVER),)
+ MAKE_J:=$(if $(MAKE_JOBSERVER),$(MAKE_JOBSERVER) -j)
+else
+ MAKE_J:=-j$(CONFIG_PKG_BUILD_JOBS)
+endif
+
+ifeq ($(strip $(PKG_BUILD_PARALLEL)),0)
+PKG_JOBS?=-j1
+else
+PKG_JOBS?=$(if $(PKG_BUILD_PARALLEL)$(CONFIG_PKG_DEFAULT_PARALLEL),\
+ $(if $(CONFIG_PKG_BUILD_PARALLEL),$(MAKE_J),-j1),-j1)
+endif
+ifdef CONFIG_USE_MIPS16
+ ifeq ($(strip $(PKG_USE_MIPS16)),1)
+ TARGET_ASFLAGS_DEFAULT = $(filter-out -mips16 -minterlink-mips16,$(TARGET_CFLAGS))
+ TARGET_CFLAGS += -mips16 -minterlink-mips16
+ endif
+endif
+
+include $(INCLUDE_DIR)/hardening.mk
+include $(INCLUDE_DIR)/prereq.mk
+include $(INCLUDE_DIR)/host.mk
+include $(INCLUDE_DIR)/unpack.mk
+include $(INCLUDE_DIR)/depends.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) \
+ ) \
+ ))))
+
+STAMP_NO_AUTOREBUILD=$(wildcard $(PKG_BUILD_DIR)/.no_autorebuild)
+PREV_STAMP_PREPARED:=$(if $(STAMP_NO_AUTOREBUILD),$(wildcard $(PKG_BUILD_DIR)/.prepared*))
+ifneq ($(PREV_STAMP_PREPARED),)
+ STAMP_PREPARED:=$(PREV_STAMP_PREPARED)
+ CONFIG_AUTOREBUILD:=
+else
+ STAMP_PREPARED=$(PKG_BUILD_DIR)/.prepared$(if $(QUILT)$(DUMP),,_$(shell $(call find_md5,${CURDIR} $(PKG_FILE_DEPENDS),))$(call confvar,$(PKG_PREPARED_DEPENDS)))
+endif
+STAMP_CONFIGURED=$(PKG_BUILD_DIR)/.configured$(if $(DUMP),,_$(call confvar,$(PKG_CONFIG_DEPENDS)))
+STAMP_CONFIGURED_WILDCARD=$(patsubst %_$(call confvar,$(PKG_CONFIG_DEPENDS)),%_*,$(STAMP_CONFIGURED))
+STAMP_BUILT:=$(PKG_BUILD_DIR)/.built
+STAMP_INSTALLED:=$(STAGING_DIR)/stamp/.$(PKG_NAME)$(if $(BUILD_VARIANT),.$(BUILD_VARIANT),)_installed
+
+STAGING_FILES_LIST:=$(PKG_NAME)$(if $(BUILD_VARIANT),.$(BUILD_VARIANT),).list
+
+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; \
+ fi; \
+ )
+endef
+
+ifneq ($(if $(CONFIG_SRC_TREE_OVERRIDE),$(wildcard ./git-src)),)
+ USE_GIT_TREE:=1
+ QUILT:=1
+endif
+ifdef USE_SOURCE_DIR
+ QUILT:=1
+endif
+ifneq ($(wildcard $(PKG_BUILD_DIR)/.source_dir),)
+ QUILT:=1
+endif
+
+PKG_DIR_NAME:=$(lastword $(subst /,$(space),$(CURDIR)))
+PKG_INSTALL_STAMP:=$(PKG_INFO_DIR)/$(PKG_DIR_NAME).$(if $(BUILD_VARIANT),$(BUILD_VARIANT),default).install
+
+include $(INCLUDE_DIR)/download.mk
+include $(INCLUDE_DIR)/quilt.mk
+include $(INCLUDE_DIR)/package-defaults.mk
+include $(INCLUDE_DIR)/package-dumpinfo.mk
+include $(INCLUDE_DIR)/package-ipkg.mk
+include $(INCLUDE_DIR)/package-bin.mk
+include $(INCLUDE_DIR)/autotools.mk
+
+override MAKEFLAGS=
+CONFIG_SITE:=$(INCLUDE_DIR)/site/$(ARCH)
+CUR_MAKEFILE:=$(filter-out Makefile,$(firstword $(MAKEFILE_LIST)))
+SUBMAKE:=$(NO_TRACE_MAKE) $(if $(CUR_MAKEFILE),-f $(CUR_MAKEFILE))
+PKG_CONFIG_PATH=$(STAGING_DIR)/usr/lib/pkgconfig:$(STAGING_DIR)/usr/share/pkgconfig
+unexport QUIET CONFIG_SITE
+
+ifeq ($(DUMP)$(filter prereq clean refresh update,$(MAKECMDGOALS)),)
+ ifneq ($(if $(QUILT),,$(CONFIG_AUTOREBUILD)),)
+ define Build/Autoclean
+ $(PKG_BUILD_DIR)/.dep_files: $(STAMP_PREPARED)
+ $(call rdep,${CURDIR} $(PKG_FILE_DEPENDS),$(STAMP_PREPARED),$(PKG_BUILD_DIR)/.dep_files,-x "*/.dep_*")
+ $(if $(filter prepare,$(MAKECMDGOALS)),,$(call rdep,$(PKG_BUILD_DIR),$(STAMP_BUILT),,-x "*/.dep_*" -x "*/ipkg*"))
+ endef
+ endif
+endif
+
+define Download/default
+ FILE:=$(PKG_SOURCE)
+ URL:=$(PKG_SOURCE_URL)
+ SUBDIR:=$(PKG_SOURCE_SUBDIR)
+ PROTO:=$(PKG_SOURCE_PROTO)
+ $(if $(PKG_SOURCE_MIRROR),MIRROR:=$(filter 1,$(PKG_MIRROR)))
+ $(if $(PKG_MIRROR_MD5SUM),MIRROR_MD5SUM:=$(PKG_MIRROR_MD5SUM))
+ VERSION:=$(PKG_SOURCE_VERSION)
+ MD5SUM:=$(PKG_MD5SUM)
+endef
+
+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 .)
+ endef
+endif
+ifdef USE_SOURCE_DIR
+ define Build/Prepare/Default
+ rm -rf $(PKG_BUILD_DIR)
+ $(if $(wildcard $(USE_SOURCE_DIR)/*),,@echo "Error: USE_SOURCE_DIR=$(USE_SOURCE_DIR) path not found"; false)
+ ln -snf $(USE_SOURCE_DIR) $(PKG_BUILD_DIR)
+ touch $(PKG_BUILD_DIR)/.source_dir
+ endef
+endif
+
+define Build/Exports/Default
+ $(1) : export ACLOCAL_INCLUDE=$$(foreach p,$$(wildcard $$(STAGING_DIR)/usr/share/aclocal $$(STAGING_DIR)/usr/share/aclocal-* $$(STAGING_DIR)/host/share/aclocal $$(STAGING_DIR)/host/share/aclocal-*),-I $$(p))
+ $(1) : export STAGING_PREFIX=$$(STAGING_DIR)/usr
+ $(1) : export PATH=$$(TARGET_PATH_PKG)
+ $(1) : export CONFIG_SITE:=$$(CONFIG_SITE)
+ $(1) : export PKG_CONFIG_PATH:=$$(PKG_CONFIG_PATH)
+ $(1) : export PKG_CONFIG_LIBDIR:=$$(PKG_CONFIG_PATH)
+ $(1) : export CCACHE_DIR:=$(STAGING_DIR)/ccache
+endef
+Build/Exports=$(Build/Exports/Default)
+
+define Build/DefaultTargets
+ $(if $(QUILT),$(Build/Quilt))
+ $(if $(USE_SOURCE_DIR)$(USE_GIT_TREE),,$(if $(strip $(PKG_SOURCE_URL)),$(call Download,default)))
+ $(call Build/Autoclean)
+
+ download:
+ $(foreach hook,$(Hooks/Download),
+ $(call $(hook))$(sep)
+ )
+
+ $(STAMP_PREPARED) : export PATH=$$(TARGET_PATH_PKG)
+ $(STAMP_PREPARED):
+ @-rm -rf $(PKG_BUILD_DIR)
+ @mkdir -p $(PKG_BUILD_DIR)
+ $(foreach hook,$(Hooks/Prepare/Pre),$(call $(hook))$(sep))
+ $(Build/Prepare)
+ $(foreach hook,$(Hooks/Prepare/Post),$(call $(hook))$(sep))
+ touch $$@
+
+ $(call Build/Exports,$(STAMP_CONFIGURED))
+ $(STAMP_CONFIGURED): $(STAMP_PREPARED)
+ $(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))
+ $(STAMP_BUILT): $(STAMP_CONFIGURED)
+ $(foreach hook,$(Hooks/Compile/Pre),$(call $(hook))$(sep))
+ $(Build/Compile)
+ $(foreach hook,$(Hooks/Compile/Post),$(call $(hook))$(sep))
+ $(Build/Install)
+ $(foreach hook,$(Hooks/Install/Post),$(call $(hook))$(sep))
+ touch $$@
+
+ $(STAMP_INSTALLED) : export PATH=$$(TARGET_PATH_PKG)
+ $(STAMP_INSTALLED): $(STAMP_BUILT)
+ rm -rf $(TMP_DIR)/stage-$(PKG_NAME)
+ mkdir -p $(TMP_DIR)/stage-$(PKG_NAME)/host $(STAGING_DIR)/packages $(STAGING_DIR_HOST)/packages
+ $(foreach hook,$(Hooks/InstallDev/Pre),\
+ $(call $(hook),$(TMP_DIR)/stage-$(PKG_NAME),$(TMP_DIR)/stage-$(PKG_NAME)/host)$(sep)\
+ )
+ $(call Build/InstallDev,$(TMP_DIR)/stage-$(PKG_NAME),$(TMP_DIR)/stage-$(PKG_NAME)/host)
+ $(foreach hook,$(Hooks/InstallDev/Post),\
+ $(call $(hook),$(TMP_DIR)/stage-$(PKG_NAME),$(TMP_DIR)/stage-$(PKG_NAME)/host)$(sep)\
+ )
+ if [ -f $(STAGING_DIR)/packages/$(STAGING_FILES_LIST) ]; then \
+ $(SCRIPT_DIR)/clean-package.sh \
+ "$(STAGING_DIR)/packages/$(STAGING_FILES_LIST)" \
+ "$(STAGING_DIR)"; \
+ fi
+ if [ -d $(TMP_DIR)/stage-$(PKG_NAME) ]; then \
+ (cd $(TMP_DIR)/stage-$(PKG_NAME); find ./ > $(TMP_DIR)/stage-$(PKG_NAME).files); \
+ $(call locked, \
+ mv $(TMP_DIR)/stage-$(PKG_NAME).files $(STAGING_DIR)/packages/$(STAGING_FILES_LIST) && \
+ $(CP) $(TMP_DIR)/stage-$(PKG_NAME)/* $(STAGING_DIR)/; \
+ ,staging-dir); \
+ fi
+ rm -rf $(TMP_DIR)/stage-$(PKG_NAME)
+ touch $$@
+
+ ifdef Build/InstallDev
+ compile: $(STAMP_INSTALLED)
+ endif
+
+ define Build/DefaultTargets
+ endef
+
+ prepare: $(STAMP_PREPARED)
+ configure: $(STAMP_CONFIGURED)
+ dist: $(STAMP_CONFIGURED)
+ distcheck: $(STAMP_CONFIGURED)
+endef
+
+define Build/IncludeOverlay
+ $(eval -include $(wildcard $(TOPDIR)/overlay/*/$(PKG_NAME).mk))
+ define Build/IncludeOverlay
+ endef
+endef
+
+define BuildPackage
+ $(Build/IncludeOverlay)
+ $(eval $(Package/Default))
+ $(eval $(Package/$(1)))
+
+ifdef DESCRIPTION
+$$(error DESCRIPTION:= is obsolete, use Package/PKG_NAME/description)
+endif
+
+ifndef Package/$(1)/description
+define Package/$(1)/description
+ $(TITLE)
+endef
+endif
+
+ BUILD_PACKAGES += $(1)
+ $(STAMP_PREPARED): $$(if $(QUILT)$(DUMP),,$(call find_library_dependencies,$(DEPENDS)))
+
+ $(foreach FIELD, TITLE CATEGORY SECTION VERSION,
+ ifeq ($($(FIELD)),)
+ $$(error Package/$(1) is missing the $(FIELD) field)
+ endif
+ )
+
+ $(if $(DUMP), \
+ $(Dumpinfo/Package), \
+ $(foreach target, \
+ $(if $(Package/$(1)/targets),$(Package/$(1)/targets), \
+ $(if $(PKG_TARGETS),$(PKG_TARGETS), ipkg) \
+ ), $(BuildTarget/$(target)) \
+ ) \
+ )
+ $(if $(PKG_HOST_ONLY)$(DUMP),,$(call Build/DefaultTargets,$(1)))
+endef
+
+define pkg_install_files
+ $(foreach install_file,$(1),$(INSTALL_DIR) $(3)/`dirname $(install_file)`; $(INSTALL_DATA) $(2)/$(install_file) $(3)/`dirname $(install_file)`;)
+endef
+
+define pkg_install_bin
+ $(foreach install_apps,$(1),$(INSTALL_DIR) $(3)/`dirname $(install_apps)`; $(INSTALL_BIN) $(2)/$(install_apps) $(3)/`dirname $(install_apps)`;)
+endef
+
+Build/Prepare=$(call Build/Prepare/Default,)
+Build/Configure=$(call Build/Configure/Default,)
+Build/Compile=$(call Build/Compile/Default,)
+Build/Install=$(if $(PKG_INSTALL),$(call Build/Install/Default,))
+Build/Dist=$(call Build/Dist/Default,)
+Build/DistCheck=$(call Build/DistCheck/Default,)
+
+.NOTPARALLEL:
+
+.PHONY: prepare-package-install
+prepare-package-install:
+ @mkdir -p $(PKG_INFO_DIR)
+ @touch $(PKG_INSTALL_STAMP).clean
+ @echo "$(filter-out essential,$(PKG_FLAGS))" > $(PKG_INSTALL_STAMP).flags
+
+$(PACKAGE_DIR):
+ mkdir -p $@
+
+dumpinfo:
+download:
+prepare:
+configure:
+compile: prepare-package-install
+install: compile
+
+clean: FORCE
+ $(CleanStaging)
+ $(call Build/UninstallDev,$(STAGING_DIR),$(STAGING_DIR_HOST))
+ $(Build/Clean)
+ rm -f $(STAGING_DIR)/packages/$(STAGING_FILES_LIST) $(STAGING_DIR_HOST)/packages/$(STAGING_FILES_LIST)
+ rm -rf $(PKG_BUILD_DIR)
+
+dist:
+ $(Build/Dist)
+
+distcheck:
+ $(Build/DistCheck)
diff --git a/include/prereq-build.mk b/include/prereq-build.mk
new file mode 100644
index 0000000..77fa991
--- /dev/null
+++ b/include/prereq-build.mk
@@ -0,0 +1,170 @@
+#
+# Copyright (C) 2006-2012 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+include $(INCLUDE_DIR)/prereq.mk
+include $(INCLUDE_DIR)/host.mk
+include $(INCLUDE_DIR)/host-build.mk
+
+SHELL:=sh
+PKG_NAME:=Build dependency
+
+
+# Required for the toolchain
+$(eval $(call TestHostCommand,working-make, \
+ Please install GNU make v3.81 or later. (This version has bugs), \
+ $(MAKE) -v | grep -E 'Make (3\.8[1-9]|3\.9[0-9]|[4-9]\.)'))
+
+$(eval $(call TestHostCommand,case-sensitive-fs, \
+ OpenWrt can only be built on a case-sensitive filesystem, \
+ rm -f $(TMP_DIR)/test.*; touch $(TMP_DIR)/test.fs; \
+ test ! -f $(TMP_DIR)/test.FS))
+
+$(eval $(call 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 ))
+
+$(eval $(call TestHostCommand,working-gcc, \
+ Please reinstall the GNU C Compiler - 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 ))
+
+$(eval $(call TestHostCommand,working-g++, \
+ Please reinstall the GNU C++ Compiler - it appears to be broken, \
+ echo 'int main(int argc, char **argv) { return 0; }' | \
+ g++ -x c++ -o $(TMP_DIR)/a.out - -lstdc++ && \
+ $(TMP_DIR)/a.out))
+
+$(eval $(call TestHostCommand,ncurses, \
+ Please install ncurses. (Missing libncurses.so or ncurses.h), \
+ echo 'int main(int argc, char **argv) { initscr(); return 0; }' | \
+ gcc -include ncurses.h -x c -o $(TMP_DIR)/a.out - -lncurses))
+
+ifeq ($(HOST_OS),Linux)
+ zlib_link_flags := -Wl,-Bstatic -lz -Wl,-Bdynamic
+else
+ zlib_link_flags := -lz
+endif
+
+$(eval $(call TestHostCommand,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,libssl, \
+ Please install the openssl library (with development headers), \
+ echo 'int main(int argc, char **argv) { SSL_library_init(); return 0; }' | \
+ gcc $(HOST_CFLAGS) -include openssl/ssl.h -x c -o $(TMP_DIR)/a.out - -lcrypto -lssl $(HOST_LDFLAGS)))
+
+$(eval $(call TestHostCommand,perl-thread-queue, \
+ Please install the Perl Thread::Queue module, \
+ perl -MThread::Queue -e 1))
+
+
+$(eval $(call SetupHostCommand,tar,Please install GNU 'tar', \
+ gtar --version 2>&1 | grep GNU, \
+ gnutar --version 2>&1 | grep GNU, \
+ tar --version 2>&1 | grep GNU))
+
+$(eval $(call SetupHostCommand,find,Please install GNU 'find', \
+ gfind --version 2>&1 | grep GNU, \
+ find --version 2>&1 | grep GNU))
+
+$(eval $(call SetupHostCommand,bash,Please install GNU 'bash', \
+ bash --version 2>&1 | grep GNU))
+
+$(eval $(call SetupHostCommand,patch,Please install GNU 'patch', \
+ gpatch --version 2>&1 | grep 'Free Software Foundation', \
+ patch --version 2>&1 | grep 'Free Software Foundation'))
+
+$(eval $(call SetupHostCommand,diff,Please install diffutils, \
+ gdiff --version 2>&1 | grep diff, \
+ diff --version 2>&1 | grep diff))
+
+$(eval $(call SetupHostCommand,cp,Please install GNU fileutils, \
+ gcp --help, \
+ cp --help))
+
+$(eval $(call SetupHostCommand,seq,, \
+ gseq --version, \
+ seq --version))
+
+$(eval $(call SetupHostCommand,awk,Please install GNU 'awk', \
+ gawk --version 2>&1 | grep GNU, \
+ awk --version 2>&1 | grep GNU))
+
+$(eval $(call SetupHostCommand,grep,Please install GNU 'grep', \
+ ggrep --version 2>&1 | grep GNU, \
+ grep --version 2>&1 | grep GNU))
+
+$(eval $(call SetupHostCommand,getopt, \
+ Please install an extended getopt version that supports --long, \
+ gnugetopt -o t --long test -- --test | grep '^ *--test *--', \
+ /usr/local/bin/getopt -o t --long test -- --test | grep '^ *--test *--', \
+ getopt -o t --long test -- --test | grep '^ *--test *--'))
+
+$(eval $(call SetupHostCommand,stat,Cannot find a file stat utility, \
+ gnustat -c%s $(TMP_DIR)/.host.mk, \
+ gstat -c%s $(TMP_DIR)/.host.mk, \
+ stat -c%s $(TMP_DIR)/.host.mk))
+
+$(eval $(call SetupHostCommand,md5sum,, \
+ gmd5sum /dev/null | grep d41d8cd98f00b204e9800998ecf8427e, \
+ md5sum /dev/null | grep d41d8cd98f00b204e9800998ecf8427e, \
+ $(SCRIPT_DIR)/md5sum /dev/null | grep d41d8cd98f00b204e9800998ecf8427e))
+
+$(eval $(call SetupHostCommand,unzip,Please install 'unzip', \
+ unzip 2>&1 | grep zipfile, \
+ unzip))
+
+$(eval $(call SetupHostCommand,bzip2,Please install 'bzip2', \
+ bzip2 --version </dev/null))
+
+$(eval $(call SetupHostCommand,wget,Please install GNU 'wget', \
+ wget --version | grep GNU))
+
+$(eval $(call SetupHostCommand,perl,Please install Perl 5.x, \
+ perl --version | grep "perl.*v5"))
+
+$(eval $(call SetupHostCommand,python,Please install Python 2.x, \
+ python2.7 -V 2>&1 | grep Python, \
+ python2 -V 2>&1 | grep Python, \
+ python -V 2>&1 | grep Python))
+
+$(eval $(call SetupHostCommand,svn,Please install the Subversion client, \
+ svn --version | grep Subversion))
+
+$(eval $(call SetupHostCommand,git,Please install Git (git-core) >= 1.6.5, \
+ git clone 2>&1 | grep -- --recursive))
+
+$(eval $(call SetupHostCommand,file,Please install the 'file' package, \
+ file --version 2>&1 | grep file))
+
+$(eval $(call SetupHostCommand,openssl,Please install the 'openssl' utility, \
+ openssl version | grep OpenSSL))
+
+
+# Install ldconfig stub
+$(eval $(call TestHostCommand,ldconfig-stub,Failed to install stub, \
+ touch $(STAGING_DIR_HOST)/bin/ldconfig && \
+ chmod +x $(STAGING_DIR_HOST)/bin/ldconfig))
diff --git a/include/prereq.mk b/include/prereq.mk
new file mode 100644
index 0000000..6cb590e
--- /dev/null
+++ b/include/prereq.mk
@@ -0,0 +1,108 @@
+#
+# Copyright (C) 2006-2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+ifneq ($(__prereq_inc),1)
+__prereq_inc:=1
+
+prereq:
+ if [ -f $(TMP_DIR)/.prereq-error ]; then \
+ echo; \
+ cat $(TMP_DIR)/.prereq-error; \
+ rm -f $(TMP_DIR)/.prereq-error; \
+ echo; \
+ false; \
+ fi
+
+.SILENT: prereq
+endif
+
+PREREQ_PREV=
+
+# 1: display name
+# 2: error message
+define Require
+ export PREREQ_CHECK=1
+ ifeq ($$(CHECK_$(1)),)
+ prereq: prereq-$(1)
+
+ prereq-$(1): $(if $(PREREQ_PREV),prereq-$(PREREQ_PREV)) FORCE
+ printf "Checking '$(1)'... "
+ if $(NO_TRACE_MAKE) -f $(firstword $(MAKEFILE_LIST)) check-$(1) >/dev/null 2>/dev/null; then \
+ echo 'ok.'; \
+ else \
+ echo 'failed.'; \
+ echo "$(PKG_NAME): $(strip $(2))" >> $(TMP_DIR)/.prereq-error; \
+ fi
+
+ check-$(1): FORCE
+ $(call Require/$(1))
+ CHECK_$(1):=1
+
+ .SILENT: prereq-$(1) check-$(1)
+ .NOTPARALLEL:
+ endif
+
+ PREREQ_PREV=$(1)
+endef
+
+
+define RequireCommand
+ define Require/$(1)
+ which $(1)
+ endef
+
+ $$(eval $$(call Require,$(1),$(2)))
+endef
+
+define RequireHeader
+ define Require/$(1)
+ [ -e "$(1)" ]
+ endef
+
+ $$(eval $$(call Require,$(1),$(2)))
+endef
+
+define QuoteHostCommand
+'$(subst ','"'"',$(strip $(1)))'
+endef
+
+# 1: display name
+# 2: failure message
+# 3: test
+define TestHostCommand
+ define Require/$(1)
+ ($(3)) >/dev/null 2>/dev/null
+ endef
+
+ $$(eval $$(call Require,$(1),$(2)))
+endef
+
+# 1: canonical name
+# 2: failure message
+# 3+: candidates
+define SetupHostCommand
+ define Require/$(1)
+ [ -f "$(STAGING_DIR_HOST)/bin/$(strip $(1))" ] && exit 0; \
+ 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 \
+ if [ -n "$$$$$$$$cmd" ]; then \
+ bin="$$$$$$$$(PATH="$(subst $(space),:,$(filter-out $(STAGING_DIR_HOST)/%,$(subst :,$(space),$(PATH))))" \
+ which "$$$$$$$${cmd%% *}")"; \
+ if [ -x "$$$$$$$$bin" ] && eval "$$$$$$$$cmd" >/dev/null 2>/dev/null; then \
+ mkdir -p "$(STAGING_DIR_HOST)/bin"; \
+ ln -sf "$$$$$$$$bin" "$(STAGING_DIR_HOST)/bin/$(strip $(1))"; \
+ exit 0; \
+ fi; \
+ fi; \
+ done; \
+ exit 1
+ endef
+
+ $$(eval $$(call Require,$(1),$(if $(2),$(2),Missing $(1) command)))
+endef
diff --git a/include/quilt.mk b/include/quilt.mk
new file mode 100644
index 0000000..3377eb1
--- /dev/null
+++ b/include/quilt.mk
@@ -0,0 +1,170 @@
+#
+# Copyright (C) 2007-2009 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+
+ifneq ($(if $(DUMP),1,$(__quilt_inc)),1)
+__quilt_inc:=1
+
+ifeq ($(TARGET_BUILD),1)
+ PKG_BUILD_DIR:=$(LINUX_DIR)
+endif
+PATCH_DIR?=./patches
+FILES_DIR?=./files
+HOST_PATCH_DIR?=$(PATCH_DIR)
+HOST_FILES_DIR?=$(FILES_DIR)
+
+ifeq ($(MAKECMDGOALS),refresh)
+ override QUILT=1
+endif
+
+QUILT_CMD:=quilt --quiltrc=-
+
+define filter_series
+sed -e s,\\\#.*,, $(1) | grep -E \[a-zA-Z0-9\]
+endef
+
+define PatchDir/Quilt
+ @mkdir -p "$(1)/patches$(if $(3),/$(patsubst %/,%,$(3)))"
+ @if [ -s "$(2)/series" ]; then \
+ mkdir -p "$(1)/patches/$(3)"; \
+ cp "$(2)/series" "$(1)/patches/$(3)"; \
+ fi
+ @for patch in $$$$( (cd "$(2)" && if [ -f series ]; then $(call filter_series,series); else ls | sort; fi; ) 2>/dev/null ); do ( \
+ cp "$(2)/$$$$patch" "$(1)/patches/$(3)"; \
+ echo "$(3)$$$$patch" >> "$(1)/patches/series"; \
+ ); done
+ $(if $(3),@echo $(3) >> "$(1)/patches/.subdirs")
+endef
+
+define PatchDir/Default
+ @if [ -d "$(2)" ] && [ "$$$$(ls $(2) | wc -l)" -gt 0 ]; then \
+ export PATCH="$(PATCH)"; \
+ if [ -s "$(2)/series" ]; then \
+ $(call filter_series,$(2)/series) | xargs -n1 \
+ $(KPATCH) "$(1)" "$(2)"; \
+ else \
+ $(KPATCH) "$(1)" "$(2)"; \
+ fi; \
+ fi
+endef
+
+define PatchDir
+$(call PatchDir/$(if $(strip $(QUILT)),Quilt,Default),$(strip $(1)),$(strip $(2)),$(strip $(3)))
+endef
+
+define HostPatchDir
+$(call PatchDir/$(if $(strip $(HOST_QUILT)),Quilt,Default),$(strip $(1)),$(strip $(2)),$(strip $(3)))
+endef
+
+ifneq ($(PKG_BUILD_DIR),)
+ QUILT?=$(if $(wildcard $(PKG_BUILD_DIR)/.quilt_used),y)
+ ifneq ($(QUILT),)
+ STAMP_CHECKED:=$(PKG_BUILD_DIR)/.quilt_checked
+ override CONFIG_AUTOREBUILD=
+ quilt-check: $(STAMP_CHECKED)
+ endif
+endif
+
+ifneq ($(HOST_BUILD_DIR),)
+ HOST_QUILT?=$(if $(findstring command,$(origin QUILT)),$(QUILT),$(if $(wildcard $(HOST_BUILD_DIR)/.quilt_used),y))
+ ifneq ($(HOST_QUILT),)
+ HOST_STAMP_CHECKED:=$(HOST_BUILD_DIR)/.quilt_checked
+ override CONFIG_AUTOREBUILD=
+ host-quilt-check: $(HOST_STAMP_CHECKED)
+ endif
+endif
+
+define Host/Patch/Default
+ $(if $(HOST_QUILT),rm -rf $(HOST_BUILD_DIR)/patches; mkdir -p $(HOST_BUILD_DIR)/patches)
+ $(call HostPatchDir,$(HOST_BUILD_DIR),$(HOST_PATCH_DIR),)
+ $(if $(HOST_QUILT),touch $(HOST_BUILD_DIR)/.quilt_used)
+endef
+
+define Build/Patch/Default
+ $(if $(QUILT),rm -rf $(PKG_BUILD_DIR)/patches; mkdir -p $(PKG_BUILD_DIR)/patches)
+ $(call PatchDir,$(PKG_BUILD_DIR),$(PATCH_DIR),)
+ $(if $(QUILT),touch $(PKG_BUILD_DIR)/.quilt_used)
+endef
+
+kernel_files=$(foreach fdir,$(GENERIC_FILES_DIR) $(FILES_DIR),$(fdir)/.)
+define Kernel/Patch/Default
+ rm -rf $(PKG_BUILD_DIR)/patches; mkdir -p $(PKG_BUILD_DIR)/patches
+ $(if $(kernel_files),$(CP) $(kernel_files) $(LINUX_DIR)/)
+ find $(LINUX_DIR)/ -name \*.rej -or -name \*.orig | $(XARGS) rm -f
+ $(call PatchDir,$(PKG_BUILD_DIR),$(GENERIC_PATCH_DIR),generic/)
+ $(call PatchDir,$(PKG_BUILD_DIR),$(PATCH_DIR),platform/)
+endef
+
+define Quilt/RefreshDir
+ mkdir -p $(2)
+ -rm -f $(2)/* 2>/dev/null >/dev/null
+ @( \
+ for patch in $$$$($(if $(3),grep "^$(3)",cat) $(1)/patches/series | awk '{print $$$$1}'); do \
+ $(CP) -v "$(1)/patches/$$$$patch" $(2); \
+ done; \
+ )
+endef
+
+define Quilt/Refresh/Host
+ $(call Quilt/RefreshDir,$(HOST_BUILD_DIR),$(PATCH_DIR))
+endef
+
+define Quilt/Refresh/Package
+ $(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(PATCH_DIR))
+endef
+
+define Quilt/Refresh/Kernel
+ @[ -z "$$(grep -v '^generic/' $(PKG_BUILD_DIR)/patches/series | grep -v '^platform/')" ] || { \
+ echo "All kernel patches must start with either generic/ or platform/"; \
+ false; \
+ }
+ $(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(GENERIC_PATCH_DIR),generic/)
+ $(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(PATCH_DIR),platform/)
+endef
+
+define Quilt/Template
+ $($(2)STAMP_CONFIGURED): $($(2)STAMP_CHECKED)
+ $(if $(NO_RECONFIGURE),$($(2)STAMP_BUILT),$($(2)STAMP_CONFIGURED)): FORCE
+ $($(2)STAMP_CHECKED): $($(2)STAMP_PREPARED)
+ if [ -s "$(1)/patches/series" ]; then \
+ (cd "$(1)"; \
+ if $(QUILT_CMD) next >/dev/null 2>&1; then \
+ $(QUILT_CMD) push -a; \
+ else \
+ $(QUILT_CMD) top >/dev/null 2>&1; \
+ fi \
+ ); \
+ fi
+ touch "$$@"
+
+ $(3)quilt-check: $($(2)STAMP_PREPARED) FORCE
+ @[ -f "$(1)/.quilt_used" ] || { \
+ echo "The source directory was not unpacked using quilt. Please rebuild with QUILT=1"; \
+ false; \
+ }
+ @[ -f "$(1)/patches/series" ] || { \
+ echo "The source directory contains no quilt patches."; \
+ false; \
+ }
+ @[ -n "$$$$(ls $(1)/patches/series)" -o "$$$$(cat $(1)/patches/series | md5sum)" = "$$(sort $(1)/patches/series | md5sum)" ] || { \
+ echo "The patches are not sorted in the right order. Please fix."; \
+ false; \
+ }
+
+ $(3)refresh: $(3)quilt-check
+ @cd "$(1)"; $(QUILT_CMD) pop -a -f >/dev/null 2>/dev/null
+ @cd "$(1)"; while $(QUILT_CMD) next 2>/dev/null >/dev/null && $(QUILT_CMD) push; do \
+ QUILT_DIFF_OPTS="-p" $(QUILT_CMD) refresh -p ab --no-index --no-timestamps; \
+ done; ! $(QUILT_CMD) next 2>/dev/null >/dev/null
+ $(Quilt/Refresh/$(4))
+
+ $(3)update: $(3)quilt-check
+ $(Quilt/Refresh/$(4))
+endef
+
+Build/Quilt=$(call Quilt/Template,$(PKG_BUILD_DIR),,,$(if $(TARGET_BUILD),Kernel,Package))
+Host/Quilt=$(call Quilt/Template,$(HOST_BUILD_DIR),HOST_,host-,Host)
+
+endif
diff --git a/include/scan.awk b/include/scan.awk
new file mode 100644
index 0000000..0f02782
--- /dev/null
+++ b/include/scan.awk
@@ -0,0 +1,19 @@
+BEGIN { FS="/" }
+$1 ~ /^feeds/ { FEEDS[$NF]=$0 }
+$1 !~ /^feeds/ { PKGS[$NF]=$0 }
+END {
+ # Filter-out OpenWrt packages which have a feeds equivalent
+ for (pkg in PKGS)
+ if (pkg in FEEDS) {
+ print PKGS[pkg] > of
+ delete PKGS[pkg]
+ }
+ n = asort(PKGS)
+ for (i=1; i <= n; i++) {
+ print PKGS[i]
+ }
+ n = asort(FEEDS)
+ for (i=1; i <= n; i++){
+ print FEEDS[i]
+ }
+}
diff --git a/include/scan.mk b/include/scan.mk
new file mode 100644
index 0000000..5af0359
--- /dev/null
+++ b/include/scan.mk
@@ -0,0 +1,102 @@
+include $(TOPDIR)/include/verbose.mk
+TMP_DIR:=$(TOPDIR)/tmp
+
+all: $(TMP_DIR)/.$(SCAN_TARGET)
+
+include $(TOPDIR)/include/host.mk
+
+SCAN_TARGET ?= packageinfo
+SCAN_NAME ?= package
+SCAN_DIR ?= package
+TARGET_STAMP:=$(TMP_DIR)/info/.files-$(SCAN_TARGET).stamp
+FILELIST:=$(TMP_DIR)/info/.files-$(SCAN_TARGET)-$(SCAN_COOKIE)
+OVERRIDELIST:=$(TMP_DIR)/info/.overrides-$(SCAN_TARGET)-$(SCAN_COOKIE)
+
+ifeq ($(IS_TTY),1)
+ define progress
+ printf "\033[M\r$(1)" >&2;
+ endef
+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 $(SCAN_STAMP) $(foreach DEP,$(DEPS_$(SCAN_DIR)/$(2)/Makefile) $(SCAN_DEPS),$(wildcard $(if $(filter /%,$(DEP)),$(DEP),$(SCAN_DIR)/$(2)/$(DEP))))
+ { \
+ $$(call progress,Collecting $(SCAN_NAME) info: $(SCAN_DIR)/$(2)) \
+ echo Source-Makefile: $(SCAN_DIR)/$(2)/Makefile; \
+ $(if $(3),echo Override: $(3),true); \
+ $(NO_TRACE_MAKE) --no-print-dir -r DUMP=1 FEED="$(call feedname,$(2))" -C $(SCAN_DIR)/$(2) $(SCAN_MAKEOPTS) 2>/dev/null || { \
+ mkdir -p "$(TOPDIR)/logs/$(SCAN_DIR)/$(2)"; \
+ $(NO_TRACE_MAKE) --no-print-dir -r DUMP=1 FEED="$(call feedname,$(2))" -C $(SCAN_DIR)/$(2) $(SCAN_MAKEOPTS) > $(TOPDIR)/logs/$(SCAN_DIR)/$(2)/dump.txt 2>&1; \
+ $$(call progress,ERROR: please fix $(SCAN_DIR)/$(2)/Makefile - see logs/$(SCAN_DIR)/$(2)/dump.txt for details\n) \
+ rm -f $$@; \
+ }; \
+ echo; \
+ } > $$@ || true
+endef
+
+$(OVERRIDELIST):
+ rm -f $(TMP_DIR)/info/.overrides-$(SCAN_TARGET)-*
+ touch $@
+
+ifeq ($(SCAN_NAME),target)
+ GREP_STRING=BuildTarget
+else
+ GREP_STRING=(Build/DefaultTargets|BuildPackage|.+Package)
+endif
+
+$(FILELIST): $(OVERRIDELIST)
+ rm -f $(TMP_DIR)/info/.files-$(SCAN_TARGET)-*
+ $(call FIND_L, $(SCAN_DIR)) $(SCAN_EXTRA) -mindepth 1 $(if $(SCAN_DEPTH),-maxdepth $(SCAN_DEPTH)) -name Makefile | xargs grep -aHE 'call $(GREP_STRING)' | sed -e 's#^$(SCAN_DIR)/##' -e 's#/Makefile:.*##' | uniq | awk -v of=$(OVERRIDELIST) -f include/scan.awk > $@
+
+$(TMP_DIR)/info/.files-$(SCAN_TARGET).mk: $(FILELIST)
+ ( \
+ cat $< | awk '{print "$(SCAN_DIR)/" $$0 "/Makefile" }' | xargs grep -HE '^ *SCAN_DEPS *= *' | awk -F: '{ gsub(/^.*DEPS *= */, "", $$2); print "DEPS_" $$1 "=" $$2 }'; \
+ awk -F/ -v deps="$$DEPS" -v of="$(OVERRIDELIST)" ' \
+ BEGIN { \
+ while (getline < (of)) \
+ override[$$NF]=$$0; \
+ close(of) \
+ } \
+ { \
+ info=$$0; \
+ gsub(/\//, "_", info); \
+ dir=$$0; \
+ pkg=""; \
+ if($$NF in override) \
+ pkg=override[$$NF]; \
+ print "$$(eval $$(call PackageDir," info "," dir "," pkg "))"; \
+ } ' < $<; \
+ true; \
+ ) > $@
+
+-include $(TMP_DIR)/info/.files-$(SCAN_TARGET).mk
+
+$(TARGET_STAMP)::
+ +( \
+ $(NO_TRACE_MAKE) $(FILELIST); \
+ MD5SUM=$$(cat $(FILELIST) $(OVERRIDELIST) | (md5sum || md5) 2>/dev/null | awk '{print $$1}'); \
+ [ -f "$@.$$MD5SUM" ] || { \
+ rm -f $@.*; \
+ touch $@.$$MD5SUM; \
+ touch $@; \
+ } \
+ )
+
+$(TMP_DIR)/.$(SCAN_TARGET): $(TARGET_STAMP) $(SCAN_STAMP)
+ $(call progress,Collecting $(SCAN_NAME) info: merging...)
+ -cat $(FILELIST) | awk '{gsub(/\//, "_", $$0);print "$(TMP_DIR)/info/.$(SCAN_TARGET)-" $$0}' | xargs cat > $@ 2>/dev/null
+ $(call progress,Collecting $(SCAN_NAME) info: done)
+ echo
+
+FORCE:
+.PHONY: FORCE
+.NOTPARALLEL:
diff --git a/include/scons.mk b/include/scons.mk
new file mode 100644
index 0000000..a8306b6
--- /dev/null
+++ b/include/scons.mk
@@ -0,0 +1,23 @@
+export PLATFORM=posix
+
+SCONS_VARS = \
+ CC="$(TARGET_CC_NOCACHE)" \
+ CXX="$(TARGET_CXX_NOCACHE)" \
+ CFLAGS="$(TARGET_CFLAGS) $(EXTRA_CFLAGS)" \
+ CXXFLAGS="$(TARGET_CFLAGS) $(EXTRA_CFLAGS)" \
+ 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/shell.sh b/include/shell.sh
new file mode 100644
index 0000000..6389304
--- /dev/null
+++ b/include/shell.sh
@@ -0,0 +1,37 @@
+getvar() {
+ eval "echo \"\${$1}\""
+}
+
+var2file() {
+ local var
+ eval "var=\"\${$1}\""
+ if [ -n "$var" ]; then echo "$var" > "$2"; fi
+}
+
+isset() {
+ local var
+ eval "var=\"\${$1}\""
+ [ -n "$var" ]
+}
+
+trapret() {(
+ local retvals="$1"; shift
+ local cmd="$1"; shift
+ for retval in $(echo $retvals); do
+ local trap_$retval=1
+ done
+ "$cmd" "$@" || {
+ local retval="$?"
+ eval "trapped=\${trap_$retval}"
+ [ -n "$trapped" ] || {
+ return $retval
+ }
+ }
+)}
+
+md5s() {
+ cat "$@" | (
+ md5sum 2>/dev/null ||
+ md5
+ ) | awk '{print $1}'
+}
diff --git a/include/site/aarch64 b/include/site/aarch64
new file mode 100644
index 0000000..c5aa9c5
--- /dev/null
+++ b/include/site/aarch64
@@ -0,0 +1,30 @@
+#!/bin/sh
+. $TOPDIR/include/site/linux
+ac_cv_c_littleendian=${ac_cv_c_littleendian=yes}
+ac_cv_c_bigendian=${ac_cv_c_bigendian=no}
+
+ac_cv_sizeof___int64=8
+ac_cv_sizeof_char=1
+ac_cv_sizeof_int=4
+ac_cv_sizeof_int16_t=2
+ac_cv_sizeof_int32_t=4
+ac_cv_sizeof_int64_t=8
+ac_cv_sizeof_long_int=8
+ac_cv_sizeof_long_long=8
+ac_cv_sizeof_long=8
+ac_cv_sizeof_off_t=8
+ac_cv_sizeof_short_int=2
+ac_cv_sizeof_short=2
+ac_cv_sizeof_size_t=8
+ac_cv_sizeof_ssize_t=8
+ac_cv_sizeof_u_int16_t=2
+ac_cv_sizeof_u_int32_t=4
+ac_cv_sizeof_u_int64_t=8
+ac_cv_sizeof_uint16_t=2
+ac_cv_sizeof_uint32_t=4
+ac_cv_sizeof_uint64_t=8
+ac_cv_sizeof_unsigned_int=4
+ac_cv_sizeof_unsigned_long=8
+ac_cv_sizeof_unsigned_long_long=8
+ac_cv_sizeof_unsigned_short=2
+ac_cv_sizeof_void_p=8
diff --git a/include/site/aarch64_be b/include/site/aarch64_be
new file mode 100644
index 0000000..19e75ab
--- /dev/null
+++ b/include/site/aarch64_be
@@ -0,0 +1,30 @@
+#!/bin/sh
+. $TOPDIR/include/site/linux
+ac_cv_c_littleendian=${ac_cv_c_littleendian=no}
+ac_cv_c_bigendian=${ac_cv_c_bigendian=yes}
+
+ac_cv_sizeof___int64=8
+ac_cv_sizeof_char=1
+ac_cv_sizeof_int=4
+ac_cv_sizeof_int16_t=2
+ac_cv_sizeof_int32_t=4
+ac_cv_sizeof_int64_t=8
+ac_cv_sizeof_long_int=8
+ac_cv_sizeof_long_long=8
+ac_cv_sizeof_long=8
+ac_cv_sizeof_off_t=8
+ac_cv_sizeof_short_int=2
+ac_cv_sizeof_short=2
+ac_cv_sizeof_size_t=8
+ac_cv_sizeof_ssize_t=8
+ac_cv_sizeof_u_int16_t=2
+ac_cv_sizeof_u_int32_t=4
+ac_cv_sizeof_u_int64_t=8
+ac_cv_sizeof_uint16_t=2
+ac_cv_sizeof_uint32_t=4
+ac_cv_sizeof_uint64_t=8
+ac_cv_sizeof_unsigned_int=4
+ac_cv_sizeof_unsigned_long=8
+ac_cv_sizeof_unsigned_long_long=8
+ac_cv_sizeof_unsigned_short=2
+ac_cv_sizeof_void_p=8
diff --git a/include/site/arm b/include/site/arm
new file mode 100644
index 0000000..72a3805
--- /dev/null
+++ b/include/site/arm
@@ -0,0 +1,30 @@
+#!/bin/sh
+. $TOPDIR/include/site/linux
+ac_cv_c_littleendian=${ac_cv_c_littleendian=yes}
+ac_cv_c_bigendian=${ac_cv_c_bigendian=no}
+
+ac_cv_sizeof___int64=0
+ac_cv_sizeof_char=1
+ac_cv_sizeof_int=4
+ac_cv_sizeof_int16_t=2
+ac_cv_sizeof_int32_t=4
+ac_cv_sizeof_int64_t=8
+ac_cv_sizeof_long_int=4
+ac_cv_sizeof_long_long=8
+ac_cv_sizeof_long=4
+ac_cv_sizeof_off_t=8
+ac_cv_sizeof_short_int=2
+ac_cv_sizeof_short=2
+ac_cv_sizeof_size_t=4
+ac_cv_sizeof_ssize_t=4
+ac_cv_sizeof_u_int16_t=2
+ac_cv_sizeof_u_int32_t=4
+ac_cv_sizeof_u_int64_t=8
+ac_cv_sizeof_uint16_t=2
+ac_cv_sizeof_uint32_t=4
+ac_cv_sizeof_uint64_t=8
+ac_cv_sizeof_unsigned_int=4
+ac_cv_sizeof_unsigned_long=4
+ac_cv_sizeof_unsigned_long_long=8
+ac_cv_sizeof_unsigned_short=2
+ac_cv_sizeof_void_p=4
diff --git a/include/site/armeb b/include/site/armeb
new file mode 100644
index 0000000..a5626a7
--- /dev/null
+++ b/include/site/armeb
@@ -0,0 +1,30 @@
+#!/bin/sh
+. $TOPDIR/include/site/linux
+ac_cv_c_littleendian=${ac_cv_c_littleendian=no}
+ac_cv_c_bigendian=${ac_cv_c_bigendian=yes}
+
+ac_cv_sizeof___int64=0
+ac_cv_sizeof_char=1
+ac_cv_sizeof_int=4
+ac_cv_sizeof_int16_t=2
+ac_cv_sizeof_int32_t=4
+ac_cv_sizeof_int64_t=8
+ac_cv_sizeof_long_int=4
+ac_cv_sizeof_long_long=8
+ac_cv_sizeof_long=4
+ac_cv_sizeof_off_t=8
+ac_cv_sizeof_short_int=2
+ac_cv_sizeof_short=2
+ac_cv_sizeof_size_t=4
+ac_cv_sizeof_ssize_t=4
+ac_cv_sizeof_u_int16_t=2
+ac_cv_sizeof_u_int32_t=4
+ac_cv_sizeof_u_int64_t=8
+ac_cv_sizeof_uint16_t=2
+ac_cv_sizeof_uint32_t=4
+ac_cv_sizeof_uint64_t=8
+ac_cv_sizeof_unsigned_int=4
+ac_cv_sizeof_unsigned_long=4
+ac_cv_sizeof_unsigned_long_long=8
+ac_cv_sizeof_unsigned_short=2
+ac_cv_sizeof_void_p=4
diff --git a/include/site/i386 b/include/site/i386
new file mode 100644
index 0000000..78f1557
--- /dev/null
+++ b/include/site/i386
@@ -0,0 +1,3 @@
+#!/bin/sh
+. $TOPDIR/include/site/i486
+
diff --git a/include/site/i486 b/include/site/i486
new file mode 100644
index 0000000..72a3805
--- /dev/null
+++ b/include/site/i486
@@ -0,0 +1,30 @@
+#!/bin/sh
+. $TOPDIR/include/site/linux
+ac_cv_c_littleendian=${ac_cv_c_littleendian=yes}
+ac_cv_c_bigendian=${ac_cv_c_bigendian=no}
+
+ac_cv_sizeof___int64=0
+ac_cv_sizeof_char=1
+ac_cv_sizeof_int=4
+ac_cv_sizeof_int16_t=2
+ac_cv_sizeof_int32_t=4
+ac_cv_sizeof_int64_t=8
+ac_cv_sizeof_long_int=4
+ac_cv_sizeof_long_long=8
+ac_cv_sizeof_long=4
+ac_cv_sizeof_off_t=8
+ac_cv_sizeof_short_int=2
+ac_cv_sizeof_short=2
+ac_cv_sizeof_size_t=4
+ac_cv_sizeof_ssize_t=4
+ac_cv_sizeof_u_int16_t=2
+ac_cv_sizeof_u_int32_t=4
+ac_cv_sizeof_u_int64_t=8
+ac_cv_sizeof_uint16_t=2
+ac_cv_sizeof_uint32_t=4
+ac_cv_sizeof_uint64_t=8
+ac_cv_sizeof_unsigned_int=4
+ac_cv_sizeof_unsigned_long=4
+ac_cv_sizeof_unsigned_long_long=8
+ac_cv_sizeof_unsigned_short=2
+ac_cv_sizeof_void_p=4
diff --git a/include/site/i686 b/include/site/i686
new file mode 100644
index 0000000..78f1557
--- /dev/null
+++ b/include/site/i686
@@ -0,0 +1,3 @@
+#!/bin/sh
+. $TOPDIR/include/site/i486
+
diff --git a/include/site/linux b/include/site/linux
new file mode 100644
index 0000000..b193d25
--- /dev/null
+++ b/include/site/linux
@@ -0,0 +1,78 @@
+ac_atomic_add=yes
+ac_atomic_sub=yes
+ac_cv_c_gettext_without_libintl=yes
+ac_cv_c_long_double=no
+ac_cv_conv_longlong_to_float=yes
+ac_cv_file__dev_zero=yes
+ac_cv_func___va_copy=no
+ac_cv_func__exit=yes
+ac_cv_func_bcopy=yes
+ac_cv_func_bzero=yes
+ac_cv_func_bcmp=yes
+ac_cv_func_creal=yes
+ac_cv_func_cimag=yes
+ac_cv_func_fchmod=yes
+ac_cv_func_getaddrinfo=yes
+ac_cv_func_getcwd=yes
+ac_cv_func_getdomainname=yes
+ac_cv_func_getpgrp_void=yes
+ac_cv_func_getpwuid_r=yes
+ac_cv_func_gettimeofday=yes
+ac_cv_func_index=yes
+ac_cv_func_lstat_dereferences_slashed_symlink=yes
+ac_cv_func_lstat_empty_string_bug=no
+ac_cv_func_lstat=yes
+ac_cv_func_malloc_0_nonnull=yes
+ac_cv_func_malloc_works=yes
+ac_cv_func_memcmp_clean=yes
+ac_cv_func_memcmp_working=yes
+ac_cv_func_posix_getgrgid_r=yes
+ac_cv_func_posix_getpwuid_r=yes
+ac_cv_func_psignal=yes
+ac_cv_func_pthread_key_delete=yes
+ac_cv_func_realloc_0_nonnull=yes
+ac_cv_func_realloc_works=yes
+ac_cv_func_rename=yes
+ac_cv_func_rindex=yes
+ac_cv_func_setlocale=yes
+ac_cv_func_setgrent_void=yes
+ac_cv_func_setpgrp_void=yes
+ac_cv_func_setresuid=no
+ac_cv_func_setvbuf_reversed=no
+ac_cv_func_stat_empty_string_bug=no
+ac_cv_func_stat_ignores_trailing_slash=no
+ac_cv_func_strerror=yes
+ac_cv_func_strftime=yes
+ac_cv_func_utimes=yes
+ac_cv_func___adjtimex=yes
+ac_cv_func_va_copy=no
+ac_cv_func_vsnprintf=yes
+ac_cv_have_accrights_in_msghdr=no
+ac_cv_have_broken_snprintf=no
+ac_cv_have_control_in_msghdr=yes
+ac_cv_have_decl_sys_siglist=no
+ac_cv_have_openpty_ctty_bug=yes
+ac_cv_have_space_d_name_in_struct_dirent=yes
+ac_cv_header_netinet_sctp_h=no
+ac_cv_header_netinet_sctp_uio_h=no
+ac_cv_int64_t=yes
+ac_cv_lbl_unaligned_fail=no
+ac_cv_linux_kernel_pppoe=yes
+ac_cv_linux_vers=2
+ac_cv_pack_bitfields_reversed=yes
+ac_cv_path_LDCONFIG=
+ac_cv_regexec_segfault_emptystr=no
+ac_cv_sctp=no
+ac_cv_sys_restartable_syscalls=yes
+ac_cv_time_r_type=POSIX
+ac_cv_type_suseconds_t=yes
+ac_cv_uchar=no
+ac_cv_uint=yes
+ac_cv_uint64_t=yes
+ac_cv_ulong=yes
+ac_cv_ushort=yes
+ac_cv_va_copy=C99
+ac_cv_va_val_copy=yes
+as_cv_unaligned_access=yes
+ac_cv_func_malloc_0_nonnull=yes
+ac_cv_func_realloc_0_nonnull=yes
diff --git a/include/site/m68k b/include/site/m68k
new file mode 100644
index 0000000..0037600
--- /dev/null
+++ b/include/site/m68k
@@ -0,0 +1,28 @@
+#!/bin/sh
+. $TOPDIR/include/site/linux
+ac_cv_c_littleendian=${ac_cv_c_littleendian=no}
+ac_cv_c_bigendian=${ac_cv_c_bigendian=yes}
+
+ac_cv_sizeof___int64=0
+ac_cv_sizeof_char=1
+ac_cv_sizeof_int=4
+ac_cv_sizeof_int16_t=2
+ac_cv_sizeof_int32_t=4
+ac_cv_sizeof_int64_t=8
+ac_cv_sizeof_long_int=4
+ac_cv_sizeof_long_long=8
+ac_cv_sizeof_long=4
+ac_cv_sizeof_off_t=8
+ac_cv_sizeof_short_int=2
+ac_cv_sizeof_short=2
+ac_cv_sizeof_size_t=4
+ac_cv_sizeof_u_int16_t=2
+ac_cv_sizeof_u_int32_t=4
+ac_cv_sizeof_u_int64_t=8
+ac_cv_sizeof_uint16_t=2
+ac_cv_sizeof_uint32_t=4
+ac_cv_sizeof_uint64_t=8
+ac_cv_sizeof_unsigned_int=4
+ac_cv_sizeof_unsigned_long=4
+ac_cv_sizeof_unsigned_short=2
+ac_cv_sizeof_void_p=4
diff --git a/include/site/mips b/include/site/mips
new file mode 100644
index 0000000..a5626a7
--- /dev/null
+++ b/include/site/mips
@@ -0,0 +1,30 @@
+#!/bin/sh
+. $TOPDIR/include/site/linux
+ac_cv_c_littleendian=${ac_cv_c_littleendian=no}
+ac_cv_c_bigendian=${ac_cv_c_bigendian=yes}
+
+ac_cv_sizeof___int64=0
+ac_cv_sizeof_char=1
+ac_cv_sizeof_int=4
+ac_cv_sizeof_int16_t=2
+ac_cv_sizeof_int32_t=4
+ac_cv_sizeof_int64_t=8
+ac_cv_sizeof_long_int=4
+ac_cv_sizeof_long_long=8
+ac_cv_sizeof_long=4
+ac_cv_sizeof_off_t=8
+ac_cv_sizeof_short_int=2
+ac_cv_sizeof_short=2
+ac_cv_sizeof_size_t=4
+ac_cv_sizeof_ssize_t=4
+ac_cv_sizeof_u_int16_t=2
+ac_cv_sizeof_u_int32_t=4
+ac_cv_sizeof_u_int64_t=8
+ac_cv_sizeof_uint16_t=2
+ac_cv_sizeof_uint32_t=4
+ac_cv_sizeof_uint64_t=8
+ac_cv_sizeof_unsigned_int=4
+ac_cv_sizeof_unsigned_long=4
+ac_cv_sizeof_unsigned_long_long=8
+ac_cv_sizeof_unsigned_short=2
+ac_cv_sizeof_void_p=4
diff --git a/include/site/mips64 b/include/site/mips64
new file mode 100644
index 0000000..19e75ab
--- /dev/null
+++ b/include/site/mips64
@@ -0,0 +1,30 @@
+#!/bin/sh
+. $TOPDIR/include/site/linux
+ac_cv_c_littleendian=${ac_cv_c_littleendian=no}
+ac_cv_c_bigendian=${ac_cv_c_bigendian=yes}
+
+ac_cv_sizeof___int64=8
+ac_cv_sizeof_char=1
+ac_cv_sizeof_int=4
+ac_cv_sizeof_int16_t=2
+ac_cv_sizeof_int32_t=4
+ac_cv_sizeof_int64_t=8
+ac_cv_sizeof_long_int=8
+ac_cv_sizeof_long_long=8
+ac_cv_sizeof_long=8
+ac_cv_sizeof_off_t=8
+ac_cv_sizeof_short_int=2
+ac_cv_sizeof_short=2
+ac_cv_sizeof_size_t=8
+ac_cv_sizeof_ssize_t=8
+ac_cv_sizeof_u_int16_t=2
+ac_cv_sizeof_u_int32_t=4
+ac_cv_sizeof_u_int64_t=8
+ac_cv_sizeof_uint16_t=2
+ac_cv_sizeof_uint32_t=4
+ac_cv_sizeof_uint64_t=8
+ac_cv_sizeof_unsigned_int=4
+ac_cv_sizeof_unsigned_long=8
+ac_cv_sizeof_unsigned_long_long=8
+ac_cv_sizeof_unsigned_short=2
+ac_cv_sizeof_void_p=8
diff --git a/include/site/mips64el b/include/site/mips64el
new file mode 100644
index 0000000..c5aa9c5
--- /dev/null
+++ b/include/site/mips64el
@@ -0,0 +1,30 @@
+#!/bin/sh
+. $TOPDIR/include/site/linux
+ac_cv_c_littleendian=${ac_cv_c_littleendian=yes}
+ac_cv_c_bigendian=${ac_cv_c_bigendian=no}
+
+ac_cv_sizeof___int64=8
+ac_cv_sizeof_char=1
+ac_cv_sizeof_int=4
+ac_cv_sizeof_int16_t=2
+ac_cv_sizeof_int32_t=4
+ac_cv_sizeof_int64_t=8
+ac_cv_sizeof_long_int=8
+ac_cv_sizeof_long_long=8
+ac_cv_sizeof_long=8
+ac_cv_sizeof_off_t=8
+ac_cv_sizeof_short_int=2
+ac_cv_sizeof_short=2
+ac_cv_sizeof_size_t=8
+ac_cv_sizeof_ssize_t=8
+ac_cv_sizeof_u_int16_t=2
+ac_cv_sizeof_u_int32_t=4
+ac_cv_sizeof_u_int64_t=8
+ac_cv_sizeof_uint16_t=2
+ac_cv_sizeof_uint32_t=4
+ac_cv_sizeof_uint64_t=8
+ac_cv_sizeof_unsigned_int=4
+ac_cv_sizeof_unsigned_long=8
+ac_cv_sizeof_unsigned_long_long=8
+ac_cv_sizeof_unsigned_short=2
+ac_cv_sizeof_void_p=8
diff --git a/include/site/mipsel b/include/site/mipsel
new file mode 100644
index 0000000..72a3805
--- /dev/null
+++ b/include/site/mipsel
@@ -0,0 +1,30 @@
+#!/bin/sh
+. $TOPDIR/include/site/linux
+ac_cv_c_littleendian=${ac_cv_c_littleendian=yes}
+ac_cv_c_bigendian=${ac_cv_c_bigendian=no}
+
+ac_cv_sizeof___int64=0
+ac_cv_sizeof_char=1
+ac_cv_sizeof_int=4
+ac_cv_sizeof_int16_t=2
+ac_cv_sizeof_int32_t=4
+ac_cv_sizeof_int64_t=8
+ac_cv_sizeof_long_int=4
+ac_cv_sizeof_long_long=8
+ac_cv_sizeof_long=4
+ac_cv_sizeof_off_t=8
+ac_cv_sizeof_short_int=2
+ac_cv_sizeof_short=2
+ac_cv_sizeof_size_t=4
+ac_cv_sizeof_ssize_t=4
+ac_cv_sizeof_u_int16_t=2
+ac_cv_sizeof_u_int32_t=4
+ac_cv_sizeof_u_int64_t=8
+ac_cv_sizeof_uint16_t=2
+ac_cv_sizeof_uint32_t=4
+ac_cv_sizeof_uint64_t=8
+ac_cv_sizeof_unsigned_int=4
+ac_cv_sizeof_unsigned_long=4
+ac_cv_sizeof_unsigned_long_long=8
+ac_cv_sizeof_unsigned_short=2
+ac_cv_sizeof_void_p=4
diff --git a/include/site/powerpc b/include/site/powerpc
new file mode 100644
index 0000000..a5626a7
--- /dev/null
+++ b/include/site/powerpc
@@ -0,0 +1,30 @@
+#!/bin/sh
+. $TOPDIR/include/site/linux
+ac_cv_c_littleendian=${ac_cv_c_littleendian=no}
+ac_cv_c_bigendian=${ac_cv_c_bigendian=yes}
+
+ac_cv_sizeof___int64=0
+ac_cv_sizeof_char=1
+ac_cv_sizeof_int=4
+ac_cv_sizeof_int16_t=2
+ac_cv_sizeof_int32_t=4
+ac_cv_sizeof_int64_t=8
+ac_cv_sizeof_long_int=4
+ac_cv_sizeof_long_long=8
+ac_cv_sizeof_long=4
+ac_cv_sizeof_off_t=8
+ac_cv_sizeof_short_int=2
+ac_cv_sizeof_short=2
+ac_cv_sizeof_size_t=4
+ac_cv_sizeof_ssize_t=4
+ac_cv_sizeof_u_int16_t=2
+ac_cv_sizeof_u_int32_t=4
+ac_cv_sizeof_u_int64_t=8
+ac_cv_sizeof_uint16_t=2
+ac_cv_sizeof_uint32_t=4
+ac_cv_sizeof_uint64_t=8
+ac_cv_sizeof_unsigned_int=4
+ac_cv_sizeof_unsigned_long=4
+ac_cv_sizeof_unsigned_long_long=8
+ac_cv_sizeof_unsigned_short=2
+ac_cv_sizeof_void_p=4
diff --git a/include/site/sparc b/include/site/sparc
new file mode 100644
index 0000000..a5626a7
--- /dev/null
+++ b/include/site/sparc
@@ -0,0 +1,30 @@
+#!/bin/sh
+. $TOPDIR/include/site/linux
+ac_cv_c_littleendian=${ac_cv_c_littleendian=no}
+ac_cv_c_bigendian=${ac_cv_c_bigendian=yes}
+
+ac_cv_sizeof___int64=0
+ac_cv_sizeof_char=1
+ac_cv_sizeof_int=4
+ac_cv_sizeof_int16_t=2
+ac_cv_sizeof_int32_t=4
+ac_cv_sizeof_int64_t=8
+ac_cv_sizeof_long_int=4
+ac_cv_sizeof_long_long=8
+ac_cv_sizeof_long=4
+ac_cv_sizeof_off_t=8
+ac_cv_sizeof_short_int=2
+ac_cv_sizeof_short=2
+ac_cv_sizeof_size_t=4
+ac_cv_sizeof_ssize_t=4
+ac_cv_sizeof_u_int16_t=2
+ac_cv_sizeof_u_int32_t=4
+ac_cv_sizeof_u_int64_t=8
+ac_cv_sizeof_uint16_t=2
+ac_cv_sizeof_uint32_t=4
+ac_cv_sizeof_uint64_t=8
+ac_cv_sizeof_unsigned_int=4
+ac_cv_sizeof_unsigned_long=4
+ac_cv_sizeof_unsigned_long_long=8
+ac_cv_sizeof_unsigned_short=2
+ac_cv_sizeof_void_p=4
diff --git a/include/site/x86_64 b/include/site/x86_64
new file mode 100644
index 0000000..b8d581d
--- /dev/null
+++ b/include/site/x86_64
@@ -0,0 +1,30 @@
+#!/bin/sh
+. $TOPDIR/include/site/linux
+ac_cv_c_littleendian=${ac_cv_c_littleendian=yes}
+ac_cv_c_bigendian=${ac_cv_c_bigendian=no}
+
+ac_cv_sizeof___int64=0
+ac_cv_sizeof_char=1
+ac_cv_sizeof_int=4
+ac_cv_sizeof_int16_t=2
+ac_cv_sizeof_int32_t=4
+ac_cv_sizeof_int64_t=8
+ac_cv_sizeof_long_int=8
+ac_cv_sizeof_long_long=8
+ac_cv_sizeof_long=8
+ac_cv_sizeof_off_t=8
+ac_cv_sizeof_short_int=2
+ac_cv_sizeof_short=2
+ac_cv_sizeof_size_t=8
+ac_cv_sizeof_ssize_t=8
+ac_cv_sizeof_u_int16_t=2
+ac_cv_sizeof_u_int32_t=4
+ac_cv_sizeof_u_int64_t=8
+ac_cv_sizeof_uint16_t=2
+ac_cv_sizeof_uint32_t=4
+ac_cv_sizeof_uint64_t=8
+ac_cv_sizeof_unsigned_int=4
+ac_cv_sizeof_unsigned_long=8
+ac_cv_sizeof_unsigned_long_long=8
+ac_cv_sizeof_unsigned_short=2
+ac_cv_sizeof_void_p=8
diff --git a/include/subdir.mk b/include/subdir.mk
new file mode 100644
index 0000000..8dc9a78
--- /dev/null
+++ b/include/subdir.mk
@@ -0,0 +1,76 @@
+#
+# Copyright (C) 2007 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+ifeq ($(MAKECMDGOALS),prereq)
+ SUBTARGETS:=prereq
+ PREREQ_ONLY:=1
+else
+ SUBTARGETS:=clean download prepare compile install update refresh prereq dist distcheck configure
+endif
+
+subtarget-default = $(filter-out ., \
+ $(if $($(1)/builddirs-$(2)),$($(1)/builddirs-$(2)), \
+ $(if $($(1)/builddirs-default),$($(1)/builddirs-default), \
+ $($(1)/builddirs))))
+
+define subtarget
+ $(call warn_eval,$(1),t,T,$(1)/$(2): $($(1)/) $(foreach bd,$(call subtarget-default,$(1),$(2)),$(1)/$(bd)/$(2)))
+
+endef
+
+define ERROR
+ ($(call MESSAGE, $(2)); $(if $(BUILD_LOG), echo "$(2)" >> $(BUILD_LOG_DIR)/$(1)/error.txt))
+endef
+
+lastdir=$(word $(words $(subst /, ,$(1))),$(subst /, ,$(1)))
+diralias=$(if $(findstring $(1),$(call lastdir,$(1))),,$(call lastdir,$(1)))
+
+# Parameters: <subdir>
+define subdir
+ $(call warn,$(1),d,D $(1))
+ $(foreach bd,$($(1)/builddirs),
+ $(call warn,$(1),d,BD $(1)/$(bd))
+ $(foreach target,$(SUBTARGETS),
+ $(foreach btype,$(buildtypes-$(bd)),
+ $(call warn_eval,$(1)/$(bd),t,T,$(1)/$(bd)/$(btype)/$(target): $(if $(QUILT),,$($(1)/$(bd)/$(btype)/$(target)) $(call $(1)//$(btype)/$(target),$(1)/$(bd)/$(btype))))
+ $(if $(call debug,$(1)/$(bd),v),,@)+$$(SUBMAKE) -r -C $(1)/$(bd) $(btype)-$(target) $(if $(findstring $(bd),$($(1)/builddirs-ignore-$(btype)-$(target))), || $(call ERROR,$(1), ERROR: $(1)/$(bd) [$(btype)] failed to build.))
+ $(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 $(QUILT),,$($(1)/$(bd)/$(target)) $(call $(1)//$(target),$(1)/$(bd))))
+ $(if $(BUILD_LOG),@mkdir -p $(BUILD_LOG_DIR)/$(1)/$(bd))
+ $(foreach variant,$(if $(BUILD_VARIANT),$(BUILD_VARIANT),$(if $(strip $($(1)/$(bd)/variants)),$($(1)/$(bd)/variants),$(if $($(1)/$(bd)/default-variant),$($(1)/$(bd)/default-variant),__default))),
+ $(if $(call debug,$(1)/$(bd),v),,@)+$(if $(BUILD_LOG),set -o pipefail;) $$(SUBMAKE) -r -C $(1)/$(bd) $(target) BUILD_VARIANT="$(filter-out __default,$(variant))" $(if $(BUILD_LOG),SILENT= 2>&1 | tee $(BUILD_LOG_DIR)/$(1)/$(bd)/$(target).txt) $(if $(findstring $(bd),$($(1)/builddirs-ignore-$(target))), || $(call ERROR,$(1), ERROR: $(1)/$(bd) failed to build$(if $(filter-out __default,$(variant)), (build variant: $(variant))).))
+ )
+ $(if $(PREREQ_ONLY)$(DUMP_TARGET_DB),,
+ # aliases
+ $(if $(call diralias,$(bd)),$(call warn_eval,$(1)/$(bd),l,T,$(1)/$(call diralias,$(bd))/$(target): $(1)/$(bd)/$(target)))
+ )
+ )
+ )
+ $(foreach target,$(SUBTARGETS),$(call subtarget,$(1),$(target)))
+endef
+
+ifndef DUMP_TARGET_DB
+# Parameters: <subdir> <name> <target> <depends> <config options> <stampfile location>
+define stampfile
+ $(1)/stamp-$(3):=$(if $(6),$(6),$(STAGING_DIR))/stamp/.$(2)_$(3)$(5)
+ $$($(1)/stamp-$(3)): $(TMP_DIR)/.build $(4)
+ @+$(SCRIPT_DIR)/timestamp.pl -n $$($(1)/stamp-$(3)) $(1) $(4) || \
+ $(MAKE) $(if $(QUIET),--no-print-directory) $$($(1)/flags-$(3)) $(1)/$(3)
+ @mkdir -p $$$$(dirname $$($(1)/stamp-$(3)))
+ @touch $$($(1)/stamp-$(3))
+
+ $$(if $(call debug,$(1),v),,.SILENT: $$($(1)/stamp-$(3)))
+
+ .PRECIOUS: $$($(1)/stamp-$(3)) # work around a make bug
+
+ $(1)//clean:=$(1)/stamp-$(3)/clean
+ $(1)/stamp-$(3)/clean: FORCE
+ @rm -f $$($(1)/stamp-$(3))
+
+endef
+endif
diff --git a/include/target.mk b/include/target.mk
new file mode 100644
index 0000000..7988056
--- /dev/null
+++ b/include/target.mk
@@ -0,0 +1,298 @@
+#
+# Copyright (C) 2007-2008 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+ifneq ($(__target_inc),1)
+__target_inc=1
+
+# default device type
+DEVICE_TYPE?=router
+
+# Default packages - the really basic set
+DEFAULT_PACKAGES:=base-files libc libgcc busybox dropbear mtd uci opkg netifd fstools
+# For nas targets
+DEFAULT_PACKAGES.nas:=block-mount fdisk lsblk mdadm
+# For router targets
+DEFAULT_PACKAGES.router:=dnsmasq iptables ip6tables ppp ppp-mod-pppoe firewall odhcpd odhcp6c
+DEFAULT_PACKAGES.bootloader:=
+
+ifneq ($(DUMP),)
+ all: dumpinfo
+endif
+
+target_conf=$(subst .,_,$(subst -,_,$(subst /,_,$(1))))
+ifeq ($(DUMP),)
+ PLATFORM_DIR:=$(TOPDIR)/target/linux/$(BOARD)
+ SUBTARGET:=$(strip $(foreach subdir,$(patsubst $(PLATFORM_DIR)/%/target.mk,%,$(wildcard $(PLATFORM_DIR)/*/target.mk)),$(if $(CONFIG_TARGET_$(call target_conf,$(BOARD)_$(subdir))),$(subdir))))
+else
+ PLATFORM_DIR:=${CURDIR}
+ ifeq ($(SUBTARGETS),)
+ SUBTARGETS:=$(strip $(patsubst $(PLATFORM_DIR)/%/target.mk,%,$(wildcard $(PLATFORM_DIR)/*/target.mk)))
+ endif
+endif
+
+TARGETID:=$(BOARD)$(if $(SUBTARGET),/$(SUBTARGET))
+PLATFORM_SUBDIR:=$(PLATFORM_DIR)$(if $(SUBTARGET),/$(SUBTARGET))
+
+ifneq ($(TARGET_BUILD),1)
+ ifndef DUMP
+ include $(PLATFORM_DIR)/Makefile
+ ifneq ($(PLATFORM_DIR),$(PLATFORM_SUBDIR))
+ include $(PLATFORM_SUBDIR)/target.mk
+ endif
+ endif
+else
+ ifneq ($(SUBTARGET),)
+ -include ./$(SUBTARGET)/target.mk
+ endif
+endif
+
+# Add device specific packages (here below to allow device type set from subtarget)
+DEFAULT_PACKAGES += $(DEFAULT_PACKAGES.$(DEVICE_TYPE))
+
+filter_packages = $(filter-out -% $(patsubst -%,%,$(filter -%,$(1))),$(1))
+extra_packages = $(if $(filter wpad-mini wpad nas,$(1)),iwinfo)
+
+define Profile/Default
+ NAME:=
+ PACKAGES:=
+endef
+
+ifndef Profile
+define Profile
+ $(eval $(call Profile/Default))
+ $(eval $(call Profile/$(1)))
+ dumpinfo : $(call shexport,Profile/$(1)/Config)
+ dumpinfo : $(call shexport,Profile/$(1)/Description)
+ DUMPINFO += \
+ echo "Target-Profile: $(1)"; \
+ echo "Target-Profile-Name: $(NAME)"; \
+ echo "Target-Profile-Packages: $(PACKAGES) $(call extra_packages,$(DEFAULT_PACKAGES) $(PACKAGES))"; \
+ if [ -f ./config/profile-$(1) ]; then \
+ echo "Target-Profile-Kconfig: yes"; \
+ fi; \
+ echo "Target-Profile-Config: "; \
+ echo "$$$$$$$$$(call shvar,Profile/$(1)/Config)"; \
+ echo "@@"; \
+ echo "Target-Profile-Description:"; \
+ echo "$$$$$$$$$(call shvar,Profile/$(1)/Description)"; \
+ echo "@@"; \
+ echo;
+ ifeq ($(CONFIG_TARGET_$(call target_conf,$(BOARD)_$(if $(SUBTARGET),$(SUBTARGET)_))$(1)),y)
+ PROFILE=$(1)
+ endif
+endef
+endif
+
+ifneq ($(PLATFORM_DIR),$(PLATFORM_SUBDIR))
+ define IncludeProfiles
+ -include $(sort $(wildcard $(PLATFORM_DIR)/profiles/*.mk))
+ -include $(sort $(wildcard $(PLATFORM_SUBDIR)/profiles/*.mk))
+ endef
+else
+ define IncludeProfiles
+ -include $(sort $(wildcard $(PLATFORM_DIR)/profiles/*.mk))
+ endef
+endif
+
+ifeq ($(TARGET_BUILD),1)
+ $(eval $(call IncludeProfiles))
+else
+ ifeq ($(DUMP),)
+ $(eval $(call IncludeProfiles))
+ endif
+endif
+
+ifneq ($(TARGET_BUILD)$(if $(DUMP),,1),)
+ include $(INCLUDE_DIR)/kernel-version.mk
+endif
+
+GENERIC_PLATFORM_DIR := $(TOPDIR)/target/linux/generic
+GENERIC_PATCH_DIR := $(GENERIC_PLATFORM_DIR)/patches$(if $(wildcard $(GENERIC_PLATFORM_DIR)/patches-$(KERNEL_PATCHVER)),-$(KERNEL_PATCHVER))
+GENERIC_FILES_DIR := $(foreach dir,$(wildcard $(GENERIC_PLATFORM_DIR)/files $(GENERIC_PLATFORM_DIR)/files-$(KERNEL_PATCHVER)),"$(dir)")
+
+__config_name_list = $(1)/config-$(KERNEL_PATCHVER) $(1)/config-default
+__config_list = $(firstword $(wildcard $(call __config_name_list,$(1))))
+find_kernel_config=$(if $(__config_list),$(__config_list),$(lastword $(__config_name_list)))
+
+GENERIC_LINUX_CONFIG = $(call find_kernel_config,$(GENERIC_PLATFORM_DIR))
+LINUX_TARGET_CONFIG = $(call find_kernel_config,$(PLATFORM_DIR))
+ifneq ($(PLATFORM_DIR),$(PLATFORM_SUBDIR))
+ LINUX_SUBTARGET_CONFIG = $(call find_kernel_config,$(PLATFORM_SUBDIR))
+endif
+
+# config file list used for compiling
+LINUX_KCONFIG_LIST = $(wildcard $(GENERIC_LINUX_CONFIG) $(LINUX_TARGET_CONFIG) $(LINUX_SUBTARGET_CONFIG) $(TOPDIR)/env/kernel-config)
+
+# default config list for reconfiguring
+# defaults to subtarget if subtarget exists and target does not
+# defaults to target otherwise
+USE_SUBTARGET_CONFIG = $(if $(wildcard $(LINUX_TARGET_CONFIG)),,$(if $(LINUX_SUBTARGET_CONFIG),1))
+
+LINUX_RECONFIG_LIST = $(wildcard $(GENERIC_LINUX_CONFIG) $(LINUX_TARGET_CONFIG) $(if $(USE_SUBTARGET_CONFIG),$(LINUX_SUBTARGET_CONFIG)))
+LINUX_RECONFIG_TARGET = $(if $(USE_SUBTARGET_CONFIG),$(LINUX_SUBTARGET_CONFIG),$(LINUX_TARGET_CONFIG))
+
+# select the config file to be changed by kernel_menuconfig/kernel_oldconfig
+ifeq ($(CONFIG_TARGET),platform)
+ LINUX_RECONFIG_LIST = $(wildcard $(GENERIC_LINUX_CONFIG) $(LINUX_TARGET_CONFIG))
+ LINUX_RECONFIG_TARGET = $(LINUX_TARGET_CONFIG)
+endif
+ifeq ($(CONFIG_TARGET),subtarget)
+ LINUX_RECONFIG_LIST = $(wildcard $(GENERIC_LINUX_CONFIG) $(LINUX_TARGET_CONFIG) $(LINUX_SUBTARGET_CONFIG))
+ LINUX_RECONFIG_TARGET = $(LINUX_SUBTARGET_CONFIG)
+endif
+ifeq ($(CONFIG_TARGET),subtarget_platform)
+ LINUX_RECONFIG_LIST = $(wildcard $(GENERIC_LINUX_CONFIG) $(LINUX_SUBTARGET_CONFIG) $(LINUX_TARGET_CONFIG))
+ LINUX_RECONFIG_TARGET = $(LINUX_TARGET_CONFIG)
+endif
+ifeq ($(CONFIG_TARGET),env)
+ LINUX_RECONFIG_LIST = $(LINUX_KCONFIG_LIST)
+ LINUX_RECONFIG_TARGET = $(TOPDIR)/env/kernel-config
+endif
+
+__linux_confcmd = $(SCRIPT_DIR)/kconfig.pl $(2) $(patsubst %,+,$(wordlist 2,9999,$(1))) $(1)
+
+LINUX_CONF_CMD = $(call __linux_confcmd,$(LINUX_KCONFIG_LIST),)
+LINUX_RECONF_CMD = $(call __linux_confcmd,$(LINUX_RECONFIG_LIST),)
+LINUX_RECONF_DIFF = $(call __linux_confcmd,$(filter-out $(LINUX_RECONFIG_TARGET),$(LINUX_RECONFIG_LIST)),'>')
+
+ifeq ($(DUMP),1)
+ BuildTarget=$(BuildTargets/DumpCurrent)
+
+ ifneq ($(BOARD),)
+ TMP_CONFIG:=$(TMP_DIR)/.kconfig-$(call target_conf,$(TARGETID))
+ $(TMP_CONFIG): $(LINUX_KCONFIG_LIST)
+ $(LINUX_CONF_CMD) > $@ || rm -f $@
+ -include $(TMP_CONFIG)
+ .SILENT: $(TMP_CONFIG)
+ .PRECIOUS: $(TMP_CONFIG)
+
+ ifneq ($(CONFIG_OF),)
+ FEATURES += dt
+ endif
+ ifneq ($(CONFIG_GENERIC_GPIO)$(CONFIG_GPIOLIB),)
+ FEATURES += gpio
+ endif
+ ifneq ($(CONFIG_PCI),)
+ FEATURES += pci
+ endif
+ ifneq ($(CONFIG_PCIEPORTBUS),)
+ FEATURES += pcie
+ endif
+ ifneq ($(CONFIG_USB)$(CONFIG_USB_SUPPORT),)
+ ifneq ($(CONFIG_USB_ARCH_HAS_HCD)$(CONFIG_USB_EHCI_HCD),)
+ FEATURES += usb
+ endif
+ endif
+ ifneq ($(CONFIG_PCMCIA)$(CONFIG_PCCARD),)
+ FEATURES += pcmcia
+ endif
+ ifneq ($(CONFIG_VGA_CONSOLE)$(CONFIG_FB),)
+ FEATURES += display
+ endif
+ ifneq ($(CONFIG_RTC_CLASS),)
+ FEATURES += rtc
+ endif
+ FEATURES += $(foreach v,v4 v5 v6 v7,$(if $(findstring -march=arm$(v),$(CFLAGS)),arm_$(v)))
+
+ # remove duplicates
+ FEATURES:=$(sort $(FEATURES))
+ endif
+ CPU_CFLAGS = -Os -pipe
+ ifneq ($(findstring mips,$(ARCH)),)
+ ifneq ($(findstring mips64,$(ARCH)),)
+ CPU_TYPE ?= mips64
+ else
+ CPU_TYPE ?= mips32
+ endif
+ CPU_CFLAGS += -mno-branch-likely
+ CPU_CFLAGS_mips32 = -mips32 -mtune=mips32
+ CPU_CFLAGS_mips32r2 = -mips32r2 -mtune=mips32r2
+ CPU_CFLAGS_mips64 = -mips64 -mtune=mips64 -mabi=64
+ CPU_CFLAGS_24kc = -mips32r2 -mtune=24kc
+ CPU_CFLAGS_24kec = -mips32r2 -mtune=24kec
+ CPU_CFLAGS_34kc = -mips32r2 -mtune=34kc
+ CPU_CFLAGS_74kc = -mips32r2 -mtune=74kc
+ CPU_CFLAGS_octeon = -march=octeon -mabi=64
+ CPU_CFLAGS_dsp = -mdsp
+ CPU_CFLAGS_dsp2 = -mdspr2
+ endif
+ ifeq ($(ARCH),i386)
+ CPU_TYPE ?= i486
+ CPU_CFLAGS_i486 = -march=i486
+ CPU_CFLAGS_pentium4 = -march=pentium4
+ CPU_CFLAGS_geode = -march=geode -mmmx -m3dnow
+ endif
+ ifneq ($(findstring arm,$(ARCH)),)
+ CPU_TYPE ?= xscale
+ CPU_CFLAGS_arm920t = -march=armv4t -mtune=arm920t
+ CPU_CFLAGS_arm926ej-s = -march=armv5te -mtune=arm926ej-s
+ CPU_CFLAGS_arm1136j-s = -march=armv6 -mtune=arm1136j-s
+ CPU_CFLAGS_arm1176jzf-s = -march=armv6 -mtune=arm1176jzf-s
+ CPU_CFLAGS_cortex-a5 = -march=armv7-a -mtune=cortex-a5
+ CPU_CFLAGS_cortex-a7 = -march=armv7-a -mtune=cortex-a7
+ CPU_CFLAGS_cortex-a8 = -march=armv7-a -mtune=cortex-a8
+ CPU_CFLAGS_cortex-a9 = -march=armv7-a -mtune=cortex-a9
+ CPU_CFLAGS_cortex-a15 = -march=armv7-a -mtune=cortex-a15
+ CPU_CFLAGS_fa526 = -march=armv4 -mtune=fa526
+ CPU_CFLAGS_mpcore = -march=armv6k -mtune=mpcore
+ CPU_CFLAGS_xscale = -march=armv5te -mtune=xscale
+ ifeq ($(CONFIG_SOFT_FLOAT),)
+ CPU_CFLAGS_neon = -mfpu=neon
+ CPU_CFLAGS_vfp = -mfpu=vfp
+ CPU_CFLAGS_vfpv3 = -mfpu=vfpv3-d16
+ endif
+ endif
+ ifeq ($(ARCH),powerpc)
+ CPU_CFLAGS_603e:=-mcpu=603e
+ CPU_CFLAGS_8540:=-mcpu=8540
+ CPU_CFLAGS_405:=-mcpu=405
+ CPU_CFLAGS_440:=-mcpu=440
+ endif
+ ifeq ($(ARCH),sparc)
+ CPU_TYPE = sparc
+ CPU_CFLAGS_ultrasparc = -mcpu=ultrasparc
+ endif
+ ifeq ($(ARCH),aarch64)
+ CPU_TYPE ?= armv8-a
+ CPU_CFLAGS_armv8-a = -mcpu=armv8-a
+ endif
+ DEFAULT_CFLAGS=$(strip $(CPU_CFLAGS) $(CPU_CFLAGS_$(CPU_TYPE)) $(CPU_CFLAGS_$(CPU_SUBTYPE)))
+endif
+
+define BuildTargets/DumpCurrent
+ .PHONY: dumpinfo
+ dumpinfo : export DESCRIPTION=$$(Target/Description)
+ dumpinfo:
+ @echo 'Target: $(TARGETID)'; \
+ echo 'Target-Board: $(BOARD)'; \
+ echo 'Target-Name: $(BOARDNAME)$(if $(SUBTARGETS),$(if $(SUBTARGET),))'; \
+ echo 'Target-Path: $(subst $(TOPDIR)/,,$(PWD))'; \
+ echo 'Target-Arch: $(ARCH)'; \
+ echo 'Target-Arch-Packages: $(if $(ARCH_PACKAGES),$(ARCH_PACKAGES),$(BOARD))'; \
+ echo 'Target-Features: $(FEATURES)'; \
+ echo 'Target-Depends: $(DEPENDS)'; \
+ echo 'Target-Optimization: $(if $(CFLAGS),$(CFLAGS),$(DEFAULT_CFLAGS))'; \
+ echo 'CPU-Type: $(CPU_TYPE)$(if $(CPU_SUBTYPE),+$(CPU_SUBTYPE))'; \
+ echo 'Linux-Version: $(LINUX_VERSION)'; \
+ echo 'Linux-Release: $(LINUX_RELEASE)'; \
+ echo 'Linux-Kernel-Arch: $(LINUX_KARCH)'; \
+ $(if $(SUBTARGET),,$(if $(DEFAULT_SUBTARGET), echo 'Default-Subtarget: $(DEFAULT_SUBTARGET)'; )) \
+ echo 'Target-Description:'; \
+ echo "$$$$DESCRIPTION"; \
+ echo '@@'; \
+ echo 'Default-Packages: $(DEFAULT_PACKAGES) $(call extra_packages,$(DEFAULT_PACKAGES))'; \
+ $(DUMPINFO)
+ $(if $(SUBTARGET),,@$(foreach SUBTARGET,$(SUBTARGETS),$(SUBMAKE) -s DUMP=1 SUBTARGET=$(SUBTARGET); ))
+endef
+
+include $(INCLUDE_DIR)/kernel.mk
+ifeq ($(TARGET_BUILD),1)
+ include $(INCLUDE_DIR)/kernel-build.mk
+ BuildTarget?=$(BuildKernel)
+endif
+
+endif #__target_inc
diff --git a/include/toolchain-build.mk b/include/toolchain-build.mk
new file mode 100644
index 0000000..212923a
--- /dev/null
+++ b/include/toolchain-build.mk
@@ -0,0 +1,25 @@
+#
+# Copyright (C) 2009 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+override CONFIG_AUTOREBUILD=
+
+REAL_STAGING_DIR_HOST:=$(STAGING_DIR_HOST)
+STAGING_DIR_HOST:=$(TOOLCHAIN_DIR)
+BUILD_DIR_HOST:=$(BUILD_DIR_TOOLCHAIN)
+
+include $(INCLUDE_DIR)/host-build.mk
+
+HOST_STAMP_PREPARED=$(HOST_BUILD_DIR)/.prepared
+
+define FixupLibdir
+ if [ -d $(1)/lib64 -a \! -L $(1)/lib64 ]; then \
+ mkdir -p $(1)/lib; \
+ mv $(1)/lib64/* $(1)/lib/; \
+ rm -rf $(1)/lib64; \
+ fi
+ ln -sf lib $(1)/lib64
+endef
diff --git a/include/toplevel.mk b/include/toplevel.mk
new file mode 100644
index 0000000..0e6c55a
--- /dev/null
+++ b/include/toplevel.mk
@@ -0,0 +1,224 @@
+# 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.
+#
+
+RELEASE:=Designated Driver
+PREP_MK= OPENWRT_BUILD= QUIET=0
+
+export IS_TTY=$(shell tty -s && echo 1 || echo 0)
+
+include $(TOPDIR)/include/verbose.mk
+
+ifeq ($(SDK),1)
+ include $(TOPDIR)/include/version.mk
+else
+ REVISION:=$(shell $(TOPDIR)/scripts/getver.sh)
+endif
+
+HOSTCC ?= $(CC)
+export RELEASE
+export REVISION
+export GIT_CONFIG_PARAMETERS='core.autocrlf=false'
+export MAKE_JOBSERVER=$(filter --jobserver%,$(MAKEFLAGS))
+
+# prevent perforce from messing with the patch utility
+unexport P4PORT P4USER P4CONFIG P4CLIENT
+
+# prevent user defaults for quilt from interfering
+unexport QUILT_PATCHES QUILT_PATCH_OPTS
+
+unexport C_INCLUDE_PATH CROSS_COMPILE ARCH
+
+# prevent distro default LPATH from interfering
+unexport LPATH
+
+# make sure that a predefined CFLAGS variable does not disturb packages
+export CFLAGS=
+
+unexport TAR_OPTIONS
+
+ifneq ($(shell $(HOSTCC) 2>&1 | grep clang),)
+ export HOSTCC_REAL?=$(HOSTCC)
+ export HOSTCC_WRAPPER:=$(TOPDIR)/scripts/clang-gcc-wrapper
+else
+ export HOSTCC_WRAPPER:=$(HOSTCC)
+endif
+
+ifeq ($(FORCE),)
+ .config scripts/config/conf scripts/config/mconf: staging_dir/host/.prereq-build
+endif
+
+SCAN_COOKIE?=$(shell echo $$$$)
+export SCAN_COOKIE
+
+SUBMAKE:=umask 022; $(SUBMAKE)
+
+ULIMIT_FIX=_limit=`ulimit -n`; [ "$$_limit" = "unlimited" -o "$$_limit" -ge 1024 ] || ulimit -n 1024;
+
+prepare-mk: FORCE ;
+
+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 $(TOPDIR)/overlay/*/*.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="profiles/*.mk $(TOPDIR)/include/kernel*.mk $(TOPDIR)/include/target.mk" 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/metadata.pl $${type}_config "$$f" > "$$t" || { rm -f "$$t"; echo "Failed to build $$t"; false; break; }; \
+ done
+ [ tmp/.config-feeds.in -nt tmp/.packagefeeds ] || ./scripts/feeds feed_config > tmp/.config-feeds.in
+ ./scripts/metadata.pl package_mk tmp/.packageinfo > tmp/.packagedeps || { rm -f tmp/.packagedeps; false; }
+ ./scripts/metadata.pl package_feeds tmp/.packageinfo > tmp/.packagefeeds || { rm -f tmp/.packagefeeds; false; }
+ touch $(TOPDIR)/tmp/.build
+
+.config: ./scripts/config/conf $(if $(CONFIG_HAVE_DOT_CONFIG),,prepare-tmpinfo)
+ @+if [ \! -e .config ] || ! grep CONFIG_HAVE_DOT_CONFIG .config >/dev/null; then \
+ [ -e $(HOME)/.openwrt/defconfig ] && cp $(HOME)/.openwrt/defconfig .config; \
+ $(_SINGLE)$(NO_TRACE_MAKE) menuconfig $(PREP_MK); \
+ fi
+
+scripts/config/mconf:
+ @$(_SINGLE)$(SUBMAKE) -s -C scripts/config all CC="$(HOSTCC_WRAPPER)"
+
+$(eval $(call rdep,scripts/config,scripts/config/mconf))
+
+scripts/config/conf:
+ @$(_SINGLE)$(SUBMAKE) -s -C scripts/config conf CC="$(HOSTCC_WRAPPER)"
+
+config: scripts/config/conf prepare-tmpinfo FORCE
+ $< Config.in
+
+config-clean: FORCE
+ $(_SINGLE)$(NO_TRACE_MAKE) -C scripts/config clean
+
+defconfig: scripts/config/conf prepare-tmpinfo FORCE
+ touch .config
+ @if [ -e $(HOME)/.openwrt/defconfig ]; then cp $(HOME)/.openwrt/defconfig .config; fi
+ $< --defconfig=.config Config.in
+
+confdefault-y=allyes
+confdefault-m=allmod
+confdefault-n=allno
+confdefault:=$(confdefault-$(CONFDEFAULT))
+
+oldconfig: scripts/config/conf prepare-tmpinfo FORCE
+ $< --$(if $(confdefault),$(confdefault),old)config Config.in
+
+menuconfig: scripts/config/mconf prepare-tmpinfo FORCE
+ if [ \! -e .config -a -e $(HOME)/.openwrt/defconfig ]; then \
+ cp $(HOME)/.openwrt/defconfig .config; \
+ fi
+ $< Config.in
+
+prepare_kernel_conf: .config FORCE
+
+ifeq ($(wildcard staging_dir/host/bin/quilt),)
+ prepare_kernel_conf:
+ @+$(SUBMAKE) -r tools/quilt/install
+else
+ prepare_kernel_conf: ;
+endif
+
+kernel_oldconfig: prepare_kernel_conf
+ $(_SINGLE)$(NO_TRACE_MAKE) -C target/linux oldconfig
+
+kernel_menuconfig: prepare_kernel_conf
+ $(_SINGLE)$(NO_TRACE_MAKE) -C target/linux menuconfig
+
+kernel_nconfig: prepare_kernel_conf
+ $(_SINGLE)$(NO_TRACE_MAKE) -C target/linux nconfig
+
+staging_dir/host/.prereq-build: include/prereq-build.mk
+ mkdir -p tmp
+ rm -f tmp/.host.mk
+ @$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f $(TOPDIR)/include/prereq-build.mk prereq 2>/dev/null || { \
+ echo "Prerequisite check failed. Use FORCE=1 to override."; \
+ false; \
+ }
+ ifneq ($(realpath $(TOPDIR)/include/prepare.mk),)
+ @$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f $(TOPDIR)/include/prepare.mk prepare 2>/dev/null || { \
+ echo "Preparation failed."; \
+ false; \
+ }
+ endif
+ touch $@
+
+printdb: FORCE
+ @$(_SINGLE)$(NO_TRACE_MAKE) -p $@ V=99 DUMP_TARGET_DB=1 2>&1
+
+download: .config FORCE
+ @+$(SUBMAKE) tools/download
+ @+$(SUBMAKE) toolchain/download
+ @+$(SUBMAKE) package/download
+ @+$(SUBMAKE) target/download
+
+clean dirclean: .config
+ @+$(SUBMAKE) -r $@
+
+prereq:: prepare-tmpinfo .config
+ @+$(NO_TRACE_MAKE) -r -s $@
+
+WARN_PARALLEL_ERROR = $(if $(BUILD_LOG),,$(and $(filter -j,$(MAKEFLAGS)),$(findstring s,$(OPENWRT_VERBOSE))))
+
+ifeq ($(SDK),1)
+
+%::
+ @+$(PREP_MK) $(NO_TRACE_MAKE) -r -s prereq
+ @./scripts/config/conf --defconfig=.config Config.in
+ @+$(ULIMIT_FIX) $(SUBMAKE) -r $@
+
+else
+
+%::
+ @+$(PREP_MK) $(NO_TRACE_MAKE) -r -s prereq
+ @( \
+ cp .config tmp/.config; \
+ ./scripts/config/conf --defconfig=tmp/.config -w tmp/.config Config.in > /dev/null 2>&1; \
+ if ./scripts/kconfig.pl '>' .config tmp/.config | grep -q CONFIG; then \
+ printf "$(_R)WARNING: your configuration is out of sync. Please run make menuconfig, oldconfig or defconfig!$(_N)\n" >&2; \
+ fi \
+ )
+ @+$(ULIMIT_FIX) $(SUBMAKE) -r $@ $(if $(WARN_PARALLEL_ERROR), || { \
+ printf "$(_R)Build failed - please re-run with -j1 to see the real error message$(_N)\n" >&2; \
+ false; \
+ } )
+
+endif
+
+# update all feeds, re-create index files, install symlinks
+package/symlinks:
+ ./scripts/feeds update -a
+ ./scripts/feeds install -a
+
+# re-create index files, install symlinks
+package/symlinks-install:
+ ./scripts/feeds update -i
+ ./scripts/feeds install -a
+
+# remove all symlinks, don't touch ./feeds
+package/symlinks-clean:
+ ./scripts/feeds uninstall -a
+
+help:
+ cat README
+
+docs docs/compile: FORCE
+ @$(_SINGLE)$(SUBMAKE) -C docs compile
+
+docs/clean: FORCE
+ @$(_SINGLE)$(SUBMAKE) -C docs clean
+
+distclean:
+ rm -rf tmp build_dir staging_dir dl .config* feeds package/feeds package/openwrt-packages bin
+ @$(_SINGLE)$(SUBMAKE) -C scripts/config clean
+
+ifeq ($(findstring v,$(DEBUG)),)
+ .SILENT: symlinkclean clean dirclean distclean config-clean download help tmpinfo-clean .config scripts/config/mconf scripts/config/conf menuconfig staging_dir/host/.prereq-build tmp/.prereq-package prepare-tmpinfo
+endif
+.PHONY: help FORCE
+.NOTPARALLEL:
+
diff --git a/include/uclibc++.mk b/include/uclibc++.mk
new file mode 100644
index 0000000..a1a61f2
--- /dev/null
+++ b/include/uclibc++.mk
@@ -0,0 +1,16 @@
+ifndef DUMP
+ ifdef __package_mk
+ $(error uclibc++.mk must be included before package.mk)
+ endif
+endif
+
+PKG_PREPARED_DEPENDS += CONFIG_USE_UCLIBCXX
+CXX_DEPENDS = +USE_UCLIBCXX:uclibcxx +USE_LIBSTDCXX:libstdcpp
+
+ifneq ($(CONFIG_USE_UCLIBCXX),)
+ ifneq ($(CONFIG_CCACHE),)
+ TARGET_CXX_NOCACHE=g++-uc
+ else
+ TARGET_CXX=g++-uc
+ endif
+endif
diff --git a/include/unpack.mk b/include/unpack.mk
new file mode 100644
index 0000000..3fabf46
--- /dev/null
+++ b/include/unpack.mk
@@ -0,0 +1,81 @@
+#
+# Copyright (C) 2006-2007 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+# unpacking files with +s may break on some platforms. this typically emits error code 2
+ifneq ($(HOST_OS),Linux)
+ HOST_TAR:=trapret 2 $(TAR)
+else
+ HOST_TAR:=$(TAR)
+endif
+TAR_CMD=$(HOST_TAR) -C $(1)/.. $(TAR_OPTIONS)
+UNZIP_CMD=unzip -d $(1)/.. $(DL_DIR)/$(PKG_SOURCE)
+
+ifeq ($(PKG_SOURCE),)
+ PKG_UNPACK ?= true
+else
+
+ifeq ($(strip $(UNPACK_CMD)),)
+ ifeq ($(strip $(PKG_CAT)),)
+ # try to autodetect file type
+ EXT:=$(call ext,$(PKG_SOURCE))
+ EXT1:=$(EXT)
+
+ ifeq ($(filter gz tgz,$(EXT)),$(EXT))
+ EXT:=$(call ext,$(PKG_SOURCE:.$(EXT)=))
+ DECOMPRESS_CMD:=gzip -dc $(DL_DIR)/$(PKG_SOURCE) |
+ endif
+ ifeq ($(filter bzip2 bz2 bz tbz2 tbz,$(EXT)),$(EXT))
+ EXT:=$(call ext,$(PKG_SOURCE:.$(EXT)=))
+ DECOMPRESS_CMD:=bzcat $(DL_DIR)/$(PKG_SOURCE) |
+ endif
+ ifeq ($(filter xz txz,$(EXT)),$(EXT))
+ EXT:=$(call ext,$(PKG_SOURCE:.$(EXT)=))
+ DECOMPRESS_CMD:=xzcat $(DL_DIR)/$(PKG_SOURCE) |
+ endif
+ ifeq ($(filter tgz tbz tbz2 txz,$(EXT1)),$(EXT1))
+ EXT:=tar
+ endif
+ DECOMPRESS_CMD ?= cat $(DL_DIR)/$(PKG_SOURCE) |
+ ifeq ($(EXT),tar)
+ UNPACK_CMD=$(DECOMPRESS_CMD) $(TAR_CMD)
+ endif
+ ifeq ($(EXT),cpio)
+ UNPACK_CMD=$(DECOMPRESS_CMD) (cd $(1)/..; cpio -i -d)
+ endif
+ ifeq ($(EXT),zip)
+ UNPACK_CMD=$(UNZIP_CMD)
+ endif
+ endif
+
+ # compatibility code for packages that set PKG_CAT
+ ifeq ($(strip $(UNPACK_CMD)),)
+ # use existing PKG_CAT
+ UNPACK_CMD=$(PKG_CAT) $(DL_DIR)/$(PKG_SOURCE) | $(TAR_CMD)
+ ifeq ($(PKG_CAT),unzip)
+ UNPACK_CMD=$(UNZIP_CMD)
+ endif
+ # replace zcat with $(ZCAT), because some system don't support it properly
+ ifeq ($(PKG_CAT),zcat)
+ 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))
+endif
+ifdef HOST_BUILD_DIR
+ HOST_UNPACK ?= $(SH_FUNC) $(call UNPACK_CMD,$(HOST_BUILD_DIR)) $(call CRLF_CMD,$(HOST_BUILD_DIR))
+endif
+
+endif # PKG_SOURCE
+
diff --git a/include/verbose.mk b/include/verbose.mk
new file mode 100644
index 0000000..b7e43f7
--- /dev/null
+++ b/include/verbose.mk
@@ -0,0 +1,67 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+ifndef OPENWRT_VERBOSE
+ OPENWRT_VERBOSE:=
+endif
+ifeq ("$(origin V)", "command line")
+ OPENWRT_VERBOSE:=$(V)
+endif
+
+ifeq ($(OPENWRT_VERBOSE),1)
+ OPENWRT_VERBOSE:=w
+endif
+ifeq ($(OPENWRT_VERBOSE),99)
+ OPENWRT_VERBOSE:=s
+endif
+
+ifeq ($(NO_TRACE_MAKE),)
+NO_TRACE_MAKE := $(MAKE) V=s$(OPENWRT_VERBOSE)
+export NO_TRACE_MAKE
+endif
+
+ifeq ($(IS_TTY),1)
+ ifneq ($(strip $(NO_COLOR)),1)
+ _Y:=\\033[33m
+ _R:=\\033[31m
+ _N:=\\033[m
+ endif
+endif
+
+ifeq ($(findstring s,$(OPENWRT_VERBOSE)),)
+ define MESSAGE
+ printf "$(_Y)%s$(_N)\n" "$(1)" >&8
+ endef
+
+ define ERROR_MESSAGE
+ printf "$(_R)%s$(_N)\n" "$(1)" >&8
+ endef
+
+ ifeq ($(QUIET),1)
+ ifneq ($(CURDIR),$(TOPDIR))
+ _DIR:=$(patsubst $(TOPDIR)/%,%,${CURDIR})
+ else
+ _DIR:=
+ endif
+ _NULL:=$(if $(MAKECMDGOALS),$(shell \
+ $(call MESSAGE, make[$(MAKELEVEL)]$(if $(_DIR), -C $(_DIR)) $(MAKECMDGOALS)); \
+ ))
+ SUBMAKE=$(MAKE)
+ 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
+ endif
+
+ .SILENT: $(MAKECMDGOALS)
+else
+ SUBMAKE=$(MAKE) -w
+ define MESSAGE
+ printf "%s\n" "$(1)"
+ endef
+ ERROR_MESSAGE=$(MESSAGE)
+endif
diff --git a/include/version.mk b/include/version.mk
new file mode 100644
index 0000000..4bce096
--- /dev/null
+++ b/include/version.mk
@@ -0,0 +1,93 @@
+#
+# Copyright (C) 2012-2015 OpenWrt.org
+#
+# 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
+
+PKG_CONFIG_DEPENDS += \
+ CONFIG_VERSION_NUMBER \
+ CONFIG_VERSION_NICK \
+ CONFIG_VERSION_REPO \
+ CONFIG_VERSION_DIST \
+ CONFIG_VERSION_MANUFACTURER \
+ CONFIG_VERSION_MANUFACTURER_URL \
+ CONFIG_VERSION_PRODUCT \
+ CONFIG_VERSION_HWREV \
+
+qstrip_escape=$(subst ','\'',$(call qstrip,$(1)))
+#'
+
+VERSION_NUMBER:=$(call qstrip_escape,$(CONFIG_VERSION_NUMBER))
+VERSION_NUMBER:=$(if $(VERSION_NUMBER),$(VERSION_NUMBER),$(REVISION))
+
+VERSION_CODE:=$(call qstrip_escape,$(CONFIG_VERSION_NUMBER))
+VERSION_CODE:=$(if $(VERSION_CODE),$(VERSION_CODE),Bleeding Edge)
+
+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.openwrt.org/snapshots/trunk/%S/packages)
+
+VERSION_DIST:=$(call qstrip_escape,$(CONFIG_VERSION_DIST))
+VERSION_DIST:=$(if $(VERSION_DIST),$(VERSION_DIST),OpenWrt)
+
+VERSION_MANUFACTURER:=$(call qstrip_escape,$(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://www.openwrt.org/)
+
+VERSION_PRODUCT:=$(call qstrip_escape,$(CONFIG_VERSION_PRODUCT))
+VERSION_PRODUCT:=$(if $(VERSION_PRODUCT),$(VERSION_PRODUCT),Generic)
+
+VERSION_HWREV:=$(call qstrip_escape,$(CONFIG_VERSION_HWREV))
+VERSION_HWREV:=$(if $(VERSION_HWREV),$(VERSION_HWREV),v0)
+
+define taint2sym
+$(CONFIG_$(firstword $(subst :, ,$(subst +,,$(subst -,,$(1))))))
+endef
+
+define taint2name
+$(lastword $(subst :, ,$(1)))
+endef
+
+VERSION_TAINT_SPECS := \
+ -ALL_KMODS:no-all \
+ -IPV6:no-ipv6 \
+ +USE_GLIBC:glibc \
+ +USE_MKLIBS:mklibs \
+ +BUSYBOX_CUSTOM:busybox \
+ +OVERRIDE_PKGS:override \
+
+VERSION_TAINTS := $(strip $(foreach taint,$(VERSION_TAINT_SPECS), \
+ $(if $(findstring +,$(taint)), \
+ $(if $(call taint2sym,$(taint)),$(call taint2name,$(taint))), \
+ $(if $(call taint2sym,$(taint)),,$(call taint2name,$(taint))) \
+ )))
+
+PKG_CONFIG_DEPENDS += $(foreach taint,$(VERSION_TAINT_SPECS),$(call taint2sym,$(taint)))
+
+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,%t,$(VERSION_TAINTS),g' \
+ -e 's,%M,$(VERSION_MANUFACTURER),g' \
+ -e 's,%m,$(VERSION_MANUFACTURER_URL),g' \
+ -e 's,%P,$(VERSION_PRODUCT),g' \
+ -e 's,%h,$(VERSION_HWREV),g'
+
+VERSION_SED_SCRIPT:=$(subst '\'','\'\\\\\'\'',$(VERSION_SED))