Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 57554334 authored by Sam Ravnborg's avatar Sam Ravnborg
Browse files

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: default avatarSam Ravnborg <sam@ravnborg.org>
Cc: Roland McGrath <roland@redhat.com>
parent caa27b66
Loading
Loading
Loading
Loading
+44 −2
Original line number Diff line number Diff line
@@ -179,9 +179,46 @@ 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 kernel.* files
# 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 kernel.* files.
# Restore these settings and check that user did not specify
# conflicting values.

saved_arch  := $(shell cat include/generated/kernel.arch  2> /dev/null)
saved_cross := $(shell cat include/generated/kernel.cross 2> /dev/null)

ifneq ($(CROSS_COMPILE),)
        ifneq ($(saved_cross),)
                ifneq ($(CROSS_COMPILE),$(saved_cross))
                        $(error CROSS_COMPILE changed from \
                                "$(saved_cross)" to \
                                 to "$(CROSS_COMPILE)". \
                                 Use "make mrproper" to fix it up)
                endif
        endif
else
    CROSS_COMPILE := $(saved_cross)
endif

ifneq ($(ARCH),)
        ifneq ($(saved_arch),)
                ifneq ($(saved_arch),$(ARCH))
                        $(error ARCH changed from \
                                "$(saved_arch)" to "$(ARCH)". \
                                 Use "make mrproper" to fix it up)
                endif
        endif
else
        ifneq ($(saved_arch),)
                ARCH := $(saved_arch)
        else
                ARCH := $(SUBARCH)
        endif
endif

# Architecture as present in compile.h
UTS_MACHINE 	:= $(ARCH)
@@ -446,6 +483,11 @@ ifeq ($(config-targets),1)
include $(srctree)/arch/$(SRCARCH)/Makefile
export KBUILD_DEFCONFIG KBUILD_KCONFIG

# save ARCH & CROSS_COMPILE settings
$(shell mkdir -p include/generated &&                            \
        echo $(ARCH)          > include/generated/kernel.arch && \
        echo $(CROSS_COMPILE) > include/generated/kernel.cross)

config: scripts_basic outputmakefile FORCE
	$(Q)mkdir -p include/linux include/config
	$(Q)$(MAKE) $(build)=scripts/kconfig $@