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

Reply via email to