[PATCH] kconfig: store default ARCH in .config

Konstantin Khlebnikov koct9i at gmail.com
Sun Jul 6 01:02:34 PDT 2014


This patch makes cross-compilation configuration fully statefull.
Default ARCH is stored in .config as CONFIG_DEFAULT_ARCH.
After initial configuration specifying ARCH= is no longer required.

To avoid recursion it is read directly from .config using scritps/config
because include/config/auto.conf is not yet included at this point.

Signed-off-by: Konstantin Khlebnikov <koct9i at gmail.com>
---
 Documentation/kbuild/makefiles.txt |    2 ++
 Makefile                           |   19 ++++++++++++++-----
 init/Kconfig                       |    4 ++++
 3 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt
index c600e2f..ced3e42 100644
--- a/Documentation/kbuild/makefiles.txt
+++ b/Documentation/kbuild/makefiles.txt
@@ -1394,6 +1394,8 @@ The top Makefile exports the following variables:
 
 	    make ARCH=m68k ...
 
+	Default $(ARCH) is stored in .config as CONFIG_DEFAULT_ARCH,
+	so overriding is required only for initial configuration.
 
     INSTALL_PATH
 
diff --git a/Makefile b/Makefile
index 50fb690..76fcd9f 100644
--- a/Makefile
+++ b/Makefile
@@ -171,6 +171,8 @@ VPATH		:= $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD))
 
 export srctree objtree VPATH
 
+KCONFIG_CONFIG	?= .config
+export KCONFIG_CONFIG
 
 # SUBARCH tells the usermode build what the underlying arch is.  That is set
 # first, and if a usermode build is happening, the "ARCH=um" on the command
@@ -193,7 +195,18 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/x86/ -e s/x86_64/x86/ \
 # ARCH can be set during invocation of make:
 # make ARCH=ia64
 # Another way is to have ARCH set in the environment.
-# The default ARCH is the host where make is executed.
+# If CONFIG_DEFAULT_ARCH is in .config its value is used as default ARCH,
+# otherwise the host where make is executed.
+
+ifndef ARCH
+	ARCH := $(shell test -e $(KBUILD_OUTPUT)$(KCONFIG_CONFIG) && \
+			$(srctree)/scripts/config \
+			--file $(KBUILD_OUTPUT)$(KCONFIG_CONFIG) \
+			--state "DEFAULT_ARCH")
+ifeq ($(filter-out undef,$(ARCH)),)
+	ARCH := $(SUBARCH)
+endif
+endif
 
 # CROSS_COMPILE specify the prefix used for all executables used
 # during compilation. Only gcc and related bin-utils executables
@@ -205,7 +218,6 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/x86/ -e s/x86_64/x86/ \
 # "make" in the configured kernel build directory always uses that.
 # Default value for CROSS_COMPILE is not to prefix executables
 # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
-ARCH		?= $(SUBARCH)
 CROSS_COMPILE	?= $(CONFIG_CROSS_COMPILE:"%"=%)
 
 # Architecture as present in compile.h
@@ -244,9 +256,6 @@ endif
 # Where to locate arch specific headers
 hdr-arch  := $(SRCARCH)
 
-KCONFIG_CONFIG	?= .config
-export KCONFIG_CONFIG
-
 # SHELL used by kbuild
 CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
 	  else if [ -x /bin/bash ]; then echo /bin/bash; \
diff --git a/init/Kconfig b/init/Kconfig
index 9d76b99..3d58cb7 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -2,6 +2,10 @@ config ARCH
 	string
 	option env="ARCH"
 
+config DEFAULT_ARCH
+	string
+	default ARCH
+
 config KERNELVERSION
 	string
 	option env="KERNELVERSION"




More information about the linux-arm-kernel mailing list