Skip to main content

renderbox_sdk/compile/
mod.rs

1mod pipeline;
2
3use std::path::Path;
4
5use renderbox_dsl::backend::plan::assembly::compile_plan;
6use renderbox_dsl::backend::plan::encode::encode_plan;
7use renderbox_dsl::backend::plan::optimize::{OptimizeOpts, optimize};
8use renderbox_dsl::sema::op_registry::OpRegistry;
9
10use pipeline::run_frontend;
11
12pub use pipeline::CompileError;
13
14pub fn compile(source: &str, base_dir: &Path) -> Result<Vec<u8>, CompileError> {
15    let registry = OpRegistry::builtin();
16    let mut result = run_frontend(source, base_dir)?;
17
18    let opts = OptimizeOpts::default();
19    let optimized_roots = optimize(&mut result.arena, &result.outputs, &opts);
20
21    let plan = compile_plan(&mut result.arena, &optimized_roots, &registry)
22        .map_err(|d| CompileError::Plan(d.message))?;
23
24    Ok(encode_plan(&plan))
25}
26
27pub fn compile_json(source: &str, base_dir: &Path) -> Result<String, CompileError> {
28    let registry = OpRegistry::builtin();
29    let mut result = run_frontend(source, base_dir)?;
30
31    let opts = OptimizeOpts::default();
32    let optimized_roots = optimize(&mut result.arena, &result.outputs, &opts);
33
34    let plan = compile_plan(&mut result.arena, &optimized_roots, &registry)
35        .map_err(|d| CompileError::Plan(d.message))?;
36
37    serde_json::to_string_pretty(&plan).map_err(|e| CompileError::Plan(e.to_string()))
38}