use std::sync::Once;
pub struct BackendConfig {
pub num_precomputed_generators: u64,
}
static mut INIT_STATE: i32 = 0;
static INIT: Once = Once::new();
fn get_backend() -> i32 {
if cfg!(feature = "cpu") {
blitzar_sys::SXT_CPU_BACKEND as i32
} else if cfg!(feature = "gpu") {
blitzar_sys::SXT_GPU_BACKEND as i32
} else {
panic!("Incorrect backend specified");
}
}
#[doc = include_str!("../../docs/commitments/init_backend.md")]
#[doc = include_str!("../../examples/initialize_backend.rs")]
pub fn init_backend() {
unsafe {
let num_precomputed_generators: u64 = 20;
INIT.call_once(|| {
let backend = get_backend();
let config: blitzar_sys::sxt_config = blitzar_sys::sxt_config {
backend,
num_precomputed_generators,
};
INIT_STATE = blitzar_sys::sxt_init(&config);
});
if INIT_STATE != 0 {
panic!("Error during backend initialization");
}
};
}
#[doc = include_str!("../../docs/commitments/init_backend_with_config.md")]
#[doc = include_str!("../../examples/initialize_backend_with_config.rs")]
pub fn init_backend_with_config(config: BackendConfig) {
unsafe {
INIT.call_once(|| {
let backend = get_backend();
let config: blitzar_sys::sxt_config = blitzar_sys::sxt_config {
backend,
num_precomputed_generators: config.num_precomputed_generators,
};
INIT_STATE = blitzar_sys::sxt_init(&config);
});
if INIT_STATE != 0 {
panic!("Error during backend initialization");
}
};
}