-----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]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to