mbox series

[v3,0/4] Add Clang toolchain support for kernel builds

Message ID 20260708151816.2115030-1-Harish.Sadineni@windriver.com
Headers show
Series Add Clang toolchain support for kernel builds | expand

Message

Harish Sadineni July 8, 2026, 3:18 p.m. UTC
From: Harish Sadineni <Harish.Sadineni@windriver.com>

v2 -> v3:
- Guard against TOOLCHAIN being unset: use d.getVar('TOOLCHAIN') or ''
  instead of d.getVar('TOOLCHAIN') directly (suggested by Bruce Ashfield).

v1 -> v2:
- TOOLCHAIN:riscv64 now explicitly falls back to "gcc" instead of ""
  when rust is not in KERNEL_FEATURES, avoiding an empty TOOLCHAIN value.

This series adds LLVM/Clang toolchain support for kernel builds, defaulting to GCC 
but enabling Clang automatically for riscv64 when Rust is enabled.

-Convert existing GCC tool definitions (KERNEL_CC, KERNEL_LD, KERNEL_AR, etc.) 
 to use the :toolchain-gcc override, so they only apply when TOOLCHAIN = "gcc"
 the existing default behavior is preserved as a no-op.
-Introduce parallel :toolchain-clang definitions using clang, ld.lld, llvm-ar, llvm-objcopy, 
 and llvm-strip, making it possible to build the kernel with the LLVM/Clang toolchain.
-Automatically select the Clang toolchain for riscv64 kernel builds when Rust support is enabled,
 since upstream kernel Rust support on riscv64 requires LLVM/clang (per https://docs.kernel.org/rust/arch-support.html).
 GCC remains the default everywhere else, including riscv64 without Rust.
-Add lld-native to DEPENDS, since the lld linker is required when building the kernel with Clang.
-Fix a config-check failure under Clang: do_kernel_configcheck was erroring out with 
 kconfiglib.KconfigError: ... Sorry, this assembler is not supported (from scripts/Kconfig.include). 
 Resolved by setting CLANG_FLAGS = "-fintegrated-as" whenever TOOLCHAIN contains "clang" 
 this flag is picked up by the kernel build system during config checks so the assembler test passes.

Harish Sadineni (4):
  kernel-arch: Add clang toolchain support
  kernel-yocto-rust: use clang toolchain for riscv64 when Rust is
    enabled
  kernel-yocto-rust: Add lld-native to DEPENDS
  kernel-yocto: Set CLANG_FLAGS for kernel config checks when using
    clang

 meta/classes-recipe/kernel-arch.bbclass       | 23 +++++++++++++++----
 meta/classes-recipe/kernel-yocto-rust.bbclass |  3 +++
 meta/classes-recipe/kernel-yocto.bbclass      |  3 +++
 meta/recipes-kernel/linux/linux-yocto.inc     |  4 ++++
 4 files changed, 28 insertions(+), 5 deletions(-)