scons: Generate cxx_config/init.cc using a helper script.
Change-Id: Ib0129fc5c2de3977f2dedc1bfec532bbedb2d20e Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/49428 Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
@@ -44,6 +44,7 @@ import importlib
|
||||
import importlib.abc
|
||||
import importlib.machinery
|
||||
import importlib.util
|
||||
import itertools
|
||||
import os
|
||||
import os.path
|
||||
import re
|
||||
@@ -721,40 +722,21 @@ for module, simobjs in sorted(SimObject.sim_objects.items()):
|
||||
if GetOption('with_cxx_config'):
|
||||
Source(cc_file)
|
||||
|
||||
# C++ parameter description files
|
||||
# CXX config init.cc
|
||||
all_sim_objects = sorted(itertools.chain.from_iterable(
|
||||
SimObject.sim_objects.values()))
|
||||
sim_object_args = list(f'"{sim_object}"' for sim_object in all_sim_objects)
|
||||
cc_file = File('cxx_config/init.cc')
|
||||
gem5py_env.Command([ "${CXXCONFIGINIT_CC}" ],
|
||||
[ "${GEM5PY}", "${CXXCONFIGINITCC_PY}" ],
|
||||
MakeAction('"${GEM5PY}" "${CXXCONFIGINITCC_PY}" "${TARGET}" '
|
||||
'${SIM_OBJECTS}',
|
||||
Transform("CXXCINIT", 0)),
|
||||
CXXCONFIGINITCC_PY=build_tools.File('cxx_config_init_cc.py'),
|
||||
SIM_OBJECTS=' '.join(sim_object_args),
|
||||
CXXCONFIGINIT_CC=cc_file)
|
||||
if GetOption('with_cxx_config'):
|
||||
cxx_config_init_cc_file = File('cxx_config/init.cc')
|
||||
|
||||
def createCxxConfigInitCC(target, source, env):
|
||||
assert len(target) == 1
|
||||
|
||||
code = code_formatter()
|
||||
|
||||
for name,simobj in sorted(sim_objects.items()):
|
||||
if not hasattr(simobj, 'abstract') or not simobj.abstract:
|
||||
code('#include "cxx_config/${name}.hh"')
|
||||
code()
|
||||
code('namespace gem5')
|
||||
code('{')
|
||||
code()
|
||||
code('void cxxConfigInit()')
|
||||
code('{')
|
||||
code.indent()
|
||||
for name,simobj in sorted(sim_objects.items()):
|
||||
not_abstract = not hasattr(simobj, 'abstract') or \
|
||||
not simobj.abstract
|
||||
if not_abstract and 'type' in simobj.__dict__:
|
||||
code('cxx_config_directory["${name}"] = '
|
||||
'${name}CxxConfigParams::makeDirectoryEntry();')
|
||||
code.dedent()
|
||||
code('}')
|
||||
code('')
|
||||
code('} // namespace gem5')
|
||||
code.write(target[0].abspath)
|
||||
|
||||
env.Command(cxx_config_init_cc_file, [],
|
||||
MakeAction(createCxxConfigInitCC, Transform("CXXCINIT")))
|
||||
Source(cxx_config_init_cc_file)
|
||||
Source(cc_file)
|
||||
|
||||
# C++ versions of enum params.
|
||||
for module, enums in sorted(SimObject.enums.items()):
|
||||
|
||||
Reference in New Issue
Block a user