
* Support capture stdout/stderr for ForkserverExecutor Reduce code duplication for ForkserverExecutor and CommandExecutor * use memfd_create from nix for macos and remove debug print * resolve macos issue * clippy * fix macos again * fix docs * fix imports * format code * fix docs again * fix sample * fix another wrong import * restore cargo.lock * add an inner for target args * fix and docs * fix * rename to ChildArgs and ChildArgsInner * revert forkserver_simple * allow debug child with observers * fmt * std marker * fix * move implementation to observers * implement serde * Add a forkserver_capture_stdout * renaming * fix * fmt * fix CommandExecutor * add a test to check capture * fix imports * clippy * fix sample * update sample to make it closer to real usecase * also CommandExecutor for sample * format * add forkserver_capture_stdout to CI * fix doc * accidentally remove * fix non_std * fix for windows * remove useless lint * remove spurious fuzzer * fix for windows again * fix imports * fix doc sample * fix docs * fix sample * fmt * clippy * clippy again * fix msrv * have cargo.lock for sample fuzzer * avoid double read * fix fsrv and cmd * fix sample * fix docs for windows * fix typo * clippy again * fix exec * typo * clippy * update * fix nyx executor * cliipy * fmt again * last clippy * clippy
62 lines
1.6 KiB
Rust
62 lines
1.6 KiB
Rust
use std::{
|
|
env,
|
|
path::Path,
|
|
process::{Command, exit},
|
|
};
|
|
|
|
const AFL_URL: &str = "https://github.com/AFLplusplus/AFLplusplus";
|
|
|
|
fn main() {
|
|
if cfg!(windows) {
|
|
println!("cargo:warning=No support for windows yet.");
|
|
exit(0);
|
|
}
|
|
|
|
unsafe {
|
|
env::remove_var("DEBUG");
|
|
}
|
|
let cwd = env::current_dir().unwrap().to_string_lossy().to_string();
|
|
|
|
let afl = format!("{}/AFLplusplus", &cwd);
|
|
let afl_cc = format!("{}/AFLplusplus/afl-cc", &cwd);
|
|
|
|
let afl_path = Path::new(&afl);
|
|
let afl_cc_path = Path::new(&afl_cc);
|
|
|
|
if !afl_path.is_dir() {
|
|
println!("cargo:warning=AFL++ not found, downloading...");
|
|
Command::new("git")
|
|
.arg("clone")
|
|
.arg(AFL_URL)
|
|
.status()
|
|
.unwrap();
|
|
}
|
|
|
|
if !afl_cc_path.is_file() {
|
|
let mut afl_cc_make = Command::new("make");
|
|
afl_cc_make.arg("all").current_dir(afl_path);
|
|
if let Ok(llvm_config) = env::var("LLVM_CONFIG") {
|
|
if !llvm_config.is_empty() {
|
|
afl_cc_make.env("LLVM_CONFIG", llvm_config);
|
|
}
|
|
}
|
|
afl_cc_make.status().unwrap();
|
|
}
|
|
|
|
let mut compile_command = Command::new(afl_cc_path);
|
|
compile_command
|
|
.args(["src/program.c", "-o"])
|
|
.arg(format!("{cwd}/target/release/program"));
|
|
|
|
if let Ok(llvm_config) = env::var("LLVM_CONFIG") {
|
|
if !llvm_config.is_empty() {
|
|
compile_command.env("LLVM_CONFIG", llvm_config);
|
|
}
|
|
}
|
|
|
|
compile_command.status().unwrap();
|
|
|
|
println!("cargo:rerun-if-changed=build.rs");
|
|
println!("cargo:rerun-if-changed=src/");
|
|
}
|