- for obj in objs:
- order_obj(obj)
-
- code = code_formatter()
- code('%module params')
-
- code('%{')
- for obj in ordered_objs:
- code('#include "params/$obj.hh"')
- code('%}')
-
- for obj in ordered_objs:
- params = obj._params.local.values()
- for param in params:
- param.swig_predecls(code)
-
- enums = set()
- for obj in ordered_objs:
- params = obj._params.local.values()
- for param in params:
- ptype = param.ptype
- if issubclass(ptype, m5.params.Enum) and ptype not in enums:
- enums.add(ptype)
- code('%include "enums/$0.hh"', ptype.__name__)
-
- for obj in ordered_objs:
- obj.swig_objdecls(code)
- code()
-
- for obj in ordered_objs:
- continue
- if obj.swig_objdecls:
- obj.swig_objdecls(code)
- continue
-
- class_path = obj.cxx_class.split('::')
- classname = class_path[-1]
- namespaces = class_path[:-1]
-
- for ns in namespaces:
- code('namespace $ns {')
-
- if namespaces:
- code('// avoid name conflicts')
- sep_string = '_COLONS_'
- flat_name = sep_string.join(class_path)
- code('%rename($flat_name) $classname;')
-
- code('// stop swig from creating/wrapping default ctor/dtor')
- code('%nodefault $classname;')
- if obj._base:
- code('class $classname : public ${{obj._base.cxx_class}} {};')
- else:
- code('class $classname {};')
-
- for ns in reversed(namespaces):
- code('/* namespace $ns */ }')
- code()
-
- code('%include "src/sim/sim_object_params.hh"')
- for obj in ordered_objs:
- code('%include "params/$obj.hh"')
-
- code.write(target[0].abspath)
-
-params_file = File('params/params.i')
-names = sorted(sim_objects.keys())
-env.Command(params_file, map(Value, names), buildParams)
-env.Depends(params_file, params_hh_files + params_i_files + depends)
-SwigSource('m5.objects', params_file)