Comments
Patch
@@ -179,9 +179,36 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
# Alternatively CROSS_COMPILE can be set in the environment.
# Default value for CROSS_COMPILE is not to prefix executables
# Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
+#
+# To force ARCH and CROSS_COMPILE settings include .kbuild
+# in the kernel tree - do not patch this file.
export KBUILD_BUILDHOST := $(SUBARCH)
-ARCH ?= $(SUBARCH)
-CROSS_COMPILE ?=
+
+# Kbuild save the ARCH and CROSS_COMPILE setting in .kbuild
+# Restore these settings and check that user did not specify
+# conflicting values.
+ifneq ($(wildcard .kbuild),)
+ -include .kbuild
+ ifneq ($(CROSS_COMPILE),)
+ ifneq ($(CROSS_COMPILE),$(KBUILD_CROSS_COMPILE))
+ $(error CROSS_COMPILE changed from \
+ "$(KBUILD_CROSS_COMPILE)" to \
+ to "$(CROSS_COMPILE)". \
+ Use "make mrproper" to fix it up)
+ endif
+ endif
+ ifneq ($(ARCH),)
+ ifneq ($(KBUILD_ARCH),$(ARCH))
+ $(error ARCH changed from \
+ "$(KBUILD_ARCH)" to "$(ARCH)". \
+ Use "make mrproper" to fix it up)
+ endif
+ endif
+ CROSS_COMPILE := $(KBUILD_CROSS_COMPILE)
+ ARCH := $(KBUILD_ARCH)
+else
+ ARCH ?= $(SUBARCH)
+endif
# Architecture as present in compile.h
UTS_MACHINE := $(ARCH)
@@ -446,6 +473,10 @@ ifeq ($(config-targets),1)
include $(srctree)/arch/$(SRCARCH)/Makefile
export KBUILD_DEFCONFIG KBUILD_KCONFIG
+# save ARCH & CROSS_COMPILE settings
+$(shell (echo KBUILD_ARCH := $(ARCH) && \
+ echo KBUILD_CROSS_COMPILE := $(CROSS_COMPILE)) > .kbuild)
+
config: scripts_basic outputmakefile FORCE
$(Q)mkdir -p include/linux include/config
$(Q)$(MAKE) $(build)=scripts/kconfig $@
@@ -1197,6 +1228,7 @@ CLEAN_FILES += vmlinux System.map \
# Directories & files removed with 'make mrproper'
MRPROPER_DIRS += include/config include2 usr/include include/generated
MRPROPER_FILES += .config .config.old include/asm .version .old_version \
+ .kbuild \
include/linux/autoconf.h include/linux/version.h \
include/linux/utsrelease.h \
include/linux/bounds.h include/asm*/asm-offsets.h \