uika_codegen/cpp_gen/
mod.rs1pub mod wrapper;
4pub mod func_ids;
5pub mod fill_table;
6
7use std::collections::BTreeMap;
8use std::path::Path;
9
10use crate::context::CodegenContext;
11
12pub fn generate(ctx: &CodegenContext, out_dir: &Path) {
14 std::fs::create_dir_all(out_dir).expect("Failed to create C++ output directory");
15
16 let mut by_class: BTreeMap<(String, String), Vec<&crate::context::FuncEntry>> = BTreeMap::new();
18 for entry in &ctx.func_table {
19 by_class
20 .entry((entry.module_name.clone(), entry.class_name.clone()))
21 .or_default()
22 .push(entry);
23 }
24
25 for ((module, class), entries) in &by_class {
27 let code = wrapper::generate_wrapper_file(entries, ctx);
28 let filename = format!("UikaFunc_{}_{}.cpp", module, class);
29 std::fs::write(out_dir.join(&filename), code)
30 .unwrap_or_else(|e| panic!("Failed to write {filename}: {e}"));
31 }
32
33 let ids_code = func_ids::generate_cpp_func_ids(&ctx.func_table);
35 std::fs::write(out_dir.join("UikaFuncIds.h"), ids_code)
36 .expect("Failed to write UikaFuncIds.h");
37
38 let fill_code = fill_table::generate_fill_table(&ctx.func_table, &by_class);
40 std::fs::write(out_dir.join("UikaFillFuncTable.cpp"), fill_code)
41 .expect("Failed to write UikaFillFuncTable.cpp");
42}