Would someone review and comment on the below patch please? thanks,
TP On Thu, Mar 3, 2016 at 3:26 PM, Toan Pham <tpham3...@gmail.com> wrote: > > Presently, Openwrt reads default config filename ".config" or from > $(HOME)/.openwrt/defconfig if it exists. This patch will allow users to > specify an alternative config file (using relative or absolute path) from > the command line. ie) > > make TARGET_CONFIG=/src/build/config/boardXYZ.config > > > This patch is introduced because in the future, i would like to be able to > treat OpenWrt SDK as a blackbox. Users can build multiple targets without > polluting the SDE environment by being able to specify an input config file > and an output target directory. For example: > > make TARGET_CONFIG=/tmp/test.config TARGET_OUTPUT_DIR=/tmp/testboard > > where, TARGET_OUTPUT_DIR would contain the output results like: bin, > build_dir, staging_dir > > Another advantage of the above example is that it allows building on > tmpfs, which would sufficiently speed up build time. > > Please review and comment! thanks! > > Signed-off-by: Toan Pham <tpham3...@gmail.com> > --- > diff --git a/Makefile b/Makefile > index 8ba2bfc..452bef2 100644 > --- a/Makefile > +++ b/Makefile > @@ -62,7 +62,7 @@ $(BUILD_DIR)/.prepared: Makefile > @mkdir -p $$(dirname $@) > @touch $@ > > -tmp/.prereq_packages: .config > +tmp/.prereq_packages: $(TARGET_CONFIG) > unset ERROR; \ > for package in $(sort $(prereq-y) $(prereq-m)); do \ > $(_SINGLE)$(NO_TRACE_MAKE) -s -r -C package/$$package prereq || > ERROR=1; \ > @@ -83,7 +83,7 @@ prereq: $(target/stamp-prereq) tmp/.prereq_packages > exit 1; \ > fi > > -prepare: .config $(tools/stamp-install) $(toolchain/stamp-install) > +prepare: $(TARGET_CONFIG) $(tools/stamp-install) > $(toolchain/stamp-install) > world: prepare $(target/stamp-compile) $(package/stamp-compile) > $(package/stamp-install) $(target/stamp-install) FORCE > $(_SINGLE)$(SUBMAKE) -r package/index > > diff --git a/include/kernel-build.mk b/include/kernel-build.mk > index a52c90d..f732d03 100644 > --- a/include/kernel-build.mk > +++ b/include/kernel-build.mk > @@ -102,7 +102,7 @@ define BuildKernel > echo; \ > ) > $$@ > > - $(STAMP_CONFIGURED): $(STAMP_PREPARED) $(LINUX_KCONFIG_LIST) > $(TOPDIR)/.config > + $(STAMP_CONFIGURED): $(STAMP_PREPARED) $(LINUX_KCONFIG_LIST) > $(TARGET_CONFIG) > $(Kernel/Configure) > touch $$@ > > diff --git a/include/kernel-defaults.mk b/include/kernel-defaults.mk > index 406fd46..3cfcdb3 100644 > --- a/include/kernel-defaults.mk > +++ b/include/kernel-defaults.mk > @@ -107,11 +107,11 @@ 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 > + awk > '/^(#[[:space:]]+)?CONFIG_KERNEL/{sub("CONFIG_KERNEL_","CONFIG_");print}' > $(TARGET_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=y" >> $(LINUX_DIR)/.config.target > - $(SCRIPT_DIR)/metadata.pl kconfig $(TMP_DIR)/.packageinfo > $(TOPDIR)/.config $(KERNEL_PATCHVER) > $(LINUX_DIR)/.config.override > + $(SCRIPT_DIR)/metadata.pl kconfig $(TMP_DIR)/.packageinfo > $(TARGET_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.set > $(call Kernel/SetNoInitramfs) > rm -rf $(KERNEL_BUILD_DIR)/modules > diff --git a/include/toplevel.mk b/include/toplevel.mk > index 9709302..2d45c9c 100644 > --- a/include/toplevel.mk > +++ b/include/toplevel.mk > @@ -58,7 +58,7 @@ else > endif > > ifeq ($(FORCE),) > - .config scripts/config/conf scripts/config/mconf: > staging_dir/host/.prereq-build > + $(TARGET_CONFIG) scripts/config/conf scripts/config/mconf: > staging_dir/host/.prereq-build > endif > > SCAN_COOKIE?=$(shell echo $$$$) > @@ -90,10 +90,10 @@ prepare-tmpinfo: FORCE > ./scripts/metadata.pl package_subdirs tmp/.packageinfo > > tmp/.packagesubdirs || { rm -f tmp/.packagesubdirs; 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); \ > +$(TARGET_CONFIG): ./scripts/config/conf $(if > $(CONFIG_HAVE_DOT_CONFIG),,prepare-tmpinfo) > + @+if [ \! -e $(TARGET_CONFIG) ] || ! grep CONFIG_HAVE_DOT_CONFIG > $(TARGET_CONFIG) >/dev/null; then \ > + [ -e $(HOME)/.openwrt/defconfig ] && cp > $(HOME)/.openwrt/defconfig $(TARGET_CONFIG); \ > + $(NO_TRACE_MAKE) menuconfig $(PREP_MK); \ > fi > > scripts/config/mconf: > @@ -105,15 +105,16 @@ scripts/config/conf: > @$(_SINGLE)$(SUBMAKE) -s -C scripts/config conf CC="$(HOSTCC_WRAPPER)" > > config: scripts/config/conf prepare-tmpinfo FORCE > - $< Config.in > + KCONFIG_CONFIG=$(TARGET_CONFIG) $< 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 > + touch $(TARGET_CONFIG) > + @if [ -e $(HOME)/.openwrt/defconfig ]; then cp > $(HOME)/.openwrt/defconfig $(TARGET_CONFIG); fi > + $< --defconfig=$(TARGET_CONFIG) Config.in > + [ -f .config ] && mv .config $(TARGET_CONFIG) > > confdefault-y=allyes > confdefault-m=allmod > @@ -121,15 +122,15 @@ confdefault-n=allno > confdefault:=$(confdefault-$(CONFDEFAULT)) > > oldconfig: scripts/config/conf prepare-tmpinfo FORCE > - $< --$(if $(confdefault),$(confdefault),old)config Config.in > + KCONFIG_CONFIG=$(TARGET_CONFIG) $< --$(if > $(confdefault),$(confdefault),old)config Config.in > > menuconfig: scripts/config/mconf prepare-tmpinfo FORCE > - if [ \! -e .config -a -e $(HOME)/.openwrt/defconfig ]; then \ > + if [ \! -e $(TARGET_CONFIG) -a -e $(HOME)/.openwrt/defconfig ]; then \ > cp $(HOME)/.openwrt/defconfig .config; \ > fi > - $< Config.in > + KCONFIG_CONFIG=$(TARGET_CONFIG) $< Config.in > > -prepare_kernel_conf: .config FORCE > +prepare_kernel_conf: $(TARGET_CONFIG) FORCE > > ifeq ($(wildcard staging_dir/host/bin/quilt),) > prepare_kernel_conf: > @@ -142,7 +143,7 @@ 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 > + $(MAKE) -C target/linux menuconfig > > kernel_nconfig: prepare_kernel_conf > $(_SINGLE)$(NO_TRACE_MAKE) -C target/linux nconfig > @@ -165,16 +166,16 @@ staging_dir/host/.prereq-build: include/ > prereq-build.mk > printdb: FORCE > @$(_SINGLE)$(NO_TRACE_MAKE) -p $@ V=99 DUMP_TARGET_DB=1 2>&1 > > -download: .config FORCE > +download: $(TARGET_CONFIG) FORCE > @+$(SUBMAKE) tools/download > @+$(SUBMAKE) toolchain/download > @+$(SUBMAKE) package/download > @+$(SUBMAKE) target/download > > -clean dirclean: .config > +clean dirclean: $(TARGET_CONFIG) > @+$(SUBMAKE) -r $@ > > -prereq:: prepare-tmpinfo .config > +prereq:: prepare-tmpinfo $(TARGET_CONFIG) > @+$(NO_TRACE_MAKE) -r -s $@ > > WARN_PARALLEL_ERROR = $(if $(BUILD_LOG),,$(and $(filter > -j,$(MAKEFLAGS)),$(findstring s,$(OPENWRT_VERBOSE)))) > @@ -183,7 +184,7 @@ ifeq ($(SDK),1) > > %:: > @+$(PREP_MK) $(NO_TRACE_MAKE) -r -s prereq > - @./scripts/config/conf --defconfig=.config Config.in > + @./scripts/config/conf --defconfig=$(TARGET_CONFIG) Config.in > @+$(ULIMIT_FIX) $(SUBMAKE) -r $@ > > else > @@ -191,9 +192,9 @@ else > %:: > @+$(PREP_MK) $(NO_TRACE_MAKE) -r -s prereq > @( \ > - cp .config tmp/.config; \ > + cp $(TARGET_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 \ > + if ./scripts/kconfig.pl '>' $(TARGET_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 \ > ) > @@ -232,7 +233,7 @@ distclean: > @$(_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 > + .SILENT: symlinkclean clean dirclean distclean config-clean download > help tmpinfo-clean $(TARGET_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/package/Makefile b/package/Makefile > index 1a78fde..acc2307 100644 > --- a/package/Makefile > +++ b/package/Makefile > @@ -184,7 +184,8 @@ $(curdir)/preconfig: > > $(curdir)/flags-install:= -j1 > > -$(eval $(call stampfile,$(curdir),package,prereq,.config)) > +#$(eval $(call stampfile,$(curdir),package,prereq,.config)) > +$(eval $(call stampfile,$(curdir),package,prereq,$(TARGET_CONFIG))) > $(eval $(call stampfile,$(curdir),package,cleanup,$(TMP_DIR)/.build)) > $(eval $(call stampfile,$(curdir),package,compile,$(TMP_DIR)/.build)) > $(eval $(call stampfile,$(curdir),package,install,$(TMP_DIR)/.build)) > diff --git a/package/utils/busybox/Makefile > b/package/utils/busybox/Makefile > index 6a55d56..c31b857 100644 > --- a/package/utils/busybox/Makefile > +++ b/package/utils/busybox/Makefile > @@ -27,7 +27,7 @@ PKG_LICENSE_FILES:=LICENSE archival/libarchive/bz/LICENSE > include $(INCLUDE_DIR)/package.mk > > ifeq ($(DUMP),) > - STAMP_CONFIGURED:=$(strip $(STAMP_CONFIGURED))_$(shell $(SH_FUNC) grep > '^CONFIG_BUSYBOX_' $(TOPDIR)/.config | md5s) > + STAMP_CONFIGURED:=$(strip $(STAMP_CONFIGURED))_$(shell $(SH_FUNC) grep > '^CONFIG_BUSYBOX_' $(TARGET_CONFIG) | md5s) > endif > > ifneq ($(findstring c,$(OPENWRT_VERBOSE)),) > @@ -62,7 +62,7 @@ export KCONFIG_NOTIMESTAMP=1 > > define Build/Configure > rm -f $(PKG_BUILD_DIR)/.configured* > - grep 'CONFIG_BUSYBOX_$(BUSYBOX_SYM)' $(TOPDIR)/.config | sed -e > "s,\\(# \)\\?CONFIG_BUSYBOX_$(BUSYBOX_SYM)_\\(.*\\),\\1CONFIG_\\2,g" > > $(PKG_BUILD_DIR)/.config > + grep 'CONFIG_BUSYBOX_$(BUSYBOX_SYM)' $(TARGET_CONFIG) | sed -e > "s,\\(# \)\\?CONFIG_BUSYBOX_$(BUSYBOX_SYM)_\\(.*\\),\\1CONFIG_\\2,g" > > $(PKG_BUILD_DIR)/.config > yes 'n' | $(MAKE) -C $(PKG_BUILD_DIR) \ > CC="$(TARGET_CC)" \ > CROSS_COMPILE="$(TARGET_CROSS)" \ > diff --git a/rules.mk b/rules.mk > index 22807da..691b393 100644 > --- a/rules.mk > +++ b/rules.mk > @@ -8,8 +8,16 @@ > ifneq ($(__rules_inc),1) > __rules_inc=1 > > +TARGET_CONFIG?=$(TOPDIR)/.config > + > +ifneq ("$(wildcard $(TARGET_CONFIG))","") > + override TARGET_CONFIG:=$(TARGET_CONFIG) > +else > + override TARGET_CONFIG:=$(TOPDIR)/$(TARGET_CONFIG) > +endif > + > ifeq ($(DUMP),) > - -include $(TOPDIR)/.config > + -include $(TARGET_CONFIG) > endif > include $(TOPDIR)/include/debug.mk > include $(TOPDIR)/include/verbose.mk > diff --git a/target/Makefile b/target/Makefile > index cb68454..c9c8e33 100644 > --- a/target/Makefile > +++ b/target/Makefile > @@ -12,7 +12,7 @@ $(curdir)/builddirs-install:=linux $(if > $(CONFIG_SDK),sdk) $(if $(CONFIG_IB),ima > > $(curdir)/imagebuilder/install:=$(curdir)/linux/install > > -$(eval $(call stampfile,$(curdir),target,prereq,.config)) > +$(eval $(call stampfile,$(curdir),target,prereq,$(TARGET_CONFIG))) > $(eval $(call stampfile,$(curdir),target,compile,$(TMP_DIR)/.build)) > $(eval $(call stampfile,$(curdir),target,install,$(TMP_DIR)/.build)) > > diff --git a/target/linux/Makefile b/target/linux/Makefile > index f7bbdff..95cd417 100644 > --- a/target/linux/Makefile > +++ b/target/linux/Makefile > @@ -10,4 +10,4 @@ include $(INCLUDE_DIR)/target.mk > export TARGET_BUILD=1 > > prereq clean download prepare compile install menuconfig nconfig > oldconfig update refresh: FORCE > - @+$(NO_TRACE_MAKE) -C $(BOARD) $@ > + @+$(NO_TRACE_MAKE) -C $(BOARD) $@ > diff --git a/target/sdk/Makefile b/target/sdk/Makefile > index 857a6b7..7ef69db 100644 > --- a/target/sdk/Makefile > +++ b/target/sdk/Makefile > @@ -92,11 +92,11 @@ $(BIN_DIR)/$(SDK_NAME).tar.bz2: clean > rm -rf \ > $(SDK_BUILD_DIR)/target/linux/*/files* \ > $(SDK_BUILD_DIR)/target/linux/*/patches* > - ./convert-config.pl $(TOPDIR)/.config > > $(SDK_BUILD_DIR)/Config-build.in > + ./convert-config.pl $(TARGET_CONFIG) > > $(SDK_BUILD_DIR)/Config-build.in > $(CP) -L \ > $(TOPDIR)/LICENSE \ > $(TOPDIR)/rules.mk \ > - $(TOPDIR)/.config \ > + $(TARGET_CONFIG) \ > ./files/Config.in \ > ./files/Makefile \ > ./files/include/prepare.mk \ > diff --git a/toolchain/Makefile b/toolchain/Makefile > index cd5399e..7479615 100644 > --- a/toolchain/Makefile > +++ b/toolchain/Makefile > @@ -53,7 +53,7 @@ endif > > ifndef DUMP_TARGET_DB > ifneq ($(ARCH),) > - $(TOOLCHAIN_DIR)/info.mk: .config > + $(TOOLCHAIN_DIR)/info.mk: $(TARGET_CONFIG) > @for dir in $(TOOLCHAIN_DIR); do ( \ > $(if $(QUIET),,set -x;) \ > mkdir -p "$$dir"; \ > @@ -68,7 +68,7 @@ endif > endif > > # prerequisites for the individual targets > -$(curdir)/ := .config prereq > +$(curdir)/ := $(TARGET_CONFIG) prereq > $(curdir)//prepare = $(STAGING_DIR)/.prepared $(TOOLCHAIN_DIR)/info.mk > $(tools/stamp-install) > $(curdir)//compile = $(1)/prepare > $(curdir)//install = $(1)/compile > diff --git a/tools/Makefile b/tools/Makefile > index 187655e..64ebcbd 100644 > --- a/tools/Makefile > +++ b/tools/Makefile > @@ -126,7 +126,7 @@ $(curdir)//prepare = $(STAGING_DIR)/.prepared > $(STAGING_DIR_HOST)/.prepared > $(curdir)//compile = $(STAGING_DIR)/.prepared > $(STAGING_DIR_HOST)/.prepared > > # prerequisites for the individual targets > -$(curdir)/ := .config prereq > +$(curdir)/ := $(TARGET_CONFIG) prereq > $(curdir)//install = $(1)/compile > > tools_enabled = $(foreach tool,$(sort $(tools-y) $(tools-)),$(if $(filter > $(tool),$(tools-y)),y,n)) > > > > > > > > >
_______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel