building libpng
This commit is contained in:
parent
245e44b9d5
commit
eb78c34f9e
@ -17,9 +17,15 @@ codegen-units = 1
|
|||||||
opt-level = 3
|
opt-level = 3
|
||||||
debug = true
|
debug = true
|
||||||
|
|
||||||
|
[build-dependencies]
|
||||||
|
cc = "1.0"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
clap = "2.32.0"
|
clap = "2.32.0"
|
||||||
afl = { path = "../../afl/" }
|
afl = { path = "../../afl/" }
|
||||||
|
|
||||||
[lib]
|
[[bin]]
|
||||||
crate-type = ["staticlib", "cdylib"]
|
name = "libfuzzer"
|
||||||
|
path = "./src/mod.rs"
|
||||||
|
test = false
|
||||||
|
bench = false
|
||||||
|
@ -4,40 +4,67 @@ use std::env;
|
|||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::process::Command;
|
use std::process::Command;
|
||||||
|
|
||||||
|
const LIBPNG_URL: &str = "http://prdownloads.sourceforge.net/libpng/libpng-1.6.37.tar.gz?download";
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let out_dir = env::var_os("OUT_DIR").unwrap();
|
let out_dir = env::var_os("OUT_DIR").unwrap();
|
||||||
let out_dir = out_dir.to_string_lossy();
|
let out_dir = out_dir.to_string_lossy().to_string();
|
||||||
|
let out_dir_path = Path::new(&out_dir);
|
||||||
println!("cargo:rerun-if-changed=./runtime/rt.c",);
|
|
||||||
Command::new("clang")
|
|
||||||
.args(&["-c", "./runtime/rt.c", "-o"])
|
|
||||||
.arg(&format!("{:?}/rt.o", out_dir))
|
|
||||||
.status()
|
|
||||||
.unwrap();
|
|
||||||
Command::new("ar")
|
|
||||||
.args(&["crus", "librt.a", "librt.o"])
|
|
||||||
.current_dir(&Path::new(out_dir.as_ref()))
|
|
||||||
.status()
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
|
println!("cargo:rerun-if-changed=./r&untime/rt.c",);
|
||||||
println!("cargo:rerun-if-changed=harness.c");
|
println!("cargo:rerun-if-changed=harness.c");
|
||||||
Command::new("clang")
|
|
||||||
.args(&["-c", "./harness.c", "-I./libpng-1.6.37", "-o"])
|
|
||||||
.arg(&format!("{}/harness.o", out_dir))
|
|
||||||
.status()
|
|
||||||
.unwrap();
|
|
||||||
Command::new("ar")
|
|
||||||
.args(&["crus", "harness.a", "harness.o"])
|
|
||||||
.current_dir(&Path::new(out_dir.as_ref()))
|
|
||||||
.status()
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
println!("cargo:rustc-link-search=native={}", out_dir);
|
cc::Build::new()
|
||||||
println!("cargo:rustc-link-lib=static=libpng16");
|
.file("./runtime/rt.c")
|
||||||
println!("cargo:rustc-link-lib=static=harness");
|
.file("./harness.c")
|
||||||
println!("cargo:rustc-link-lib=static=rt");
|
.compile("libfuzzer-sys");
|
||||||
|
|
||||||
println!("cargo:rerun-if-changed=libpng16.a");
|
|
||||||
|
let libpng = format!("{}/libpng-1.6.37", &out_dir);
|
||||||
|
let libpng_path = Path::new(&libpng);
|
||||||
|
let libpng_tar = format!("{}/libpng-1.6.37.tar.gz", &out_dir);
|
||||||
|
|
||||||
|
if !libpng_path.is_dir() {
|
||||||
|
if !Path::new(&libpng_tar).is_file() {
|
||||||
|
println!("cargo:warning=Libpng not found, downloading...");
|
||||||
|
// Download libpng
|
||||||
|
Command::new("wget")
|
||||||
|
.arg("-c")
|
||||||
|
.arg(LIBPNG_URL)
|
||||||
|
.arg("-O")
|
||||||
|
.arg(&libpng_tar)
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
}
|
||||||
|
Command::new("tar")
|
||||||
|
.current_dir(&out_dir_path)
|
||||||
|
.arg("-xvzf")
|
||||||
|
.arg(&libpng_tar)
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
Command::new(format!("{}/configure", &libpng))
|
||||||
|
.current_dir(&libpng_path)
|
||||||
|
.arg("--disable-shared")
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
Command::new("make")
|
||||||
|
.current_dir(&libpng_path)
|
||||||
|
.env("CC", "clang")
|
||||||
|
.env("CXX", "clang++")
|
||||||
|
.env("CFLAGS", "-D_DEFAULT_SOURCE -fPIE -fsanitize-coverage=trace-pc-guard")
|
||||||
|
.env("LDFLAGS", "-fPIE -fsanitize-coverage=trace-pc-guard")
|
||||||
|
.env("CXXFLAGS", "-D_DEFAULT_SOURCE -fPIE -fsanitize-coverage=trace-pc-guard")
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("cargo:rustc-link-search=native={}", &out_dir);
|
||||||
|
println!("cargo:rustc-link-search=native={}/.libs", &libpng);
|
||||||
|
println!("cargo:rustc-link-lib=static=png16");
|
||||||
|
|
||||||
|
//Deps for libpng: -pthread -lz -lm
|
||||||
|
println!("cargo:rustc-link-lib=dylib=m");
|
||||||
|
println!("cargo:rustc-link-lib=dylib=z");
|
||||||
|
|
||||||
println!("cargo:rerun-if-changed=build.rs");
|
println!("cargo:rerun-if-changed=build.rs");
|
||||||
}
|
}
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
CC ?= clang
|
|
||||||
|
|
||||||
all: rt.o
|
|
||||||
|
|
||||||
rt.o: rt.c
|
|
||||||
$(CC) -c rt.c
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f rt.o
|
|
||||||
|
|
@ -144,10 +144,3 @@ int afl_libfuzzer_init() {
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
|
||||||
|
|
||||||
afl_libfuzzer_main();
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
@ -47,8 +47,7 @@ fn harness<I>(_executor: &dyn Executor<I>, buf: &[u8]) -> ExitKind {
|
|||||||
|
|
||||||
const NAME_COV_MAP: &str = "cov_map";
|
const NAME_COV_MAP: &str = "cov_map";
|
||||||
|
|
||||||
#[no_mangle]
|
pub fn main() {
|
||||||
pub extern "C" fn afl_libfuzzer_main() {
|
|
||||||
let matches = App::new("libAFLrs fuzzer harness")
|
let matches = App::new("libAFLrs fuzzer harness")
|
||||||
.about("libAFLrs fuzzer harness help options.")
|
.about("libAFLrs fuzzer harness help options.")
|
||||||
.arg(
|
.arg(
|
Loading…
x
Reference in New Issue
Block a user