diff --git a/src/bootstrap/src/core/build_steps/test.rs b/src/bootstrap/src/core/build_steps/test.rs index c28fe4ad832d3..f3687ac02ec1b 100644 --- a/src/bootstrap/src/core/build_steps/test.rs +++ b/src/bootstrap/src/core/build_steps/test.rs @@ -904,6 +904,80 @@ NOTE: if you're sure you want to do this, please open an issue as to why. In the } } +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct IntrinsicTest { + host: TargetSelection, +} + +impl Step for IntrinsicTest { + type Output = (); + const IS_HOST: bool = true; + + fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> { + run.path("library/stdarch/crates/intrinsic-test") + } + + fn is_default_step(_builder: &Builder<'_>) -> bool { + true + } + + fn make_run(run: RunConfig<'_>) { + run.builder.ensure(IntrinsicTest { host: run.target }); + } + + fn run(self, builder: &Builder<'_>) { + let host = self.host; + + let (input_file, skip_file, runner, cppflags) = if host.contains("x86_64-unknown-linux") { + let cpuid_def = + builder.src.join("library/stdarch/ci/docker/x86_64-unknown-linux-gnu/cpuid.def"); + let runner = format!( + "/intel-sde/sde64 -cpuid-in {} -rtm-mode full -tsx --", + cpuid_def.display() + ); + ( + builder.src.join("library/stdarch/intrinsics_data/x86-intel.xml"), + builder.src.join("library/stdarch/crates/intrinsic-test/missing_x86.txt"), + runner, + String::from("-fuse-ld=lld -I/usr/include/x86_64-linux-gnu/"), + ) + } else if host.contains("aarch64-unknown-linux") { + ( + builder.src.join("library/stdarch/intrinsics_data/arm_intrinsics.json"), + builder.src.join("library/stdarch/crates/intrinsic-test/missing_aarch64.txt"), + String::from("env"), + String::from(""), + ) + } else { + return; + }; + + let out_dir = builder.out.join(host).join("intrinsic-test"); + t!(fs::create_dir_all(&out_dir)); + + let mut cmd = builder.tool_cmd(Tool::IntrinsicTest); + cmd.current_dir(&out_dir); + cmd.arg(&input_file); + cmd.arg("--target").arg(&*host.triple); + cmd.arg("--cppcompiler").arg("clang++"); + cmd.arg("--runner").arg(&runner); + cmd.arg("--skip").arg(&skip_file); + cmd.arg("--sample-percentage").arg("10"); + cmd.env("CPPFLAGS", &cppflags); + + if let Some(cargo_dir) = builder.initial_cargo.parent() { + let old_path = env::var_os("PATH").unwrap_or_default(); + let new_path = env::join_paths( + iter::once(cargo_dir.to_path_buf()).chain(env::split_paths(&old_path)), + ) + .expect("Could not prepend cargo bin path to PATH"); + cmd.env("PATH", new_path); + } + + cmd.delay_failure().run(builder); + } +} + #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Clippy { compilers: RustcPrivateCompilers, diff --git a/src/bootstrap/src/core/build_steps/tool.rs b/src/bootstrap/src/core/build_steps/tool.rs index ed5c2586a5ed6..bb6247f4f814e 100644 --- a/src/bootstrap/src/core/build_steps/tool.rs +++ b/src/bootstrap/src/core/build_steps/tool.rs @@ -502,6 +502,7 @@ bootstrap_tool!( FeaturesStatusDump, "src/tools/features-status-dump", "features-status-dump"; OptimizedDist, "src/tools/opt-dist", "opt-dist", submodules = &["src/tools/rustc-perf"]; RunMakeSupport, "src/tools/run-make-support", "run_make_support", artifact_kind = ToolArtifactKind::Library; + IntrinsicTest, "library/stdarch/crates/intrinsic-test", "intrinsic-test", is_external_tool = true; ); /// These are the submodules that are required for rustbook to work due to diff --git a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test.snap b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test.snap index 25ff1e64e76b4..8330a4b8927c7 100644 --- a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test.snap +++ b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test.snap @@ -181,6 +181,9 @@ expression: test [Test] test::RustcBook targets: [x86_64-unknown-linux-gnu] - Set({test::src/doc/rustc}) +[Test] test::IntrinsicTest + targets: [x86_64-unknown-linux-gnu] + - Set({test::library/stdarch/crates/intrinsic-test}) [Test] test::RustdocJSStd targets: [x86_64-unknown-linux-gnu] - Suite(test::tests/rustdoc-js-std) diff --git a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_library.snap b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_library.snap index dfc397597a877..4f232b4861fcb 100644 --- a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_library.snap +++ b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_library.snap @@ -18,3 +18,6 @@ expression: test library - Set({test::library/sysroot}) - Set({test::library/test}) - Set({test::library/unwind}) +[Test] test::IntrinsicTest + targets: [x86_64-unknown-linux-gnu] + - Set({test::library/stdarch/crates/intrinsic-test}) diff --git a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_coverage.snap b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_coverage.snap index 2f1ee9386ed72..618b7984d23bf 100644 --- a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_coverage.snap +++ b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_coverage.snap @@ -180,6 +180,9 @@ expression: test --skip=coverage [Test] test::RustcBook targets: [x86_64-unknown-linux-gnu] - Set({test::src/doc/rustc}) +[Test] test::IntrinsicTest + targets: [x86_64-unknown-linux-gnu] + - Set({test::library/stdarch/crates/intrinsic-test}) [Test] test::RustdocJSStd targets: [x86_64-unknown-linux-gnu] - Suite(test::tests/rustdoc-js-std) diff --git a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests.snap b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests.snap index 8f5e842d28a15..0326d35ad8f55 100644 --- a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests.snap +++ b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests.snap @@ -144,6 +144,9 @@ expression: test --skip=tests [Test] test::RustcBook targets: [x86_64-unknown-linux-gnu] - Set({test::src/doc/rustc}) +[Test] test::IntrinsicTest + targets: [x86_64-unknown-linux-gnu] + - Set({test::library/stdarch/crates/intrinsic-test}) [Test] test::RustdocTheme targets: [x86_64-unknown-linux-gnu] - Set({test::src/tools/rustdoc-themes}) diff --git a/src/bootstrap/src/core/builder/mod.rs b/src/bootstrap/src/core/builder/mod.rs index bc402313367fd..209113cd96614 100644 --- a/src/bootstrap/src/core/builder/mod.rs +++ b/src/bootstrap/src/core/builder/mod.rs @@ -910,6 +910,7 @@ impl<'a> Builder<'a> { test::CargoMiri, test::Clippy, test::CompiletestTest, + test::IntrinsicTest, test::CrateRunMakeSupport, test::CrateBuildHelper, test::RustdocJSStd, diff --git a/src/bootstrap/src/core/builder/tests.rs b/src/bootstrap/src/core/builder/tests.rs index 618129e27b8ad..5456efee3a7de 100644 --- a/src/bootstrap/src/core/builder/tests.rs +++ b/src/bootstrap/src/core/builder/tests.rs @@ -2138,6 +2138,7 @@ mod snapshot { [test] link-check [test] tier-check [test] rustc 0 -> rust-analyzer 1 + [build] rustc 0 -> IntrinsicTest 1 [build] rustc 0 -> RustdocTheme 1 [test] rustdoc-theme 1 [test] compiletest-rustdoc-ui 1 @@ -2321,6 +2322,7 @@ mod snapshot { [test] rustc 1 -> rust-analyzer 2 [doc] rustc (book) [test] rustc 1 -> lint-docs 2 + [build] rustc 0 -> IntrinsicTest 1 [build] rustc 0 -> RustdocTheme 1 [test] rustdoc-theme 2 [test] compiletest-rustdoc-ui 2 diff --git a/src/ci/docker/host-aarch64/aarch64-gnu-llvm-21/Dockerfile b/src/ci/docker/host-aarch64/aarch64-gnu-llvm-21/Dockerfile index c364ac27aaa52..df54c5b7a9c67 100644 --- a/src/ci/docker/host-aarch64/aarch64-gnu-llvm-21/Dockerfile +++ b/src/ci/docker/host-aarch64/aarch64-gnu-llvm-21/Dockerfile @@ -17,6 +17,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ gdb \ llvm-21-tools \ llvm-21-dev \ + clang \ + lld \ libedit-dev \ libssl-dev \ pkg-config \ diff --git a/src/ci/docker/host-aarch64/aarch64-gnu/Dockerfile b/src/ci/docker/host-aarch64/aarch64-gnu/Dockerfile index 87bfc0766fbd9..d4bdff95d32d1 100644 --- a/src/ci/docker/host-aarch64/aarch64-gnu/Dockerfile +++ b/src/ci/docker/host-aarch64/aarch64-gnu/Dockerfile @@ -16,8 +16,11 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ libssl-dev \ pkg-config \ xz-utils \ + clang \ + lld \ && rm -rf /var/lib/apt/lists/* - + + COPY scripts/sccache.sh /scripts/ RUN sh /scripts/sccache.sh diff --git a/src/ci/docker/host-x86_64/x86_64-gnu-llvm-21/Dockerfile b/src/ci/docker/host-x86_64/x86_64-gnu-llvm-21/Dockerfile index fc96735521077..2fbeb957a3e53 100644 --- a/src/ci/docker/host-x86_64/x86_64-gnu-llvm-21/Dockerfile +++ b/src/ci/docker/host-x86_64/x86_64-gnu-llvm-21/Dockerfile @@ -18,6 +18,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ gdb \ llvm-21-tools \ llvm-21-dev \ + clang \ + lld \ libedit-dev \ libssl-dev \ pkg-config \ diff --git a/src/ci/docker/host-x86_64/x86_64-gnu-llvm-22/Dockerfile b/src/ci/docker/host-x86_64/x86_64-gnu-llvm-22/Dockerfile index a22e8de90804f..443a48177b99d 100644 --- a/src/ci/docker/host-x86_64/x86_64-gnu-llvm-22/Dockerfile +++ b/src/ci/docker/host-x86_64/x86_64-gnu-llvm-22/Dockerfile @@ -18,6 +18,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ gdb \ llvm-22-tools \ llvm-22-dev \ + clang \ + lld \ libedit-dev \ libssl-dev \ pkg-config \ diff --git a/src/ci/docker/host-x86_64/x86_64-gnu/Dockerfile b/src/ci/docker/host-x86_64/x86_64-gnu/Dockerfile index 7ca2dbb7d9f36..09fa00e188c5c 100644 --- a/src/ci/docker/host-x86_64/x86_64-gnu/Dockerfile +++ b/src/ci/docker/host-x86_64/x86_64-gnu/Dockerfile @@ -19,8 +19,16 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ mingw-w64 \ zlib1g-dev \ libzstd-dev \ + clang \ + lld \ && rm -rf /var/lib/apt/lists/* +# Install Intel SDE for AVX-512 emulation +RUN curl -L http://ci-mirrors.rust-lang.org/sde-external-10.8.0-2026-03-15-lin.tar.xz -o /tmp/sde.tar.xz \ + && mkdir -p /intel-sde \ + && tar -xJf /tmp/sde.tar.xz --strip-components=1 -C /intel-sde \ + && rm /tmp/sde.tar.xz + COPY scripts/sccache.sh /scripts/ RUN sh /scripts/sccache.sh