use std::{
env,
process::{exit, Command},
};
use cmake::Config;
fn main() {
if !cfg!(windows) {
println!("cargo:warning=No MacOS support yet.");
exit(0);
}
let cwd = env::current_dir().unwrap().to_string_lossy().to_string();
let tinyinst = format!("{}/TinyInst", &cwd);
println!("cargo:warning=Pulling TinyInst from github");
println!("cargo:warning=Generating Bridge files.");
Command::new("cmd")
.arg("/C")
.arg(format!("{cwd}/build.bat"))
.status()
.unwrap();
Command::new("cxxbridge")
.args(["src/tinyinst.rs", "-o"])
.arg(format!("{tinyinst}/bridge.cc"))
.status()
.unwrap();
Command::new("cxxbridge")
.args(["src/tinyinst.rs", "--header", "-o"])
.arg(format!("{tinyinst}/bridge.h"))
.status()
.unwrap();
Command::new("cxxbridge")
.args(["--header", "-o"])
.arg(format!("{tinyinst}/cxx.h"))
.status()
.unwrap();
std::fs::copy("./src/shim.cc", "./Tinyinst/shim.cc").unwrap();
std::fs::copy("./src/shim.h", "./Tinyinst/shim.h").unwrap();
std::fs::copy("./src/runresult.h", "./Tinyinst/runresult.h").unwrap();
std::fs::copy(
"./src/instrumentation.cpp",
"./Tinyinst/instrumentation.cpp",
)
.unwrap();
std::fs::copy("./src/instrumentation.h", "./Tinyinst/instrumentation.h").unwrap();
std::fs::copy(
"./src/tinyinstinstrumentation.cpp",
"./Tinyinst/tinyinstinstrumentation.cpp",
)
.unwrap();
std::fs::copy(
"./src/tinyinstinstrumentation.h",
"./Tinyinst/tinyinstinstrumentation.h",
)
.unwrap();
std::fs::copy("./src/aflcov.cpp", "./Tinyinst/aflcov.cpp").unwrap();
std::fs::copy("./src/aflcov.h", "./Tinyinst/aflcov.h").unwrap();
let dst = Config::new("TinyInst")
.generator("Visual Studio 17 2022") .build_target("tinyinst")
.profile("Release") .build();
println!("cargo:warning={}", dst.display());
println!("cargo:rustc-link-search={}\\build\\Release", dst.display()); println!(
"cargo:rustc-link-search={}\\build\\third_party\\obj\\wkit\\lib",
dst.display()
);
println!("cargo:rustc-link-lib=static=tinyinst");
println!("cargo:rustc-link-lib=static=xed");
println!("cargo:rustc-link-lib=dylib=dbghelp");
println!("cargo:rerun-if-changed=src/");
println!("cargo:rerun-if-changed=src/tinyinst.rs");
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-changed=Tinyinst/litecov.cpp");
}