) -> Command {
let mut cargo = Command::new(&self.initial_cargo);
let out_dir = self.stage_out(compiler, mode);
+
+ 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 compiler = if self.force_use_stage1(compiler, target) {
+ self.compiler(1, compiler.host)
+ } else {
+ compiler
+ };
+
+ let libstd_stamp = match cmd {
+ "check" => check::libstd_stamp(self, compiler, target),
+ _ => compile::libstd_stamp(self, compiler, target),
+ };
+
+ let libtest_stamp = match cmd {
+ "check" => check::libtest_stamp(self, compiler, target),
+ _ => compile::libstd_stamp(self, compiler, target),
+ };
+
+ let librustc_stamp = match cmd {
+ "check" => check::librustc_stamp(self, compiler, target),
+ _ => compile::librustc_stamp(self, compiler, target),
+ };
+
+ if cmd == "doc" {
+ if mode == Mode::Rustc || mode == Mode::ToolRustc {
+ // 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 {
+ match mode {
+ Mode::Std => {
+ self.clear_if_dirty(&my_out, &self.rustc(compiler));
+ },
+ Mode::Rustc => {
+ self.clear_if_dirty(&my_out, &libstd_stamp);
+ self.clear_if_dirty(&my_out, &libtest_stamp);
+ },
+ Mode::Test => {
+ self.clear_if_dirty(&my_out, &libstd_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
.env("CARGO_TARGET_DIR", out_dir)
.arg(cmd);
let target = self.target;
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");
std_cargo(builder, &compiler, target, &mut cargo);
let compiler = builder.compiler(0, builder.config.build);
let target = self.target;
- let stage_out = builder.stage_out(compiler, Mode::Rustc);
- 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");
rustc_cargo(builder, &mut cargo);
let compiler = builder.compiler(0, builder.config.build);
let target = self.target;
- let out_dir = builder.stage_out(compiler, Mode::Test);
- builder.clear_if_dirty(&out_dir, &libstd_stamp(builder, compiler, target));
-
let mut cargo = builder.cargo(compiler, Mode::Test, target, "check");
test_cargo(builder, &compiler, target, &mut cargo);
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");
std_cargo(builder, &compiler, target, &mut cargo);
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");
test_cargo(builder, &compiler, target, &mut cargo);
compiler: builder.compiler(self.compiler.stage, 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");
rustc_cargo(builder, &mut cargo);
let out = builder.doc_out(target);
t!(fs::create_dir_all(&out));
let compiler = builder.compiler(stage, builder.config.build);
- let rustdoc = builder.rustdoc(compiler.host);
let compiler = if builder.force_use_stage1(compiler, target) {
builder.compiler(1, compiler.host)
} else {
// This way rustdoc generates output directly into the output, and rustdoc
// will also directly handle merging.
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));
let mut cargo = builder.cargo(compiler, Mode::Std, target, "doc");
let out = builder.doc_out(target);
t!(fs::create_dir_all(&out));
let compiler = builder.compiler(stage, builder.config.build);
- let rustdoc = builder.rustdoc(compiler.host);
let compiler = if builder.force_use_stage1(compiler, target) {
builder.compiler(1, compiler.host)
} else {
// See docs in std above for why we symlink
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));
let mut cargo = builder.cargo(compiler, Mode::Test, target, "doc");
let out = builder.doc_out(target);
t!(fs::create_dir_all(&out));
let compiler = builder.compiler(stage, builder.config.build);
- let rustdoc = builder.rustdoc(compiler.host);
let compiler = if builder.force_use_stage1(compiler, target) {
builder.compiler(1, compiler.host)
} else {
// See docs in std above for why we symlink
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));
let mut cargo = builder.cargo(compiler, Mode::Rustc, target, "doc");
// Get the correct compiler for this stage.
let compiler = builder.compiler(stage, builder.config.build);
- let rustdoc = builder.rustdoc(compiler.host);
let compiler = if builder.force_use_stage1(compiler, target) {
builder.compiler(1, compiler.host)
} else {
// 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.
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));
// Build cargo command.
// Get the correct compiler for this stage.
let compiler = builder.compiler(stage, builder.config.build);
- let rustdoc = builder.rustdoc(compiler.host);
let compiler = if builder.force_use_stage1(compiler, target) {
builder.compiler(1, compiler.host)
} else {
.join(target)
.join("doc");
t!(fs::create_dir_all(&out_dir));
- builder.clear_if_dirty(&out, &rustdoc);
t!(symlink_dir_force(&builder.config, &out, &out_dir));
// Build cargo command.
use Compiler;
use builder::{Step, RunConfig, ShouldRun, Builder};
use util::{exe, add_lib_path};
-use compile::{self, libtest_stamp, libstd_stamp, librustc_stamp};
+use compile;
use native;
use channel::GitInfo;
use cache::Interned;
run.never()
}
- fn run(self, builder: &Builder) {
- let compiler = self.compiler;
- let target = self.target;
+ fn run(self, _builder: &Builder) {
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 {