use std::path::PathBuf;
use anyhow::Result;
use crate::commands::setup::nvcc_present;
pub struct GenExpsOptions {
pub proving_key: PathBuf,
pub arch: String,
pub cap: usize,
pub chunk: Option<usize>,
pub stark_src: Option<PathBuf>,
}
pub fn run_gen_exps(opts: &GenExpsOptions) -> Result<()> {
if !nvcc_present() {
tracing::warn!(
"gen-exps requested but nvcc not found on PATH; skipping expression kernel codegen (AIRs use the interpreter)"
);
return Ok(());
}
tracing::info!("Generating expression kernels (.exps.so) under {}", opts.proving_key.display());
let cfg = proofman_exps_codegen::GenConfig {
cap: opts.cap,
chunk: opts.chunk,
archspec: opts.arch.clone(),
stark_src: opts.stark_src.clone(),
keep_dir: None,
dry_run: false,
};
let summary = proofman_exps_codegen::generate_all(&opts.proving_key, &cfg)?;
tracing::info!(
"Expression kernels: {} generated -> {} .exps.so ({} skipped)",
summary.generated.len(),
summary.placed,
summary.skipped.len()
);
Ok(())
}