use std::path::PathBuf;
use std::process::Command;
fn main() {
let manifest_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
let chacha20poly1305_wasm_dir = manifest_dir.join("chacha20poly1305-wasm");
let out_dir = PathBuf::from(std::env::var("OUT_DIR").unwrap());
let wasm_dst = out_dir.join("chacha20poly1305.wasm");
if chacha20poly1305_wasm_dir.join("Cargo.toml").exists() {
println!("cargo:rerun-if-changed=chacha20poly1305-wasm/src/lib.rs");
println!("cargo:rerun-if-changed=chacha20poly1305-wasm/Cargo.toml");
let cargo = std::env::var("CARGO").unwrap_or_else(|_| "cargo".to_string());
let status = Command::new(&cargo)
.args([
"build",
"--manifest-path", chacha20poly1305_wasm_dir.join("Cargo.toml").to_str().unwrap(),
"--target", "wasm32-unknown-unknown",
"--release",
"--quiet",
])
.env_remove("CARGO_ENCODED_RUSTFLAGS")
.env_remove("RUSTFLAGS")
.status()
.expect("failed to invoke cargo for chacha20poly1305-wasm");
assert!(
status.success(),
"chacha20poly1305-wasm WASM compilation failed.\n\
Tip: make sure the wasm32-unknown-unknown target is installed:\n\
rustup target add wasm32-unknown-unknown"
);
let wasm_src = chacha20poly1305_wasm_dir
.join("target/wasm32-unknown-unknown/release/chacha20poly1305_wasm.wasm");
std::fs::copy(&wasm_src, &wasm_dst)
.expect("failed to copy chacha20poly1305.wasm to OUT_DIR");
} else {
println!("cargo:rerun-if-changed=assets/chacha20poly1305.wasm");
let prebuilt = manifest_dir.join("assets/chacha20poly1305.wasm");
assert!(
prebuilt.exists(),
"assets/chacha20poly1305.wasm not found — this is a packaging error. \
Please report it at https://github.com/d33p0st/toolkit-zero/issues"
);
std::fs::copy(&prebuilt, &wasm_dst)
.expect("failed to copy assets/chacha20poly1305.wasm to OUT_DIR");
}
}