MCPcopy Create free account
hub / github.com/SakuraEngine/SakuraEngine / generate

Function generate

tools/meta_codegen/framework/old_framework.py:175–230  ·  view source on GitHub ↗
(codegen_config: config.CodegenConfig, generate_manager: generator.GenerateManager)

Source from the content-addressed store, hash-verified

173
174
175def 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 )

Callers

nothing calls this directly

Calls 10

load_meta_fileMethod · 0.95
load_generatorFunction · 0.85
MetaDatabaseClass · 0.85
as_objMethod · 0.80
append_contentMethod · 0.80
appendMethod · 0.45
joinMethod · 0.45
subMethod · 0.45
generate_forwardMethod · 0.45
generate_implMethod · 0.45

Tested by

no test coverage detected