mirror of
https://git.yoctoproject.org/poky
synced 2026-02-06 00:38:45 +01:00
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 [9dffb52738]
(From OE-Core rev: a48e3612b5dc0e58a89f88a914365e926101c90b)
Signed-off-by: Yash Shinde <Yash.Shinde@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
128 lines
5.0 KiB
Diff
128 lines
5.0 KiB
Diff
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> {
|