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

Lior Weintraub liorw at pliops.com
Thu Jun 8 01:20:13 PDT 2023


Hi Ahmad,

Thanks for this fix!
Few comments:
1. I was getting errors when I tried to apply your patch on either "master" or "next" branch but then realized your fix was already merged to "next" :-).
2. Indeed this fix doesn't show the original error we saw but now it shows: "error: #error No boards/CPUs selected in Kconfig". It still doesn't help to find the culprit.
3. During the investigation, I also found another issue which is related to temp\generated build files.

The following patch introduces a mistake in Kconfig file.

diff --git a/arch/arm/mach-stm32mp/Kconfig b/arch/arm/mach-stm32mp/Kconfig
index bc0a48d64c..97b61810d7 100644
--- a/arch/arm/mach-stm32mp/Kconfig
+++ b/arch/arm/mach-stm32mp/Kconfig
@@ -30,6 +30,7 @@ config MACH_LXA_MC1
 	bool "Linux Automation MC-1 board"
 
 config MACH_SEEED_ODYSSEY
+	depends on HAVE_ARCH_STM32MP157
 	select ARCH_STM32MP157
 	bool "Seeed Studio Odyssey"

Now run make stm32mp_defconfig and see:

WARNING: unmet direct dependencies detected for USB_DWC2
  Depends on [n]: USB_HOST [=y] && USB [=y] && HAS_DMA [=n]
  Selected by [y]:
  - USB_DWC2_HOST [=y] && USB_HOST [=y]
  - USB_DWC2_GADGET [=y] && USB_HOST [=y] && USB_GADGET [=y]

WARNING: unmet direct dependencies detected for USB_DWC2
  Depends on [n]: USB_HOST [=y] && USB [=y] && HAS_DMA [=n]
  Selected by [y]:
  - USB_DWC2_HOST [=y] && USB_HOST [=y]
  - USB_DWC2_GADGET [=y] && USB_HOST [=y] && USB_GADGET [=y]

(Not very helpful warnings but then again I have no experience with Kbuild)

Then make -j will produce the error "#error No boards/CPUs selected in Kconfig".
Now even if you revert the change on Kconfig there is no way to fix the build (tried make clean) without getting a new clone into a fresh folder.
I assume there is something left from previous build that is not cleaned correctly.

Cheers,
Lior.


> -----Original Message-----
> From: Ahmad Fatoum <a.fatoum at pengutronix.de>
> Sent: Wednesday, June 7, 2023 6:32 PM
> To: barebox at lists.infradead.org
> Cc: Lior Weintraub <liorw at pliops.com>; Ulrich Ölmann
> <u.oelmann at pengutronix.de>; Ahmad Fatoum <a.fatoum at pengutronix.de>
> Subject: [PATCH 2/2] ARM: don't assume 32-bit when no boards are selected
> 
> CAUTION: External Sender
> 
> 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,)
> -else
> +endif
> +ifeq ($(CONFIG_CPU_32),y)
>  KBUILD_CPPFLAGS        +=$(call cc-option,-marm,)
>  KBUILD_CPPFLAGS        += -msoft-float
>  endif
> @@ -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
> -else
> -KBUILD_CFLAGS += -mstrict-align
>  endif
> -
> -# 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
>  endif
> 
> @@ -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
> -else
> -ifeq ($(CONFIG_AEABI),y)
> -CFLAGS_ABI     :=-mabi=aapcs-linux
> -else
> -CFLAGS_ABI     :=$(call cc-option,-mapcs-32,-mabi=apcs-gnu) $(call cc-
> option,-mno-thumb-interwork,)
> -endif
> -endif
> +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
> -endif
> +CFLAGS_ABI-$(CONFIG_ARM_UNWIND)        +=-funwind-tables
> 
>  ifeq ($(CONFIG_THUMB2_BAREBOX),y)
>  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
>  endif
> 
> +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
> -else
> -KBUILD_CPPFLAGS += $(CFLAGS_ABI) $(arch-y) $(tune-y)
> $(CFLAGS_THUMB2)
> +endif
> +ifeq ($(CONFIG_CPU_32), y)
> +KBUILD_CPPFLAGS += $(CFLAGS_THUMB2)
>  KBUILD_AFLAGS   += -include asm/unified.h -msoft-float $(AFLAGS_THUMB2)
>  export S64_32 = 32
>  export S32 = 32
> --
> 2.39.2



More information about the barebox mailing list