Make llvm pass build feature dependent (#2357)
* push * everybody is default * fix * fix
This commit is contained in:
parent
7c95afc42f
commit
762b6e008e
@ -14,7 +14,18 @@ categories = ["development-tools::testing", "emulators", "embedded", "os", "no-s
|
|||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = []
|
default = ["ddg-instr", "function-logging", "cmplog-routines", "autotokens", "coverage-accounting", "cmplog-instructions", "ctx", "dump-cfg", "profiling"]
|
||||||
|
|
||||||
|
# llvm passes
|
||||||
|
ddg-instr = []
|
||||||
|
function-logging = []
|
||||||
|
cmplog-routines = []
|
||||||
|
autotokens = []
|
||||||
|
coverage-accounting = []
|
||||||
|
cmplog-instructions = []
|
||||||
|
ctx = []
|
||||||
|
dump-cfg = []
|
||||||
|
profiling = []
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
cc = { version = "1.0", features = ["parallel"] }
|
cc = { version = "1.0", features = ["parallel"] }
|
||||||
|
@ -144,6 +144,7 @@ fn find_llvm_version() -> Option<i32> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[allow(clippy::too_many_arguments)]
|
#[allow(clippy::too_many_arguments)]
|
||||||
|
#[allow(unused)]
|
||||||
fn build_pass(
|
fn build_pass(
|
||||||
bindir_path: &Path,
|
bindir_path: &Path,
|
||||||
out_dir: &Path,
|
out_dir: &Path,
|
||||||
@ -199,7 +200,8 @@ fn build_pass(
|
|||||||
};
|
};
|
||||||
|
|
||||||
match command_result {
|
match command_result {
|
||||||
Some(res) => match res {
|
Some(res) => {
|
||||||
|
match res {
|
||||||
Ok(s) => {
|
Ok(s) => {
|
||||||
if !s.success() {
|
if !s.success() {
|
||||||
if required {
|
if required {
|
||||||
@ -211,12 +213,13 @@ fn build_pass(
|
|||||||
}
|
}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
if required {
|
if required {
|
||||||
panic!("Failed to compile required compiler pass src/{src_file} - {err}");
|
panic!("Failed to compile required compiler pass src/{src_file} - Error: {err}");
|
||||||
} else {
|
} else {
|
||||||
println!("cargo:warning=Skipping non-required compiler pass src/{src_file} - Reason: {err}");
|
println!("cargo:warning=Skipping non-required compiler pass src/{src_file} - Error: {err}");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
None => {
|
None => {
|
||||||
println!("cargo:warning=Skipping compiler pass src/{src_file} - Only supported on Windows or *nix.");
|
println!("cargo:warning=Skipping compiler pass src/{src_file} - Only supported on Windows or *nix.");
|
||||||
}
|
}
|
||||||
@ -416,6 +419,7 @@ pub const LIBAFL_CC_LLVM_VERSION: Option<usize> = None;
|
|||||||
ldflags.push(&sdk_path);
|
ldflags.push(&sdk_path);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#[cfg(feature = "ddg-instr")]
|
||||||
build_pass(
|
build_pass(
|
||||||
bindir_path,
|
bindir_path,
|
||||||
out_dir,
|
out_dir,
|
||||||
@ -424,42 +428,104 @@ pub const LIBAFL_CC_LLVM_VERSION: Option<usize> = None;
|
|||||||
src_dir,
|
src_dir,
|
||||||
"ddg-instr.cc",
|
"ddg-instr.cc",
|
||||||
Some(&vec!["ddg-utils.cc"]),
|
Some(&vec!["ddg-utils.cc"]),
|
||||||
false,
|
true,
|
||||||
);
|
);
|
||||||
|
|
||||||
for pass in [
|
#[cfg(feature = "function-logging")]
|
||||||
"function-logging.cc",
|
|
||||||
"cmplog-routines-pass.cc",
|
|
||||||
"autotokens-pass.cc",
|
|
||||||
"coverage-accounting-pass.cc",
|
|
||||||
"cmplog-instructions-pass.cc",
|
|
||||||
"ctx-pass.cc",
|
|
||||||
] {
|
|
||||||
build_pass(
|
build_pass(
|
||||||
bindir_path,
|
bindir_path,
|
||||||
out_dir,
|
out_dir,
|
||||||
&cxxflags,
|
&cxxflags,
|
||||||
&ldflags,
|
&ldflags,
|
||||||
src_dir,
|
src_dir,
|
||||||
pass,
|
"function-logging.cc",
|
||||||
None,
|
None,
|
||||||
true,
|
true,
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
// Optional pass
|
#[cfg(feature = "cmplog-routines")]
|
||||||
for pass in ["dump-cfg-pass.cc", "profiling.cc"] {
|
|
||||||
build_pass(
|
build_pass(
|
||||||
bindir_path,
|
bindir_path,
|
||||||
out_dir,
|
out_dir,
|
||||||
&cxxflags,
|
&cxxflags,
|
||||||
&ldflags,
|
&ldflags,
|
||||||
src_dir,
|
src_dir,
|
||||||
pass,
|
"cmplog-routines-pass.cc",
|
||||||
|
None,
|
||||||
|
true,
|
||||||
|
);
|
||||||
|
|
||||||
|
#[cfg(feature = "autotokens")]
|
||||||
|
build_pass(
|
||||||
|
bindir_path,
|
||||||
|
out_dir,
|
||||||
|
&cxxflags,
|
||||||
|
&ldflags,
|
||||||
|
src_dir,
|
||||||
|
"autotokens-pass.cc",
|
||||||
|
None,
|
||||||
|
true,
|
||||||
|
);
|
||||||
|
|
||||||
|
#[cfg(feature = "coverage-accounting")]
|
||||||
|
build_pass(
|
||||||
|
bindir_path,
|
||||||
|
out_dir,
|
||||||
|
&cxxflags,
|
||||||
|
&ldflags,
|
||||||
|
src_dir,
|
||||||
|
"coverage-accounting-pass.cc",
|
||||||
|
None,
|
||||||
|
true,
|
||||||
|
);
|
||||||
|
|
||||||
|
#[cfg(feature = "cmplog-instructions")]
|
||||||
|
build_pass(
|
||||||
|
bindir_path,
|
||||||
|
out_dir,
|
||||||
|
&cxxflags,
|
||||||
|
&ldflags,
|
||||||
|
src_dir,
|
||||||
|
"cmplog-instructions-pass.cc",
|
||||||
|
None,
|
||||||
|
true,
|
||||||
|
);
|
||||||
|
|
||||||
|
#[cfg(feature = "ctx")]
|
||||||
|
build_pass(
|
||||||
|
bindir_path,
|
||||||
|
out_dir,
|
||||||
|
&cxxflags,
|
||||||
|
&ldflags,
|
||||||
|
src_dir,
|
||||||
|
"ctx-pass.cc",
|
||||||
|
None,
|
||||||
|
true,
|
||||||
|
);
|
||||||
|
|
||||||
|
#[cfg(feature = "dump-cfg")]
|
||||||
|
build_pass(
|
||||||
|
bindir_path,
|
||||||
|
out_dir,
|
||||||
|
&cxxflags,
|
||||||
|
&ldflags,
|
||||||
|
src_dir,
|
||||||
|
"dump-cfg-pass.cc",
|
||||||
|
None,
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
|
||||||
|
#[cfg(feature = "profiling")]
|
||||||
|
build_pass(
|
||||||
|
bindir_path,
|
||||||
|
out_dir,
|
||||||
|
&cxxflags,
|
||||||
|
&ldflags,
|
||||||
|
src_dir,
|
||||||
|
"profiling-pass.cc",
|
||||||
None,
|
None,
|
||||||
false,
|
false,
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
cc::Build::new()
|
cc::Build::new()
|
||||||
.file(src_dir.join("no-link-rt.c"))
|
.file(src_dir.join("no-link-rt.c"))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user