Remove custom_stage override from check::Std and make 1 be the default check stage for it
This commit is contained in:
parent
0aa4ef964d
commit
50e5599d1d
1 changed files with 11 additions and 54 deletions
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue