Hi Lior, On 08.06.23 13:13, Lior Weintraub wrote: > Hi Ahmad, > > Sorry for the confusion. My bad. > I used export ARCH=arm64 and that is probably the reason for the warnings I got when I run "make stm32mp_defconfig". > If I change to ARCH=arm, this command works well but then fail on "make" with the following errors: > CREATE include/config.h > CC arch/arm/lib/asm-offsets.s > aarch64-none-elf-gcc: error: unrecognized argument in option '-mabi=aapcs-linux' > aarch64-none-elf-gcc: note: valid arguments to '-mabi=' are: ilp32 lp64 > aarch64-none-elf-gcc: error: unrecognized command-line option '-msoft-float' > aarch64-none-elf-gcc: error: unrecognized command-line option '-mthumb' > aarch64-none-elf-gcc: error: unrecognized command-line option '-mno-unaligned-access' > > (using latest "next" branch with commit ID fdcc6754c0d0d7359b60e00e15921316b71764da) The STM32MP1 are 32-bit ARM SoCs. If you want to build that config you need a 32-bit toolchain in CROSS_COMPILE. > Again, I apologize for my lack of experience. > When I try to run "make zynqmp_defconfig" and "make" it is working OK. ZynqMP are 64-bit ARM SoCs, so this is expected. > The only reason I tried using stm32mp in the first place was just because I thought it is more popular and should compile correctly. Unlike Linux, ARCH=arm64 is just an alias for ARCH=arm in barebox. The only thing that determines whether barebox should target ARMv4,5,6,7 or 8 is what boards are enabled, so if you have no board enabled, there's not much one can do, besides print an error message. Cheers, Ahmad > > Please ignore the "depends on HAVE_ARCH_STM32MP157". > It was only my attempt to introduce an error on Kbuild file. > > Cheers, > Lior. > >> -----Original Message----- >> From: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> >> Sent: Thursday, June 8, 2023 12:18 PM >> To: Lior Weintraub <liorw@xxxxxxxxxx>; barebox@xxxxxxxxxxxxxxxxxxx >> Cc: Ulrich Ölmann <u.oelmann@xxxxxxxxxxxxxx>; Sascha Hauer >> <sha@xxxxxxxxxxxxxx> >> Subject: Re: [PATCH 2/2] ARM: don't assume 32-bit when no boards are >> selected >> >> CAUTION: External Sender >> >> On 08.06.23 10:59, Lior Weintraub wrote: >>> Hi Ahmad, >>> >>> I think that replacing Kconfig with .config on the error message will not help >> either. >>> Maybe Kconfig is a good name because it suggest that the issue is there but >> again, not so helpful because it doesn't point to the Kconfig file and line that >> brock the configuration. >> >> There is no single line that broke the configuration. The user is supposed >> to take an existing defconfig and manipulate that. If they write their >> own defconfig that doesn't enable any CPUs, then they get an error message >> that they enabled no CPUs instead of random compiler errors. >> >>> As I said, I have no prior experience with Kbuild so it could be out of scope >> for the barebox project. >> >> Changing the error message to something more useful is definitely in-scope. >> Suggestions are welcome. >> >>> The patch I gave below just add this wrong line ("depends on >> HAVE_ARCH_STM32MP157") into arch/arm/mach-stm32mp/Kconfig >>> Then you can run: >>> "make stm32mp_defconfig" and see the strange warnings (which again >> doesn't help to pin point what is wrong with the Kconfig file). >>> Once you build with "make" you will see the new error ("#error No >> boards/CPUs selected in Kconfig"). >> >> There's no HAVE_ARCH_STM32MP157 symbol defined with barebox. >> (Symbols are defined e.g. with >> config HAVE_ARCH_STM32MP157 >> bool >> ). >> >> I don't think we can protect ourselves against arbitrary >> modification of the Kconfig files. Most users just take >> a defconfig and customize it with menuconfig. >> >> In the past, developers had a bit harder time, but we have >> multi_v8_defconfig and multi_v7_defconfig, which can be used >> for new architectures as well (assuming the Kconfig of the >> new architecture opts in into CONFIG_ARCH_MULTIARCH). >> >>> After reverting the wrong Kconfig line, I tried to run "make mrproper" but >> this didn't help. >>> I was still getting the same warning when I run "make stm32mp_defconfig" >> and the same error when I run "make". >> >> I can't reproduce this. Even if you change arch/arm/mach-stm32mp/Kconfig >> as >> described, you will still have other STM32MP1 boards that enable CPUs. >> >> Cheers, >> Ahmad >> >>> >>> Hope this helps, >>> Cheers, >>> Lior. >>> >>>> -----Original Message----- >>>> From: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> >>>> Sent: Thursday, June 8, 2023 11:47 AM >>>> To: Lior Weintraub <liorw@xxxxxxxxxx>; barebox@xxxxxxxxxxxxxxxxxxx >>>> Cc: Ulrich Ölmann <u.oelmann@xxxxxxxxxxxxxx>; Sascha Hauer >>>> <sha@xxxxxxxxxxxxxx> >>>> Subject: Re: [PATCH 2/2] ARM: don't assume 32-bit when no boards are >>>> selected >>>> >>>> CAUTION: External Sender >>>> >>>> Hello Lior, >>>> >>>> On 08.06.23 10:20, Lior Weintraub wrote: >>>>> 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" :-). >>>> >>>> Ye, Sascha was fast :-) >>>> >>>>> 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. >>>> >>>> How would you rephrase it to be more useful? Replace `Kconfig' with >> `.config'? >>>> >>>>> 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. >>>> >>>> What defconfig do you source after applying the patch and >>>> what commands do you run? >>>> >>>>> >>>>> 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. >>>> >>>> make clean intentionally doesn't wipe the configuration, only the build >>>> artifacts. >>>> >>>>> I assume there is something left from previous build that is not cleaned >>>> correctly. >>>> >>>> If you want to source a defconfig, use >>>> >>>> make my_platforms_defconfig >>>> >>>> If you want to delete everything, use >>>> >>>> make mrproper >>>> >>>> Same applies to other Kbuild projects. >>>> >>>>> >>>>> Cheers, >>>>> Lior. >>>>> >>>>> >>>>>> -----Original Message----- >>>>>> From: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> >>>>>> Sent: Wednesday, June 7, 2023 6:32 PM >>>>>> To: barebox@xxxxxxxxxxxxxxxxxxx >>>>>> Cc: Lior Weintraub <liorw@xxxxxxxxxx>; Ulrich Ölmann >>>>>> <u.oelmann@xxxxxxxxxxxxxx>; Ahmad Fatoum >>>> <a.fatoum@xxxxxxxxxxxxxx> >>>>>> 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@xxxxxxxxxx> >>>>>> Reported-by: Ulrich Ölmann <u.oelmann@xxxxxxxxxxxxxx> >>>>>> Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> >>>>>> --- >>>>>> 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 >>>>> >>>> >>>> -- >>>> Pengutronix e.K. | | >>>> Steuerwalder Str. 21 | http://www.pengutronix.de/ | >>>> 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | >>>> Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | >>> >> >> -- >> Pengutronix e.K. | | >> Steuerwalder Str. 21 | http://www.pengutronix.de/ | >> 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | >> Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | > -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |