Skip to content

Commit 3dd500d

Browse files
luca-barbieriMark-Simulacrum
authored andcommitted
Don't emit rerun-if-changed on llvm-config if using system LLVM
The code was broken because it printed "llvm-config" instead of the absolute path to the llvm-config executable, causing Cargo to always rebuild librustc_llvm if using system LLVM. Also, it's not the build system's job to rebuild when a system library changes, so we simply don't emit "rerun-if-changed" if a path to LLVM was not explicitly provided.
1 parent 53d58db commit 3dd500d

File tree

1 file changed

+20
-10
lines changed

1 file changed

+20
-10
lines changed

src/librustc_llvm/build.rs

+20-10
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,28 @@ fn main() {
2424
build_helper::restore_library_path();
2525

2626
let target = env::var("TARGET").expect("TARGET was not set");
27-
let llvm_config = env::var_os("LLVM_CONFIG").map(PathBuf::from).unwrap_or_else(|| {
28-
if let Some(dir) = env::var_os("CARGO_TARGET_DIR").map(PathBuf::from) {
29-
let to_test =
30-
dir.parent().unwrap().parent().unwrap().join(&target).join("llvm/bin/llvm-config");
31-
if Command::new(&to_test).output().is_ok() {
32-
return to_test;
27+
let llvm_config =
28+
env::var_os("LLVM_CONFIG").map(|x| Some(PathBuf::from(x))).unwrap_or_else(|| {
29+
if let Some(dir) = env::var_os("CARGO_TARGET_DIR").map(PathBuf::from) {
30+
let to_test = dir
31+
.parent()
32+
.unwrap()
33+
.parent()
34+
.unwrap()
35+
.join(&target)
36+
.join("llvm/bin/llvm-config");
37+
if Command::new(&to_test).output().is_ok() {
38+
return Some(to_test);
39+
}
3340
}
34-
}
35-
PathBuf::from("llvm-config")
36-
});
41+
None
42+
});
43+
44+
if let Some(llvm_config) = &llvm_config {
45+
println!("cargo:rerun-if-changed={}", llvm_config.display());
46+
}
47+
let llvm_config = llvm_config.unwrap_or_else(|| PathBuf::from("llvm-config"));
3748

38-
println!("cargo:rerun-if-changed={}", llvm_config.display());
3949
println!("cargo:rerun-if-env-changed=LLVM_CONFIG");
4050

4151
// Test whether we're cross-compiling LLVM. This is a pretty rare case

0 commit comments

Comments
 (0)