Skip to content

Commit

Permalink
Auto merge of #59303 - euclio:remove-rebuild-trigger, r=cuviper
Browse files Browse the repository at this point in the history
replace llvm-rebuild-trigger with submodule commit hash

As mentioned in #59285.

This PR removes the need to update the `llvm-rebuild-trigger` file. Instead, the latest commit hash of the appropriate LLVM submodule will be stored in the stamp file and used to detect if a build is required.

Fixes #42405.
Fixes #54959.
Fixes #55537.
  • Loading branch information
bors committed Mar 29, 2019
2 parents 003382e + e1daa36 commit 2002b4b
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 19 deletions.
48 changes: 33 additions & 15 deletions src/bootstrap/native.rs
Original file line number Diff line number Diff line change
Expand Up @@ -67,30 +67,47 @@ impl Step for Llvm {
}
}

let rebuild_trigger = builder.src.join("src/rustllvm/llvm-rebuild-trigger");
let rebuild_trigger_contents = t!(fs::read_to_string(&rebuild_trigger));

let (out_dir, llvm_config_ret_dir) = if emscripten {
let (submodule, root, out_dir, llvm_config_ret_dir) = if emscripten {
let dir = builder.emscripten_llvm_out(target);
let config_dir = dir.join("bin");
(dir, config_dir)
("src/llvm-emscripten", "src/llvm-emscripten", dir, config_dir)
} else {
let mut dir = builder.llvm_out(builder.config.build);
if !builder.config.build.contains("msvc") || builder.config.ninja {
dir.push("build");
}
(builder.llvm_out(target), dir.join("bin"))
("src/llvm-project", "src/llvm-project/llvm", builder.llvm_out(target), dir.join("bin"))
};
let done_stamp = out_dir.join("llvm-finished-building");

let git_output = t!(Command::new("git")
.args(&["rev-parse", "--verify", &format!("@:./{}", submodule)])
.current_dir(&builder.src)
.output());

let llvm_commit = if git_output.status.success() {
Some(git_output.stdout)
} else {
println!(
"git could not determine the LLVM submodule commit hash ({}). \
Assuming that an LLVM build is necessary.",
String::from_utf8_lossy(&git_output.stderr),
);
None
};

let build_llvm_config = llvm_config_ret_dir
.join(exe("llvm-config", &*builder.config.build));
if done_stamp.exists() {
let done_contents = t!(fs::read_to_string(&done_stamp));
let done_stamp = out_dir.join("llvm-finished-building");

// If LLVM was already built previously and contents of the rebuild-trigger file
// didn't change from the previous build, then no action is required.
if done_contents == rebuild_trigger_contents {
return build_llvm_config
if let Some(llvm_commit) = &llvm_commit {
if done_stamp.exists() {
let done_contents = t!(fs::read(&done_stamp));

// If LLVM was already built previously and the submodule's commit didn't change
// from the previous build, then no action is required.
if done_contents == llvm_commit.as_slice() {
return build_llvm_config
}
}
}

Expand All @@ -101,7 +118,6 @@ impl Step for Llvm {
t!(fs::create_dir_all(&out_dir));

// http://llvm.org/docs/CMake.html
let root = if self.emscripten { "src/llvm-emscripten" } else { "src/llvm-project/llvm" };
let mut cfg = cmake::Config::new(builder.src.join(root));

let profile = match (builder.config.llvm_optimize, builder.config.llvm_release_debuginfo) {
Expand Down Expand Up @@ -279,7 +295,9 @@ impl Step for Llvm {

cfg.build();

t!(fs::write(&done_stamp, &rebuild_trigger_contents));
if let Some(llvm_commit) = llvm_commit {
t!(fs::write(&done_stamp, &llvm_commit));
}

build_llvm_config
}
Expand Down
4 changes: 0 additions & 4 deletions src/rustllvm/llvm-rebuild-trigger

This file was deleted.

0 comments on commit 2002b4b

Please sign in to comment.