Skip to content

Commit e1c018d

Browse files
ZalatharKobzol
authored andcommitted
Fixup tool checking
1 parent c4f45a2 commit e1c018d

File tree

3 files changed

+77
-31
lines changed

3 files changed

+77
-31
lines changed

src/bootstrap/src/core/build_steps/check.rs

Lines changed: 64 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -453,12 +453,14 @@ macro_rules! tool_check_step {
453453
// The part of this path after the final '/' is also used as a display name.
454454
path: $path:literal
455455
$(, alt_path: $alt_path:literal )*
456+
, mode: $mode:path
456457
$(, default: $default:literal )?
457458
$( , )?
458459
}
459460
) => {
460461
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
461462
pub struct $name {
463+
pub build_compiler: Compiler,
462464
pub target: TargetSelection,
463465
}
464466

@@ -473,16 +475,33 @@ macro_rules! tool_check_step {
473475
}
474476

475477
fn make_run(run: RunConfig<'_>) {
476-
run.builder.ensure($name { target: run.target });
478+
let host = run.builder.config.host_target;
479+
let target = run.target;
480+
let build_compiler = match $mode {
481+
Mode::ToolBootstrap => run.builder.compiler(0, host),
482+
Mode::ToolStd => {
483+
// A small number of tools rely on in-tree standard
484+
// library crates (e.g. compiletest needs libtest).
485+
let build_compiler = run.builder.compiler(run.builder.top_stage, host);
486+
run.builder.std(build_compiler, host);
487+
run.builder.std(build_compiler, target);
488+
build_compiler
489+
}
490+
Mode::ToolRustc => {
491+
prepare_compiler_for_tool_rustc(run.builder, target)
492+
}
493+
_ => panic!("unexpected mode for tool check step: {:?}", $mode),
494+
};
495+
run.builder.ensure($name { target, build_compiler });
477496
}
478497

479498
fn run(self, builder: &Builder<'_>) {
480-
let Self { target } = self;
481-
run_tool_check_step(builder, target, stringify!($name), $path);
499+
let Self { target, build_compiler } = self;
500+
run_tool_check_step(builder, build_compiler, target, $path, $mode);
482501
}
483502

484503
fn metadata(&self) -> Option<StepMetadata> {
485-
Some(StepMetadata::check(stringify!($name), self.target))
504+
Some(StepMetadata::check(stringify!($name), self.target).built_by(self.build_compiler))
486505
}
487506
}
488507
}
@@ -491,19 +510,17 @@ macro_rules! tool_check_step {
491510
/// Used by the implementation of `Step::run` in `tool_check_step!`.
492511
fn run_tool_check_step(
493512
builder: &Builder<'_>,
513+
build_compiler: Compiler,
494514
target: TargetSelection,
495-
step_type_name: &str,
496515
path: &str,
516+
mode: Mode,
497517
) {
498518
let display_name = path.rsplit('/').next().unwrap();
499-
let compiler = builder.compiler(builder.top_stage, builder.config.host_target);
500-
501-
builder.ensure(Rustc::new(builder, compiler, target));
502519

503520
let mut cargo = prepare_tool_cargo(
504521
builder,
505-
compiler,
506-
Mode::ToolRustc,
522+
build_compiler,
523+
mode,
507524
target,
508525
builder.kind,
509526
path,
@@ -515,33 +532,56 @@ fn run_tool_check_step(
515532
&[],
516533
);
517534

535+
// FIXME: check bootstrap doesn't currently work with --all-targets
518536
cargo.arg("--all-targets");
519537

520-
let stamp = BuildStamp::new(&builder.cargo_out(compiler, Mode::ToolRustc, target))
521-
.with_prefix(&format!("{}-check", step_type_name.to_lowercase()));
538+
let stamp = BuildStamp::new(&builder.cargo_out(build_compiler, mode, target))
539+
.with_prefix(&format!("{display_name}-check"));
540+
541+
let stage = match mode {
542+
// Mode::ToolRustc is included here because of how msg_sysroot_tool prints stages
543+
Mode::Std | Mode::ToolRustc => build_compiler.stage,
544+
_ => build_compiler.stage + 1,
545+
};
522546

523-
let _guard = builder.msg_check(format!("{display_name} artifacts"), target, None);
547+
let _guard =
548+
builder.msg_tool(builder.kind, mode, display_name, stage, &build_compiler.host, &target);
524549
run_cargo(builder, cargo, builder.config.free_args.clone(), &stamp, vec![], true, false);
525550
}
526551

527-
tool_check_step!(Rustdoc { path: "src/tools/rustdoc", alt_path: "src/librustdoc" });
552+
tool_check_step!(Rustdoc {
553+
path: "src/tools/rustdoc",
554+
alt_path: "src/librustdoc",
555+
mode: Mode::ToolRustc
556+
});
528557
// Clippy, miri and Rustfmt are hybrids. They are external tools, but use a git subtree instead
529558
// of a submodule. Since the SourceType only drives the deny-warnings
530559
// behavior, treat it as in-tree so that any new warnings in clippy will be
531560
// rejected.
532-
tool_check_step!(Clippy { path: "src/tools/clippy" });
533-
tool_check_step!(Miri { path: "src/tools/miri" });
534-
tool_check_step!(CargoMiri { path: "src/tools/miri/cargo-miri" });
535-
tool_check_step!(Rustfmt { path: "src/tools/rustfmt" });
536-
tool_check_step!(MiroptTestTools { path: "src/tools/miropt-test-tools" });
537-
tool_check_step!(TestFloatParse { path: "src/tools/test-float-parse" });
538-
tool_check_step!(FeaturesStatusDump { path: "src/tools/features-status-dump" });
539-
540-
tool_check_step!(Bootstrap { path: "src/bootstrap", default: false });
561+
tool_check_step!(Clippy { path: "src/tools/clippy", mode: Mode::ToolRustc });
562+
tool_check_step!(Miri { path: "src/tools/miri", mode: Mode::ToolRustc });
563+
tool_check_step!(CargoMiri { path: "src/tools/miri/cargo-miri", mode: Mode::ToolRustc });
564+
tool_check_step!(Rustfmt { path: "src/tools/rustfmt", mode: Mode::ToolRustc });
565+
tool_check_step!(MiroptTestTools {
566+
path: "src/tools/miropt-test-tools",
567+
mode: Mode::ToolBootstrap
568+
});
569+
// We want to test the local std
570+
tool_check_step!(TestFloatParse { path: "src/tools/test-float-parse", mode: Mode::ToolStd });
571+
tool_check_step!(FeaturesStatusDump {
572+
path: "src/tools/features-status-dump",
573+
mode: Mode::ToolBootstrap
574+
});
575+
576+
tool_check_step!(Bootstrap { path: "src/bootstrap", mode: Mode::ToolBootstrap, default: false });
541577

542578
// `run-make-support` will be built as part of suitable run-make compiletest test steps, but support
543579
// check to make it easier to work on.
544-
tool_check_step!(RunMakeSupport { path: "src/tools/run-make-support", default: false });
580+
tool_check_step!(RunMakeSupport {
581+
path: "src/tools/run-make-support",
582+
mode: Mode::ToolBootstrap,
583+
default: false
584+
});
545585

546586
/// Check step for the `coverage-dump` bootstrap tool. The coverage-dump tool
547587
/// is used internally by coverage tests.

src/bootstrap/src/core/build_steps/tool.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ impl Builder<'_> {
7777
*target,
7878
),
7979
// doesn't depend on compiler, same as host compiler
80-
_ => self.msg(Kind::Build, build_stage, format_args!("tool {tool}"), *host, *target),
80+
_ => self.msg(kind, build_stage, format_args!("tool {tool}"), *host, *target),
8181
}
8282
}
8383
}

src/bootstrap/src/core/builder/tests.rs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1352,9 +1352,8 @@ mod snapshot {
13521352
.path("miri")
13531353
.render_steps(), @r"
13541354
[build] llvm <host>
1355-
[build] rustc 0 <host> -> rustc 1 <host>
13561355
[check] rustc 0 <host> -> rustc 1 <host>
1357-
[check] Miri <host>
1356+
[check] rustc 0 <host> -> Miri 1 <host>
13581357
");
13591358
}
13601359

@@ -1374,9 +1373,8 @@ mod snapshot {
13741373
.stage(1)
13751374
.render_steps(), @r"
13761375
[build] llvm <host>
1377-
[build] rustc 0 <host> -> rustc 1 <host>
13781376
[check] rustc 0 <host> -> rustc 1 <host>
1379-
[check] Miri <host>
1377+
[check] rustc 0 <host> -> Miri 1 <host>
13801378
");
13811379
}
13821380

@@ -1391,9 +1389,8 @@ mod snapshot {
13911389
[build] llvm <host>
13921390
[build] rustc 0 <host> -> rustc 1 <host>
13931391
[build] rustc 1 <host> -> std 1 <host>
1394-
[build] rustc 1 <host> -> rustc 2 <host>
13951392
[check] rustc 1 <host> -> rustc 2 <host>
1396-
[check] Miri <host>
1393+
[check] rustc 1 <host> -> Miri 2 <host>
13971394
");
13981395
}
13991396

@@ -1448,6 +1445,15 @@ mod snapshot {
14481445
");
14491446
}
14501447

1448+
#[test]
1449+
fn check_bootstrap_tool() {
1450+
let ctx = TestCtx::new();
1451+
insta::assert_snapshot!(
1452+
ctx.config("check")
1453+
.path("run-make-support")
1454+
.render_steps(), @"[check] rustc 0 <host> -> RunMakeSupport 1 <host>");
1455+
}
1456+
14511457
#[test]
14521458
fn test_exclude() {
14531459
let ctx = TestCtx::new();

0 commit comments

Comments
 (0)