fn main() {
let path_to_c_source = "tests/c/hello.c";
println!("cargo:rerun-if-changed={path_to_c_source}");
println!("cargo:rerun-if-changed=build.rs");
let compiler = cc::Build::new().file(path_to_c_source).get_compiler();
let target = std::env::var("TARGET").unwrap();
let out_dir = std::env::var("OUT_DIR").unwrap();
let out_dir = std::path::PathBuf::from(out_dir);
let input = std::path::PathBuf::from(path_to_c_source);
let mut binary = out_dir.join("hello");
let mut symbols = binary.clone();
let mut cmd = compiler.to_command();
if compiler.is_like_msvc() {
binary.set_extension("exe");
symbols.set_extension("pdb");
cmd.args([
input.to_str().unwrap(),
"/LINK",
&format!("/Fe:{}", binary.to_str().unwrap()),
&format!("/Fo:{}", binary.parent().unwrap().to_str().unwrap()),
]);
} else {
if target.contains("apple") {
symbols.pop();
symbols.push(format!(
"{}.dSYM",
binary.file_name().unwrap().to_str().unwrap()
));
symbols.push("Contents");
symbols.push("Resources");
symbols.push("DWARF");
symbols.push(binary.file_name().unwrap());
}
cmd.args([input.to_str().unwrap(), "-o", binary.to_str().unwrap()]);
};
println!("Running command: {cmd:?}");
let cmd = cmd.output().unwrap();
println!("Output: {}", std::str::from_utf8(&cmd.stdout).unwrap());
assert!(cmd.status.success(), "Failed to compile test binary");
println!(
"cargo:rustc-env=COMPILEDFILES_BASIC_TEST_BIN_PATH={}",
binary.display()
);
println!(
"cargo:rustc-env=COMPILEDFILES_BASIC_TEST_SYM_PATH={}",
symbols.display()
);
}