64 lines
1.7 KiB
Rust
64 lines
1.7 KiB
Rust
use std::{
|
|
env,
|
|
error::Error,
|
|
path::PathBuf,
|
|
process::{Command, Stdio},
|
|
};
|
|
|
|
fn main() -> Result<(), Box<dyn Error>> {
|
|
println!("cargo::rerun-if-changed=src");
|
|
|
|
let out_dir = env::var("OUT_DIR").unwrap();
|
|
let out_path = PathBuf::from(&out_dir);
|
|
let profile = env::var("PROFILE").unwrap();
|
|
let target = env::var("TARGET").unwrap();
|
|
|
|
// TODO: Use of PROFILE is discouraged, so we should switch this to a more fine-grained system
|
|
// reading back from other environment variables.
|
|
let optimize = match &profile[..] {
|
|
"debug" => "Debug",
|
|
"release" => "ReleaseSmall",
|
|
_ => panic!("unknown profile"),
|
|
};
|
|
|
|
let color = match env::var("NO_COLOR").is_ok() {
|
|
true => "off",
|
|
false => "on",
|
|
};
|
|
|
|
let target = match &target[..] {
|
|
"x86_64-unknown-linux-gnu" => "x86_64-linux-gnu",
|
|
other => {
|
|
eprintln!("warning: unknown target {other:?}");
|
|
&target
|
|
}
|
|
};
|
|
|
|
let output = Command::new("zig")
|
|
.arg("build")
|
|
.arg("install")
|
|
// Terminal output
|
|
.stdout(Stdio::inherit())
|
|
.stderr(Stdio::inherit())
|
|
.arg("--prominent-compile-errors")
|
|
.arg("--color")
|
|
.arg(color)
|
|
// Build output
|
|
.arg("--cache-dir")
|
|
.arg(out_path.join("zig-cache"))
|
|
.arg("--prefix")
|
|
.arg(out_path.join("zig-out").join(target))
|
|
// Build settings
|
|
.arg(format!("-Doptimize={optimize}"))
|
|
.arg(format!("-Dtarget={target}"))
|
|
.output()?;
|
|
|
|
if !output.status.success() {
|
|
panic!("zig failed to build");
|
|
}
|
|
|
|
println!("cargo::rustc-link-search={out_dir}/zig-out/{target}/lib");
|
|
println!("cargo::rustc-link-lib=haku2");
|
|
|
|
Ok(())
|
|
}
|