Skip to content

Commit be5f17c

Browse files
committed
Auto merge of #50904 - collin5:b50509, r=Mark-Simulacrum
Clean up dependency tracking in Rustbuild [1/2] Initial refactor of the `Mode` enum. Still a WIP Ref #50509 r? @Mark-Simulacrum
2 parents 7d576f2 + 36eafe5 commit be5f17c

File tree

8 files changed

+148
-111
lines changed

8 files changed

+148
-111
lines changed

src/bootstrap/builder.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -806,7 +806,7 @@ impl<'a> Builder<'a> {
806806
);
807807
}
808808

809-
if mode == Mode::Tool {
809+
if mode.is_tool() {
810810
// Tools like cargo and rls don't get debuginfo by default right now, but this can be
811811
// enabled in the config. Adding debuginfo makes them several times larger.
812812
if self.config.rust_debuginfo_tools {
@@ -871,7 +871,7 @@ impl<'a> Builder<'a> {
871871
//
872872
// If LLVM support is disabled we need to use the snapshot compiler to compile
873873
// build scripts, as the new compiler doesn't support executables.
874-
if mode == Mode::Libstd || !self.config.llvm_enabled {
874+
if mode == Mode::Std || !self.config.llvm_enabled {
875875
cargo
876876
.env("RUSTC_SNAPSHOT", &self.initial_rustc)
877877
.env("RUSTC_SNAPSHOT_LIBDIR", self.rustc_snapshot_libdir());
@@ -903,7 +903,7 @@ impl<'a> Builder<'a> {
903903
cargo.env("RUSTC_VERBOSE", format!("{}", self.verbosity));
904904

905905
// in std, we want to avoid denying warnings for stage 0 as that makes cfg's painful.
906-
if self.config.deny_warnings && !(mode == Mode::Libstd && stage == 0) {
906+
if self.config.deny_warnings && !(mode == Mode::Std && stage == 0) {
907907
cargo.env("RUSTC_DENY_WARNINGS", "1");
908908
}
909909

@@ -963,7 +963,7 @@ impl<'a> Builder<'a> {
963963
}
964964

965965
if cmd == "build"
966-
&& mode == Mode::Libstd
966+
&& mode == Mode::Std
967967
&& self.config.extended
968968
&& compiler.is_final_stage(self)
969969
{
@@ -1012,7 +1012,7 @@ impl<'a> Builder<'a> {
10121012
// be resolved because MinGW has the import library. The downside is we
10131013
// don't get newer functions from Windows, but we don't use any of them
10141014
// anyway.
1015-
if mode != Mode::Tool {
1015+
if !mode.is_tool() {
10161016
cargo.env("WINAPI_NO_BUNDLED_LIBRARIES", "1");
10171017
}
10181018

@@ -1751,7 +1751,7 @@ mod __test {
17511751
&[test::Crate {
17521752
compiler: Compiler { host, stage: 0 },
17531753
target: host,
1754-
mode: Mode::Libstd,
1754+
mode: Mode::Std,
17551755
test_kind: test::TestKind::Test,
17561756
krate: INTERNER.intern_str("std"),
17571757
},]

src/bootstrap/check.rs

+14-13
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,10 @@ impl Step for Std {
4040
let target = self.target;
4141
let compiler = builder.compiler(0, builder.config.build);
4242

43-
let out_dir = builder.stage_out(compiler, Mode::Libstd);
43+
let out_dir = builder.stage_out(compiler, Mode::Std);
4444
builder.clear_if_dirty(&out_dir, &builder.rustc(compiler));
4545

46-
let mut cargo = builder.cargo(compiler, Mode::Libstd, target, "check");
46+
let mut cargo = builder.cargo(compiler, Mode::Std, target, "check");
4747
std_cargo(builder, &compiler, target, &mut cargo);
4848

4949
let _folder = builder.fold_output(|| format!("stage{}-std", compiler.stage));
@@ -87,11 +87,11 @@ impl Step for Rustc {
8787
let compiler = builder.compiler(0, builder.config.build);
8888
let target = self.target;
8989

90-
let stage_out = builder.stage_out(compiler, Mode::Librustc);
90+
let stage_out = builder.stage_out(compiler, Mode::Rustc);
9191
builder.clear_if_dirty(&stage_out, &libstd_stamp(builder, compiler, target));
9292
builder.clear_if_dirty(&stage_out, &libtest_stamp(builder, compiler, target));
9393

94-
let mut cargo = builder.cargo(compiler, Mode::Librustc, target, "check");
94+
let mut cargo = builder.cargo(compiler, Mode::Rustc, target, "check");
9595
rustc_cargo(builder, &mut cargo);
9696

9797
let _folder = builder.fold_output(|| format!("stage{}-rustc", compiler.stage));
@@ -137,7 +137,7 @@ impl Step for CodegenBackend {
137137
let target = self.target;
138138
let backend = self.backend;
139139

140-
let mut cargo = builder.cargo(compiler, Mode::Librustc, target, "check");
140+
let mut cargo = builder.cargo(compiler, Mode::Codegen, target, "check");
141141
let features = builder.rustc_features().to_string();
142142
cargo.arg("--manifest-path").arg(builder.src.join("src/librustc_codegen_llvm/Cargo.toml"));
143143
rustc_cargo_env(builder, &mut cargo);
@@ -175,10 +175,10 @@ impl Step for Test {
175175
let compiler = builder.compiler(0, builder.config.build);
176176
let target = self.target;
177177

178-
let out_dir = builder.stage_out(compiler, Mode::Libtest);
178+
let out_dir = builder.stage_out(compiler, Mode::Test);
179179
builder.clear_if_dirty(&out_dir, &libstd_stamp(builder, compiler, target));
180180

181-
let mut cargo = builder.cargo(compiler, Mode::Libtest, target, "check");
181+
let mut cargo = builder.cargo(compiler, Mode::Test, target, "check");
182182
test_cargo(builder, &compiler, target, &mut cargo);
183183

184184
let _folder = builder.fold_output(|| format!("stage{}-test", compiler.stage));
@@ -219,6 +219,7 @@ impl Step for Rustdoc {
219219

220220
let mut cargo = prepare_tool_cargo(builder,
221221
compiler,
222+
Mode::ToolRustc,
222223
target,
223224
"check",
224225
"src/tools/rustdoc");
@@ -236,27 +237,27 @@ impl Step for Rustdoc {
236237
builder.ensure(tool::CleanTools {
237238
compiler,
238239
target,
239-
mode: Mode::Tool,
240+
cause: Mode::Rustc,
240241
});
241242
}
242243
}
243244

244245
/// Cargo's output path for the standard library in a given stage, compiled
245246
/// by a particular compiler for the specified target.
246247
pub fn libstd_stamp(builder: &Builder, compiler: Compiler, target: Interned<String>) -> PathBuf {
247-
builder.cargo_out(compiler, Mode::Libstd, target).join(".libstd-check.stamp")
248+
builder.cargo_out(compiler, Mode::Std, target).join(".libstd-check.stamp")
248249
}
249250

250251
/// Cargo's output path for libtest in a given stage, compiled by a particular
251252
/// compiler for the specified target.
252253
pub fn libtest_stamp(builder: &Builder, compiler: Compiler, target: Interned<String>) -> PathBuf {
253-
builder.cargo_out(compiler, Mode::Libtest, target).join(".libtest-check.stamp")
254+
builder.cargo_out(compiler, Mode::Test, target).join(".libtest-check.stamp")
254255
}
255256

256257
/// Cargo's output path for librustc in a given stage, compiled by a particular
257258
/// compiler for the specified target.
258259
pub fn librustc_stamp(builder: &Builder, compiler: Compiler, target: Interned<String>) -> PathBuf {
259-
builder.cargo_out(compiler, Mode::Librustc, target).join(".librustc-check.stamp")
260+
builder.cargo_out(compiler, Mode::Rustc, target).join(".librustc-check.stamp")
260261
}
261262

262263
/// Cargo's output path for librustc_codegen_llvm in a given stage, compiled by a particular
@@ -265,12 +266,12 @@ fn codegen_backend_stamp(builder: &Builder,
265266
compiler: Compiler,
266267
target: Interned<String>,
267268
backend: Interned<String>) -> PathBuf {
268-
builder.cargo_out(compiler, Mode::Librustc, target)
269+
builder.cargo_out(compiler, Mode::Codegen, target)
269270
.join(format!(".librustc_codegen_llvm-{}-check.stamp", backend))
270271
}
271272

272273
/// Cargo's output path for rustdoc in a given stage, compiled by a particular
273274
/// compiler for the specified target.
274275
pub fn rustdoc_stamp(builder: &Builder, compiler: Compiler, target: Interned<String>) -> PathBuf {
275-
builder.cargo_out(compiler, Mode::Tool, target).join(".rustdoc-check.stamp")
276+
builder.cargo_out(compiler, Mode::ToolRustc, target).join(".rustdoc-check.stamp")
276277
}

src/bootstrap/compile.rs

+16-16
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,9 @@ impl Step for Std {
9898
copy_musl_third_party_objects(builder, target, &libdir);
9999
}
100100

101-
let out_dir = builder.cargo_out(compiler, Mode::Libstd, target);
101+
let out_dir = builder.cargo_out(compiler, Mode::Std, target);
102102
builder.clear_if_dirty(&out_dir, &builder.rustc(compiler));
103-
let mut cargo = builder.cargo(compiler, Mode::Libstd, target, "build");
103+
let mut cargo = builder.cargo(compiler, Mode::Std, target, "build");
104104
std_cargo(builder, &compiler, target, &mut cargo);
105105

106106
let _folder = builder.fold_output(|| format!("stage{}-std", compiler.stage));
@@ -240,7 +240,7 @@ impl Step for StdLink {
240240
builder.ensure(tool::CleanTools {
241241
compiler: target_compiler,
242242
target,
243-
mode: Mode::Libstd,
243+
cause: Mode::Std,
244244
});
245245
}
246246
}
@@ -368,9 +368,9 @@ impl Step for Test {
368368
return;
369369
}
370370

371-
let out_dir = builder.cargo_out(compiler, Mode::Libtest, target);
371+
let out_dir = builder.cargo_out(compiler, Mode::Test, target);
372372
builder.clear_if_dirty(&out_dir, &libstd_stamp(builder, compiler, target));
373-
let mut cargo = builder.cargo(compiler, Mode::Libtest, target, "build");
373+
let mut cargo = builder.cargo(compiler, Mode::Test, target, "build");
374374
test_cargo(builder, &compiler, target, &mut cargo);
375375

376376
let _folder = builder.fold_output(|| format!("stage{}-test", compiler.stage));
@@ -431,7 +431,7 @@ impl Step for TestLink {
431431
builder.ensure(tool::CleanTools {
432432
compiler: target_compiler,
433433
target,
434-
mode: Mode::Libtest,
434+
cause: Mode::Test,
435435
});
436436
}
437437
}
@@ -489,11 +489,11 @@ impl Step for Rustc {
489489
compiler: builder.compiler(self.compiler.stage, builder.config.build),
490490
target: builder.config.build,
491491
});
492-
let cargo_out = builder.cargo_out(compiler, Mode::Librustc, target);
492+
let cargo_out = builder.cargo_out(compiler, Mode::Rustc, target);
493493
builder.clear_if_dirty(&cargo_out, &libstd_stamp(builder, compiler, target));
494494
builder.clear_if_dirty(&cargo_out, &libtest_stamp(builder, compiler, target));
495495

496-
let mut cargo = builder.cargo(compiler, Mode::Librustc, target, "build");
496+
let mut cargo = builder.cargo(compiler, Mode::Rustc, target, "build");
497497
rustc_cargo(builder, &mut cargo);
498498

499499
let _folder = builder.fold_output(|| format!("stage{}-rustc", compiler.stage));
@@ -585,7 +585,7 @@ impl Step for RustcLink {
585585
builder.ensure(tool::CleanTools {
586586
compiler: target_compiler,
587587
target,
588-
mode: Mode::Librustc,
588+
cause: Mode::Rustc,
589589
});
590590
}
591591
}
@@ -634,15 +634,15 @@ impl Step for CodegenBackend {
634634
return;
635635
}
636636

637-
let mut cargo = builder.cargo(compiler, Mode::Librustc, target, "build");
637+
let mut cargo = builder.cargo(compiler, Mode::Codegen, target, "build");
638638
let mut features = builder.rustc_features().to_string();
639639
cargo.arg("--manifest-path")
640640
.arg(builder.src.join("src/librustc_codegen_llvm/Cargo.toml"));
641641
rustc_cargo_env(builder, &mut cargo);
642642

643643
features += &build_codegen_backend(&builder, &mut cargo, &compiler, target, backend);
644644

645-
let tmp_stamp = builder.cargo_out(compiler, Mode::Librustc, target)
645+
let tmp_stamp = builder.cargo_out(compiler, Mode::Codegen, target)
646646
.join(".tmp.stamp");
647647

648648
let _folder = builder.fold_output(|| format!("stage{}-rustc_codegen_llvm", compiler.stage));
@@ -793,19 +793,19 @@ fn copy_lld_to_sysroot(builder: &Builder,
793793
/// Cargo's output path for the standard library in a given stage, compiled
794794
/// by a particular compiler for the specified target.
795795
pub fn libstd_stamp(builder: &Builder, compiler: Compiler, target: Interned<String>) -> PathBuf {
796-
builder.cargo_out(compiler, Mode::Libstd, target).join(".libstd.stamp")
796+
builder.cargo_out(compiler, Mode::Std, target).join(".libstd.stamp")
797797
}
798798

799799
/// Cargo's output path for libtest in a given stage, compiled by a particular
800800
/// compiler for the specified target.
801801
pub fn libtest_stamp(builder: &Builder, compiler: Compiler, target: Interned<String>) -> PathBuf {
802-
builder.cargo_out(compiler, Mode::Libtest, target).join(".libtest.stamp")
802+
builder.cargo_out(compiler, Mode::Test, target).join(".libtest.stamp")
803803
}
804804

805805
/// Cargo's output path for librustc in a given stage, compiled by a particular
806806
/// compiler for the specified target.
807807
pub fn librustc_stamp(builder: &Builder, compiler: Compiler, target: Interned<String>) -> PathBuf {
808-
builder.cargo_out(compiler, Mode::Librustc, target).join(".librustc.stamp")
808+
builder.cargo_out(compiler, Mode::Rustc, target).join(".librustc.stamp")
809809
}
810810

811811
/// Cargo's output path for librustc_codegen_llvm in a given stage, compiled by a particular
@@ -814,7 +814,7 @@ fn codegen_backend_stamp(builder: &Builder,
814814
compiler: Compiler,
815815
target: Interned<String>,
816816
backend: Interned<String>) -> PathBuf {
817-
builder.cargo_out(compiler, Mode::Librustc, target)
817+
builder.cargo_out(compiler, Mode::Codegen, target)
818818
.join(format!(".librustc_codegen_llvm-{}.stamp", backend))
819819
}
820820

@@ -971,7 +971,7 @@ impl Step for Assemble {
971971
}
972972

973973
// Link the compiler binary itself into place
974-
let out_dir = builder.cargo_out(build_compiler, Mode::Librustc, host);
974+
let out_dir = builder.cargo_out(build_compiler, Mode::Rustc, host);
975975
let rustc = out_dir.join(exe("rustc_binary", &*host));
976976
let bindir = sysroot.join("bin");
977977
t!(fs::create_dir_all(&bindir));

src/bootstrap/dist.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -722,7 +722,7 @@ impl Step for Analysis {
722722

723723
let image = tmpdir(builder).join(format!("{}-{}-image", name, target));
724724

725-
let src = builder.stage_out(compiler, Mode::Libstd)
725+
let src = builder.stage_out(compiler, Mode::Std)
726726
.join(target).join(builder.cargo_dir()).join("deps");
727727

728728
let image_src = src.join("save-analysis");
@@ -953,7 +953,7 @@ impl Step for PlainSourceTarball {
953953
if !has_cargo_vendor {
954954
let mut cmd = builder.cargo(
955955
builder.compiler(0, builder.config.build),
956-
Mode::Tool,
956+
Mode::ToolRustc,
957957
builder.config.build,
958958
"install"
959959
);

src/bootstrap/doc.rs

+12-10
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,7 @@ impl Step for Std {
463463
};
464464

465465
builder.ensure(compile::Std { compiler, target });
466-
let out_dir = builder.stage_out(compiler, Mode::Libstd)
466+
let out_dir = builder.stage_out(compiler, Mode::Std)
467467
.join(target).join("doc");
468468

469469
// Here what we're doing is creating a *symlink* (directory junction on
@@ -483,7 +483,7 @@ impl Step for Std {
483483
builder.clear_if_dirty(&my_out, &rustdoc);
484484
t!(symlink_dir_force(&builder.config, &my_out, &out_dir));
485485

486-
let mut cargo = builder.cargo(compiler, Mode::Libstd, target, "doc");
486+
let mut cargo = builder.cargo(compiler, Mode::Std, target, "doc");
487487
compile::std_cargo(builder, &compiler, target, &mut cargo);
488488

489489
// Keep a whitelist so we do not build internal stdlib crates, these will be
@@ -546,15 +546,15 @@ impl Step for Test {
546546
builder.ensure(Std { stage, target });
547547

548548
builder.ensure(compile::Test { compiler, target });
549-
let out_dir = builder.stage_out(compiler, Mode::Libtest)
549+
let out_dir = builder.stage_out(compiler, Mode::Test)
550550
.join(target).join("doc");
551551

552552
// See docs in std above for why we symlink
553553
let my_out = builder.crate_doc_out(target);
554554
builder.clear_if_dirty(&my_out, &rustdoc);
555555
t!(symlink_dir_force(&builder.config, &my_out, &out_dir));
556556

557-
let mut cargo = builder.cargo(compiler, Mode::Libtest, target, "doc");
557+
let mut cargo = builder.cargo(compiler, Mode::Test, target, "doc");
558558
compile::test_cargo(builder, &compiler, target, &mut cargo);
559559

560560
cargo.arg("--no-deps").arg("-p").arg("test");
@@ -614,15 +614,15 @@ impl Step for WhitelistedRustc {
614614
builder.ensure(Std { stage, target });
615615

616616
builder.ensure(compile::Rustc { compiler, target });
617-
let out_dir = builder.stage_out(compiler, Mode::Librustc)
617+
let out_dir = builder.stage_out(compiler, Mode::Rustc)
618618
.join(target).join("doc");
619619

620620
// See docs in std above for why we symlink
621621
let my_out = builder.crate_doc_out(target);
622622
builder.clear_if_dirty(&my_out, &rustdoc);
623623
t!(symlink_dir_force(&builder.config, &my_out, &out_dir));
624624

625-
let mut cargo = builder.cargo(compiler, Mode::Librustc, target, "doc");
625+
let mut cargo = builder.cargo(compiler, Mode::Rustc, target, "doc");
626626
compile::rustc_cargo(builder, &mut cargo);
627627

628628
// We don't want to build docs for internal compiler dependencies in this
@@ -698,12 +698,12 @@ impl Step for Rustc {
698698

699699
// We do not symlink to the same shared folder that already contains std library
700700
// documentation from previous steps as we do not want to include that.
701-
let out_dir = builder.stage_out(compiler, Mode::Librustc).join(target).join("doc");
701+
let out_dir = builder.stage_out(compiler, Mode::Rustc).join(target).join("doc");
702702
builder.clear_if_dirty(&out, &rustdoc);
703703
t!(symlink_dir_force(&builder.config, &out, &out_dir));
704704

705705
// Build cargo command.
706-
let mut cargo = builder.cargo(compiler, Mode::Librustc, target, "doc");
706+
let mut cargo = builder.cargo(compiler, Mode::Rustc, target, "doc");
707707
cargo.env("RUSTDOCFLAGS", "--document-private-items");
708708
compile::rustc_cargo(builder, &mut cargo);
709709

@@ -799,13 +799,15 @@ impl Step for Rustdoc {
799799
builder.ensure(tool::Rustdoc { host: compiler.host });
800800

801801
// Symlink compiler docs to the output directory of rustdoc documentation.
802-
let out_dir = builder.stage_out(compiler, Mode::Tool).join(target).join("doc");
802+
let out_dir = builder.stage_out(compiler, Mode::ToolRustc).join(target).join("doc");
803803
t!(fs::create_dir_all(&out_dir));
804804
builder.clear_if_dirty(&out, &rustdoc);
805805
t!(symlink_dir_force(&builder.config, &out, &out_dir));
806806

807807
// Build cargo command.
808-
let mut cargo = prepare_tool_cargo(builder, compiler, target, "doc", "src/tools/rustdoc");
808+
let mut cargo = prepare_tool_cargo(
809+
builder, compiler, Mode::ToolRustc, target, "doc", "src/tools/rustdoc");
810+
809811
cargo.env("RUSTDOCFLAGS", "--document-private-items");
810812
builder.run(&mut cargo);
811813
}

0 commit comments

Comments
 (0)