From ee521bb17cdec4e5295efc18acfdbf26d09cc683 Mon Sep 17 00:00:00 2001 From: Ovidiu Panait Date: Tue, 11 Nov 2025 00:27:10 +0200 Subject: [PATCH] rust-target-config: fix nativesdk-libstd-rs build with baremetal If TCLIBC='baremetal' is set in local.conf, nativesdk-libstd-rs build fails with: | error[E0412]: cannot find type `c_char` in the crate root | --> /usr/src/debug/libstd-rs/1.75.0/rustc-1.75.0-src/vendor/libc/src/unix/mod.rs:56:29 | | | 6 | pub type c_schar = i8; | | ---------------------- similarly named type alias `c_schar` defined here | ... | 56 | pub gr_name: *mut ::c_char, | | ^^^^^^ This happens because rust_gen_target() sets os="none" when TCLIBC is 'baremetal' - even for nativesdk targets. However, nativesdk packages are built against glibc, so the correct 'os' value should be "linux". Fix this by setting the os field based on {TARGET,HOST,BUILD}_OS variables, as it is already done in rust_base_triple(), instead of relying on TCLIBC. (From OE-Core rev: 4c3f321304f2aa8b75cb58699b59fea80a23690c) Signed-off-by: Ovidiu Panait Signed-off-by: Mathieu Dubois-Briand Signed-off-by: Richard Purdie (master rev: 3eaf2cd5647585a1e6df03fc20e2753da27bb692) -- backport Signed-off-by: Stefan Ghinea Signed-off-by: Steve Sakoman --- meta/classes-recipe/rust-target-config.bbclass | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta/classes-recipe/rust-target-config.bbclass b/meta/classes-recipe/rust-target-config.bbclass index 1bd7626bd8..31b4bd9afd 100644 --- a/meta/classes-recipe/rust-target-config.bbclass +++ b/meta/classes-recipe/rust-target-config.bbclass @@ -329,6 +329,7 @@ def rust_gen_target(d, thing, wd, arch): sys = d.getVar('{}_SYS'.format(thing)) prefix = d.getVar('{}_PREFIX'.format(thing)) rustsys = d.getVar('RUST_{}_SYS'.format(thing)) + os = d.getVar('{}_OS'.format(thing)) abi = None cpu = "generic" @@ -368,7 +369,7 @@ def rust_gen_target(d, thing, wd, arch): tspec['target-c-int-width'] = d.getVarFlag('TARGET_C_INT_WIDTH', arch_abi) tspec['target-endian'] = d.getVarFlag('TARGET_ENDIAN', arch_abi) tspec['arch'] = arch_to_rust_target_arch(rust_arch) - if "baremetal" in d.getVar('TCLIBC'): + if "elf" in os: tspec['os'] = "none" else: tspec['os'] = "linux"