diff --git a/nac3core/build.rs b/nac3core/build.rs index b2eda85f..77ba9fa1 100644 --- a/nac3core/build.rs +++ b/nac3core/build.rs @@ -1,6 +1,7 @@ use regex::Regex; use std::{ env, + fs::File, io::Write, path::Path, process::{Command, Stdio}, @@ -9,6 +10,8 @@ use std::{ fn main() { const FILE: &str = "src/codegen/irrt/irrt.c"; println!("cargo:rerun-if-changed={}", FILE); + let out_dir = env::var("OUT_DIR").unwrap(); + let out_path = Path::new(&out_dir); /* * HACK: Sadly, clang doesn't let us emit generic LLVM bitcode. @@ -50,10 +53,18 @@ fn main() { .unwrap() .replace_all(&filtered_output, ""); + println!("cargo:rerun-if-env-changed=DEBUG_DUMP_IRRT"); + if env::var("DEBUG_DUMP_IRRT").is_ok() { + let mut file = File::create(out_path.join("irrt.ll")).unwrap(); + file.write_all(output.as_bytes()).unwrap(); + let mut file = File::create(out_path.join("irrt-filtered.ll")).unwrap(); + file.write_all(filtered_output.as_bytes()).unwrap(); + } + let mut llvm_as = Command::new("llvm-as") .stdin(Stdio::piped()) .arg("-o") - .arg(Path::new(&env::var("OUT_DIR").unwrap()).join("irrt.bc")) + .arg(out_path.join("irrt.bc")) .spawn() .unwrap(); llvm_as.stdin.as_mut().unwrap().write_all(filtered_output.as_bytes()).unwrap();