Skip to content

Commit

Permalink
Rollup merge of rust-lang#39892 - petrochenkov:rt, r=alexcrichton
Browse files Browse the repository at this point in the history
Fix test caching on Windows/GNU

Addresses rust-lang#36385 (comment)

Previously the sysroot directory was purged on every build and mingw startup objects were rebuilt unconditionally and always triggered test reruns.
Now the sysroot directory is reused and mingw startup objects are rebuilt only when necessary, so test caching works.
  • Loading branch information
frewsxcv authored Feb 23, 2017
2 parents 2bd153e + 0c4c6fd commit da13ce6
Showing 1 changed file with 21 additions and 13 deletions.
34 changes: 21 additions & 13 deletions src/bootstrap/compile.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ use std::fs::{self, File};
use std::path::{Path, PathBuf};
use std::process::Command;

use build_helper::{output, mtime};
use build_helper::{output, mtime, up_to_date};
use filetime::FileTime;

use util::{exe, libdir, is_dylib, copy};
Expand Down Expand Up @@ -132,21 +132,29 @@ pub fn build_startup_objects(build: &Build, for_compiler: &Compiler, target: &st

let compiler = Compiler::new(0, &build.config.build);
let compiler_path = build.compiler_path(&compiler);
let into = build.sysroot_libdir(for_compiler, target);
t!(fs::create_dir_all(&into));

for file in t!(fs::read_dir(build.src.join("src/rtstartup"))) {
let file = t!(file);
let mut cmd = Command::new(&compiler_path);
build.run(cmd.env("RUSTC_BOOTSTRAP", "1")
.arg("--target").arg(target)
.arg("--emit=obj")
.arg("--out-dir").arg(&into)
.arg(file.path()));
let src_dir = &build.src.join("src/rtstartup");
let dst_dir = &build.native_dir(target).join("rtstartup");
let sysroot_dir = &build.sysroot_libdir(for_compiler, target);
t!(fs::create_dir_all(dst_dir));
t!(fs::create_dir_all(sysroot_dir));

for file in &["rsbegin", "rsend"] {
let src_file = &src_dir.join(file.to_string() + ".rs");
let dst_file = &dst_dir.join(file.to_string() + ".o");
if !up_to_date(src_file, dst_file) {
let mut cmd = Command::new(&compiler_path);
build.run(cmd.env("RUSTC_BOOTSTRAP", "1")
.arg("--target").arg(target)
.arg("--emit=obj")
.arg("--out-dir").arg(dst_dir)
.arg(src_file));
}

copy(dst_file, &sysroot_dir.join(file.to_string() + ".o"));
}

for obj in ["crt2.o", "dllcrt2.o"].iter() {
copy(&compiler_file(build.cc(target), obj), &into.join(obj));
copy(&compiler_file(build.cc(target), obj), &sysroot_dir.join(obj));
}
}

Expand Down

0 comments on commit da13ce6

Please sign in to comment.