Commit 575543347b5baed0ca927cb90ba8807396fe9cc9
1 parent
caa27b66bd
Exists in
master
and in
7 other branches
kbuild: save ARCH & CROSS_COMPILE when building a kernel
When building a kernel for a different architecture kbuild requires the user always to specify ARCH and CROSS_COMPILE on the command-line. We use the asm symlink to detect if user forgets to specify the correct ARCH value - but that symlink is about to die. And we do now want to loose this check. This patch save the settings of ARCH and CROSS_COMPILE in two files named: include/generated/kernel.arch include/generated/kernel.cross The settings are saved during "make *config" time and always read. If user try to change the settings we error out. This works both for plain builds and for O=... builds. So now you can do: $ mkdir sparc64 $ make O=sparc64 ARCH=sparc64 CROSS_COMPILE=sparc64-linux- defconfig $ cd sparc64 $ make Notice that you no longer need to tell kbuild the settings of ARCH and CROSS_COMPILE when you type make in the output directory. Likewise for plain builds where you do not use O=... Signed-off-by: Sam Ravnborg <sam@ravnborg.org> Cc: Roland McGrath <roland@redhat.com>
Showing 1 changed file with 44 additions and 2 deletions Side-by-side Diff
Makefile
... | ... | @@ -179,10 +179,47 @@ |
179 | 179 | # Alternatively CROSS_COMPILE can be set in the environment. |
180 | 180 | # Default value for CROSS_COMPILE is not to prefix executables |
181 | 181 | # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile |
182 | +# | |
183 | +# To force ARCH and CROSS_COMPILE settings include kernel.* files | |
184 | +# in the kernel tree - do not patch this file. | |
182 | 185 | export KBUILD_BUILDHOST := $(SUBARCH) |
183 | -ARCH ?= $(SUBARCH) | |
184 | -CROSS_COMPILE ?= | |
185 | 186 | |
187 | +# Kbuild save the ARCH and CROSS_COMPILE setting in kernel.* files. | |
188 | +# Restore these settings and check that user did not specify | |
189 | +# conflicting values. | |
190 | + | |
191 | +saved_arch := $(shell cat include/generated/kernel.arch 2> /dev/null) | |
192 | +saved_cross := $(shell cat include/generated/kernel.cross 2> /dev/null) | |
193 | + | |
194 | +ifneq ($(CROSS_COMPILE),) | |
195 | + ifneq ($(saved_cross),) | |
196 | + ifneq ($(CROSS_COMPILE),$(saved_cross)) | |
197 | + $(error CROSS_COMPILE changed from \ | |
198 | + "$(saved_cross)" to \ | |
199 | + to "$(CROSS_COMPILE)". \ | |
200 | + Use "make mrproper" to fix it up) | |
201 | + endif | |
202 | + endif | |
203 | +else | |
204 | + CROSS_COMPILE := $(saved_cross) | |
205 | +endif | |
206 | + | |
207 | +ifneq ($(ARCH),) | |
208 | + ifneq ($(saved_arch),) | |
209 | + ifneq ($(saved_arch),$(ARCH)) | |
210 | + $(error ARCH changed from \ | |
211 | + "$(saved_arch)" to "$(ARCH)". \ | |
212 | + Use "make mrproper" to fix it up) | |
213 | + endif | |
214 | + endif | |
215 | +else | |
216 | + ifneq ($(saved_arch),) | |
217 | + ARCH := $(saved_arch) | |
218 | + else | |
219 | + ARCH := $(SUBARCH) | |
220 | + endif | |
221 | +endif | |
222 | + | |
186 | 223 | # Architecture as present in compile.h |
187 | 224 | UTS_MACHINE := $(ARCH) |
188 | 225 | SRCARCH := $(ARCH) |
... | ... | @@ -445,6 +482,11 @@ |
445 | 482 | # used for 'make defconfig' |
446 | 483 | include $(srctree)/arch/$(SRCARCH)/Makefile |
447 | 484 | export KBUILD_DEFCONFIG KBUILD_KCONFIG |
485 | + | |
486 | +# save ARCH & CROSS_COMPILE settings | |
487 | +$(shell mkdir -p include/generated && \ | |
488 | + echo $(ARCH) > include/generated/kernel.arch && \ | |
489 | + echo $(CROSS_COMPILE) > include/generated/kernel.cross) | |
448 | 490 | |
449 | 491 | config: scripts_basic outputmakefile FORCE |
450 | 492 | $(Q)mkdir -p include/linux include/config |