
* Fixing the test_harness library name * Fasan works, but testing of all features is pending * Tests pass, before fixing clippy and fmt * CLippy+fmt * CLippy+fmt+tests running on linux * Clippy * Not stalkering the fuzzer. In the correct way * Removing the instrumentation upon crash. Proper hooking of UnmapViewOfFile * Fixes after the merge from the upstream (before 0.15.0). Still need to add the observer, clippy, fmt, and at least linux compilation * Adding the helper observer and using it in the test * Removing the observer from the wrong location * Adapting to the new helper ownership model * Adding an observer to shut down instrumentation upon crash * Clippy + fmt * Using mimalloc everywhere * Deactivating before activating with the harness. Otherwise, gets stuck on Linux. * Fixing imports for windows * Using the new way of passing the handler * Using frida_helper_shutdown_observer * Clippy+fmt * no-std, clippy * Fmt * Stable thread_id * Clippy 18 * More clippy * Formatting toml * Fixing apples * Fixing apples 2 * Fixing apples 3 * Upping to 0.16.7 (necessary for Windows) * Clippy+fmt * Enabling the allocator test after the fix and clarifying the importantce of the static runtime linking. * Moving has_tls to bolts * Proper handling of no-std, hopefully * Another attempt to fix win no-std * Not mine clippy complaint... * Not mine clippy complaint #2... * Dlmalloc not used, removing from dependencies * Restoring target in config.toml (otherwise fails CI on Linux) * lots of digging around, pray for us * fixup? * Revert "lots of digging around, pray for us" This reverts commit 706c27201918e906e3401cd0d9e76546f889d1f5. * Revert "fixup?" This reverts commit 1d7c5d4fb5b1bd31f5e0c07492aa8ed64c6822f3. * Revert artifact * Revert fixups * Removing unused * Reverting to upstream/main --------- Co-authored-by: Addison Crump <addison.crump@cispa.de> Co-authored-by: Dongjia "toka" Zhang <tokazerkje@outlook.com>
95 lines
3.1 KiB
Rust
95 lines
3.1 KiB
Rust
// build.rs
|
|
#![forbid(unexpected_cfgs)]
|
|
|
|
use std::{env, path::Path};
|
|
|
|
fn main() {
|
|
let out_dir = env::var_os("OUT_DIR").unwrap();
|
|
let out_dir = out_dir.to_string_lossy().to_string();
|
|
let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap();
|
|
if target_os != "ios" {
|
|
cc::Build::new().file("src/gettls.c").compile("libgettls.a");
|
|
}
|
|
|
|
let target_family = std::env::var("CARGO_CFG_TARGET_FAMILY").unwrap();
|
|
|
|
// Force linking against libc++
|
|
#[cfg(not(target_vendor = "apple"))]
|
|
if target_family == "unix" {
|
|
println!("cargo:rustc-link-lib=dylib=c++");
|
|
}
|
|
|
|
#[cfg(target_vendor = "apple")]
|
|
println!("cargo:rustc-link-lib=dylib=resolv");
|
|
|
|
println!("cargo:rerun-if-changed=build.rs");
|
|
println!("cargo:rerun-if-changed=test_harness.cpp");
|
|
println!("cargo:rerun-if-changed=src/gettls.c");
|
|
// Build the test harness
|
|
// clang++ -shared -fPIC -O0 -o test_harness.so test_harness.cpp
|
|
// Check if we have clang++ installed
|
|
|
|
if target_family == "windows" {
|
|
let compiler = cc::Build::new()
|
|
.cpp(true)
|
|
.file("test_harness.cpp")
|
|
.get_compiler();
|
|
let mut cmd = std::process::Command::new(compiler.path());
|
|
let cmd = cmd
|
|
.args(compiler.args())
|
|
.arg("test_harness.cpp")
|
|
.arg("/link");
|
|
|
|
#[cfg(unix)]
|
|
let cmd = cmd
|
|
.arg(format!(
|
|
"/libpath:{}/.cache/cargo-xwin/xwin/crt/lib/x86_64/",
|
|
std::env::var("HOME").unwrap()
|
|
))
|
|
.arg(format!(
|
|
"/libpath:{}/.cache/cargo-xwin/xwin/sdk/lib/ucrt/x86_64/",
|
|
std::env::var("HOME").unwrap()
|
|
))
|
|
.arg(format!(
|
|
"/libpath:{}/.cache/cargo-xwin/xwin/sdk/lib/um/x86_64/",
|
|
std::env::var("HOME").unwrap()
|
|
));
|
|
cmd.arg("/dll").arg(format!(
|
|
"/OUT:{}",
|
|
Path::new(&out_dir)
|
|
.join("test_harness.dll")
|
|
.to_str()
|
|
.unwrap()
|
|
));
|
|
let output = cmd.output().expect("Failed to link test_harness.dll");
|
|
let output_str = format!(
|
|
"{:?}\nstatus: {}\nstdout: {}\nstderr: {}",
|
|
cmd,
|
|
output.status,
|
|
String::from_utf8_lossy(&output.stdout),
|
|
String::from_utf8_lossy(&output.stderr)
|
|
);
|
|
|
|
// std::fs::write("compiler_output.txt", output_str.clone()).expect("Unable to write file");
|
|
assert!(
|
|
output.status.success(),
|
|
"Failed to link test_harness.dll\n {:?}",
|
|
output_str.as_str()
|
|
);
|
|
} else {
|
|
let compiler = cc::Build::new()
|
|
.cpp(true)
|
|
.opt_level(0)
|
|
.shared_flag(true)
|
|
.get_compiler();
|
|
let clangpp = compiler.path();
|
|
let mut cmd = std::process::Command::new(clangpp);
|
|
cmd.args(compiler.args())
|
|
.arg("test_harness.cpp")
|
|
.arg("-o")
|
|
.arg(Path::new(&out_dir).join("test_harness.so"))
|
|
.status()
|
|
.expect("Failed to link test_harness");
|
|
}
|
|
}
|