Remove custom_stage override from check::Std and make 1 be the default check stage for it

This commit is contained in:
Jakub Beránek 2025-06-18 22:27:37 +02:00
parent 0aa4ef964d
commit 50e5599d1d
No known key found for this signature in database
GPG key ID: 909CD0D26483516B

View file

@ -20,16 +20,13 @@ pub struct Std {
///
/// [`compile::Rustc`]: crate::core::build_steps::compile::Rustc
crates: Vec<String>,
/// Never use this from outside calls. It is intended for internal use only within `check::Std::make_run`
/// and `check::Std::run`.
custom_stage: Option<u32>,
}
impl Std {
const CRATE_OR_DEPS: &[&str] = &["sysroot", "coretests", "alloctests"];
pub fn new(target: TargetSelection) -> Self {
Self { target, crates: vec![], custom_stage: None }
Self { target, crates: vec![] }
}
}
@ -48,14 +45,7 @@ impl Step for Std {
fn make_run(run: RunConfig<'_>) {
let crates = std_crates_for_run_make(&run);
let stage = if run.builder.config.is_explicit_stage() || run.builder.top_stage >= 1 {
run.builder.top_stage
} else {
1
};
run.builder.ensure(Std { target: run.target, crates, custom_stage: Some(stage) });
run.builder.ensure(Std { target: run.target, crates });
}
fn run(self, builder: &Builder<'_>) {
@ -66,40 +56,20 @@ impl Step for Std {
return;
}
let stage = self.custom_stage.unwrap_or(builder.top_stage);
let stage = builder.top_stage;
let target = self.target;
let compiler = builder.compiler(stage, builder.config.host_target);
if stage == 0 {
let mut is_explicitly_called =
builder.paths.iter().any(|p| p.starts_with("library") || p.starts_with("std"));
if !is_explicitly_called {
for c in Std::CRATE_OR_DEPS {
is_explicitly_called = builder.paths.iter().any(|p| p.starts_with(c));
}
}
if is_explicitly_called {
eprintln!("WARNING: stage 0 std is precompiled and does nothing during `x check`.");
}
// Reuse the stage0 libstd
builder.std(compiler, target);
return;
}
let build_compiler = builder.compiler(stage, builder.config.host_target);
let mut cargo = builder::Cargo::new(
builder,
compiler,
build_compiler,
Mode::Std,
SourceType::InTree,
target,
Kind::Check,
);
std_cargo(builder, target, compiler.stage, &mut cargo);
std_cargo(builder, target, build_compiler.stage, &mut cargo);
if matches!(builder.config.cmd, Subcommand::Fix) {
// By default, cargo tries to fix all targets. Tell it not to fix tests until we've added `test` to the sysroot.
cargo.arg("--lib");
@ -115,16 +85,9 @@ impl Step for Std {
Some(stage),
);
let stamp = build_stamp::libstd_stamp(builder, compiler, target).with_prefix("check");
let stamp = build_stamp::libstd_stamp(builder, build_compiler, target).with_prefix("check");
run_cargo(builder, cargo, builder.config.free_args.clone(), &stamp, vec![], true, false);
// We skip populating the sysroot in non-zero stage because that'll lead
// to rlib/rmeta conflicts if std gets built during this session.
if compiler.stage == 0 {
let libdir = builder.sysroot_target_libdir(compiler, target);
let hostdir = builder.sysroot_target_libdir(compiler, compiler.host);
add_to_sysroot(builder, &libdir, &hostdir, &stamp);
}
drop(_guard);
// don't check test dependencies if we haven't built libtest
@ -140,21 +103,14 @@ impl Step for Std {
// Currently only the "libtest" tree of crates does this.
let mut cargo = builder::Cargo::new(
builder,
compiler,
build_compiler,
Mode::Std,
SourceType::InTree,
target,
Kind::Check,
);
// If we're not in stage 0, tests and examples will fail to compile
// from `core` definitions being loaded from two different `libcore`
// .rmeta and .rlib files.
if compiler.stage == 0 {
cargo.arg("--all-targets");
}
std_cargo(builder, target, compiler.stage, &mut cargo);
std_cargo(builder, target, build_compiler.stage, &mut cargo);
// Explicitly pass -p for all dependencies krates -- this will force cargo
// to also check the tests/benches/examples for these crates, rather
@ -163,7 +119,8 @@ impl Step for Std {
cargo.arg("-p").arg(krate);
}
let stamp = build_stamp::libstd_stamp(builder, compiler, target).with_prefix("check-test");
let stamp =
build_stamp::libstd_stamp(builder, build_compiler, target).with_prefix("check-test");
let _guard = builder.msg_check("library test/bench/example targets", target, Some(stage));
run_cargo(builder, cargo, builder.config.free_args.clone(), &stamp, vec![], true, false);
}