# Sanity tests which test the users environment so need to run at each build (or are so cheap
# it makes sense to always run them.
- if 0 == os.getuid():
- raise_sanity_error("Do not use Bitbake as root.", d)
+ #if 0 == os.getuid():
+ # raise_sanity_error("Do not use Bitbake as root.", d)
# Check the Python version, we now have a minimum of Python 3.9
import sys
GCCVERSION ?= "15.%"
SDKGCCVERSION ?= "${GCCVERSION}"
GLIBCVERSION ?= "2.42%"
-RUSTVERSION ?= "1.92.0%"
+RUSTVERSION ?= "1.94.0%"
PREFERRED_VERSION_gcc ?= "${GCCVERSION}"
PREFERRED_VERSION_gcc-cross-${TARGET_ARCH} ?= "${GCCVERSION}"
@@ -13,7 +13,7 @@ use clap::ValueEnum;
#[cfg(feature = "tracing")]
use tracing::instrument;
-
+
-pub use self::cargo::{Cargo, cargo_profile_var};
+pub use self::cargo::Cargo;
pub use crate::Compiler;
--- /dev/null
+Upstream-Status: Inappropriate [OE testing specific]
+---
+diff --git a/src/bootstrap/src/core/download.rs b/src/bootstrap/src/core/download.rs
+index da305fb18f..a952026442 100644
+--- a/src/bootstrap/src/core/download.rs
++++ b/src/bootstrap/src/core/download.rs
+@@ -481,17 +481,17 @@ pub(crate) fn is_download_ci_available(target_triple: &str, llvm_assertions: boo
+ }
+ }
+
+-#[cfg(test)]
++#[cfg(not(test))]
+ pub(crate) fn maybe_download_rustfmt<'a>(
+- dwn_ctx: impl AsRef<DownloadContext<'a>>,
+- out: &Path,
++ _dwn_ctx: impl AsRef<DownloadContext<'a>>,
++ _out: &Path,
+ ) -> Option<PathBuf> {
+ Some(PathBuf::new())
+ }
+
+ /// NOTE: rustfmt is a completely different toolchain than the bootstrap compiler, so it can't
+ /// reuse target directories or artifacts
+-#[cfg(not(test))]
++#[cfg(test)]
+ pub(crate) fn maybe_download_rustfmt<'a>(
+ dwn_ctx: impl AsRef<DownloadContext<'a>>,
+ out: &Path,
+diff --git a/src/version b/src/version
+index 55f6ae9..8db4a57 100644
+--- a/src/version
++++ b/src/version
+@@ -1 +1 @@
+-1.95.0
++1.94.0
--- /dev/null
+Upstream-Status: Inappropriate
+
+Signed-off-by: Deepesh Varatharajan <Deepesh.Varatharajan@windriver.com>
+diff --git a/compiler/rustc_driver_impl/src/lib.rs b/compiler/rustc_driver_impl/src/lib.rs
+index 0218020..0ce6c54 100644
+--- a/compiler/rustc_driver_impl/src/lib.rs
++++ b/compiler/rustc_driver_impl/src/lib.rs
+@@ -1136,10 +1136,9 @@ fn get_backend_from_raw_matches(
+ let backend_name = debug_flags
+ .iter()
+ .find_map(|x| x.strip_prefix("codegen-backend=").or(x.strip_prefix("codegen_backend=")));
+- let unstable_options = debug_flags.iter().find(|x| *x == "unstable-options").is_some();
+ let target = parse_target_triple(early_dcx, matches);
+ let sysroot = Sysroot::new(matches.opt_str("sysroot").map(PathBuf::from));
+- let target = config::build_target_config(early_dcx, &target, sysroot.path(), unstable_options);
++ let target = config::build_target_config(early_dcx, &target, sysroot.path());
+
+ get_codegen_backend(early_dcx, &sysroot, backend_name, &target)
+ }
+diff --git a/compiler/rustc_interface/src/interface.rs b/compiler/rustc_interface/src/interface.rs
+index 1e46db1..b2c4a91 100644
+--- a/compiler/rustc_interface/src/interface.rs
++++ b/compiler/rustc_interface/src/interface.rs
+@@ -435,7 +435,6 @@ pub fn run_compiler<R: Send>(config: Config, f: impl FnOnce(&Compiler) -> R + Se
+ &early_dcx,
+ &config.opts.target_triple,
+ config.opts.sysroot.path(),
+- config.opts.unstable_opts.unstable_options,
+ );
+ let file_loader = config.file_loader.unwrap_or_else(|| Box::new(RealFileLoader));
+ let path_mapping = config.opts.file_path_mapping();
+diff --git a/compiler/rustc_interface/src/tests.rs b/compiler/rustc_interface/src/tests.rs
+index 1f6da90..f3b17c0 100644
+--- a/compiler/rustc_interface/src/tests.rs
++++ b/compiler/rustc_interface/src/tests.rs
+@@ -46,7 +46,6 @@ where
+ &early_dcx,
+ &sessopts.target_triple,
+ sessopts.sysroot.path(),
+- sessopts.unstable_opts.unstable_options,
+ );
+ let hash_kind = sessopts.unstable_opts.src_hash_algorithm(&target);
+ let checksum_hash_kind = sessopts.unstable_opts.checksum_hash_algorithm();
+diff --git a/compiler/rustc_session/src/config.rs b/compiler/rustc_session/src/config.rs
+index f8b9ae0..f0dc5b9 100644
+--- a/compiler/rustc_session/src/config.rs
++++ b/compiler/rustc_session/src/config.rs
+@@ -1589,9 +1589,8 @@ pub fn build_target_config(
+ early_dcx: &EarlyDiagCtxt,
+ target: &TargetTuple,
+ sysroot: &Path,
+- unstable_options: bool,
+ ) -> Target {
+- match Target::search(target, sysroot, unstable_options) {
++ match Target::search(target, sysroot) {
+ Ok((target, warnings)) => {
+ for warning in warnings.warning_messages() {
+ early_dcx.early_warn(warning)
+diff --git a/compiler/rustc_session/src/session.rs b/compiler/rustc_session/src/session.rs
+index 1d5b36f..1a0ec60 100644
+--- a/compiler/rustc_session/src/session.rs
++++ b/compiler/rustc_session/src/session.rs
+@@ -1002,11 +1002,8 @@ pub fn build_session(
+ }
+
+ let host_triple = TargetTuple::from_tuple(config::host_tuple());
+- let (host, target_warnings) =
+- Target::search(&host_triple, sopts.sysroot.path(), sopts.unstable_opts.unstable_options)
+- .unwrap_or_else(|e| {
+- dcx.handle().fatal(format!("Error loading host specification: {e}"))
+- });
++ let (host, target_warnings) = Target::search(&host_triple, sopts.sysroot.path())
++ .unwrap_or_else(|e| dcx.handle().fatal(format!("Error loading host specification: {e}")));
+ for warning in target_warnings.warning_messages() {
+ dcx.handle().warn(warning)
+ }
+diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs
+index 8650ec0..57effe3 100644
+--- a/compiler/rustc_target/src/spec/mod.rs
++++ b/compiler/rustc_target/src/spec/mod.rs
+@@ -3296,19 +3296,10 @@ impl Target {
+ pub fn search(
+ target_tuple: &TargetTuple,
+ sysroot: &Path,
+- unstable_options: bool,
+ ) -> Result<(Target, TargetWarnings), String> {
+ use std::{env, fs};
+
+- fn load_file(
+- path: &Path,
+- unstable_options: bool,
+- ) -> Result<(Target, TargetWarnings), String> {
+- if !unstable_options {
+- return Err(
+- "custom targets are unstable and require `-Zunstable-options`".to_string()
+- );
+- }
++ fn load_file(path: &Path) -> Result<(Target, TargetWarnings), String> {
+ let contents = fs::read_to_string(path).map_err(|e| e.to_string())?;
+ Target::from_json(&contents)
+ }
+@@ -3332,7 +3323,7 @@ impl Target {
+ for dir in env::split_paths(&target_path) {
+ let p = dir.join(&path);
+ if p.is_file() {
+- return load_file(&p, unstable_options);
++ return load_file(&p);
+ }
+ }
+
+@@ -3345,7 +3336,7 @@ impl Target {
+ Path::new("target.json"),
+ ]);
+ if p.is_file() {
+- return load_file(&p, unstable_options);
++ return load_file(&p);
+ }
+
+ Err(format!("could not find specification for target {target_tuple:?}"))
+diff --git a/tests/run-make/target-specs/rmake.rs b/tests/run-make/target-specs/rmake.rs
+index 69292af..6d59a3f 100644
+--- a/tests/run-make/target-specs/rmake.rs
++++ b/tests/run-make/target-specs/rmake.rs
+@@ -15,20 +15,11 @@ fn main() {
+ .run_fail()
+ .assert_stderr_contains("error loading target specification");
+ rustc()
+- .arg("-Zunstable-options")
+ .input("foo.rs")
+ .target("my-incomplete-platform.json")
+ .run_fail()
+ .assert_stderr_contains("missing field `llvm-target`");
+- let test_platform = rustc()
+- .input("foo.rs")
+- .target("my-x86_64-unknown-linux-gnu-platform")
+- .crate_type("lib")
+- .emit("asm")
+- .run_fail()
+- .assert_stderr_contains("custom targets are unstable and require `-Zunstable-options`");
+ rustc()
+- .arg("-Zunstable-options")
+ .env("RUST_TARGET_PATH", ".")
+ .input("foo.rs")
+ .target("my-awesome-platform")
+@@ -62,31 +53,27 @@ fn main() {
+ .actual_text("test-platform-2", test_platform_2)
+ .run();
+ rustc()
+- .arg("-Zunstable-options")
+ .input("foo.rs")
+ .target("endianness-mismatch")
+ .run_fail()
+ .assert_stderr_contains(r#""data-layout" claims architecture is little-endian"#);
+ rustc()
+- .arg("-Zunstable-options")
+ .input("foo.rs")
+ .target("mismatching-data-layout")
+ .crate_type("lib")
+ .run_fail()
+ .assert_stderr_contains("data-layout for target");
+ rustc()
+- .arg("-Zunstable-options")
+ .input("foo.rs")
+ .target("require-explicit-cpu")
+ .crate_type("lib")
+ .run_fail()
+ .assert_stderr_contains("target requires explicitly specifying a cpu");
+ rustc()
+- .arg("-Zunstable-options")
+ .input("foo.rs")
+ .target("require-explicit-cpu")
+ .crate_type("lib")
+ .arg("-Ctarget-cpu=generic")
+ .run();
+- rustc().arg("-Zunstable-options").target("require-explicit-cpu").print("target-cpus").run();
++ rustc().target("require-explicit-cpu").arg("--print=target-cpus").run();
+ }
diff --git a/compiler/rustc_errors/src/markdown/tests/term.rs b/compiler/rustc_errors/src/markdown/tests/term.rs
--- a/compiler/rustc_errors/src/markdown/tests/term.rs
+++ b/compiler/rustc_errors/src/markdown/tests/term.rs
-@@ -62,6 +62,7 @@ fn test_wrapping_write() {
+@@ -60,6 +60,7 @@ fn test_wrapping_write() {
}
#[test]
diff --git a/compiler/rustc_interface/src/tests.rs b/compiler/rustc_interface/src/tests.rs
--- a/compiler/rustc_interface/src/tests.rs
+++ b/compiler/rustc_interface/src/tests.rs
-@@ -147,6 +147,7 @@ fn assert_non_crate_hash_different(x: &Options, y: &Options) {
+@@ -146,6 +146,7 @@ fn assert_non_crate_hash_different(x: &Options, y: &Options) {
// When the user supplies --test we should implicitly supply --cfg test
#[test]
fn test_switch_implies_cfg_test() {
sess_and_cfg(&["--test"], |_sess, cfg| {
assert!(cfg.contains(&(sym::test, None)));
-@@ -155,6 +156,7 @@ fn test_switch_implies_cfg_test() {
+@@ -154,6 +155,7 @@ fn test_switch_implies_cfg_test() {
// When the user supplies --test and --cfg test, don't implicitly add another --cfg test
#[test]
fn test_switch_implies_cfg_test_unless_cfg_test() {
sess_and_cfg(&["--test", "--cfg=test"], |_sess, cfg| {
let mut test_items = cfg.iter().filter(|&&(name, _)| name == sym::test);
-@@ -164,6 +166,7 @@ fn test_switch_implies_cfg_test_unless_cfg_test() {
+@@ -163,6 +165,7 @@ fn test_switch_implies_cfg_test_unless_cfg_test() {
}
#[test]
+#[ignore]
fn panic_while_mapping_write_unlocked_poison() {
let lock = RwLock::new(());
-
+
diff --git a/library/test/src/tests.rs b/library/test/src/tests.rs
--- a/library/test/src/tests.rs
+++ b/library/test/src/tests.rs
diff --git a/library/std/tests/sync/mutex.rs b/library/std/tests/sync/mutex.rs
--- a/library/std/tests/sync/mutex.rs
+++ b/library/std/tests/sync/mutex.rs
-@@ -472,6 +472,7 @@
+@@ -440,6 +440,7 @@
#[test]
#[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
fn test_mutex_arc_poison_mapped() {
let arc = Arc::new(Mutex::new(1));
assert!(!arc.is_poisoned());
-@@ -388,6 +389,7 @@
+@@ -456,6 +457,7 @@
#[test]
#[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
fn sparse_inserts() {
let cache: VecCache<u32, u8, u32> = VecCache::default();
let end = if cfg!(target_pointer_width = "64") && cfg!(target_os = "linux") {
-diff --git a/tests/ui/abi/rust-cold-works-with-rustic-args.rs b/tests/ui/abi/rust-cold-works-with-rustic-args.rs
-index 551485469d3..575db924968 100644
---- a/tests/ui/abi/rust-cold-works-with-rustic-args.rs
-+++ b/tests/ui/abi/rust-cold-works-with-rustic-args.rs
-@@ -1,6 +1,7 @@
- //@ add-core-stubs
- //@ build-pass
- //@ compile-flags: -Clink-dead-code=true
+diff --git a/tests/assembly-llvm/dwarf-mixed-versions-lto.rs b/tests/assembly-llvm/dwarf-mixed-versions-lto.rs
+index 828328df843..30753c56c76 100644
+--- a/tests/assembly-llvm/dwarf-mixed-versions-lto.rs
++++ b/tests/assembly-llvm/dwarf-mixed-versions-lto.rs
+@@ -8,6 +8,7 @@
+ //@ compile-flags: -C lto -g -Cdwarf-version=5
+ //@ assembly-output: emit-asm
+ //@ no-prefer-dynamic
++//@ ignore-riscv64
+
+ extern crate dwarf_mixed_versions_lto_aux;
+
+diff --git a/tests/codegen-llvm/const-vector.rs b/tests/codegen-llvm/const-vector.rs
+index f4307492341..617e31140e9 100644
+--- a/tests/codegen-llvm/const-vector.rs
++++ b/tests/codegen-llvm/const-vector.rs
+@@ -3,6 +3,7 @@
+ //@ [OPT0_S390X] only-s390x
+ //@ [OPT0] compile-flags: -C no-prepopulate-passes -Copt-level=0
+ //@ [OPT0_S390X] compile-flags: -C no-prepopulate-passes -Copt-level=0 -C target-cpu=z13
++//@ ignore-riscv64
+
+ // This test checks that constants of SIMD type are passed as immediate vectors.
+ // We ensure that both vector representations (struct with fields and struct wrapping array) work.
+diff --git a/tests/codegen-llvm/enum/enum-aggregate.rs b/tests/codegen-llvm/enum/enum-aggregate.rs
+index 0161e5f3fa1..773a06fabb4 100644
+--- a/tests/codegen-llvm/enum/enum-aggregate.rs
++++ b/tests/codegen-llvm/enum/enum-aggregate.rs
+@@ -1,5 +1,6 @@
+ //@ compile-flags: -Copt-level=0 -Cno-prepopulate-passes
+ //@ only-64bit
++//@ ignore-riscv64
+
+ #![crate_type = "lib"]
+
+diff --git a/tests/codegen-llvm/enum/enum-match.rs b/tests/codegen-llvm/enum/enum-match.rs
+index 57db44ec74e..1e2507f7c90 100644
+--- a/tests/codegen-llvm/enum/enum-match.rs
++++ b/tests/codegen-llvm/enum/enum-match.rs
+@@ -1,5 +1,6 @@
+ //@ compile-flags: -Copt-level=1
+ //@ only-64bit
++//@ ignore-riscv64
+
+ #![crate_type = "lib"]
+ #![feature(core_intrinsics)]
+diff --git a/tests/codegen-llvm/enum/enum-transparent-extract.rs b/tests/codegen-llvm/enum/enum-transparent-extract.rs
+index c5efb8d472b..e79b8916fc1 100644
+--- a/tests/codegen-llvm/enum/enum-transparent-extract.rs
++++ b/tests/codegen-llvm/enum/enum-transparent-extract.rs
+@@ -1,5 +1,6 @@
+ //@ compile-flags: -Copt-level=0
+ //@ only-64bit
+//@ ignore-riscv64
- // We used to not handle all "rustic" ABIs in a (relatively) uniform way,
- // so we failed to fix up arguments for actually passing through the ABI...
- #![feature(rust_cold_cc)]
+
+ #![crate_type = "lib"]
+
+diff --git a/tests/codegen-llvm/repeat-operand-zero-len.rs b/tests/codegen-llvm/repeat-operand-zero-len.rs
+index b4cec42a07c..d450fead9a4 100644
+--- a/tests/codegen-llvm/repeat-operand-zero-len.rs
++++ b/tests/codegen-llvm/repeat-operand-zero-len.rs
+@@ -1,4 +1,5 @@
+ //@ compile-flags: -Copt-level=1 -Cno-prepopulate-passes
++//@ ignore-riscv64
+
+ // This test is here to hit the `Rvalue::Repeat` case in `codegen_rvalue_operand`.
+ // It only applies when the resulting array is a ZST, so the test is written in
+diff --git a/tests/codegen-llvm/simd/extract-insert-dyn.rs b/tests/codegen-llvm/simd/extract-insert-dyn.rs
+index 729f0145314..2b1d1beb86a 100644
+--- a/tests/codegen-llvm/simd/extract-insert-dyn.rs
++++ b/tests/codegen-llvm/simd/extract-insert-dyn.rs
+@@ -1,4 +1,5 @@
+ //@compile-flags: -C opt-level=3 -C no-prepopulate-passes
++//@ ignore-riscv64
+
+ #![feature(
+ core_intrinsics,
+diff --git a/tests/codegen-llvm/uninhabited-transparent-return-abi.rs b/tests/codegen-llvm/uninhabited-transparent-return-abi.rs
+index face1577c3f..09e0846bad0 100644
+--- a/tests/codegen-llvm/uninhabited-transparent-return-abi.rs
++++ b/tests/codegen-llvm/uninhabited-transparent-return-abi.rs
+@@ -1,4 +1,5 @@
+ //@ compile-flags: -Copt-level=3
++//@ ignore-riscv64
+
+ // See https://github.com/rust-lang/rust/issues/135802
+
diff --git a/tests/ui/linking/executable-no-mangle-strip.rs b/tests/ui/linking/executable-no-mangle-strip.rs
index cc283dc53..73cbab9c0 100644
--- a/tests/ui/linking/executable-no-mangle-strip.rs
index a3562f2fd93..d4e52ed91be 100644
--- a/library/std_detect/src/detect/os/linux/aarch64/tests.rs
+++ b/library/std_detect/src/detect/os/linux/aarch64/tests.rs
-@@ -27,6 +27,7 @@ fn baseline_hwcaps() -> AtHwcap {
- }
-
- #[test]
-+ #[ignore]
- fn linux_empty_hwcap2_aarch64() {
- let file = concat!(
- env!("CARGO_MANIFEST_DIR"),
-@@ -39,6 +40,7 @@ fn linux_empty_hwcap2_aarch64() {
- assert_eq!(AtHwcap::from(v), baseline_hwcaps());
- }
- #[test]
-+ #[ignore]
- fn linux_no_hwcap2_aarch64() {
- let file = concat!(
- env!("CARGO_MANIFEST_DIR"),
-@@ -51,6 +53,7 @@ fn linux_no_hwcap2_aarch64() {
- assert_eq!(AtHwcap::from(v), baseline_hwcaps());
- }
- #[test]
-+ #[ignore]
- fn linux_hwcap2_aarch64() {
- let file =
- concat!(env!("CARGO_MANIFEST_DIR"), "/src/detect/test_data/linux-hwcap2-aarch64.auxv");
-diff --git a/tests/ui/no_std/simple-runs.rs b/tests/ui/no_std/simple-runs.rs
-index af44dfe..e6674e5 100644
---- a/tests/ui/no_std/simple-runs.rs
-+++ b/tests/ui/no_std/simple-runs.rs
-@@ -2,6 +2,7 @@
-
- //@ run-pass
- //@ compile-flags: -Cpanic=abort
-+//@ ignore-arm FIXME(#146996)
- //@ ignore-wasm different `main` convention
-
- #![feature(lang_items)]
+@@ -23,6 +23,7 @@ fn baseline_hwcaps() -> AtHwcap {
+ }
+
+ #[test]
++#[ignore]
+ fn linux_empty_hwcap2_aarch64() {
+ let file = concat!(
+ env!("CARGO_MANIFEST_DIR"),
+@@ -35,6 +36,7 @@ fn linux_empty_hwcap2_aarch64() {
+ assert_eq!(AtHwcap::from(v), baseline_hwcaps());
+ }
+ #[test]
++#[ignore]
+ fn linux_no_hwcap2_aarch64() {
+ let file =
+ concat!(env!("CARGO_MANIFEST_DIR"), "/src/detect/test_data/linux-no-hwcap2-aarch64.auxv");
+@@ -45,6 +47,7 @@ fn linux_no_hwcap2_aarch64() {
+ assert_eq!(AtHwcap::from(v), baseline_hwcaps());
+ }
+ #[test]
++#[ignore]
+ fn linux_hwcap2_aarch64() {
+ let file =
+ concat!(env!("CARGO_MANIFEST_DIR"), "/src/detect/test_data/linux-hwcap2-aarch64.auxv");
## The exact (previous) version that has been used is specified in the source tarball.
## The version is replicated here.
-SNAPSHOT_VERSION = "1.91.0"
+SNAPSHOT_VERSION = "beta"
+COMPILER_DATE = "2025-12-09"
-SRC_URI[rustc-snapshot-aarch64.sha256sum] = "f3ea3c964b7f3b884337f2d411764032bbd1722d7f55592a547cbb29afd87c03"
-SRC_URI[rust-std-snapshot-aarch64.sha256sum] = "ff23dc81f796d64e34e866a44fd0bcae726e34014835369b8f9393a544167eca"
-SRC_URI[cargo-snapshot-aarch64.sha256sum] = "003d7008219ca0d225ad1dfa301f7c079b123499430ee0780c85782e0878eeff"
-SRC_URI[clippy-snapshot-aarch64.sha256sum] = "a5f8bd961fb30962144d2f68be0bdd1014cf07110323087b0d6a68251a7a4eca"
+SRC_URI[rustc-snapshot-aarch64.sha256sum] = "36e6ca5ca171c09b3c5a4c36d877163674b9a4bb5562a1dc9a66c5af39d3f37f"
+SRC_URI[rust-std-snapshot-aarch64.sha256sum] = "82783445c68a553bfe1cdb25161073c03deb2a9733e5811f29ff03d86879df56"
+SRC_URI[cargo-snapshot-aarch64.sha256sum] = "c9eaf314667d3d0bb3da48857720be60c715a9fc3344bec15a7fb1b92c6214d6"
+SRC_URI[clippy-snapshot-aarch64.sha256sum] = "edca9027570949403f14f0e719249095ccd4b8d59296a41b4a72af54c020ef17"
-SRC_URI[rustc-snapshot-i686.sha256sum] = "bf718b184d6ace8fab0012835d129130a6dd6a8d78f4f742ae9308a86b96dfc5"
-SRC_URI[rust-std-snapshot-i686.sha256sum] = "059fe4b9802c3cb64b539cc501ff5e64f8d750573009c3004fd0b583b3f50d39"
-SRC_URI[cargo-snapshot-i686.sha256sum] = "92486e31c070667681328ad57dd3bd4ca1e3d37958540d622b2afda9b67fbe3d"
-SRC_URI[clippy-snapshot-i686.sha256sum] = "14cae2980accb8536ae700bb7ec6a3b540a06d84e7a4c71db1c7f05a17b1edbd"
+SRC_URI[rustc-snapshot-i686.sha256sum] = "de94f1f65cd3afc9c7caf554a50e3a1c7e8d730413c3dd4d9916618e7aabb3af"
+SRC_URI[rust-std-snapshot-i686.sha256sum] = "c1c9b90c8586805b02d74465d5293ec3d286a07e646e51cfb91505a7d407cf90"
+SRC_URI[cargo-snapshot-i686.sha256sum] = "3b550c261bd105fc5f3d027dcc90b37b343be3187ff2b1d84912b09faf0f976f"
+SRC_URI[clippy-snapshot-i686.sha256sum] = "fb2e996550d4c50d2e932b947b730c1be9a237de5b30bf88d51f02d4fb3aace4"
-SRC_URI[rustc-snapshot-loongarch64.sha256sum] = "04bdbb954f48fcd0b125fbddbf3e59841ec81c58ff858471f7977c8343d9a73c"
-SRC_URI[rust-std-snapshot-loongarch64.sha256sum] = "cb0c3c2704add4d1271713ff87e1b7a8a4f756b4dc9f580b62953532efd0f7b9"
-SRC_URI[cargo-snapshot-loongarch64.sha256sum] = "9437727091d30d73a987e2c56463a2de4f01fb69cfd229617e2f8a7d8de5c05a"
-SRC_URI[clippy-snapshot-loongarch64.sha256sum] = "060a0eb3ee236e8a3bfb2cad9495165d755ea60d32e62ce85f12ad17c26afedf"
+SRC_URI[rustc-snapshot-loongarch64.sha256sum] = "caa7e16901ff848b2083ccf5b684c9e1975da3dad46bbbd72b127c9420508f57"
+SRC_URI[rust-std-snapshot-loongarch64.sha256sum] = "73ecff3074ebc9abe9efec380c75c8c717df50a08b339dd0aece8538b58daa04"
+SRC_URI[cargo-snapshot-loongarch64.sha256sum] = "b6a3a0ab898dcf2b35556642f812870ee15e62bed465e33ed4e8bf1094444b52"
+SRC_URI[clippy-snapshot-loongarch64.sha256sum] = "e3d80cd58be9c50fd9316b1e19fac0b27246bf32264db5c765a04bfe11acdfe0"
-SRC_URI[rustc-snapshot-powerpc.sha256sum] = "c625de10cbfd21031f71fa6fdd50ccaffd449744614ef1f57ee3cefe80c57792"
-SRC_URI[rust-std-snapshot-powerpc.sha256sum] = "d5ecd84b78eefaf30fb65ec169af1806bd06d0b5bbe166bf010b058c9c59d27f"
-SRC_URI[cargo-snapshot-powerpc.sha256sum] = "1f8f0ac1b05acb7cc50592ca39ec78e374093a0701405e8ea1894bb64a7422cd"
-SRC_URI[clippy-snapshot-powerpc.sha256sum] = "425e5a1a72cc20c476416682cb5df4222c0b9c28fbb9818d4d8f505ccea578e3"
+SRC_URI[rustc-snapshot-powerpc.sha256sum] = "47bdc9313660ca1a29525155f3a7773ffa4021219dac5cfd309f5ec692ab1821"
+SRC_URI[rust-std-snapshot-powerpc.sha256sum] = "3c54a7b9cf2318589f9d52109b0083df2eb7193f2c4d45d166c1912353ac0812"
+SRC_URI[cargo-snapshot-powerpc.sha256sum] = "51991f325aa8d01393c59af81d92d32fddb90a0e153178fa6d574f113a33376b"
+SRC_URI[clippy-snapshot-powerpc.sha256sum] = "5868780ae5c0cf07a613c3247b8339e6e5d0fb209ca279211061c20520a1916d"
-SRC_URI[rustc-snapshot-powerpc64.sha256sum] = "139a077f72197ce73031dae7cd2156fb6718b09fe9a3f4008266d34fb8d09ae6"
-SRC_URI[rust-std-snapshot-powerpc64.sha256sum] = "ac046a72a957bf9fd1213e95d46d7ca431a6704f63e99c759ccdd9ae7c07f7d9"
-SRC_URI[cargo-snapshot-powerpc64.sha256sum] = "abc14cced999e0d5f0ec75f10af33998dcaef39fab27b8e2c63b93ca0b79f2ab"
-SRC_URI[clippy-snapshot-powerpc64.sha256sum] = "b8129667c5b30963698466b7edeef4c5a1c869e78b5f9218fcf1426defa5cea9"
+SRC_URI[rustc-snapshot-powerpc64.sha256sum] = "1d4ec35a9ee7cad99458db77f8787dee2c90556e56a21c8681984a09798f1e7f"
+SRC_URI[rust-std-snapshot-powerpc64.sha256sum] = "26539ea11b3838de5c530c0462c38f31aa5ae889abd65e5eb18a8817353207e0"
+SRC_URI[cargo-snapshot-powerpc64.sha256sum] = "b40b3f43472ab0bfc46f821c12a1df17dd41aa0ff6375522861abcb77aabd68b"
+SRC_URI[clippy-snapshot-powerpc64.sha256sum] = "09ad15c8d179d38424c64a697af9d256b3905fa27aa21fffe0dcf60e18821376"
-SRC_URI[rustc-snapshot-powerpc64le.sha256sum] = "c526302dcf4f1627525b0eef3ef4181bea801f119c4a0963c3675b390cba164f"
-SRC_URI[rust-std-snapshot-powerpc64le.sha256sum] = "c79c071fd14ef094c1a2e750f19795e7e162f4237bf92299885c0d56fa6017fe"
-SRC_URI[cargo-snapshot-powerpc64le.sha256sum] = "704bfa80ffeeafacb8f13043873e20e1b9c4a5e785ee6c5e7d0e5828fc1f0c8b"
-SRC_URI[clippy-snapshot-powerpc64le.sha256sum] = "1571b18b39f97d808b9f10ed2697b9d87bc3959abf858bfcd3baf9eaf8d5d548"
+SRC_URI[rustc-snapshot-powerpc64le.sha256sum] = "259c2b9add30c03a6f91c4aaebfe4f052f0342bcc32df79af1121316ee5aafc8"
+SRC_URI[rust-std-snapshot-powerpc64le.sha256sum] = "9c31f5d881ea898da452d628bc0a1e2e27434e8c6b3f5561e0e326024dd91d9a"
+SRC_URI[cargo-snapshot-powerpc64le.sha256sum] = "4513dafaf90abb9eba29f578b1ca1c57934ce78f0ad05ea0f45be5b6e39da7a9"
+SRC_URI[clippy-snapshot-powerpc64le.sha256sum] = "3961d80cea94e31f8f571e962478fcc842a22163ed6e853b08b19063a56fb601"
-SRC_URI[rustc-snapshot-riscv64gc.sha256sum] = "7c3d4ceaa630ddb45bcd538c687637a349b2c3e18634a2b944178a7b4b42a4cc"
-SRC_URI[rust-std-snapshot-riscv64gc.sha256sum] = "7486237c83844d48ac96b67241ef0c1f4f702ceb74c44721f6f8660c3068dede"
-SRC_URI[cargo-snapshot-riscv64gc.sha256sum] = "8946ea952e5a516e8bb6fd859d9798902877e01bd4508b717f8b9fd915019ad5"
-SRC_URI[clippy-snapshot-riscv64gc.sha256sum] = "97feb6d6b2158b410a83c40d7eeba1e97220e505eae6666aa09d112665cc8dc1"
+SRC_URI[rustc-snapshot-riscv64gc.sha256sum] = "1e1ab9ce2619c6430e785c00cccf689fde5c20b4b81dd6281deba15615cdf9fe"
+SRC_URI[rust-std-snapshot-riscv64gc.sha256sum] = "cc96484aed4fb6e0e6f5df5326ab9e6647e3d2367752d25f5717f007fcbba6a1"
+SRC_URI[cargo-snapshot-riscv64gc.sha256sum] = "0e2200fed953b69b4709ddc4df060e9718f09d062ae7184f51479ae684137e01"
+SRC_URI[clippy-snapshot-riscv64gc.sha256sum] = "25affee87f7ec9b8b91368a64d9f5ce17f22a0c40f6bf1f6b51fadb43dec05b2"
-SRC_URI[rustc-snapshot-s390x.sha256sum] = "073c3817f91ff425ffa141a6db215d54b50db5a8abe08fed593b7597687bdf94"
-SRC_URI[rust-std-snapshot-s390x.sha256sum] = "454ecc9a53dda63762f3d1d92b7e4f4459c58c89d39a4178cce1fd9fd0ce09b5"
-SRC_URI[cargo-snapshot-s390x.sha256sum] = "3af10597a739402d6ecb3db85abaf62e12f7b298d2df6377c3c80e09a54f91b6"
-SRC_URI[clippy-snapshot-s390x.sha256sum] = "8d3bb8aa79abcfe5c24a37651d09dd356f994663699e65e7dd9978514a5ebf31"
+SRC_URI[rustc-snapshot-s390x.sha256sum] = "9ba83613dab2ffa00b581f5927abfb8398e3854fe21d2b685830ff57f609324f"
+SRC_URI[rust-std-snapshot-s390x.sha256sum] = "5157be3919659a14beec82ab274b9fefcea8d7eb56d35de2c7278e21cf4e10f5"
+SRC_URI[cargo-snapshot-s390x.sha256sum] = "f7c2707a6e855eb6ef6fa34da58c838db64a48ecf4baf84f62a3d676dc90a794"
+SRC_URI[clippy-snapshot-s390x.sha256sum] = "5f137aa245a5a168e71abef128e2181c4df0675666abad895d28df917ca9f0ff"
-SRC_URI[rustc-snapshot-x86_64.sha256sum] = "a7169e8cb6174af2f45717703370363d8de82ce55f6ccba185893045b9370874"
-SRC_URI[rust-std-snapshot-x86_64.sha256sum] = "89e6520b16c12b43526440298d2da0dcb70747c5cc2d0b8e47d39b5da9aeef49"
-SRC_URI[cargo-snapshot-x86_64.sha256sum] = "7103c03fb8abe85b23307005a9dfe4f01c826a89945d84b96fa2d03fd4d2d138"
-SRC_URI[clippy-snapshot-x86_64.sha256sum] = "0087c3d58d2fdeafa89830c299b1026c9f981b49835db89c922b3c6a299b3225"
+SRC_URI[rustc-snapshot-x86_64.sha256sum] = "d80990444597aeef8a956bb71ed468d874f1b47316e51afafe509442803ebae4"
+SRC_URI[rust-std-snapshot-x86_64.sha256sum] = "393e345443c8c16e9b796ffd1d1867650702c75db3a1d541396ad7d035eba249"
+SRC_URI[cargo-snapshot-x86_64.sha256sum] = "54f2e54197e4340aab81e4d81d9dff836473d098a0bc12b5f944581cca90567f"
+SRC_URI[clippy-snapshot-x86_64.sha256sum] = "649b10e076d03f2428b3284391c67a2a1f7daf3b58185a797973121fc5b4c337"
-SRC_URI[rust-std-snapshot-i586.sha256sum] = "47e91cba208b1f87348e7b6a49274ebb4364651a4191fa67e6850e7813e26ad5"
+SRC_URI[rust-std-snapshot-i586.sha256sum] = "a882f765539da05de5f8782a6bd6cccc34c5179b6b4ae845eb27a8e9a354fc82"
-SRC_URI[rust-std-snapshot-sparc64.sha256sum] = "4f7bffb09cf5a0c25dda9b51811c60996eb1ae06a277c1e836980c21b3a44766"
+SRC_URI[rust-std-snapshot-riscv64a23.sha256sum] = "e0779b0a0d2321967350831c1e32bb04abf555667c6666bf137f821bd1858792"
+
+SRC_URI[rust-std-snapshot-sparc64.sha256sum] = "0700f10b4c8dce6bf86df94fa7413c95596aab6b70ca89437b226b33a1b5cf22"
SRC_URI += " \
- ${RUST_DIST_SERVER}/dist/${RUST_STD_SNAPSHOT}.tar.xz;name=rust-std-snapshot-${RUST_BUILD_ARCH};subdir=rust-snapshot-components \
- ${RUST_DIST_SERVER}/dist/${RUSTC_SNAPSHOT}.tar.xz;name=rustc-snapshot-${RUST_BUILD_ARCH};subdir=rust-snapshot-components \
- ${RUST_DIST_SERVER}/dist/${CARGO_SNAPSHOT}.tar.xz;name=cargo-snapshot-${RUST_BUILD_ARCH};subdir=rust-snapshot-components \
+ ${RUST_DIST_SERVER}/dist/${COMPILER_DATE}/${RUST_STD_SNAPSHOT}.tar.xz;name=rust-std-snapshot-${RUST_BUILD_ARCH};subdir=rust-snapshot-components \
+ ${RUST_DIST_SERVER}/dist/${COMPILER_DATE}/${RUSTC_SNAPSHOT}.tar.xz;name=rustc-snapshot-${RUST_BUILD_ARCH};subdir=rust-snapshot-components \
+ ${RUST_DIST_SERVER}/dist/${COMPILER_DATE}/${CARGO_SNAPSHOT}.tar.xz;name=cargo-snapshot-${RUST_BUILD_ARCH};subdir=rust-snapshot-components \
"
RUST_DIST_SERVER = "https://static.rust-lang.org"
RUST_VERSION ?= "${@d.getVar('PV').split('-')[0]}"
-SRC_URI += "https://static.rust-lang.org/dist/rustc-${RUST_VERSION}-src.tar.xz;name=rust \
+SRC_URI += "https://static.rust-lang.org/dist/2026-01-19/rustc-nightly-src.tar.xz;name=rust \
file://0001-Define-more-ioctl-codes-on-riscv32gc-unknown-linux-g.patch;patchdir=${RUSTSRC} \
file://rust-oe-selftest.patch;patchdir=${RUSTSRC} \
- file://repro-issue-fix-with-cc-crate-hashmap.patch;patchdir=${RUSTSRC} \
file://oeqa-selftest-Increase-timeout-in-process-sigpipe-ru.patch;patchdir=${RUSTSRC} \
file://0001-src-core-build_steps-tool.rs-switch-off-lto-for-rust.patch;patchdir=${RUSTSRC} \
file://revert-link-std-statically-in-rustc_driver-feature.patch;patchdir=${RUSTSRC} \
- file://0001-riscv32-Define-plain-syscalls-as-their-time64-varian.patch;patchdir=${RUSTSRC} \
+ file://disable-rustfmt-check.patch;patchdir=${RUSTSRC} \
+ file://revert-destabilise-target-spec-json.patch;patchdir=${RUSTSRC} \
"
-SRC_URI[rust.sha256sum] = "ebee170bfe4c4dfc59521a101de651e5534f4dae889756a5c97ca9ea40d0c307"
+SRC_URI[rust.sha256sum] = "15125be18eb452d2891d87190f84298a9c03b1c1493b566f23b0f08d2f69adb0"
-RUSTSRC = "${UNPACKDIR}/rustc-${RUST_VERSION}-src"
+RUSTSRC = "${UNPACKDIR}/rustc-nightly-src"
UPSTREAM_CHECK_URI = "https://forge.rust-lang.org/infra/other-installation-methods.html"
UPSTREAM_CHECK_REGEX = "rustc-(?P<pver>\d+(\.\d+)+)-src"
S = "${RUSTSRC}"
# Use at your own risk, accepted values are stable, beta and nightly
-RUST_CHANNEL ?= "stable"
+RUST_CHANNEL ?= "nightly"
PV .= "${@bb.utils.contains('RUST_CHANNEL', 'stable', '', '-${RUST_CHANNEL}', d)}"
export FORCE_CRATE_HASH = "${BB_TASKHASH}"
## The version is replicated here.
SNAPSHOT_VERSION = "%s"
+COMPILER_DATE = "%s"
-""" % compiler_version
+""" % (compiler_version, compiler_date)
# Add the checksum components to the snapshot
for arch, components in src_uri.items():
snapshot += "\n".join(components) + "\n\n"
# Add the additional snapshot URIs
snapshot += """\
SRC_URI += " \\
- ${RUST_DIST_SERVER}/dist/${RUST_STD_SNAPSHOT}.tar.xz;name=rust-std-snapshot-${RUST_BUILD_ARCH};subdir=rust-snapshot-components \\
- ${RUST_DIST_SERVER}/dist/${RUSTC_SNAPSHOT}.tar.xz;name=rustc-snapshot-${RUST_BUILD_ARCH};subdir=rust-snapshot-components \\
- ${RUST_DIST_SERVER}/dist/${CARGO_SNAPSHOT}.tar.xz;name=cargo-snapshot-${RUST_BUILD_ARCH};subdir=rust-snapshot-components \\
+ ${RUST_DIST_SERVER}/dist/${COMPILER_DATE}/${RUST_STD_SNAPSHOT}.tar.xz;name=rust-std-snapshot-${RUST_BUILD_ARCH};subdir=rust-snapshot-components \\
+ ${RUST_DIST_SERVER}/dist/${COMPILER_DATE}/${RUSTC_SNAPSHOT}.tar.xz;name=rustc-snapshot-${RUST_BUILD_ARCH};subdir=rust-snapshot-components \\
+ ${RUST_DIST_SERVER}/dist/${COMPILER_DATE}/${CARGO_SNAPSHOT}.tar.xz;name=cargo-snapshot-${RUST_BUILD_ARCH};subdir=rust-snapshot-components \\
"
RUST_DIST_SERVER = "%s"
--- /dev/null
+#!/usr/bin/env python3
+
+import re
+import hashlib
+import requests
+import os
+import subprocess
+from datetime import datetime, timedelta
+
+def get_yesterday_date():
+ return (datetime.today() - timedelta(days=1)).strftime('%Y-%m-%d')
+
+def update_rust_url_and_sha256(file_path):
+ yesterday = get_yesterday_date()
+ new_url = f"https://static.rust-lang.org/dist/{yesterday}/rustc-nightly-src.tar.xz"
+ temp_file = "rustc-nightly-src.tar.xz"
+
+ # Check if the URL exists
+ print(f"Checking URL: {new_url}")
+ response = requests.head(new_url)
+ if response.status_code != 200:
+ print(f"URL not accessible: {new_url} (Status: {response.status_code})")
+ return False
+
+ # Download tarball
+ print("Downloading tarball to compute SHA256...")
+ with open(temp_file, "wb") as f:
+ f.write(requests.get(new_url).content)
+
+ # Compute SHA256
+ with open(temp_file, "rb") as f:
+ sha256 = hashlib.sha256(f.read()).hexdigest()
+ print(f"SHA256 computed: {sha256}")
+
+ # Remove downloaded file
+ os.remove(temp_file)
+ print("Deleted downloaded tarball.")
+
+ # Read and modify the BitBake file
+ with open(file_path, 'r') as f:
+ content = f.read()
+
+ # Replace the Rust URL date
+ url_pattern = r"https://static\.rust-lang\.org/dist/\d{4}-\d{2}-\d{2}/rustc-nightly-src\.tar\.xz"
+ content, url_count = re.subn(url_pattern, new_url, content)
+
+ # Replace the SHA256
+ sha256_pattern = r'SRC_URI\[rust\.sha256sum\] = ".*?"'
+ sha256_replacement = f'SRC_URI[rust.sha256sum] = "{sha256}"'
+ content, sha256_count = re.subn(sha256_pattern, sha256_replacement, content)
+
+ # Write changes back
+ with open(file_path, 'w') as f:
+ f.write(content)
+
+ print(f"Updated {url_count} URL(s) and {sha256_count} SHA256 line(s) in '{file_path}'")
+ return True
+
+def insert_sanity_tested_distro(conf_file):
+ with open(conf_file, "r") as f:
+ lines = f.readlines()
+
+ updated_lines = []
+ inserted = False
+ for line in lines:
+ updated_lines.append(line)
+ if not inserted and "MACHINE ??=" in line:
+ updated_lines.append('SANITY_TESTED_DISTROS = ""\n')
+ inserted = True
+
+ if inserted:
+ with open(conf_file, "w") as f:
+ f.writelines(updated_lines)
+ print("Inserted SANITY_TESTED_DISTROS after MACHINE ??=")
+ else:
+ print("MACHINE ??= not found, no changes made.")
+
+def run_oe_selftest_in_screen():
+ screen_cmd = """
+cd ..
+source oe-init-build-env > /dev/null
+oe-selftest -r rust -K | tee 2>&1 oe-selftest.log
+if [ $? -eq 0 ]; then
+ echo "oe-selftest passed. Cleaning up..."
+ rm -rf ../*-st
+
+ echo "Running oe-selftest -r reproducible..."
+ oe-selftest -r reproducible | tee 2>&1 repro.log
+ if [ $? -eq 0 ]; then
+ echo "repro passed. Cleaning up..."
+ rm -rf ../*-st
+ else
+ echo "repro failed. Logs saved to repro.log"
+ fi
+
+else
+ echo "oe-selftest failed. Logs saved in oe-selftest.log"
+fi
+exit
+"""
+ print("Launching detached screen session 'rust-nightly' to run oe-selftest...")
+ subprocess.run(
+ ['screen', '-S', 'rust-nightly', '-dm', 'bash', '-c', screen_cmd]
+ )
+ print("Screen session 'rust-nightly' started.")
+
+def switch_machine_and_build(machine_name, local_conf_path="conf/local.conf"):
+ print(f"\nSwitching MACHINE to {machine_name}...")
+
+ with open(local_conf_path, "r") as f:
+ content = f.read()
+
+ new_line = f'MACHINE ??= "{machine_name}"'
+ old_machine_match = re.search(r'MACHINE \?\?= ".*?"', content)
+ if old_machine_match:
+ old_line = old_machine_match.group(0)
+ content = content.replace(old_line, new_line)
+ with open(local_conf_path, "w") as f:
+ f.write(content)
+ print(f"Replaced '{old_line}' with '{new_line}' in {local_conf_path}")
+ else:
+ print("MACHINE line not found in local.conf, skipping replacement.")
+ return
+
+ # Clean previous build
+ subprocess.run(["bitbake", "-c", "clean", "rust"])
+
+ # Build rust
+ log_file = f"rust_{machine_name}.log"
+ print(f"Running bitbake rust for MACHINE={machine_name}, logging to {log_file}...")
+ with open(log_file, "w") as f:
+ process = subprocess.Popen(
+ ["bitbake", "rust"],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT,
+ text=True,
+ bufsize=1,
+ )
+ for line in process.stdout:
+ print(line, end='')
+ f.write(line)
+ process.wait()
+
+ if process.returncode == 0:
+ print(f"Rust build succeeded for MACHINE={machine_name}")
+ else:
+ print(f"Rust build failed for MACHINE={machine_name}. Check {log_file} for details.")
+
+# --- MAIN EXECUTION FLOW ---
+
+print("Starting update_rust_url_and_sha256()...")
+if update_rust_url_and_sha256("../openembedded-core/meta/recipes-devtools/rust/rust-source.inc"):
+ print("Update successful, launching bitbake...")
+
+ with open("snapshot.log", "w") as log_file:
+ process = subprocess.Popen(
+ ["bitbake", "rust", "-c", "do_update_snapshot"],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT,
+ text=True,
+ bufsize=1,
+ )
+ for line in process.stdout:
+ print(line, end='')
+ log_file.write(line)
+ process.wait()
+
+ if process.returncode == 0:
+ print("do_update_snapshot task completed successfully.")
+ print("Running full bitbake rust task and saving output to rust.log ...")
+ with open("rust.log", "w") as rust_log:
+ process = subprocess.Popen(
+ ["bitbake", "rust"],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT,
+ text=True,
+ bufsize=1,
+ )
+ for line in process.stdout:
+ print(line, end='')
+ rust_log.write(line)
+ process.wait()
+
+ if process.returncode == 0:
+ print("Full bitbake rust task completed successfully.")
+
+ # Build for additional machines
+ switch_machine_and_build("qemuarm")
+ switch_machine_and_build("qemuriscv64")
+
+ # Restore original MACHINE
+ switch_machine_and_build("qemux86-64")
+
+ # Insert SANITY_TESTED_DISTROS
+ insert_sanity_tested_distro("conf/local.conf")
+
+ # Run selftest
+ run_oe_selftest_in_screen()
+ else:
+ print("Full bitbake rust task failed, check rust.log for details.")
+ else:
+ print("do_update_snapshot task failed, skipping full bitbake rust.")
+else:
+ print("Rust update failed or URL not accessible. Exiting.")