use std::path::PathBuf;
pub const COMPILER_VERSION: &str = "1.0.0";
pub const FIXED_BLOB_LEN: usize = 128 * 1024 * 1024;
const _: () = assert!(
FIXED_BLOB_LEN as u64 >= crate::imp::core::MAX_STORE_BYTES,
"FIXED_BLOB_LEN must be >= crate::imp::core::MAX_STORE_BYTES (the canonical \
capsule-size cap) so the uniform-blob budget always covers a max-cap store"
);
pub const UNIFORM_BLOB_LEN_ENV: &str = "DIGSTORE_UNIFORM_BLOB_LEN";
#[derive(Debug, Clone)]
pub struct CompilerConfig {
pub output_dir: PathBuf,
pub obfuscate: bool,
pub optimize: bool,
pub template_override: Option<Vec<u8>>,
pub uniform_blob_len: usize,
}
pub fn default_uniform_blob_len() -> usize {
match std::env::var(UNIFORM_BLOB_LEN_ENV) {
Ok(v) => v.trim().parse::<usize>().unwrap_or(FIXED_BLOB_LEN),
Err(_) => FIXED_BLOB_LEN,
}
}
impl Default for CompilerConfig {
fn default() -> Self {
Self {
output_dir: PathBuf::from("."),
obfuscate: false,
optimize: false,
template_override: None,
uniform_blob_len: default_uniform_blob_len(),
}
}
}
#[cfg(all(test, not(target_arch = "wasm32")))]
mod tests {
use super::*;
#[test]
fn uniform_blob_budget_covers_the_canonical_capsule_size_cap() {
assert_eq!(
crate::imp::core::MAX_STORE_BYTES,
128_000_000,
"MAX_STORE_BYTES is the canonical capsule-size cap (128 MB decimal)"
);
assert_eq!(FIXED_BLOB_LEN, 128 * 1024 * 1024, "128 MiB padded budget");
assert!(
FIXED_BLOB_LEN as u64 >= crate::imp::core::MAX_STORE_BYTES,
"the uniform-blob budget must cover a max-cap store"
);
}
}
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct CompilerStats {
pub generation_count: u32,
pub unique_chunk_count: u32,
pub resource_count: u32,
pub pool_byte_len: u64,
pub data_section_byte_len: u64,
pub obfuscation_applied: bool,
pub compiler_version: String,
}