fn main() {
#[cfg(feature = "compile")]
assemble_template_wat();
#[cfg(feature = "compile")]
embed_guest_wasm();
#[cfg(feature = "risc0")]
embed_risc0_methods();
}
#[cfg(feature = "risc0")]
fn embed_risc0_methods() {
use std::path::PathBuf;
let guest_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("guest-risc0");
let template = guest_dir.join("Cargo.toml.template");
let manifest = guest_dir.join("Cargo.toml");
let bytes = std::fs::read(&template).expect("read guest-risc0/Cargo.toml.template");
std::fs::write(&manifest, &bytes).expect("materialize guest-risc0/Cargo.toml");
println!("cargo:rerun-if-changed=guest-risc0/Cargo.toml.template");
println!("cargo:rerun-if-changed=guest-risc0/src/main.rs");
risc0_build::embed_methods();
}
#[cfg(feature = "compile")]
fn assemble_template_wat() {
use std::path::PathBuf;
let manifest_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
let src = manifest_dir.join("fixtures/digstore_guest_template.wat");
let out_dir = PathBuf::from(std::env::var("OUT_DIR").unwrap());
let dest = out_dir.join("digstore_guest_template.wasm");
let wat = std::fs::read_to_string(&src).expect("read template wat");
let wasm = wat::parse_str(&wat).expect("assemble template wat");
std::fs::write(&dest, wasm).expect("write template wasm");
println!("cargo:rerun-if-changed=fixtures/digstore_guest_template.wat");
}
#[cfg(feature = "compile")]
fn embed_guest_wasm() {
use std::path::PathBuf;
let override_path = std::env::var_os("DIGSTORE_GUEST_WASM").map(PathBuf::from);
println!("cargo:rerun-if-env-changed=DIGSTORE_GUEST_WASM");
let manifest_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
let default_guest = manifest_dir
.join("target")
.join("wasm32-unknown-unknown")
.join("release")
.join("dig_capsule.wasm");
let guest = override_path.unwrap_or(default_guest);
let out_dir = PathBuf::from(std::env::var("OUT_DIR").unwrap());
let dest = out_dir.join("dig_capsule_guest.wasm");
match std::fs::read(&guest) {
Ok(bytes) => {
std::fs::write(&dest, &bytes).expect("write embedded guest wasm");
}
Err(e) => {
panic!(
"dig-capsule requires the real guest wasm at {} (BINDING contract D6: \
the compiled module must serve itself). Build it first:\n \
cargo build --no-default-features --features guest-wasm \
--target wasm32-unknown-unknown --release\n\
(or, for an out-of-crate/registry-dependency build, set DIGSTORE_GUEST_WASM \
to an absolute path to a matching dig_capsule.wasm)\n\
underlying error: {e}",
guest.display()
);
}
}
println!("cargo:rerun-if-changed={}", guest.display());
}