Message ID | 20210411135532.219797-1-masahiroy@kernel.org |
---|---|
State | New |
Headers | show |
Series | kbuild: use ?= to assign CROSS_COMPILE by arch-Makefile | expand |
Hi Yamada-san, On Sun, Apr 11, 2021 at 3:56 PM Masahiro Yamada <masahiroy@kernel.org> wrote: > Use ?= operator to let arch/*/Makefile to assign CROSS_COMPILE only > when CROSS_COMPILE is undefined. > > This allows arch-Makefiles to drop the ifeq ($(CROSS_COMPILE),) > conditional. > > This slightly changes the behavior; the arch-Makefile previously > overrode CROSS_COMPILE when CROSS_COMPILE has already been made empty > via an environment variable as in 'export CROSS_COMPILE='. > > With this commit, arch-Makefle will respect the user's environment > set-up, which seems to be a more correct behavior. > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Thanks for your patch! > --- > > arch/arc/Makefile | 4 +--- > arch/h8300/Makefile | 4 +--- > arch/m68k/Makefile | 4 +--- > arch/mips/Makefile | 4 +--- > arch/parisc/Makefile | 6 ++---- > arch/sh/Makefile | 4 +--- What about arch/xtensa/Makefile? > --- a/arch/m68k/Makefile > +++ b/arch/m68k/Makefile > @@ -17,10 +17,8 @@ > KBUILD_DEFCONFIG := multi_defconfig > > ifneq ($(SUBARCH),$(ARCH)) > - ifeq ($(CROSS_COMPILE),) > - CROSS_COMPILE := $(call cc-cross-prefix, \ > + CROSS_COMPILE ?= $(call cc-cross-prefix, \ > m68k-linux-gnu- m68k-linux- m68k-unknown-linux-gnu-) > - endif > endif This does not seem to work as expected: my standard build scripts (using "make ARCH=m68k") no longer pick up the cross-compiler, but fall back to the native compiler, thus breaking the build. Gr{oetje,eeting}s, Geert
On Mon, Apr 12, 2021 at 4:44 PM Geert Uytterhoeven <geert@linux-m68k.org> wrote: > > Hi Yamada-san, > > On Sun, Apr 11, 2021 at 3:56 PM Masahiro Yamada <masahiroy@kernel.org> wrote: > > Use ?= operator to let arch/*/Makefile to assign CROSS_COMPILE only > > when CROSS_COMPILE is undefined. > > > > This allows arch-Makefiles to drop the ifeq ($(CROSS_COMPILE),) > > conditional. > > > > This slightly changes the behavior; the arch-Makefile previously > > overrode CROSS_COMPILE when CROSS_COMPILE has already been made empty > > via an environment variable as in 'export CROSS_COMPILE='. > > > > With this commit, arch-Makefle will respect the user's environment > > set-up, which seems to be a more correct behavior. > > > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > > Thanks for your patch! > > > --- > > > > arch/arc/Makefile | 4 +--- > > arch/h8300/Makefile | 4 +--- > > arch/m68k/Makefile | 4 +--- > > arch/mips/Makefile | 4 +--- > > arch/parisc/Makefile | 6 ++---- > > arch/sh/Makefile | 4 +--- > > What about arch/xtensa/Makefile? > > > --- a/arch/m68k/Makefile > > +++ b/arch/m68k/Makefile > > @@ -17,10 +17,8 @@ > > KBUILD_DEFCONFIG := multi_defconfig > > > > ifneq ($(SUBARCH),$(ARCH)) > > - ifeq ($(CROSS_COMPILE),) > > - CROSS_COMPILE := $(call cc-cross-prefix, \ > > + CROSS_COMPILE ?= $(call cc-cross-prefix, \ > > m68k-linux-gnu- m68k-linux- m68k-unknown-linux-gnu-) > > - endif > > endif > > This does not seem to work as expected: my standard build scripts > (using "make ARCH=m68k") no longer pick up the cross-compiler, > but fall back to the native compiler, thus breaking the build. Agh, sorry, this patch does not work because the top Makefile exports CROSS_COMPILE. export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE LD CC Removing CROSS_COMPILE from that makes ?= work, but it would break other parts. Please ignore this patch. > Gr{oetje,eeting}s, > > Geert > > -- > Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org > > In personal conversations with technical people, I call myself a hacker. But > when I'm talking to journalists I just say "programmer" or something like that. > -- Linus Torvalds
On Mon, Apr 12, 2021 at 5:15 PM Masahiro Yamada <masahiroy@kernel.org> wrote: > > On Mon, Apr 12, 2021 at 4:44 PM Geert Uytterhoeven <geert@linux-m68k.org> wrote: > > > > Hi Yamada-san, > > > > On Sun, Apr 11, 2021 at 3:56 PM Masahiro Yamada <masahiroy@kernel.org> wrote: > > > Use ?= operator to let arch/*/Makefile to assign CROSS_COMPILE only > > > when CROSS_COMPILE is undefined. > > > > > > This allows arch-Makefiles to drop the ifeq ($(CROSS_COMPILE),) > > > conditional. > > > > > > This slightly changes the behavior; the arch-Makefile previously > > > overrode CROSS_COMPILE when CROSS_COMPILE has already been made empty > > > via an environment variable as in 'export CROSS_COMPILE='. > > > > > > With this commit, arch-Makefle will respect the user's environment > > > set-up, which seems to be a more correct behavior. > > > > > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > > > > Thanks for your patch! > > > > > --- > > > > > > arch/arc/Makefile | 4 +--- > > > arch/h8300/Makefile | 4 +--- > > > arch/m68k/Makefile | 4 +--- > > > arch/mips/Makefile | 4 +--- > > > arch/parisc/Makefile | 6 ++---- > > > arch/sh/Makefile | 4 +--- > > > > What about arch/xtensa/Makefile? > > > > > --- a/arch/m68k/Makefile > > > +++ b/arch/m68k/Makefile > > > @@ -17,10 +17,8 @@ > > > KBUILD_DEFCONFIG := multi_defconfig > > > > > > ifneq ($(SUBARCH),$(ARCH)) > > > - ifeq ($(CROSS_COMPILE),) > > > - CROSS_COMPILE := $(call cc-cross-prefix, \ > > > + CROSS_COMPILE ?= $(call cc-cross-prefix, \ > > > m68k-linux-gnu- m68k-linux- m68k-unknown-linux-gnu-) > > > - endif > > > endif > > > > This does not seem to work as expected: my standard build scripts > > (using "make ARCH=m68k") no longer pick up the cross-compiler, > > but fall back to the native compiler, thus breaking the build. > > > Agh, sorry, this patch does not work > because the top Makefile exports CROSS_COMPILE. > > export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS > CROSS_COMPILE LD CC > > > > Removing CROSS_COMPILE from that makes ?= work, > but it would break other parts. > > > Please ignore this patch. > > > > > > Gr{oetje,eeting}s, > > > > Geert > > > > -- > > Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org > > > > In personal conversations with technical people, I call myself a hacker. But > > when I'm talking to journalists I just say "programmer" or something like that. > > -- Linus Torvalds > The following will make this patch work, but probably it is better to not do this... diff --git a/Makefile b/Makefile index cc77fd45ca64..26bf482f0d88 100644 --- a/Makefile +++ b/Makefile @@ -506,7 +506,7 @@ KBUILD_LDFLAGS_MODULE := KBUILD_LDFLAGS := CLANG_FLAGS := -export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE LD CC +export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS LD CC export CPP AR NM STRIP OBJCOPY OBJDUMP READELF PAHOLE RESOLVE_BTFIDS LEX YACC AWK INSTALLKERNEL export PERL PYTHON3 CHECK CHECKFLAGS MAKE UTS_MACHINE HOSTCXX export KGZIP KBZIP2 KLZOP LZMA LZ4 XZ ZSTD @@ -681,6 +681,8 @@ export RETPOLINE_VDSO_CFLAGS include arch/$(SRCARCH)/Makefile +export CROSS_COMPILE + ifdef need-config ifdef may-sync-config # Read in dependencies to all Kconfig* files, make sure to run syncconfig if
diff --git a/arch/arc/Makefile b/arch/arc/Makefile index 4392c9c189c4..bd5a9daa3461 100644 --- a/arch/arc/Makefile +++ b/arch/arc/Makefile @@ -5,9 +5,7 @@ KBUILD_DEFCONFIG := haps_hs_smp_defconfig -ifeq ($(CROSS_COMPILE),) -CROSS_COMPILE := $(call cc-cross-prefix, arc-linux- arceb-linux-) -endif +CROSS_COMPILE ?= $(call cc-cross-prefix, arc-linux- arceb-linux-) cflags-y += -fno-common -pipe -fno-builtin -mmedium-calls -D__linux__ diff --git a/arch/h8300/Makefile b/arch/h8300/Makefile index ba0f26cfad61..d6e466dbfc00 100644 --- a/arch/h8300/Makefile +++ b/arch/h8300/Makefile @@ -26,9 +26,7 @@ KBUILD_LDFLAGS += $(ldflags-y) CHECKFLAGS += -msize-long -ifeq ($(CROSS_COMPILE),) -CROSS_COMPILE := $(call cc-cross-prefix, h8300-unknown-linux- h8300-linux-) -endif +CROSS_COMPILE ?= $(call cc-cross-prefix, h8300-unknown-linux- h8300-linux-) core-y += arch/$(ARCH)/kernel/ arch/$(ARCH)/mm/ core-y += arch/$(ARCH)/boot/dts/ diff --git a/arch/m68k/Makefile b/arch/m68k/Makefile index ea14f2046fb4..79208ad7a355 100644 --- a/arch/m68k/Makefile +++ b/arch/m68k/Makefile @@ -17,10 +17,8 @@ KBUILD_DEFCONFIG := multi_defconfig ifneq ($(SUBARCH),$(ARCH)) - ifeq ($(CROSS_COMPILE),) - CROSS_COMPILE := $(call cc-cross-prefix, \ + CROSS_COMPILE ?= $(call cc-cross-prefix, \ m68k-linux-gnu- m68k-linux- m68k-unknown-linux-gnu-) - endif endif # diff --git a/arch/mips/Makefile b/arch/mips/Makefile index e71d587af49c..75e4e46532a4 100644 --- a/arch/mips/Makefile +++ b/arch/mips/Makefile @@ -51,9 +51,7 @@ UTS_MACHINE := mips64 endif ifneq ($(SUBARCH),$(ARCH)) - ifeq ($(CROSS_COMPILE),) - CROSS_COMPILE := $(call cc-cross-prefix, $(tool-archpref)-linux- $(tool-archpref)-linux-gnu- $(tool-archpref)-unknown-linux-gnu-) - endif + CROSS_COMPILE ?= $(call cc-cross-prefix, $(tool-archpref)-linux- $(tool-archpref)-linux-gnu- $(tool-archpref)-unknown-linux-gnu-) endif ifdef CONFIG_FUNCTION_GRAPH_TRACER diff --git a/arch/parisc/Makefile b/arch/parisc/Makefile index 7d9f71aa829a..62272cb3513c 100644 --- a/arch/parisc/Makefile +++ b/arch/parisc/Makefile @@ -42,12 +42,10 @@ endif export LD_BFD ifneq ($(SUBARCH),$(UTS_MACHINE)) - ifeq ($(CROSS_COMPILE),) - CC_SUFFIXES = linux linux-gnu unknown-linux-gnu - CROSS_COMPILE := $(call cc-cross-prefix, \ + CC_SUFFIXES = linux linux-gnu unknown-linux-gnu + CROSS_COMPILE ?= $(call cc-cross-prefix, \ $(foreach a,$(CC_ARCHES), \ $(foreach s,$(CC_SUFFIXES),$(a)-$(s)-))) - endif endif ifdef CONFIG_DYNAMIC_FTRACE diff --git a/arch/sh/Makefile b/arch/sh/Makefile index 3bcbf52fb30e..0e8277be362e 100644 --- a/arch/sh/Makefile +++ b/arch/sh/Makefile @@ -10,9 +10,7 @@ # for more details. # ifneq ($(SUBARCH),$(ARCH)) - ifeq ($(CROSS_COMPILE),) - CROSS_COMPILE := $(call cc-cross-prefix, sh-linux- sh-linux-gnu- sh-unknown-linux-gnu-) - endif + CROSS_COMPILE ?= $(call cc-cross-prefix, sh-linux- sh-linux-gnu- sh-unknown-linux-gnu-) endif KBUILD_DEFCONFIG := shx3_defconfig
Use ?= operator to let arch/*/Makefile to assign CROSS_COMPILE only when CROSS_COMPILE is undefined. This allows arch-Makefiles to drop the ifeq ($(CROSS_COMPILE),) conditional. This slightly changes the behavior; the arch-Makefile previously overrode CROSS_COMPILE when CROSS_COMPILE has already been made empty via an environment variable as in 'export CROSS_COMPILE='. With this commit, arch-Makefle will respect the user's environment set-up, which seems to be a more correct behavior. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> --- arch/arc/Makefile | 4 +--- arch/h8300/Makefile | 4 +--- arch/m68k/Makefile | 4 +--- arch/mips/Makefile | 4 +--- arch/parisc/Makefile | 6 ++---- arch/sh/Makefile | 4 +--- 6 files changed, 7 insertions(+), 19 deletions(-)