[PATCH 2/2] ARM: don't assume 32-bit when no boards are selected

Ahmad Fatoum a.fatoum at pengutronix.de
Wed Jun 7 08:31:52 PDT 2023

barebox build errors are very confusing if no board is selected.
This should have been fixed with commit 14b296d2a7e6 ("arm: error
out if __LINUX_ARM_ARCH__ is undefined"), but unfortunately that's
only true for ARM32. On ARM64, the error message in question
is not printed, because build aborts even earlier, because Kbuild
assumes it should build for 32-bit ARM and thus passes the ARM64
compiler options that it can't understand:

  aarch64-oe-linux-gcc: error: unrecognized argument in option '-mabi=apcs-gnu'
  aarch64-oe-linux-gcc: note: valid arguments to '-mabi=' are: ilp32 lp64
  aarch64-oe-linux-gcc: error: unrecognized command-line option '-msoft-float'
  aarch64-oe-linux-gcc: error: unrecognized command-line option '-mno-unaligned-access'

Let's fix that for ARM64 builds by not assuming !CONFIG_CPU_64 to be 32-bit,
but instead explicitly check that CONFIG_CPU_32 is set before doing
32-bit specific changes.

This ensures we now fail during compilation on both ARM32 and ARM64 if
no boards were selected. We can't fail earlier via $(error ...) as this
would impact use of targets like menuconfig.

Reported-by: Lior Weintraub <liorw at pliops.com>
Reported-by: Ulrich Ölmann <u.oelmann at pengutronix.de>
Signed-off-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
 arch/arm/Makefile | 35 ++++++++++++++---------------------
 1 file changed, 14 insertions(+), 21 deletions(-)

diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 926af7387f7f..337b7e9095fa 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -6,7 +6,8 @@ KBUILD_CPPFLAGS	+= -D__ARM__ -fno-strict-aliasing
 # Explicitly specifiy 32-bit ARM ISA since toolchain default can be -mthumb:
 ifeq ($(CONFIG_CPU_64),y)
 KBUILD_CPPFLAGS	+=$(call cc-option,-maarch64,)
+ifeq ($(CONFIG_CPU_32),y)
 KBUILD_CPPFLAGS	+=$(call cc-option,-marm,)
 KBUILD_CPPFLAGS	+= -msoft-float
@@ -27,14 +28,12 @@ endif
 # at least some of the code would be executed with MMU off, lets be
 # conservative and instruct the compiler not to generate any unaligned
 # accesses
-ifneq ($(CONFIG_CPU_64),y)
+ifeq ($(CONFIG_CPU_32),y)
 KBUILD_CFLAGS += -mno-unaligned-access
-KBUILD_CFLAGS += -mstrict-align
-# Prevent use of floating point and Advanced SIMD registers.
 ifeq ($(CONFIG_CPU_64),y)
+KBUILD_CFLAGS += -mstrict-align
+# Prevent use of floating point and Advanced SIMD registers.
 KBUILD_CFLAGS += -mgeneral-regs-only
@@ -54,19 +53,11 @@ tune-$(CONFIG_CPU_ARM920T)	:=-mtune=arm9tdmi
 tune-$(CONFIG_CPU_ARM926T)	:=-mtune=arm9tdmi
 tune-$(CONFIG_CPU_XSCALE)	:=$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale
-ifeq ($(CONFIG_CPU_64), y)
-CFLAGS_ABI	:=-mabi=lp64
-ifeq ($(CONFIG_AEABI),y)
-CFLAGS_ABI	:=-mabi=aapcs-linux
-CFLAGS_ABI	:=$(call cc-option,-mapcs-32,-mabi=apcs-gnu) $(call cc-option,-mno-thumb-interwork,)
+CFLAGS_ABI-$(CONFIG_CPU_64)	:=-mabi=lp64
+CFLAGS_ABI-$(CONFIG_CPU_32)	:=$(call cc-option,-mapcs-32,-mabi=apcs-gnu) $(call cc-option,-mno-thumb-interwork,)
+CFLAGS_ABI-$(CONFIG_AEABI)	:=-mabi=aapcs-linux
-ifeq ($(CONFIG_ARM_UNWIND),y)
-CFLAGS_ABI	+=-funwind-tables
+CFLAGS_ABI-$(CONFIG_ARM_UNWIND)	+=-funwind-tables
 AFLAGS_AUTOIT	:=$(call as-option,-Wa$(comma)-mimplicit-it=always,-Wa$(comma)-mauto-it)
@@ -75,13 +66,15 @@ CFLAGS_THUMB2	:=-mthumb $(AFLAGS_AUTOIT) $(AFLAGS_NOWARN)
 AFLAGS_THUMB2	:=$(CFLAGS_THUMB2) -Wa$(comma)-mthumb
+KBUILD_CPPFLAGS += $(CFLAGS_ABI-y) $(arch-y) $(tune-y)
 ifeq ($(CONFIG_CPU_64), y)
-KBUILD_CPPFLAGS += $(CFLAGS_ABI) $(arch-y) $(tune-y)
 KBUILD_AFLAGS   += -include asm/unified.h
 export S64_32 = 64
 export S64 = 64
-KBUILD_CPPFLAGS += $(CFLAGS_ABI) $(arch-y) $(tune-y) $(CFLAGS_THUMB2)
+ifeq ($(CONFIG_CPU_32), y)
 KBUILD_AFLAGS   += -include asm/unified.h -msoft-float $(AFLAGS_THUMB2)
 export S64_32 = 32
 export S32 = 32

More information about the barebox mailing list