changeset b28bd1fa9a35 in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=b28bd1fa9a35
description:
scons: use code_formatter wherever we can in the build system
diffstat:
src/SConscript | 400 ++++++++++++++++++++++++--------------------
src/python/m5/SimObject.py | 187 +++++++++++---------
src/python/m5/params.py | 198 ++++++++++++++-------
src/sim/System.py | 5 +-
4 files changed, 453 insertions(+), 337 deletions(-)
diffs (truncated from 1299 to 300 lines):
diff -r d609cd948ca0 -r b28bd1fa9a35 src/SConscript
--- a/src/SConscript Thu Sep 09 14:15:41 2010 -0700
+++ b/src/SConscript Thu Sep 09 14:15:41 2010 -0700
@@ -259,10 +259,8 @@
env.ConfigFile(opt)
def makeTheISA(source, target, env):
- f = file(str(target[0]), 'w')
-
isas = [ src.get_contents() for src in source ]
- target = env['TARGET_ISA']
+ target_isa = env['TARGET_ISA']
def define(isa):
return isa.upper() + '_ISA'
@@ -270,16 +268,24 @@
return isa[0].upper() + isa[1:].lower() + 'ISA'
- print >>f, '#ifndef __CONFIG_THE_ISA_HH__'
- print >>f, '#define __CONFIG_THE_ISA_HH__'
- print >>f
+ code = code_formatter()
+ code('''\
+#ifndef __CONFIG_THE_ISA_HH__
+#define __CONFIG_THE_ISA_HH__
+
+''')
+
for i,isa in enumerate(isas):
- print >>f, '#define %s %d' % (define(isa), i + 1)
- print >>f
- print >>f, '#define THE_ISA %s' % (define(target))
- print >>f, '#define TheISA %s' % (namespace(target))
- print >>f
- print >>f, '#endif // __CONFIG_THE_ISA_HH__'
+ code('#define $0 $1', define(isa), i + 1)
+
+ code('''
+
+#define THE_ISA ${{define(target_isa)}}
+#define TheISA ${{namespace(target_isa)}}
+
+#endif // __CONFIG_THE_ISA_HH__''')
+
+ code.write(str(target[0]))
env.Command('config/the_isa.hh', map(Value, all_isa_list), makeTheISA)
@@ -347,6 +353,7 @@
import m5.SimObject
import m5.params
+from m5.util import code_formatter
m5.SimObject.clear()
m5.params.clear()
@@ -402,7 +409,7 @@
def makeDefinesPyFile(target, source, env):
build_env, hg_info = [ x.get_contents() for x in source ]
- code = m5.util.code_formatter()
+ code = code_formatter()
code("""
import m5.internal
import m5.util
@@ -418,7 +425,7 @@
_globals[flag] = val
del _globals
""")
- code.write(str(target[0]))
+ code.write(target[0].abspath)
defines_info = [ Value(build_env), Value(env['HG_INFO']) ]
# Generate a file with all of the compile options in it
@@ -427,11 +434,11 @@
# Generate python file containing info about the M5 source code
def makeInfoPyFile(target, source, env):
- f = file(str(target[0]), 'w')
+ code = code_formatter()
for src in source:
data = ''.join(file(src.srcnode().abspath, 'r').xreadlines())
- print >>f, "%s = %s" % (src, repr(data))
- f.close()
+ code('$src = ${{repr(data)}}')
+ code.write(str(target[0]))
# Generate a file that wraps the basic top level files
env.Command('python/m5/info.py',
@@ -441,12 +448,15 @@
# Generate the __init__.py file for m5.objects
def makeObjectsInitFile(target, source, env):
- f = file(str(target[0]), 'w')
- print >>f, 'from params import *'
- print >>f, 'from m5.SimObject import *'
+ code = code_formatter()
+ code('''\
+from params import *
+from m5.SimObject import *
+''')
+
for module in source:
- print >>f, 'from %s import *' % module.get_contents()
- f.close()
+ code('from $0 import *', module.get_contents())
+ code.write(str(target[0]))
# Generate an __init__.py file for the objects package
env.Command('python/m5/objects/__init__.py',
@@ -462,43 +472,42 @@
def createSimObjectParam(target, source, env):
assert len(target) == 1 and len(source) == 1
- hh_file = file(target[0].abspath, 'w')
name = str(source[0].get_contents())
obj = sim_objects[name]
- print >>hh_file, obj.cxx_decl()
- hh_file.close()
+ code = code_formatter()
+ obj.cxx_decl(code)
+ code.write(target[0].abspath)
def createSwigParam(target, source, env):
assert len(target) == 1 and len(source) == 1
- i_file = file(target[0].abspath, 'w')
name = str(source[0].get_contents())
param = all_params[name]
- for line in param.swig_decl():
- print >>i_file, line
- i_file.close()
+ code = code_formatter()
+ param.swig_decl(code)
+ code.write(target[0].abspath)
def createEnumStrings(target, source, env):
assert len(target) == 1 and len(source) == 1
- cc_file = file(target[0].abspath, 'w')
name = str(source[0].get_contents())
obj = all_enums[name]
- print >>cc_file, obj.cxx_def()
- cc_file.close()
+ code = code_formatter()
+ obj.cxx_def(code)
+ code.write(target[0].abspath)
def createEnumParam(target, source, env):
assert len(target) == 1 and len(source) == 1
- hh_file = file(target[0].abspath, 'w')
name = str(source[0].get_contents())
obj = all_enums[name]
- print >>hh_file, obj.cxx_decl()
- hh_file.close()
+ code = code_formatter()
+ obj.cxx_decl(code)
+ code.write(target[0].abspath)
# Generate all of the SimObject param struct header files
params_hh_files = []
@@ -538,7 +547,6 @@
def buildParams(target, source, env):
names = [ s.get_contents() for s in source ]
objs = [ sim_objects[name] for name in names ]
- out = file(target[0].abspath, 'w')
ordered_objs = []
obj_seen = set()
@@ -556,82 +564,67 @@
for obj in objs:
order_obj(obj)
- enums = set()
- predecls = []
- pd_seen = set()
+ code = code_formatter()
+ code('%module params')
- def add_pds(*pds):
- for pd in pds:
- if pd not in pd_seen:
- predecls.append(pd)
- pd_seen.add(pd)
+ 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):
- if ptype not in enums:
- enums.add(ptype)
- pds = param.swig_predecls()
- if isinstance(pds, (list, tuple)):
- add_pds(*pds)
- else:
- add_pds(pds)
-
- print >>out, '%module params'
-
- print >>out, '%{'
+ 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:
- print >>out, '#include "params/%s.hh"' % obj
- print >>out, '%}'
-
- for pd in predecls:
- print >>out, pd
-
- enums = list(enums)
- enums.sort()
- for enum in enums:
- print >>out, '%%include "enums/%s.hh"' % enum.__name__
- print >>out
+ obj.swig_objdecls(code)
+ code()
for obj in ordered_objs:
+ continue
if obj.swig_objdecls:
- for decl in obj.swig_objdecls:
- print >>out, decl
+ obj.swig_objdecls(code)
continue
class_path = obj.cxx_class.split('::')
classname = class_path[-1]
namespaces = class_path[:-1]
- namespaces.reverse()
- code = ''
+ for ns in namespaces:
+ code('namespace $ns {')
if namespaces:
- code += '// avoid name conflicts\n'
+ code('// avoid name conflicts')
sep_string = '_COLONS_'
flat_name = sep_string.join(class_path)
- code += '%%rename(%s) %s;\n' % (flat_name, classname)
+ code('%rename($flat_name) $classname;')
- code += '// stop swig from creating/wrapping default ctor/dtor\n'
- code += '%%nodefault %s;\n' % classname
- code += 'class %s ' % classname
+ code('// stop swig from creating/wrapping default ctor/dtor')
+ code('%nodefault $classname;')
if obj._base:
- code += ': public %s' % obj._base.cxx_class
- code += ' {};\n'
+ code('class $classname : public ${{obj._base.cxx_class}} {};')
+ else:
+ code('class $classname {};')
- for ns in namespaces:
- new_code = 'namespace %s {\n' % ns
- new_code += code
- new_code += '}\n'
- code = new_code
+ for ns in reversed(namespaces):
+ code('/* namespace $ns */ }')
+ code()
- print >>out, code
+ code('%include "src/sim/sim_object_params.hh"')
+ for obj in ordered_objs:
+ code('%include "params/$obj.hh"')
- print >>out, '%%include "src/sim/sim_object_params.hh"' % obj
- for obj in ordered_objs:
- print >>out, '%%include "params/%s.hh"' % obj
+ code.write(target[0].abspath)
params_file = File('params/params.i')
names = sorted(sim_objects.keys())
@@ -649,16 +642,23 @@
# Generate the main swig init file
def makeSwigInit(target, source, env):
- f = file(str(target[0]), 'w')
- print >>f, 'extern "C" {'
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev