bragi_build/
lib.rs

1pub fn generate_bindings<P>(
2    bragi_source_path: P,
3    output_file_name: &str,
4) -> Result<(), Box<dyn std::error::Error>>
5where
6    P: AsRef<std::path::Path>,
7{
8    let out_dir = std::env::var("OUT_DIR")?;
9    let out_path = std::path::PathBuf::from(out_dir).join(output_file_name);
10
11    // Invoke the bragi compiler
12    let output = std::process::Command::new("bragi")
13        .arg("-o")
14        .arg(out_path.to_str().unwrap())
15        .arg(bragi_source_path.as_ref())
16        .arg("rust")
17        .output()?;
18
19    if output.status.success() {
20        // Make sure the build script is re-run if the source file changes
21        println!(
22            "cargo::rerun-if-changed={}",
23            bragi_source_path.as_ref().display()
24        );
25
26        Ok(())
27    } else {
28        let stderr = String::from_utf8_lossy(&output.stderr);
29        let stdout = String::from_utf8_lossy(&output.stdout);
30
31        Err(format!("Bragi compiler failed:\n{}\n{}", stderr, stdout).into())
32    }
33}