Move win32 libs in libafl_cc and improve static lib linking (#176)
* Move win32 libs in libafl_cc and improve static lib linking * fmt
This commit is contained in:
parent
8202548648
commit
1faadec106
@ -1,4 +1,4 @@
|
||||
use libafl_cc::{ClangWrapper, CompilerWrapper, LIB_EXT, LIB_PREFIX};
|
||||
use libafl_cc::{ClangWrapper, CompilerWrapper};
|
||||
use std::env;
|
||||
|
||||
fn main() {
|
||||
@ -8,28 +8,13 @@ fn main() {
|
||||
dir.pop();
|
||||
|
||||
let mut cc = ClangWrapper::new("clang", "clang++");
|
||||
cc.from_args(&args)
|
||||
cc.is_cpp(false)
|
||||
.from_args(&args)
|
||||
.unwrap()
|
||||
.add_link_arg("-Wl,--whole-archive".into())
|
||||
.unwrap()
|
||||
.add_link_arg(
|
||||
dir.join(format!("{}generic_inmemory.{}", LIB_PREFIX, LIB_EXT))
|
||||
.display()
|
||||
.to_string(),
|
||||
)
|
||||
.unwrap()
|
||||
.add_link_arg("-Wl,-no-whole-archive".into())
|
||||
.link_staticlib(&dir, "generic_inmemory".into())
|
||||
.unwrap()
|
||||
.add_arg("-fsanitize-coverage=trace-pc-guard,trace-cmp".into())
|
||||
.unwrap();
|
||||
// Libraries needed by libafl on Windows
|
||||
#[cfg(windows)]
|
||||
cc.add_link_arg("-lws2_32".into())
|
||||
.unwrap()
|
||||
.add_link_arg("-lBcrypt".into())
|
||||
.unwrap()
|
||||
.add_link_arg("-lAdvapi32".into())
|
||||
.unwrap();
|
||||
cc.run().unwrap();
|
||||
} else {
|
||||
panic!("LibAFL CC: No Arguments given");
|
||||
|
@ -1,4 +1,4 @@
|
||||
use libafl_cc::{ClangWrapper, CompilerWrapper, LIB_EXT, LIB_PREFIX};
|
||||
use libafl_cc::{ClangWrapper, CompilerWrapper};
|
||||
use std::env;
|
||||
|
||||
fn main() {
|
||||
@ -8,29 +8,13 @@ fn main() {
|
||||
dir.pop();
|
||||
|
||||
let mut cc = ClangWrapper::new("clang", "clang++");
|
||||
cc.is_cpp()
|
||||
cc.is_cpp(true)
|
||||
.from_args(&args)
|
||||
.unwrap()
|
||||
.add_link_arg("-Wl,--whole-archive".into())
|
||||
.unwrap()
|
||||
.add_link_arg(
|
||||
dir.join(format!("{}generic_inmemory.{}", LIB_PREFIX, LIB_EXT))
|
||||
.display()
|
||||
.to_string(),
|
||||
)
|
||||
.unwrap()
|
||||
.add_link_arg("-Wl,-no-whole-archive".into())
|
||||
.link_staticlib(&dir, "generic_inmemory".into())
|
||||
.unwrap()
|
||||
.add_arg("-fsanitize-coverage=trace-pc-guard,trace-cmp".into())
|
||||
.unwrap();
|
||||
// Libraries needed by libafl on Windows
|
||||
#[cfg(windows)]
|
||||
cc.add_link_arg("-lws2_32".into())
|
||||
.unwrap()
|
||||
.add_link_arg("-lBcrypt".into())
|
||||
.unwrap()
|
||||
.add_link_arg("-lAdvapi32".into())
|
||||
.unwrap();
|
||||
cc.run().unwrap();
|
||||
} else {
|
||||
panic!("LibAFL CC: No Arguments given");
|
||||
|
@ -1,4 +1,4 @@
|
||||
use libafl_cc::{ClangWrapper, CompilerWrapper, LIB_EXT, LIB_PREFIX};
|
||||
use libafl_cc::{ClangWrapper, CompilerWrapper};
|
||||
use std::env;
|
||||
|
||||
fn main() {
|
||||
@ -8,27 +8,15 @@ fn main() {
|
||||
dir.pop();
|
||||
|
||||
let mut cc = ClangWrapper::new("clang", "clang++");
|
||||
cc.from_args(&args)
|
||||
cc.is_cpp(false)
|
||||
.from_args(&args)
|
||||
.unwrap()
|
||||
.add_link_arg("-Wl,--whole-archive".into())
|
||||
.unwrap()
|
||||
.add_link_arg(
|
||||
dir.join(format!("{}libfuzzer_libmozjpeg.{}", LIB_PREFIX, LIB_EXT))
|
||||
.display()
|
||||
.to_string(),
|
||||
)
|
||||
.unwrap()
|
||||
.add_link_arg("-Wl,-no-whole-archive".into())
|
||||
.link_staticlib(&dir, "libfuzzer_libmozjpeg".into())
|
||||
.unwrap()
|
||||
.add_arg("-fsanitize-coverage=trace-pc-guard,trace-cmp".into())
|
||||
.unwrap();
|
||||
#[cfg(windows)]
|
||||
cc.add_link_arg("-lws2_32".into())
|
||||
.unwrap()
|
||||
.add_link_arg("-lBcrypt".into())
|
||||
.unwrap()
|
||||
.add_link_arg("-lAdvapi32".into())
|
||||
.unwrap();
|
||||
cc.run().unwrap();
|
||||
} else {
|
||||
panic!("LibAFL CC: No Arguments given");
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
use libafl_cc::{ClangWrapper, CompilerWrapper, LIB_EXT, LIB_PREFIX};
|
||||
use libafl_cc::{ClangWrapper, CompilerWrapper};
|
||||
use std::env;
|
||||
|
||||
fn main() {
|
||||
@ -8,29 +8,15 @@ fn main() {
|
||||
dir.pop();
|
||||
|
||||
let mut cc = ClangWrapper::new("clang", "clang++");
|
||||
cc.is_cpp()
|
||||
cc.is_cpp(true)
|
||||
.from_args(&args)
|
||||
.unwrap()
|
||||
.add_link_arg("-Wl,--whole-archive".into())
|
||||
.unwrap()
|
||||
.add_link_arg(
|
||||
dir.join(format!("{}libfuzzer_libmozjpeg.{}", LIB_PREFIX, LIB_EXT))
|
||||
.display()
|
||||
.to_string(),
|
||||
)
|
||||
.unwrap()
|
||||
.add_link_arg("-Wl,-no-whole-archive".into())
|
||||
.link_staticlib(&dir, "libfuzzer_libmozjpeg".into())
|
||||
.unwrap()
|
||||
.add_arg("-fsanitize-coverage=trace-pc-guard,trace-cmp".into())
|
||||
.unwrap();
|
||||
// Libraries needed by libafl on Windows
|
||||
#[cfg(windows)]
|
||||
cc.add_link_arg("-lws2_32".into())
|
||||
.unwrap()
|
||||
.add_link_arg("-lBcrypt".into())
|
||||
.unwrap()
|
||||
.add_link_arg("-lAdvapi32".into())
|
||||
.unwrap();
|
||||
cc.run().unwrap();
|
||||
} else {
|
||||
panic!("LibAFL CC: No Arguments given");
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
use libafl_cc::{ClangWrapper, CompilerWrapper, LIB_EXT, LIB_PREFIX};
|
||||
use libafl_cc::{ClangWrapper, CompilerWrapper};
|
||||
use std::env;
|
||||
|
||||
fn main() {
|
||||
@ -8,28 +8,13 @@ fn main() {
|
||||
dir.pop();
|
||||
|
||||
let mut cc = ClangWrapper::new("clang", "clang++");
|
||||
cc.from_args(&args)
|
||||
cc.is_cpp(false)
|
||||
.from_args(&args)
|
||||
.unwrap()
|
||||
.add_link_arg("-Wl,--whole-archive".into())
|
||||
.unwrap()
|
||||
.add_link_arg(
|
||||
dir.join(format!("{}libfuzzer_libpng.{}", LIB_PREFIX, LIB_EXT))
|
||||
.display()
|
||||
.to_string(),
|
||||
)
|
||||
.unwrap()
|
||||
.add_link_arg("-Wl,-no-whole-archive".into())
|
||||
.link_staticlib(&dir, "libfuzzer_libpng".into())
|
||||
.unwrap()
|
||||
.add_arg("-fsanitize-coverage=trace-pc-guard,trace-cmp".into())
|
||||
.unwrap();
|
||||
// Libraries needed by libafl on Windows
|
||||
#[cfg(windows)]
|
||||
cc.add_link_arg("-lws2_32".into())
|
||||
.unwrap()
|
||||
.add_link_arg("-lBcrypt".into())
|
||||
.unwrap()
|
||||
.add_link_arg("-lAdvapi32".into())
|
||||
.unwrap();
|
||||
cc.run().unwrap();
|
||||
} else {
|
||||
panic!("LibAFL CC: No Arguments given");
|
||||
|
@ -1,4 +1,4 @@
|
||||
use libafl_cc::{ClangWrapper, CompilerWrapper, LIB_EXT, LIB_PREFIX};
|
||||
use libafl_cc::{ClangWrapper, CompilerWrapper};
|
||||
use std::env;
|
||||
|
||||
fn main() {
|
||||
@ -8,29 +8,13 @@ fn main() {
|
||||
dir.pop();
|
||||
|
||||
let mut cc = ClangWrapper::new("clang", "clang++");
|
||||
cc.is_cpp()
|
||||
cc.is_cpp(true)
|
||||
.from_args(&args)
|
||||
.unwrap()
|
||||
.add_link_arg("-Wl,--whole-archive".into())
|
||||
.unwrap()
|
||||
.add_link_arg(
|
||||
dir.join(format!("{}libfuzzer_libpng.{}", LIB_PREFIX, LIB_EXT))
|
||||
.display()
|
||||
.to_string(),
|
||||
)
|
||||
.unwrap()
|
||||
.add_link_arg("-Wl,-no-whole-archive".into())
|
||||
.link_staticlib(&dir, "libfuzzer_libpng".into())
|
||||
.unwrap()
|
||||
.add_arg("-fsanitize-coverage=trace-pc-guard,trace-cmp".into())
|
||||
.unwrap();
|
||||
// Libraries needed by libafl on Windows
|
||||
#[cfg(windows)]
|
||||
cc.add_link_arg("-lws2_32".into())
|
||||
.unwrap()
|
||||
.add_link_arg("-lBcrypt".into())
|
||||
.unwrap()
|
||||
.add_link_arg("-lAdvapi32".into())
|
||||
.unwrap();
|
||||
cc.run().unwrap();
|
||||
} else {
|
||||
panic!("LibAFL CC: No Arguments given");
|
||||
|
@ -1,4 +1,4 @@
|
||||
use libafl_cc::{ClangWrapper, CompilerWrapper, LIB_EXT, LIB_PREFIX};
|
||||
use libafl_cc::{ClangWrapper, CompilerWrapper};
|
||||
use std::env;
|
||||
|
||||
fn main() {
|
||||
@ -8,28 +8,13 @@ fn main() {
|
||||
dir.pop();
|
||||
|
||||
let mut cc = ClangWrapper::new("clang", "clang++");
|
||||
cc.from_args(&args)
|
||||
cc.is_cpp(false)
|
||||
.from_args(&args)
|
||||
.unwrap()
|
||||
.add_link_arg("-Wl,--whole-archive".into())
|
||||
.unwrap()
|
||||
.add_link_arg(
|
||||
dir.join(format!("{}libfuzzer_libpng.{}", LIB_PREFIX, LIB_EXT))
|
||||
.display()
|
||||
.to_string(),
|
||||
)
|
||||
.unwrap()
|
||||
.add_link_arg("-Wl,-no-whole-archive".into())
|
||||
.link_staticlib(&dir, "libfuzzer_libpng".into())
|
||||
.unwrap()
|
||||
.add_arg("-fsanitize-coverage=trace-pc-guard,trace-cmp".into())
|
||||
.unwrap();
|
||||
// Libraries needed by libafl on Windows
|
||||
#[cfg(windows)]
|
||||
cc.add_link_arg("-lws2_32".into())
|
||||
.unwrap()
|
||||
.add_link_arg("-lBcrypt".into())
|
||||
.unwrap()
|
||||
.add_link_arg("-lAdvapi32".into())
|
||||
.unwrap();
|
||||
cc.run().unwrap();
|
||||
} else {
|
||||
panic!("LibAFL CC: No Arguments given");
|
||||
|
@ -1,4 +1,4 @@
|
||||
use libafl_cc::{ClangWrapper, CompilerWrapper, LIB_EXT, LIB_PREFIX};
|
||||
use libafl_cc::{ClangWrapper, CompilerWrapper};
|
||||
use std::env;
|
||||
|
||||
fn main() {
|
||||
@ -8,29 +8,13 @@ fn main() {
|
||||
dir.pop();
|
||||
|
||||
let mut cc = ClangWrapper::new("clang", "clang++");
|
||||
cc.is_cpp()
|
||||
cc.is_cpp(true)
|
||||
.from_args(&args)
|
||||
.unwrap()
|
||||
.add_link_arg("-Wl,--whole-archive".into())
|
||||
.unwrap()
|
||||
.add_link_arg(
|
||||
dir.join(format!("{}libfuzzer_libpng.{}", LIB_PREFIX, LIB_EXT))
|
||||
.display()
|
||||
.to_string(),
|
||||
)
|
||||
.unwrap()
|
||||
.add_link_arg("-Wl,-no-whole-archive".into())
|
||||
.link_staticlib(&dir, "libfuzzer_libpng".into())
|
||||
.unwrap()
|
||||
.add_arg("-fsanitize-coverage=trace-pc-guard,trace-cmp".into())
|
||||
.unwrap();
|
||||
// Libraries needed by libafl on Windows
|
||||
#[cfg(windows)]
|
||||
cc.add_link_arg("-lws2_32".into())
|
||||
.unwrap()
|
||||
.add_link_arg("-lBcrypt".into())
|
||||
.unwrap()
|
||||
.add_link_arg("-lAdvapi32".into())
|
||||
.unwrap();
|
||||
cc.run().unwrap();
|
||||
} else {
|
||||
panic!("LibAFL CC: No Arguments given");
|
||||
|
@ -1,4 +1,4 @@
|
||||
use libafl_cc::{ClangWrapper, CompilerWrapper, LIB_EXT, LIB_PREFIX};
|
||||
use libafl_cc::{ClangWrapper, CompilerWrapper};
|
||||
use std::env;
|
||||
|
||||
fn main() {
|
||||
@ -8,28 +8,13 @@ fn main() {
|
||||
dir.pop();
|
||||
|
||||
let mut cc = ClangWrapper::new("clang", "clang++");
|
||||
cc.from_args(&args)
|
||||
cc.is_cpp(false)
|
||||
.from_args(&args)
|
||||
.unwrap()
|
||||
.add_link_arg("-Wl,--whole-archive".into())
|
||||
.unwrap()
|
||||
.add_link_arg(
|
||||
dir.join(format!("{}libfuzzer_libpng.{}", LIB_PREFIX, LIB_EXT))
|
||||
.display()
|
||||
.to_string(),
|
||||
)
|
||||
.unwrap()
|
||||
.add_link_arg("-Wl,-no-whole-archive".into())
|
||||
.link_staticlib(&dir, "libfuzzer_libpng".into())
|
||||
.unwrap()
|
||||
.add_arg("-fsanitize-coverage=trace-pc-guard,trace-cmp".into())
|
||||
.unwrap();
|
||||
// Libraries needed by libafl on Windows
|
||||
#[cfg(windows)]
|
||||
cc.add_link_arg("-lws2_32".into())
|
||||
.unwrap()
|
||||
.add_link_arg("-lBcrypt".into())
|
||||
.unwrap()
|
||||
.add_link_arg("-lAdvapi32".into())
|
||||
.unwrap();
|
||||
cc.run().unwrap();
|
||||
} else {
|
||||
panic!("LibAFL CC: No Arguments given");
|
||||
|
@ -1,4 +1,4 @@
|
||||
use libafl_cc::{ClangWrapper, CompilerWrapper, LIB_EXT, LIB_PREFIX};
|
||||
use libafl_cc::{ClangWrapper, CompilerWrapper};
|
||||
use std::env;
|
||||
|
||||
fn main() {
|
||||
@ -8,29 +8,13 @@ fn main() {
|
||||
dir.pop();
|
||||
|
||||
let mut cc = ClangWrapper::new("clang", "clang++");
|
||||
cc.is_cpp()
|
||||
cc.is_cpp(true)
|
||||
.from_args(&args)
|
||||
.unwrap()
|
||||
.add_link_arg("-Wl,--whole-archive".into())
|
||||
.unwrap()
|
||||
.add_link_arg(
|
||||
dir.join(format!("{}libfuzzer_libpng.{}", LIB_PREFIX, LIB_EXT))
|
||||
.display()
|
||||
.to_string(),
|
||||
)
|
||||
.unwrap()
|
||||
.add_link_arg("-Wl,-no-whole-archive".into())
|
||||
.link_staticlib(&dir, "libfuzzer_libpng".into())
|
||||
.unwrap()
|
||||
.add_arg("-fsanitize-coverage=trace-pc-guard,trace-cmp".into())
|
||||
.unwrap();
|
||||
// Libraries needed by libafl on Windows
|
||||
#[cfg(windows)]
|
||||
cc.add_link_arg("-lws2_32".into())
|
||||
.unwrap()
|
||||
.add_link_arg("-lBcrypt".into())
|
||||
.unwrap()
|
||||
.add_link_arg("-lAdvapi32".into())
|
||||
.unwrap();
|
||||
cc.run().unwrap();
|
||||
} else {
|
||||
panic!("LibAFL CC: No Arguments given");
|
||||
|
@ -20,9 +20,6 @@ pub mod pipes;
|
||||
#[cfg(all(unix, feature = "std"))]
|
||||
use std::ffi::CString;
|
||||
|
||||
#[cfg(all(feature = "std", any(target_os = "linux", target_os = "android")))]
|
||||
use std::fs::File;
|
||||
|
||||
#[cfg(all(windows, feature = "std"))]
|
||||
pub mod windows_exceptions;
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
//! Compiler Wrapper from `LibAFL`
|
||||
|
||||
use std::{process::Command, string::String, vec::Vec};
|
||||
use std::{path::Path, process::Command, string::String, vec::Vec};
|
||||
|
||||
/// `LibAFL` CC Error Type
|
||||
#[derive(Debug)]
|
||||
@ -42,6 +42,9 @@ pub trait CompilerWrapper {
|
||||
/// Add a compiler argument only when linking
|
||||
fn add_link_arg(&mut self, arg: String) -> Result<&'_ mut Self, Error>;
|
||||
|
||||
/// Link static C lib
|
||||
fn link_staticlib(&mut self, dir: &Path, name: String) -> Result<&'_ mut Self, Error>;
|
||||
|
||||
/// Command to run the compiler
|
||||
fn command(&mut self) -> Result<Vec<String>, Error>;
|
||||
|
||||
@ -136,6 +139,14 @@ impl CompilerWrapper for ClangWrapper {
|
||||
// Fuzzing define common among tools
|
||||
new_args.push("-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION=1".into());
|
||||
|
||||
// Libraries needed by libafl on Windows
|
||||
#[cfg(windows)]
|
||||
if linking {
|
||||
new_args.push("-lws2_32".into());
|
||||
new_args.push("-lBcrypt".into());
|
||||
new_args.push("-lAdvapi32".into());
|
||||
}
|
||||
|
||||
self.base_args = new_args;
|
||||
Ok(self)
|
||||
}
|
||||
@ -155,6 +166,16 @@ impl CompilerWrapper for ClangWrapper {
|
||||
Ok(self)
|
||||
}
|
||||
|
||||
fn link_staticlib(&mut self, dir: &Path, name: String) -> Result<&'_ mut Self, Error> {
|
||||
self.add_link_arg("-Wl,--whole-archive".into())?
|
||||
.add_link_arg(
|
||||
dir.join(format!("{}{}.{}", LIB_PREFIX, name, LIB_EXT))
|
||||
.display()
|
||||
.to_string(),
|
||||
)?
|
||||
.add_link_arg("-Wl,-no-whole-archive".into())
|
||||
}
|
||||
|
||||
fn command(&mut self) -> Result<Vec<String>, Error> {
|
||||
let mut args = vec![];
|
||||
if self.is_cpp {
|
||||
@ -207,9 +228,9 @@ impl ClangWrapper {
|
||||
self
|
||||
}
|
||||
|
||||
/// set cpp mode
|
||||
pub fn is_cpp(&mut self) -> &'_ mut Self {
|
||||
self.is_cpp = true;
|
||||
/// Set cpp mode
|
||||
pub fn is_cpp(&mut self, value: bool) -> &'_ mut Self {
|
||||
self.is_cpp = value;
|
||||
self
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user