libafl_cc: Add override env vars to configure LLVM (#1310)
Co-authored-by: Dominik Maier <domenukk@gmail.com>
This commit is contained in:
parent
62b1bde7a9
commit
751d96f45a
@ -121,7 +121,12 @@ fn find_macos_sdk_libs() -> String {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn find_llvm_version() -> Option<i32> {
|
fn find_llvm_version() -> Option<i32> {
|
||||||
let output = exec_llvm_config(&["--version"]);
|
let llvm_env_version = env::var("LLVM_VERSION");
|
||||||
|
let output = if let Ok(version) = llvm_env_version {
|
||||||
|
version
|
||||||
|
} else {
|
||||||
|
exec_llvm_config(&["--version"])
|
||||||
|
};
|
||||||
if let Some(major) = output.split('.').collect::<Vec<&str>>().first() {
|
if let Some(major) = output.split('.').collect::<Vec<&str>>().first() {
|
||||||
if let Ok(res) = major.parse::<i32>() {
|
if let Ok(res) = major.parse::<i32>() {
|
||||||
return Some(res);
|
return Some(res);
|
||||||
@ -219,13 +224,27 @@ fn main() {
|
|||||||
let mut clang_constants_file = File::create(dest_path).expect("Could not create file");
|
let mut clang_constants_file = File::create(dest_path).expect("Could not create file");
|
||||||
|
|
||||||
println!("cargo:rerun-if-env-changed=LLVM_CONFIG");
|
println!("cargo:rerun-if-env-changed=LLVM_CONFIG");
|
||||||
|
println!("cargo:rerun-if-env-changed=LLVM_BINDIR");
|
||||||
|
println!("cargo:rerun-if-env-changed=LLVM_CXXFLAGS");
|
||||||
|
println!("cargo:rerun-if-env-changed=LLVM_LDFLAGS");
|
||||||
|
println!("cargo:rerun-if-env-changed=LLVM_VERSION");
|
||||||
println!("cargo:rerun-if-env-changed=LIBAFL_EDGES_MAP_SIZE");
|
println!("cargo:rerun-if-env-changed=LIBAFL_EDGES_MAP_SIZE");
|
||||||
println!("cargo:rerun-if-env-changed=LIBAFL_ACCOUNTING_MAP_SIZE");
|
println!("cargo:rerun-if-env-changed=LIBAFL_ACCOUNTING_MAP_SIZE");
|
||||||
println!("cargo:rerun-if-changed=src/common-llvm.h");
|
println!("cargo:rerun-if-changed=src/common-llvm.h");
|
||||||
println!("cargo:rerun-if-changed=build.rs");
|
println!("cargo:rerun-if-changed=build.rs");
|
||||||
|
|
||||||
|
let llvm_bindir = env::var("LLVM_BINDIR");
|
||||||
|
let llvm_cxxflags = env::var("LLVM_CXXFLAGS");
|
||||||
|
let llvm_ldflags = env::var("LLVM_LDFLAGS");
|
||||||
|
let llvm_version = env::var("LLVM_VERSION");
|
||||||
|
|
||||||
// test if llvm-config is available and we can compile the passes
|
// test if llvm-config is available and we can compile the passes
|
||||||
if find_llvm_config().is_err() {
|
if find_llvm_config().is_err()
|
||||||
|
&& !(llvm_bindir.is_ok()
|
||||||
|
&& llvm_cxxflags.is_ok()
|
||||||
|
&& llvm_ldflags.is_ok()
|
||||||
|
&& llvm_version.is_ok())
|
||||||
|
{
|
||||||
println!(
|
println!(
|
||||||
"cargo:warning=Failed to find llvm-config, we will not build LLVM passes. If you need them, set the LLVM_CONFIG environment variable to a recent llvm-config."
|
"cargo:warning=Failed to find llvm-config, we will not build LLVM passes. If you need them, set the LLVM_CONFIG environment variable to a recent llvm-config."
|
||||||
);
|
);
|
||||||
@ -246,7 +265,11 @@ pub const LIBAFL_CC_LLVM_VERSION: Option<usize> = None;
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let llvm_bindir = exec_llvm_config(&["--bindir"]);
|
let llvm_bindir = if let Ok(bindir) = llvm_bindir {
|
||||||
|
bindir
|
||||||
|
} else {
|
||||||
|
exec_llvm_config(&["--bindir"])
|
||||||
|
};
|
||||||
let bindir_path = Path::new(&llvm_bindir);
|
let bindir_path = Path::new(&llvm_bindir);
|
||||||
|
|
||||||
let clang;
|
let clang;
|
||||||
@ -270,7 +293,11 @@ pub const LIBAFL_CC_LLVM_VERSION: Option<usize> = None;
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let cxxflags = exec_llvm_config(&["--cxxflags"]);
|
let cxxflags = if let Ok(flags) = llvm_cxxflags {
|
||||||
|
flags
|
||||||
|
} else {
|
||||||
|
exec_llvm_config(&["--cxxflags"])
|
||||||
|
};
|
||||||
let mut cxxflags: Vec<String> = cxxflags.split_whitespace().map(String::from).collect();
|
let mut cxxflags: Vec<String> = cxxflags.split_whitespace().map(String::from).collect();
|
||||||
|
|
||||||
let edges_map_size: usize = option_env!("LIBAFL_EDGES_MAP_SIZE")
|
let edges_map_size: usize = option_env!("LIBAFL_EDGES_MAP_SIZE")
|
||||||
@ -322,7 +349,11 @@ pub const LIBAFL_CC_LLVM_VERSION: Option<usize> = None;
|
|||||||
}
|
}
|
||||||
llvm_config_ld.push("--ldflags");
|
llvm_config_ld.push("--ldflags");
|
||||||
|
|
||||||
let ldflags = exec_llvm_config(&llvm_config_ld);
|
let ldflags = if let Ok(flags) = llvm_ldflags {
|
||||||
|
flags
|
||||||
|
} else {
|
||||||
|
exec_llvm_config(&llvm_config_ld)
|
||||||
|
};
|
||||||
let mut ldflags: Vec<&str> = ldflags.split_whitespace().collect();
|
let mut ldflags: Vec<&str> = ldflags.split_whitespace().collect();
|
||||||
|
|
||||||
if cfg!(unix) {
|
if cfg!(unix) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user