diff mbox series

kernel-yocto-rust: add clang toolchain check and lld dependency for riscv64

Message ID 20260715140251.209123-1-Harish.Sadineni@windriver.com
State New
Headers show
Series kernel-yocto-rust: add clang toolchain check and lld dependency for riscv64 | expand

Commit Message

Harish Sadineni July 15, 2026, 2:02 p.m. UTC
From: Harish Sadineni <Harish.Sadineni@windriver.com>

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 <Harish.Sadineni@windriver.com>
---
 meta/classes-recipe/kernel-yocto-rust.bbclass | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
diff mbox series

Patch

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'))
+}
+
+# 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"