use std::path::Path;
use std::process::Command;
fn main() {
let dist = Path::new("dist");
let out_dir = std::env::var("OUT_DIR").unwrap();
if dist.exists() {
let abs = std::fs::canonicalize(dist).expect("canonicalize dist/");
println!("cargo::rustc-env=WEB_ASSETS_DIR={}", abs.display());
} else {
let stub = Path::new(&out_dir).join("dist-stub");
std::fs::create_dir_all(&stub).expect("create dist-stub");
println!("cargo::rustc-env=WEB_ASSETS_DIR={}", stub.display());
}
let wasm_path = Path::new("dist/wasm/caretta_bg.wasm");
println!("cargo::rerun-if-changed={}", wasm_path.display());
if !wasm_path.exists() {
return;
}
let meta = std::fs::metadata(wasm_path).expect("failed to read wasm metadata");
if meta.len() <= 10 * 1024 * 1024 {
return;
}
let wasm_opt = option_env!("WASM_OPT").unwrap_or("wasm-opt");
let status = Command::new(wasm_opt)
.args(["-Oz", "--strip-debug"])
.arg(wasm_path)
.arg("-o")
.arg(wasm_path)
.status();
match status {
Ok(s) if s.success() => {
let new_size = std::fs::metadata(wasm_path)
.map(|m| m.len() / (1024 * 1024))
.unwrap_or(0);
println!(
"cargo::warning=wasm-opt: optimized caretta_bg.wasm to {}MB",
new_size
);
}
Ok(s) => println!("cargo::warning=wasm-opt exited with {s}, skipping optimization"),
Err(_) => println!("cargo::warning=wasm-opt not found, skipping wasm optimization"),
}
}