Auto merge of #52036 - collin5:b50509-2, r=collin5
Clean up dependency tracking in Rustbuild [2/2] Make `clear_if_dirty` calls in `Builder::cargo` with stamp dependencies for the given Mode. Continuation of #50904 Ref issue #50509 r? @Mark-Simulacrum
This commit is contained in:
@@ -708,6 +708,80 @@ impl<'a> Builder<'a> {
|
|||||||
) -> Command {
|
) -> Command {
|
||||||
let mut cargo = Command::new(&self.initial_cargo);
|
let mut cargo = Command::new(&self.initial_cargo);
|
||||||
let out_dir = self.stage_out(compiler, mode);
|
let out_dir = self.stage_out(compiler, mode);
|
||||||
|
|
||||||
|
// command specific path, we call clear_if_dirty with this
|
||||||
|
let mut my_out = match cmd {
|
||||||
|
"build" => self.cargo_out(compiler, mode, target),
|
||||||
|
|
||||||
|
// This is the intended out directory for crate documentation.
|
||||||
|
"doc" => self.crate_doc_out(target),
|
||||||
|
|
||||||
|
_ => self.stage_out(compiler, mode),
|
||||||
|
};
|
||||||
|
|
||||||
|
// This is for the original compiler, but if we're forced to use stage 1, then
|
||||||
|
// std/test/rustc stamps won't exist in stage 2, so we need to get those from stage 1, since
|
||||||
|
// we copy the libs forward.
|
||||||
|
let cmp = if self.force_use_stage1(compiler, target) {
|
||||||
|
self.compiler(1, compiler.host)
|
||||||
|
} else {
|
||||||
|
compiler
|
||||||
|
};
|
||||||
|
|
||||||
|
let libstd_stamp = match cmd {
|
||||||
|
"check" => check::libstd_stamp(self, cmp, target),
|
||||||
|
_ => compile::libstd_stamp(self, cmp, target),
|
||||||
|
};
|
||||||
|
|
||||||
|
let libtest_stamp = match cmd {
|
||||||
|
"check" => check::libtest_stamp(self, cmp, target),
|
||||||
|
_ => compile::libstd_stamp(self, cmp, target),
|
||||||
|
};
|
||||||
|
|
||||||
|
let librustc_stamp = match cmd {
|
||||||
|
"check" => check::librustc_stamp(self, cmp, target),
|
||||||
|
_ => compile::librustc_stamp(self, cmp, target),
|
||||||
|
};
|
||||||
|
|
||||||
|
if cmd == "doc" {
|
||||||
|
if mode == Mode::Rustc || mode == Mode::ToolRustc || mode == Mode::Codegen {
|
||||||
|
// This is the intended out directory for compiler documentation.
|
||||||
|
my_out = self.compiler_doc_out(target);
|
||||||
|
}
|
||||||
|
let rustdoc = self.rustdoc(compiler.host);
|
||||||
|
self.clear_if_dirty(&my_out, &rustdoc);
|
||||||
|
} else if cmd != "test" {
|
||||||
|
match mode {
|
||||||
|
Mode::Std => {
|
||||||
|
self.clear_if_dirty(&my_out, &self.rustc(compiler));
|
||||||
|
},
|
||||||
|
Mode::Test => {
|
||||||
|
self.clear_if_dirty(&my_out, &libstd_stamp);
|
||||||
|
},
|
||||||
|
Mode::Rustc => {
|
||||||
|
self.clear_if_dirty(&my_out, &self.rustc(compiler));
|
||||||
|
self.clear_if_dirty(&my_out, &libstd_stamp);
|
||||||
|
self.clear_if_dirty(&my_out, &libtest_stamp);
|
||||||
|
},
|
||||||
|
Mode::Codegen => {
|
||||||
|
self.clear_if_dirty(&my_out, &librustc_stamp);
|
||||||
|
},
|
||||||
|
Mode::ToolBootstrap => { },
|
||||||
|
Mode::ToolStd => {
|
||||||
|
self.clear_if_dirty(&my_out, &libstd_stamp);
|
||||||
|
},
|
||||||
|
Mode::ToolTest => {
|
||||||
|
self.clear_if_dirty(&my_out, &libstd_stamp);
|
||||||
|
self.clear_if_dirty(&my_out, &libtest_stamp);
|
||||||
|
},
|
||||||
|
Mode::ToolRustc => {
|
||||||
|
self.clear_if_dirty(&my_out, &libstd_stamp);
|
||||||
|
self.clear_if_dirty(&my_out, &libtest_stamp);
|
||||||
|
self.clear_if_dirty(&my_out, &librustc_stamp);
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
cargo
|
cargo
|
||||||
.env("CARGO_TARGET_DIR", out_dir)
|
.env("CARGO_TARGET_DIR", out_dir)
|
||||||
.arg(cmd);
|
.arg(cmd);
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
use compile::{run_cargo, std_cargo, test_cargo, rustc_cargo, rustc_cargo_env, add_to_sysroot};
|
use compile::{run_cargo, std_cargo, test_cargo, rustc_cargo, rustc_cargo_env, add_to_sysroot};
|
||||||
use builder::{RunConfig, Builder, ShouldRun, Step};
|
use builder::{RunConfig, Builder, ShouldRun, Step};
|
||||||
use tool::{self, prepare_tool_cargo, SourceType};
|
use tool::{prepare_tool_cargo, SourceType};
|
||||||
use {Compiler, Mode};
|
use {Compiler, Mode};
|
||||||
use cache::{INTERNER, Interned};
|
use cache::{INTERNER, Interned};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
@@ -40,14 +40,11 @@ impl Step for Std {
|
|||||||
let target = self.target;
|
let target = self.target;
|
||||||
let compiler = builder.compiler(0, builder.config.build);
|
let compiler = builder.compiler(0, builder.config.build);
|
||||||
|
|
||||||
let out_dir = builder.stage_out(compiler, Mode::Std);
|
|
||||||
builder.clear_if_dirty(&out_dir, &builder.rustc(compiler));
|
|
||||||
|
|
||||||
let mut cargo = builder.cargo(compiler, Mode::Std, target, "check");
|
let mut cargo = builder.cargo(compiler, Mode::Std, target, "check");
|
||||||
std_cargo(builder, &compiler, target, &mut cargo);
|
std_cargo(builder, &compiler, target, &mut cargo);
|
||||||
|
|
||||||
let _folder = builder.fold_output(|| format!("stage{}-std", compiler.stage));
|
let _folder = builder.fold_output(|| format!("stage{}-std", compiler.stage));
|
||||||
println!("Checking std artifacts ({} -> {})", &compiler.host, target);
|
builder.info(&format!("Checking std artifacts ({} -> {})", &compiler.host, target));
|
||||||
run_cargo(builder,
|
run_cargo(builder,
|
||||||
&mut cargo,
|
&mut cargo,
|
||||||
vec![],
|
vec![],
|
||||||
@@ -88,15 +85,13 @@ impl Step for Rustc {
|
|||||||
let compiler = builder.compiler(0, builder.config.build);
|
let compiler = builder.compiler(0, builder.config.build);
|
||||||
let target = self.target;
|
let target = self.target;
|
||||||
|
|
||||||
let stage_out = builder.stage_out(compiler, Mode::Rustc);
|
builder.ensure(Test { target });
|
||||||
builder.clear_if_dirty(&stage_out, &libstd_stamp(builder, compiler, target));
|
|
||||||
builder.clear_if_dirty(&stage_out, &libtest_stamp(builder, compiler, target));
|
|
||||||
|
|
||||||
let mut cargo = builder.cargo(compiler, Mode::Rustc, target, "check");
|
let mut cargo = builder.cargo(compiler, Mode::Rustc, target, "check");
|
||||||
rustc_cargo(builder, &mut cargo);
|
rustc_cargo(builder, &mut cargo);
|
||||||
|
|
||||||
let _folder = builder.fold_output(|| format!("stage{}-rustc", compiler.stage));
|
let _folder = builder.fold_output(|| format!("stage{}-rustc", compiler.stage));
|
||||||
println!("Checking compiler artifacts ({} -> {})", &compiler.host, target);
|
builder.info(&format!("Checking compiler artifacts ({} -> {})", &compiler.host, target));
|
||||||
run_cargo(builder,
|
run_cargo(builder,
|
||||||
&mut cargo,
|
&mut cargo,
|
||||||
vec![],
|
vec![],
|
||||||
@@ -139,8 +134,7 @@ impl Step for CodegenBackend {
|
|||||||
let target = self.target;
|
let target = self.target;
|
||||||
let backend = self.backend;
|
let backend = self.backend;
|
||||||
|
|
||||||
let out_dir = builder.cargo_out(compiler, Mode::Codegen, target);
|
builder.ensure(Rustc { target });
|
||||||
builder.clear_if_dirty(&out_dir, &librustc_stamp(builder, compiler, target));
|
|
||||||
|
|
||||||
let mut cargo = builder.cargo(compiler, Mode::Codegen, target, "check");
|
let mut cargo = builder.cargo(compiler, Mode::Codegen, target, "check");
|
||||||
cargo.arg("--manifest-path").arg(builder.src.join("src/librustc_codegen_llvm/Cargo.toml"));
|
cargo.arg("--manifest-path").arg(builder.src.join("src/librustc_codegen_llvm/Cargo.toml"));
|
||||||
@@ -180,14 +174,13 @@ impl Step for Test {
|
|||||||
let compiler = builder.compiler(0, builder.config.build);
|
let compiler = builder.compiler(0, builder.config.build);
|
||||||
let target = self.target;
|
let target = self.target;
|
||||||
|
|
||||||
let out_dir = builder.stage_out(compiler, Mode::Test);
|
builder.ensure(Std { target });
|
||||||
builder.clear_if_dirty(&out_dir, &libstd_stamp(builder, compiler, target));
|
|
||||||
|
|
||||||
let mut cargo = builder.cargo(compiler, Mode::Test, target, "check");
|
let mut cargo = builder.cargo(compiler, Mode::Test, target, "check");
|
||||||
test_cargo(builder, &compiler, target, &mut cargo);
|
test_cargo(builder, &compiler, target, &mut cargo);
|
||||||
|
|
||||||
let _folder = builder.fold_output(|| format!("stage{}-test", compiler.stage));
|
let _folder = builder.fold_output(|| format!("stage{}-test", compiler.stage));
|
||||||
println!("Checking test artifacts ({} -> {})", &compiler.host, target);
|
builder.info(&format!("Checking test artifacts ({} -> {})", &compiler.host, target));
|
||||||
run_cargo(builder,
|
run_cargo(builder,
|
||||||
&mut cargo,
|
&mut cargo,
|
||||||
vec![],
|
vec![],
|
||||||
@@ -223,10 +216,7 @@ impl Step for Rustdoc {
|
|||||||
let compiler = builder.compiler(0, builder.config.build);
|
let compiler = builder.compiler(0, builder.config.build);
|
||||||
let target = self.target;
|
let target = self.target;
|
||||||
|
|
||||||
let stage_out = builder.stage_out(compiler, Mode::ToolRustc);
|
builder.ensure(Rustc { target });
|
||||||
builder.clear_if_dirty(&stage_out, &libstd_stamp(builder, compiler, target));
|
|
||||||
builder.clear_if_dirty(&stage_out, &libtest_stamp(builder, compiler, target));
|
|
||||||
builder.clear_if_dirty(&stage_out, &librustc_stamp(builder, compiler, target));
|
|
||||||
|
|
||||||
let mut cargo = prepare_tool_cargo(builder,
|
let mut cargo = prepare_tool_cargo(builder,
|
||||||
compiler,
|
compiler,
|
||||||
@@ -246,12 +236,7 @@ impl Step for Rustdoc {
|
|||||||
|
|
||||||
let libdir = builder.sysroot_libdir(compiler, target);
|
let libdir = builder.sysroot_libdir(compiler, target);
|
||||||
add_to_sysroot(&builder, &libdir, &rustdoc_stamp(builder, compiler, target));
|
add_to_sysroot(&builder, &libdir, &rustdoc_stamp(builder, compiler, target));
|
||||||
|
builder.cargo(compiler, Mode::ToolRustc, target, "clean");
|
||||||
builder.ensure(tool::CleanTools {
|
|
||||||
compiler,
|
|
||||||
target,
|
|
||||||
cause: Mode::Rustc,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ use serde_json;
|
|||||||
use util::{exe, libdir, is_dylib, CiEnv};
|
use util::{exe, libdir, is_dylib, CiEnv};
|
||||||
use {Compiler, Mode, GitRepo};
|
use {Compiler, Mode, GitRepo};
|
||||||
use native;
|
use native;
|
||||||
use tool;
|
|
||||||
|
|
||||||
use cache::{INTERNER, Interned};
|
use cache::{INTERNER, Interned};
|
||||||
use builder::{Step, RunConfig, ShouldRun, Builder};
|
use builder::{Step, RunConfig, ShouldRun, Builder};
|
||||||
@@ -107,8 +106,6 @@ impl Step for Std {
|
|||||||
copy_musl_third_party_objects(builder, target, &libdir);
|
copy_musl_third_party_objects(builder, target, &libdir);
|
||||||
}
|
}
|
||||||
|
|
||||||
let out_dir = builder.cargo_out(compiler, Mode::Std, target);
|
|
||||||
builder.clear_if_dirty(&out_dir, &builder.rustc(compiler));
|
|
||||||
let mut cargo = builder.cargo(compiler, Mode::Std, target, "build");
|
let mut cargo = builder.cargo(compiler, Mode::Std, target, "build");
|
||||||
std_cargo(builder, &compiler, target, &mut cargo);
|
std_cargo(builder, &compiler, target, &mut cargo);
|
||||||
|
|
||||||
@@ -246,11 +243,7 @@ impl Step for StdLink {
|
|||||||
copy_apple_sanitizer_dylibs(builder, &builder.native_dir(target), "osx", &libdir);
|
copy_apple_sanitizer_dylibs(builder, &builder.native_dir(target), "osx", &libdir);
|
||||||
}
|
}
|
||||||
|
|
||||||
builder.ensure(tool::CleanTools {
|
builder.cargo(target_compiler, Mode::ToolStd, target, "clean");
|
||||||
compiler: target_compiler,
|
|
||||||
target,
|
|
||||||
cause: Mode::Std,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -387,8 +380,6 @@ impl Step for Test {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let out_dir = builder.cargo_out(compiler, Mode::Test, target);
|
|
||||||
builder.clear_if_dirty(&out_dir, &libstd_stamp(builder, compiler, target));
|
|
||||||
let mut cargo = builder.cargo(compiler, Mode::Test, target, "build");
|
let mut cargo = builder.cargo(compiler, Mode::Test, target, "build");
|
||||||
test_cargo(builder, &compiler, target, &mut cargo);
|
test_cargo(builder, &compiler, target, &mut cargo);
|
||||||
|
|
||||||
@@ -448,11 +439,8 @@ impl Step for TestLink {
|
|||||||
target));
|
target));
|
||||||
add_to_sysroot(builder, &builder.sysroot_libdir(target_compiler, target),
|
add_to_sysroot(builder, &builder.sysroot_libdir(target_compiler, target),
|
||||||
&libtest_stamp(builder, compiler, target));
|
&libtest_stamp(builder, compiler, target));
|
||||||
builder.ensure(tool::CleanTools {
|
|
||||||
compiler: target_compiler,
|
builder.cargo(target_compiler, Mode::ToolTest, target, "clean");
|
||||||
target,
|
|
||||||
cause: Mode::Test,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -519,9 +507,6 @@ impl Step for Rustc {
|
|||||||
compiler: builder.compiler(self.compiler.stage, builder.config.build),
|
compiler: builder.compiler(self.compiler.stage, builder.config.build),
|
||||||
target: builder.config.build,
|
target: builder.config.build,
|
||||||
});
|
});
|
||||||
let cargo_out = builder.cargo_out(compiler, Mode::Rustc, target);
|
|
||||||
builder.clear_if_dirty(&cargo_out, &libstd_stamp(builder, compiler, target));
|
|
||||||
builder.clear_if_dirty(&cargo_out, &libtest_stamp(builder, compiler, target));
|
|
||||||
|
|
||||||
let mut cargo = builder.cargo(compiler, Mode::Rustc, target, "build");
|
let mut cargo = builder.cargo(compiler, Mode::Rustc, target, "build");
|
||||||
rustc_cargo(builder, &mut cargo);
|
rustc_cargo(builder, &mut cargo);
|
||||||
@@ -613,11 +598,7 @@ impl Step for RustcLink {
|
|||||||
target));
|
target));
|
||||||
add_to_sysroot(builder, &builder.sysroot_libdir(target_compiler, target),
|
add_to_sysroot(builder, &builder.sysroot_libdir(target_compiler, target),
|
||||||
&librustc_stamp(builder, compiler, target));
|
&librustc_stamp(builder, compiler, target));
|
||||||
builder.ensure(tool::CleanTools {
|
builder.cargo(target_compiler, Mode::ToolRustc, target, "clean");
|
||||||
compiler: target_compiler,
|
|
||||||
target,
|
|
||||||
cause: Mode::Rustc,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -674,7 +655,6 @@ impl Step for CodegenBackend {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let out_dir = builder.cargo_out(compiler, Mode::Codegen, target);
|
let out_dir = builder.cargo_out(compiler, Mode::Codegen, target);
|
||||||
builder.clear_if_dirty(&out_dir, &librustc_stamp(builder, compiler, target));
|
|
||||||
|
|
||||||
let mut cargo = builder.cargo(compiler, Mode::Codegen, target, "rustc");
|
let mut cargo = builder.cargo(compiler, Mode::Codegen, target, "rustc");
|
||||||
cargo.arg("--manifest-path")
|
cargo.arg("--manifest-path")
|
||||||
|
|||||||
@@ -455,7 +455,6 @@ impl Step for Std {
|
|||||||
let out = builder.doc_out(target);
|
let out = builder.doc_out(target);
|
||||||
t!(fs::create_dir_all(&out));
|
t!(fs::create_dir_all(&out));
|
||||||
let compiler = builder.compiler(stage, builder.config.build);
|
let compiler = builder.compiler(stage, builder.config.build);
|
||||||
let rustdoc = builder.rustdoc(compiler.host);
|
|
||||||
let compiler = if builder.force_use_stage1(compiler, target) {
|
let compiler = if builder.force_use_stage1(compiler, target) {
|
||||||
builder.compiler(1, compiler.host)
|
builder.compiler(1, compiler.host)
|
||||||
} else {
|
} else {
|
||||||
@@ -480,7 +479,6 @@ impl Step for Std {
|
|||||||
// This way rustdoc generates output directly into the output, and rustdoc
|
// This way rustdoc generates output directly into the output, and rustdoc
|
||||||
// will also directly handle merging.
|
// will also directly handle merging.
|
||||||
let my_out = builder.crate_doc_out(target);
|
let my_out = builder.crate_doc_out(target);
|
||||||
builder.clear_if_dirty(&my_out, &rustdoc);
|
|
||||||
t!(symlink_dir_force(&builder.config, &my_out, &out_dir));
|
t!(symlink_dir_force(&builder.config, &my_out, &out_dir));
|
||||||
|
|
||||||
let mut cargo = builder.cargo(compiler, Mode::Std, target, "doc");
|
let mut cargo = builder.cargo(compiler, Mode::Std, target, "doc");
|
||||||
@@ -535,7 +533,6 @@ impl Step for Test {
|
|||||||
let out = builder.doc_out(target);
|
let out = builder.doc_out(target);
|
||||||
t!(fs::create_dir_all(&out));
|
t!(fs::create_dir_all(&out));
|
||||||
let compiler = builder.compiler(stage, builder.config.build);
|
let compiler = builder.compiler(stage, builder.config.build);
|
||||||
let rustdoc = builder.rustdoc(compiler.host);
|
|
||||||
let compiler = if builder.force_use_stage1(compiler, target) {
|
let compiler = if builder.force_use_stage1(compiler, target) {
|
||||||
builder.compiler(1, compiler.host)
|
builder.compiler(1, compiler.host)
|
||||||
} else {
|
} else {
|
||||||
@@ -551,7 +548,6 @@ impl Step for Test {
|
|||||||
|
|
||||||
// See docs in std above for why we symlink
|
// See docs in std above for why we symlink
|
||||||
let my_out = builder.crate_doc_out(target);
|
let my_out = builder.crate_doc_out(target);
|
||||||
builder.clear_if_dirty(&my_out, &rustdoc);
|
|
||||||
t!(symlink_dir_force(&builder.config, &my_out, &out_dir));
|
t!(symlink_dir_force(&builder.config, &my_out, &out_dir));
|
||||||
|
|
||||||
let mut cargo = builder.cargo(compiler, Mode::Test, target, "doc");
|
let mut cargo = builder.cargo(compiler, Mode::Test, target, "doc");
|
||||||
@@ -603,7 +599,6 @@ impl Step for WhitelistedRustc {
|
|||||||
let out = builder.doc_out(target);
|
let out = builder.doc_out(target);
|
||||||
t!(fs::create_dir_all(&out));
|
t!(fs::create_dir_all(&out));
|
||||||
let compiler = builder.compiler(stage, builder.config.build);
|
let compiler = builder.compiler(stage, builder.config.build);
|
||||||
let rustdoc = builder.rustdoc(compiler.host);
|
|
||||||
let compiler = if builder.force_use_stage1(compiler, target) {
|
let compiler = if builder.force_use_stage1(compiler, target) {
|
||||||
builder.compiler(1, compiler.host)
|
builder.compiler(1, compiler.host)
|
||||||
} else {
|
} else {
|
||||||
@@ -619,7 +614,6 @@ impl Step for WhitelistedRustc {
|
|||||||
|
|
||||||
// See docs in std above for why we symlink
|
// See docs in std above for why we symlink
|
||||||
let my_out = builder.crate_doc_out(target);
|
let my_out = builder.crate_doc_out(target);
|
||||||
builder.clear_if_dirty(&my_out, &rustdoc);
|
|
||||||
t!(symlink_dir_force(&builder.config, &my_out, &out_dir));
|
t!(symlink_dir_force(&builder.config, &my_out, &out_dir));
|
||||||
|
|
||||||
let mut cargo = builder.cargo(compiler, Mode::Rustc, target, "doc");
|
let mut cargo = builder.cargo(compiler, Mode::Rustc, target, "doc");
|
||||||
@@ -678,7 +672,6 @@ impl Step for Rustc {
|
|||||||
|
|
||||||
// Get the correct compiler for this stage.
|
// Get the correct compiler for this stage.
|
||||||
let compiler = builder.compiler(stage, builder.config.build);
|
let compiler = builder.compiler(stage, builder.config.build);
|
||||||
let rustdoc = builder.rustdoc(compiler.host);
|
|
||||||
let compiler = if builder.force_use_stage1(compiler, target) {
|
let compiler = if builder.force_use_stage1(compiler, target) {
|
||||||
builder.compiler(1, compiler.host)
|
builder.compiler(1, compiler.host)
|
||||||
} else {
|
} else {
|
||||||
@@ -699,7 +692,6 @@ impl Step for Rustc {
|
|||||||
// We do not symlink to the same shared folder that already contains std library
|
// We do not symlink to the same shared folder that already contains std library
|
||||||
// documentation from previous steps as we do not want to include that.
|
// documentation from previous steps as we do not want to include that.
|
||||||
let out_dir = builder.stage_out(compiler, Mode::Rustc).join(target).join("doc");
|
let out_dir = builder.stage_out(compiler, Mode::Rustc).join(target).join("doc");
|
||||||
builder.clear_if_dirty(&out, &rustdoc);
|
|
||||||
t!(symlink_dir_force(&builder.config, &out, &out_dir));
|
t!(symlink_dir_force(&builder.config, &out, &out_dir));
|
||||||
|
|
||||||
// Build cargo command.
|
// Build cargo command.
|
||||||
@@ -780,7 +772,6 @@ impl Step for Rustdoc {
|
|||||||
|
|
||||||
// Get the correct compiler for this stage.
|
// Get the correct compiler for this stage.
|
||||||
let compiler = builder.compiler(stage, builder.config.build);
|
let compiler = builder.compiler(stage, builder.config.build);
|
||||||
let rustdoc = builder.rustdoc(compiler.host);
|
|
||||||
let compiler = if builder.force_use_stage1(compiler, target) {
|
let compiler = if builder.force_use_stage1(compiler, target) {
|
||||||
builder.compiler(1, compiler.host)
|
builder.compiler(1, compiler.host)
|
||||||
} else {
|
} else {
|
||||||
@@ -803,7 +794,6 @@ impl Step for Rustdoc {
|
|||||||
.join(target)
|
.join(target)
|
||||||
.join("doc");
|
.join("doc");
|
||||||
t!(fs::create_dir_all(&out_dir));
|
t!(fs::create_dir_all(&out_dir));
|
||||||
builder.clear_if_dirty(&out, &rustdoc);
|
|
||||||
t!(symlink_dir_force(&builder.config, &out, &out_dir));
|
t!(symlink_dir_force(&builder.config, &out, &out_dir));
|
||||||
|
|
||||||
// Build cargo command.
|
// Build cargo command.
|
||||||
|
|||||||
@@ -352,6 +352,7 @@ pub enum Mode {
|
|||||||
/// Compile a tool which uses all libraries we compile (up to rustc).
|
/// Compile a tool which uses all libraries we compile (up to rustc).
|
||||||
/// Doesn't use the stage0 compiler libraries like "other", and includes
|
/// Doesn't use the stage0 compiler libraries like "other", and includes
|
||||||
/// tools like rustdoc, cargo, rls, etc.
|
/// tools like rustdoc, cargo, rls, etc.
|
||||||
|
ToolTest,
|
||||||
ToolStd,
|
ToolStd,
|
||||||
ToolRustc,
|
ToolRustc,
|
||||||
}
|
}
|
||||||
@@ -572,6 +573,7 @@ impl Build {
|
|||||||
Mode::Codegen => "-codegen",
|
Mode::Codegen => "-codegen",
|
||||||
Mode::ToolBootstrap => "-bootstrap-tools",
|
Mode::ToolBootstrap => "-bootstrap-tools",
|
||||||
Mode::ToolStd => "-tools",
|
Mode::ToolStd => "-tools",
|
||||||
|
Mode::ToolTest => "-tools",
|
||||||
Mode::ToolRustc => "-tools",
|
Mode::ToolRustc => "-tools",
|
||||||
};
|
};
|
||||||
self.out.join(&*compiler.host)
|
self.out.join(&*compiler.host)
|
||||||
|
|||||||
@@ -19,62 +19,12 @@ use Mode;
|
|||||||
use Compiler;
|
use Compiler;
|
||||||
use builder::{Step, RunConfig, ShouldRun, Builder};
|
use builder::{Step, RunConfig, ShouldRun, Builder};
|
||||||
use util::{exe, add_lib_path};
|
use util::{exe, add_lib_path};
|
||||||
use compile::{self, libtest_stamp, libstd_stamp, librustc_stamp};
|
use compile;
|
||||||
use native;
|
use native;
|
||||||
use channel::GitInfo;
|
use channel::GitInfo;
|
||||||
use cache::Interned;
|
use cache::Interned;
|
||||||
use toolstate::ToolState;
|
use toolstate::ToolState;
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
|
|
||||||
pub struct CleanTools {
|
|
||||||
pub compiler: Compiler,
|
|
||||||
pub target: Interned<String>,
|
|
||||||
pub cause: Mode,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Step for CleanTools {
|
|
||||||
type Output = ();
|
|
||||||
|
|
||||||
fn should_run(run: ShouldRun) -> ShouldRun {
|
|
||||||
run.never()
|
|
||||||
}
|
|
||||||
|
|
||||||
fn run(self, builder: &Builder) {
|
|
||||||
let compiler = self.compiler;
|
|
||||||
let target = self.target;
|
|
||||||
let cause = self.cause;
|
|
||||||
|
|
||||||
// This is for the original compiler, but if we're forced to use stage 1, then
|
|
||||||
// std/test/rustc stamps won't exist in stage 2, so we need to get those from stage 1, since
|
|
||||||
// we copy the libs forward.
|
|
||||||
let tools_dir = builder.stage_out(compiler, Mode::ToolRustc);
|
|
||||||
let compiler = if builder.force_use_stage1(compiler, target) {
|
|
||||||
builder.compiler(1, compiler.host)
|
|
||||||
} else {
|
|
||||||
compiler
|
|
||||||
};
|
|
||||||
|
|
||||||
for &cur_mode in &[Mode::Std, Mode::Test, Mode::Rustc] {
|
|
||||||
let stamp = match cur_mode {
|
|
||||||
Mode::Std => libstd_stamp(builder, compiler, target),
|
|
||||||
Mode::Test => libtest_stamp(builder, compiler, target),
|
|
||||||
Mode::Rustc => librustc_stamp(builder, compiler, target),
|
|
||||||
_ => panic!(),
|
|
||||||
};
|
|
||||||
|
|
||||||
if builder.clear_if_dirty(&tools_dir, &stamp) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we are a rustc tool, and std changed, we also need to clear ourselves out -- our
|
|
||||||
// dependencies depend on std. Therefore, we iterate up until our own mode.
|
|
||||||
if cause == cur_mode {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
|
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
|
||||||
pub enum SourceType {
|
pub enum SourceType {
|
||||||
InTree,
|
InTree,
|
||||||
|
|||||||
Reference in New Issue
Block a user