-----Original Message----- From: [email protected] <[email protected]> On Behalf Of Sadineni, Harish via lists.openembedded.org Sent: Wednesday, July 15, 2026 4:03 PM To: [email protected] Cc: [email protected] Subject: [OE-core] [PATCH] kernel-yocto-rust: add clang toolchain check and lld dependency for riscv64
From: Harish Sadineni <[email protected]> Rust support in the upstream kernel on riscv64 currently only works with the LLVM/Clang toolchain, not gcc [1]. Add a sanity check that fails the build with a clear error message if TOOLCHAIN is not set to "clang" when building a riscv64 kernel with rust support enabled, pointing the user to the required local.conf/recipe override. Also add lld-native as a dependency for riscv64, since lld is required when linking the kernel with clang. [1] https://docs.kernel.org/rust/arch-support.html Signed-off-by: Harish Sadineni <[email protected]> --- meta/classes-recipe/kernel-yocto-rust.bbclass | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/meta/classes-recipe/kernel-yocto-rust.bbclass b/meta/classes-recipe/kernel-yocto-rust.bbclass index 49f2bfc1ae..3f9b2ef6ee 100644 --- a/meta/classes-recipe/kernel-yocto-rust.bbclass +++ b/meta/classes-recipe/kernel-yocto-rust.bbclass @@ -25,3 +25,19 @@ do_kernel_configme:append () { # More details in: https://lists.openembedded.org/g/openembedded-core/message/229336 # Disable ccache for kernel build if kernel rust support is enabled to workaround this. CCACHE_DISABLE ?= "1" + +# Rust support in the kernel on riscv64 only works with the LLVM/Clang +# toolchain, not gcc: +# https://docs.kernel.org/rust/arch-support.html +# +python () { + if d.getVar('TARGET_ARCH') == 'riscv64' and d.getVar('TOOLCHAIN') != 'clang': + bb.fatal("Rust support in the kernel on riscv64 requires the clang toolchain, " \ + "but TOOLCHAIN is set to '%s'. Set TOOLCHAIN:riscv64 = \"clang\" in kernel recipe (or)" \ + "set TOOLCHAIN:pn-linux-yocto = \"clang\" in local.conf to build a riscv64 kernel with rust enabled. "\ + "see https://docs.kernel.org/rust/arch-support.html for details." % d.getVar('TOOLCHAIN')) +} This is not a good idea. It will prevent the layer from being parsed when riscv64 machine is selected and it contains kernel recipe for different machine where rust is enabled. Maybe switch bb.fatal to bbskipRecipe? Or put this to a real qa task, not to anonymous python evaluated at parsing time. Peter + +# lld is required when building the kernel with clang. +DEPENDS:append:riscv64 = " lld-native" +RUST_KERNEL_TASK_DEPENDS:append:riscv64 = " lld-native:do_populate_sysroot" -- 2.51.0
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#240985): https://lists.openembedded.org/g/openembedded-core/message/240985 Mute This Topic: https://lists.openembedded.org/mt/120281263/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
