use std::{
env,
path::{Path, PathBuf},
};
use risc0_build_kernel::{KernelBuild, KernelType};
fn main() {
build_cpu_kernels();
if env::var("CARGO_FEATURE_CUDA").is_ok() {
build_cuda_kernels();
}
if env::var("CARGO_FEATURE_METAL").is_ok() {
build_metal_kernels();
}
}
fn build_cpu_kernels() {
let srcs: Vec<PathBuf> = glob::glob("cxx/*.cpp")
.unwrap()
.map(|x| x.unwrap())
.collect();
KernelBuild::new(KernelType::Cpp)
.files(&srcs)
.compile("circuit");
}
fn build_cuda_kernels() {
KernelBuild::new(KernelType::Cuda)
.files([
"kernels/cuda/eval_check.cu",
"kernels/cuda/ffi.cu",
"kernels/cuda/step_compute_accum.cu",
"kernels/cuda/step_verify_accum.cu",
])
.deps(["kernels/cuda/kernels.h"])
.include(env::var("DEP_RISC0_SYS_CUDA_ROOT").unwrap())
.include(env::var("DEP_SPPARK_ROOT").unwrap())
.compile("risc0_recursion_cuda");
}
fn build_metal_kernels() {
const SRCS: &[&str] = &[
"eval_check.metal",
"step_compute_accum.metal",
"step_verify_accum.metal",
];
let dir = Path::new("kernels").join("metal");
let src_paths = SRCS.iter().map(|x| dir.join(x));
KernelBuild::new(KernelType::Metal)
.files(src_paths)
.compile("metal_kernel");
}