diff mbox series

u-boot: add support for Clang toolchain

Message ID 20260811105603.3447122-1-Harish.Sadineni@windriver.com
State Under Review
Headers show
Series u-boot: add support for Clang toolchain | expand

Commit Message

Harish Sadineni Aug. 11, 2026, 10:56 a.m. UTC
From: Harish Sadineni <Harish.Sadineni@windriver.com>

Fix build issues that occur when the Clang toolchain is selected.

Remove the hard-coded TOOLCHAIN = "gcc" behavior and make the target compiler
selection conditional on TOOLCHAIN. This preserves GCC as the default compiler
while allowing Clang to be selected when TOOLCHAIN = "clang".

YOCTO [#16385]

Signed-off-by: Harish Sadineni <Harish.Sadineni@windriver.com>
---
 meta/recipes-bsp/u-boot/u-boot.inc | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

Comments

Quentin Schulz Aug. 11, 2026, 12:13 p.m. UTC | #1
Hi Harish,

On 8/11/26 12:56 PM, Sadineni, Harish via lists.openembedded.org wrote:
> From: Harish Sadineni <Harish.Sadineni@windriver.com>
> 
> Fix build issues that occur when the Clang toolchain is selected.
> 
> Remove the hard-coded TOOLCHAIN = "gcc" behavior and make the target compiler
> selection conditional on TOOLCHAIN. This preserves GCC as the default compiler
> while allowing Clang to be selected when TOOLCHAIN = "clang".
> 
> YOCTO [#16385]
> 
> Signed-off-by: Harish Sadineni <Harish.Sadineni@windriver.com>
> ---
>   meta/recipes-bsp/u-boot/u-boot.inc | 6 +-----
>   1 file changed, 1 insertion(+), 5 deletions(-)
> 
> diff --git a/meta/recipes-bsp/u-boot/u-boot.inc b/meta/recipes-bsp/u-boot/u-boot.inc
> index 00a12f1bb9..2197039dbc 100644
> --- a/meta/recipes-bsp/u-boot/u-boot.inc
> +++ b/meta/recipes-bsp/u-boot/u-boot.inc
> @@ -3,10 +3,6 @@ PROVIDES = "virtual/bootloader"
>   
>   PACKAGE_ARCH = "${MACHINE_ARCH}"
>   
> -# u-boot is best built with gcc
> -# https://docs.u-boot-project.org/en/latest/build/clang.html
> -TOOLCHAIN = "gcc"
> -
>   DEPENDS += "${@bb.utils.contains('UBOOT_ENV_SUFFIX', 'scr', 'u-boot-mkimage-native', '', d)}"
>   DEPENDS += "${@ 'u-boot-mkenvimage-native' if bb.utils.to_boolean(d.getVar('UBOOT_INITIAL_ENV_BINARY')) else ''}"
>   
> @@ -15,7 +11,7 @@ inherit uboot-config uboot-extlinux-config uboot-sign deploy python3native
>   DEPENDS += "swig-native"
>   
>   EXTRA_OEMAKE = 'CROSS_COMPILE=${TARGET_PREFIX} V=1'
> -EXTRA_OEMAKE += 'CC="${TARGET_PREFIX}gcc ${TOOLCHAIN_OPTIONS} ${DEBUG_PREFIX_MAP}"'
> +EXTRA_OEMAKE += 'CC="${TARGET_PREFIX}${@bb.utils.contains('TOOLCHAIN', 'clang', 'clang', 'gcc', d)} ${TOOLCHAIN_OPTIONS} ${DEBUG_PREFIX_MAP}"'

Why not simply ${TOOLCHAIN}?

Have you checked we can build u-boot-tools, u-boot-tools-native and 
nativesdk-u-boot-tools with clang?

Cheers,
Quentin
Ross Burton Aug. 11, 2026, 12:21 p.m. UTC | #2
On 11 Aug 2026, at 13:13, Quentin Schulz <quentin.schulz@cherry.de> wrote:
> Why not simply ${TOOLCHAIN}?

That would be a big assumption that TOOLCHAIN is also the name of the binary, which fails for any native builds.

But it would also work here…

> Have you checked we can build u-boot-tools, u-boot-tools-native and nativesdk-u-boot-tools with clang?

FWIW, upstream CI exercises the build with clang so it should work.  Our CI will be doing build+boot tests of some clang builds with qemu.

Ross
Quentin Schulz Aug. 11, 2026, 12:32 p.m. UTC | #3
Hi Ross,

On 8/11/26 2:21 PM, Ross Burton wrote:
> On 11 Aug 2026, at 13:13, Quentin Schulz <quentin.schulz@cherry.de> wrote:
>> Why not simply ${TOOLCHAIN}?
> 
> That would be a big assumption that TOOLCHAIN is also the name of the binary, which fails for any native builds.
> 
> But it would also work here…
> 

OK. Let's rather not use anti-patterns whenever we can so people aren't 
tempted to copy this for recipes that can be native/nativesdk too. 
Please ignore my suggestion for TOOLCHAIN.

>> Have you checked we can build u-boot-tools, u-boot-tools-native and nativesdk-u-boot-tools with clang?
> 
> FWIW, upstream CI exercises the build with clang so it should work.  Our CI will be doing build+boot tests of some clang builds with qemu.
> 

 From my shell history when I built Rockchip boards in U-Boot with clang 
a few months ago I had run:

make CROSS_COMPILE="aarch64-linux-gnu-" O=build/puma HOSTCC=clang 
CC=clang puma-rk3399_defconfig

So we need to check HOSTCC is proper and that we really need to add 
${TARGET_PREFIX} in front of gcc/clang in CC.

I thought u-boot-tools includes u-boot.inc but it doesn't, so ignore my 
previous comment (we should however verify at some point we can build 
with either toolchain).

Cheers,
Quentin
diff mbox series

Patch

diff --git a/meta/recipes-bsp/u-boot/u-boot.inc b/meta/recipes-bsp/u-boot/u-boot.inc
index 00a12f1bb9..2197039dbc 100644
--- a/meta/recipes-bsp/u-boot/u-boot.inc
+++ b/meta/recipes-bsp/u-boot/u-boot.inc
@@ -3,10 +3,6 @@  PROVIDES = "virtual/bootloader"
 
 PACKAGE_ARCH = "${MACHINE_ARCH}"
 
-# u-boot is best built with gcc
-# https://docs.u-boot-project.org/en/latest/build/clang.html
-TOOLCHAIN = "gcc"
-
 DEPENDS += "${@bb.utils.contains('UBOOT_ENV_SUFFIX', 'scr', 'u-boot-mkimage-native', '', d)}"
 DEPENDS += "${@ 'u-boot-mkenvimage-native' if bb.utils.to_boolean(d.getVar('UBOOT_INITIAL_ENV_BINARY')) else ''}"
 
@@ -15,7 +11,7 @@  inherit uboot-config uboot-extlinux-config uboot-sign deploy python3native
 DEPENDS += "swig-native"
 
 EXTRA_OEMAKE = 'CROSS_COMPILE=${TARGET_PREFIX} V=1'
-EXTRA_OEMAKE += 'CC="${TARGET_PREFIX}gcc ${TOOLCHAIN_OPTIONS} ${DEBUG_PREFIX_MAP}"'
+EXTRA_OEMAKE += 'CC="${TARGET_PREFIX}${@bb.utils.contains('TOOLCHAIN', 'clang', 'clang', 'gcc', d)} ${TOOLCHAIN_OPTIONS} ${DEBUG_PREFIX_MAP}"'
 EXTRA_OEMAKE += 'HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}"'
 EXTRA_OEMAKE += 'STAGING_INCDIR=${STAGING_INCDIR_NATIVE} STAGING_LIBDIR=${STAGING_LIBDIR_NATIVE}'