From 80311116609bdf5d414a632cea0959f0c29cccda Mon Sep 17 00:00:00 2001 From: Dominik Maier Date: Thu, 27 Jun 2024 01:19:45 +0200 Subject: [PATCH] Make ddg map compilation optional (#2341) * Make ddg map compilation optional * undo * undo --- libafl_cc/Cargo.toml | 3 +++ libafl_cc/build.rs | 30 +++++++++++----------- libafl_qemu/libafl_qemu_build/src/build.rs | 2 +- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/libafl_cc/Cargo.toml b/libafl_cc/Cargo.toml index 94e18d5ad3..1db1078766 100644 --- a/libafl_cc/Cargo.toml +++ b/libafl_cc/Cargo.toml @@ -13,6 +13,9 @@ 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 +[features] +default = [] + [build-dependencies] cc = { version = "1.0", features = ["parallel"] } which = "6.0" diff --git a/libafl_cc/build.rs b/libafl_cc/build.rs index 1b44657b13..5c70204bc1 100644 --- a/libafl_cc/build.rs +++ b/libafl_cc/build.rs @@ -152,7 +152,7 @@ fn build_pass( src_dir: &Path, src_file: &str, additional_srcfiles: Option<&Vec<&str>>, - optional: bool, + required: bool, ) { let dot_offset = src_file.rfind('.').unwrap(); let src_stub = &src_file[..dot_offset]; @@ -164,7 +164,7 @@ fn build_pass( }; println!("cargo:rerun-if-changed=src/{src_file}"); - let r = if cfg!(unix) { + let command_result = if cfg!(unix) { let r = Command::new(bindir_path.join("clang++")) .arg("-v") .arg(format!("--target={}", env::var("HOST").unwrap())) @@ -198,27 +198,27 @@ fn build_pass( None }; - match r { - Some(r) => match r { + match command_result { + Some(res) => match res { Ok(s) => { if !s.success() { - if optional { - println!("cargo:warning=Skipping src/{src_file} - Exit status: {s}"); + if required { + panic!("Failed to compile required compiler pass src/{src_file} - Exit status: {s}"); } else { - panic!("Failed to compile {src_file} - Exit status: {s}"); + println!("cargo:warning=Skipping non-required compiler pass src/{src_file} - Reason: Exit status {s}"); } } } Err(err) => { - if optional { - println!("cargo:warning=Skipping src/{src_file} - {err}"); + if required { + panic!("Failed to compile required compiler pass src/{src_file} - {err}"); } else { - panic!("Failed to compile {src_file} - {err}"); + println!("cargo:warning=Skipping non-required compiler pass src/{src_file} - Reason: {err}"); } } }, None => { - println!("cargo:warning=Skipping src/{src_file} - Only supported on Windows or *nix."); + println!("cargo:warning=Skipping compiler pass src/{src_file} - Only supported on Windows or *nix."); } } } @@ -427,7 +427,7 @@ pub const LIBAFL_CC_LLVM_VERSION: Option = None; false, ); - for pass in &[ + for pass in [ "function-logging.cc", "cmplog-routines-pass.cc", "autotokens-pass.cc", @@ -443,12 +443,12 @@ pub const LIBAFL_CC_LLVM_VERSION: Option = None; src_dir, pass, None, - false, + true, ); } // Optional pass - for pass in &["dump-cfg-pass.cc", "profiling.cc"] { + for pass in ["dump-cfg-pass.cc", "profiling.cc"] { build_pass( bindir_path, out_dir, @@ -457,7 +457,7 @@ pub const LIBAFL_CC_LLVM_VERSION: Option = None; src_dir, pass, None, - true, + false, ); } diff --git a/libafl_qemu/libafl_qemu_build/src/build.rs b/libafl_qemu/libafl_qemu_build/src/build.rs index d7aaafe5cd..9b28b130c1 100644 --- a/libafl_qemu/libafl_qemu_build/src/build.rs +++ b/libafl_qemu/libafl_qemu_build/src/build.rs @@ -434,7 +434,7 @@ pub fn build( /* let mut objects = vec![]; - for dir in &[ + for dir in [ build_dir.join("libcommon.fa.p"), build_dir.join(format!("libqemu-{cpu_target}-{target_suffix}.fa.p")), ] {