(codegen_config: config.CodegenConfig, generate_manager: generator.GenerateManager)
| 173 | |
| 174 | |
| 175 | def generate(codegen_config: config.CodegenConfig, generate_manager: generator.GenerateManager): |
| 176 | fake_args = sc.ObjDictTools.as_obj({ |
| 177 | "root": codegen_config.main_module.meta_dir, |
| 178 | "outdir": codegen_config.output_dir, |
| 179 | "api": codegen_config.main_module.api, |
| 180 | "module": codegen_config.main_module.module_name, |
| 181 | # "includes": None, #! never use |
| 182 | # "generators": None, #! never use |
| 183 | }) |
| 184 | |
| 185 | # load generators |
| 186 | generators = [] |
| 187 | for i, generator_config in enumerate(codegen_config.generators): |
| 188 | if generator_config.use_new_framework: |
| 189 | continue |
| 190 | generators.append(load_generator(i, generator_config.entry_file)) |
| 191 | |
| 192 | # load db |
| 193 | db = MetaDatabase() |
| 194 | header_dbs = [] |
| 195 | metas = glob.glob(os.path.join(codegen_config.main_module.meta_dir, "**", "*.h.meta"), recursive=True) |
| 196 | for meta in metas: |
| 197 | db.load_meta_file(meta, True) |
| 198 | header_db = MetaDatabase() |
| 199 | header_db.load_meta_file(meta, True) |
| 200 | header_db.relative_path = os.path.relpath(meta, codegen_config.main_module.meta_dir) |
| 201 | header_db.file_id = f"FID_{codegen_config.main_module.module_name}_" + re.sub(r'\W+', '_', header_db.relative_path) |
| 202 | header_dbs.append(header_db) |
| 203 | |
| 204 | # load includes |
| 205 | for include_module in codegen_config.include_modules: |
| 206 | metas = glob.glob(os.path.join(include_module.meta_dir, "**", "*.h.meta"), recursive=True) |
| 207 | for meta in metas: |
| 208 | db.load_meta_file(meta, False) |
| 209 | |
| 210 | # gen headers |
| 211 | for header_db in header_dbs: |
| 212 | header_content = "" |
| 213 | for generator in generators: |
| 214 | if hasattr(generator, "generate_forward"): |
| 215 | header_content += generator.generate_forward(header_db, fake_args) |
| 216 | generated_header = re.sub(r"(.*?)\.(.*?)\.meta", r"\g<1>.generated.\g<2>", header_db.relative_path) |
| 217 | generate_manager.append_content( |
| 218 | generated_header, |
| 219 | header_content |
| 220 | ) |
| 221 | |
| 222 | # gen source |
| 223 | source_content = "" |
| 224 | for generator in generators: |
| 225 | if hasattr(generator, "generate_impl"): |
| 226 | source_content += generator.generate_impl(db, fake_args) |
| 227 | generate_manager.append_content( |
| 228 | "generated.cpp", |
| 229 | source_content |
| 230 | ) |
nothing calls this directly
no test coverage detected