Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

replace llvm-rebuild-trigger with submodule commit hash #59303

Merged
merged 1 commit into from
Mar 29, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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.