renderbox_sdk/compile/
mod.rs1mod 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, ®istry)
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, ®istry)
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}