new file mode 100644
@@ -0,0 +1,127 @@
+rust: Fix BOOTSTRAP_CARGO failure during Rust Oe-selftest
+
+BOOTSTRAP_CARGO command fails due to codegen flags like `-Cpanic` were
+prevented from being reflected in the current target configuration which
+leads to Rust build(rust version 1.70) failure in Oe-selftest.
+
+Upstream-Status: Backport [https://github.com/rust-lang/rust/commit/9dffb52738e0b2ccd15af36d4607a709b21e020c]
+
+Signed-off-by: Yash Shinde <yashinde145@gmail.com>
+---
+diff --git a/src/tools/compiletest/src/common.rs b/src/tools/compiletest/src/common.rs
+--- a/src/tools/compiletest/src/common.rs
++++ b/src/tools/compiletest/src/common.rs
+@@ -431,7 +431,6 @@
+ .unwrap()
+ };
+
+- let mut current = None;
+ let mut all_targets = HashSet::new();
+ let mut all_archs = HashSet::new();
+ let mut all_oses = HashSet::new();
+@@ -452,14 +451,11 @@
+ }
+ all_pointer_widths.insert(format!("{}bit", cfg.pointer_width));
+
+- if target == config.target {
+- current = Some(cfg);
+- }
+ all_targets.insert(target.into());
+ }
+
+ Self {
+- current: current.expect("current target not found"),
++ current: Self::get_current_target_config(config),
+ all_targets,
+ all_archs,
+ all_oses,
+@@ -471,6 +467,89 @@
+ }
+ }
+
++ fn get_current_target_config(config: &Config) -> TargetCfg {
++ let mut arch = None;
++ let mut os = None;
++ let mut env = None;
++ let mut abi = None;
++ let mut families = Vec::new();
++ let mut pointer_width = None;
++ let mut endian = None;
++ let mut panic = None;
++
++ for config in
++ rustc_output(config, &["--print=cfg", "--target", &config.target]).trim().lines()
++ {
++ let (name, value) = config
++ .split_once("=\"")
++ .map(|(name, value)| {
++ (
++ name,
++ Some(
++ value
++ .strip_suffix("\"")
++ .expect("key-value pair should be properly quoted"),
++ ),
++ )
++ })
++ .unwrap_or_else(|| (config, None));
++
++ match name {
++ "target_arch" => {
++ arch = Some(value.expect("target_arch should be a key-value pair").to_string());
++ }
++ "target_os" => {
++ os = Some(value.expect("target_os sould be a key-value pair").to_string());
++ }
++ "target_env" => {
++ env = Some(value.expect("target_env should be a key-value pair").to_string());
++ }
++ "target_abi" => {
++ abi = Some(value.expect("target_abi should be a key-value pair").to_string());
++ }
++ "target_family" => {
++ families
++ .push(value.expect("target_family should be a key-value pair").to_string());
++ }
++ "target_pointer_width" => {
++ pointer_width = Some(
++ value
++ .expect("target_pointer_width should be a key-value pair")
++ .parse::<u32>()
++ .expect("target_pointer_width should be a valid u32"),
++ );
++ }
++ "target_endian" => {
++ endian = Some(match value.expect("target_endian should be a key-value pair") {
++ "big" => Endian::Big,
++ "little" => Endian::Little,
++ _ => panic!("target_endian should be either 'big' or 'little'"),
++ });
++ }
++ "panic" => {
++ panic = Some(match value.expect("panic should be a key-value pair") {
++ "abort" => PanicStrategy::Abort,
++ "unwind" => PanicStrategy::Unwind,
++ _ => panic!("panic should be either 'abort' or 'unwind'"),
++ });
++ }
++ _ => (),
++ }
++ }
++
++ TargetCfg {
++ arch: arch.expect("target configuration should specify target_arch"),
++ os: os.expect("target configuration should specify target_os"),
++ env: env.expect("target configuration should specify target_env"),
++ abi: abi.expect("target configuration should specify target_abi"),
++ families,
++ pointer_width: pointer_width
++ .expect("target configuration should specify target_pointer_width"),
++ endian: endian.expect("target configuration should specify target_endian"),
++ panic: panic.expect("target configuration should specify panic"),
++ }
++ }
++
+ // #[cfg(bootstrap)]
+ // Needed only for one cycle, remove during the bootstrap bump.
+ fn collect_all_slow(config: &Config) -> HashMap<String, TargetCfg> {
@@ -7,6 +7,7 @@ SRC_URI += "https://static.rust-lang.org/dist/rustc-${RUST_VERSION}-src.tar.xz;n
file://zlib-off64_t.patch;patchdir=${RUSTSRC} \
file://0001-musl-Define-SOCK_SEQPACKET-in-common-place.patch;patchdir=${RUSTSRC} \
file://rust-oe-selftest.patch;patchdir=${RUSTSRC} \
+ file://bootstrap_fail.patch;patchdir=${RUSTSRC} \
"
SRC_URI[rust.sha256sum] = "bb8e9c564566b2d3228d95de9063a9254182446a161353f1d843bfbaf5c34639"
BOOTSTRAP_CARGO command fails due to codegen flags like `-Cpanic` were prevented from being reflected in the current target configuration which leads to Rust build(rust version 1.70) failure in Oe-selftest. Upstream-Status: Backport [https://github.com/rust-lang/rust/commit/9dffb52738e0b2ccd15af36d4607a709b21e020c] Signed-off-by: Yash Shinde <Yash.Shinde@windriver.com> --- .../rust/files/bootstrap_fail.patch | 127 ++++++++++++++++++ meta/recipes-devtools/rust/rust-source.inc | 1 + 2 files changed, 128 insertions(+) create mode 100644 meta/recipes-devtools/rust/files/bootstrap_fail.patch