[PATCH v2] kbuild: Avoid including architecture-specific Makefile twice

Tom Rini trini at konsulko.com
Fri Jul 11 16:32:11 CEST 2025


On Fri, Jul 11, 2025 at 08:52:34AM +0000, Yao Zi wrote:

> Stranges errors are observed when building U-Boot master for almost any
> RISC-V board, the messages are in two types, one is about duplicated
> symbols,
> 
> 	u-boot/arch/riscv/cpu//mtrap.S:32: multiple definition of `trap_entry';
> 	arch/riscv/cpu/mtrap.o: u-boot/arch/riscv/cpu//mtrap.S:32: first defined here
> 
> and the other is fixdep's complaint about missing dependency files,
> 
> 	fixdep: error opening file: arch/riscv/cpu/.mtrap.o.d: No such file or directory
> 	fixdep: error opening file: arch/riscv/cpu//.start.o.d: No such file or directory
> 
> where the latter could only be reproduced when building parallelly.
> 
> Both the two types of errors are about files in arch/riscv/cpu, and
> there's a suspicious slash character in the reported path. Looking
> through RISC-V-specific Makefiles, there's only one place that may
> expand to such a path,
> 
> 	libs-y += arch/riscv/cpu/$(CPU)/
> 
> The right hand expands to "arch/riscv/cpu//" if $(CPU) isn't defined at
> the time of including. With some debug statement added to
> arch/riscv/Makefile, the output proves that arch/riscv/Makefile is
> included twice, once with $(CPU) undefined and once defined correctly
> according to CONFIG_SYS_CPU.
> 
> Futher bisecting shows an extra include statement against
> arch/$(SRCARCH)/Makefile is added in earlier bump of Kbuild system. But
> the statement is evaluated before config.mk is included and definition
> of $(CPU), causing objects in arch/riscv/cpu/ are built and linked twice
> (once as "arch/riscv/cpu/*", and once as "arch/riscv/cpu//*"), resulting
> in the error.
> 
> Let's simply remove the extra include to fix these nasty errors. For
> config targets, bumping Kbuild also introduced a new include to
> arch/$(SRCARCH)/Makefile, which is removed as well for consistency.
> 
> Fixes: 5f520875bdf ("kbuild: Bump the build system to 5.1")
> Signed-off-by: Yao Zi <ziyao at disroot.org>
> Reviewed-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
> ---
> 
> Changes from v1
> - Don't describe the problem as RISC-V-specific since it may affect ARM
>   builds as well.
> - Prevent config targets from including for architecture-specific
>   Makefile as well for consistency.
> - Add comments to explain the removal.
> - Link to v1: https://lore.kernel.org/u-boot/20250709161418.21287-2-ziyao@disroot.org/
> 
>  Makefile | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
> 
> diff --git a/Makefile b/Makefile
> index da53efa09f1..e745cc618ba 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -635,8 +635,9 @@ ifeq ($(config-targets),1)
>  # Read arch specific Makefile to set KBUILD_DEFCONFIG as needed.
>  # KBUILD_DEFCONFIG may point out an alternative default configuration
>  # used for 'make defconfig'
> -# Modified for U-Boot
> --include arch/$(SRCARCH)/Makefile
> +# Modified for U-Boot: we don't include arch/$(SRCARCH)/Makefile for config
> +# targets, which is useless since U-Boot has no architecture defining its own
> +# KBUILD_{DEF,K}CONFIG, or CROSS_COMPILE.
>  export KBUILD_DEFCONFIG KBUILD_KCONFIG CC_VERSION_TEXT
>  
>  config: scripts_basic outputmakefile FORCE
> @@ -724,8 +725,10 @@ endif
>  ARCH_CPPFLAGS :=
>  ARCH_AFLAGS :=
>  ARCH_CFLAGS :=
> -# Modified for U-Boot
> --include arch/$(SRCARCH)/Makefile
> +# Modified for U-Boot: we put off the include of arch/$(SRCARCH)/Makefile until
> +# making sure include/config/auto.conf is up-to-date and include of config.mk,
> +# because the architecture-specific Makefile may make use of variables defined
> +# in config.mk. See also the comment about autoconf_is_old.
>  
>  ifeq ($(dot-config),1)
>  ifeq ($(may-sync-config),1)

Since Fabio confirmed this fixes his issue, I'd like one or two more
tested-by's if I can before the end of the day when I'll apply this.
Thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20250711/ea3c5c90/attachment.sig>


More information about the U-Boot mailing list