changeset 30b40ca619ba in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=30b40ca619ba
description:
        scons: Generate a single debug flag C++ file

        Reduces target count/compiler invocations by ~180.

diffstat:

 src/SConscript |  61 +++++++++++++++++++++++++++++----------------------------
 1 files changed, 31 insertions(+), 30 deletions(-)

diffs (99 lines):

diff -r dc49b13b6f79 -r 30b40ca619ba src/SConscript
--- a/src/SConscript    Thu Oct 16 05:49:33 2014 -0400
+++ b/src/SConscript    Tue Aug 12 17:35:28 2014 -0500
@@ -743,40 +743,42 @@
 def makeDebugFlagCC(target, source, env):
     assert(len(target) == 1 and len(source) == 1)
 
-    val = eval(source[0].get_contents())
-    name, compound, desc = val
-    compound = list(sorted(compound))
+    code = code_formatter()
 
-    code = code_formatter()
+    # delay definition of CompoundFlags until after all the definition
+    # of all constituent SimpleFlags
+    comp_code = code_formatter()
 
     # file header
     code('''
 /*
- * DO NOT EDIT THIS FILE! Automatically generated
+ * DO NOT EDIT THIS FILE! Automatically generated by SCons.
  */
 
 #include "base/debug.hh"
+
+namespace Debug {
+
 ''')
 
-    for flag in compound:
-        code('#include "debug/$flag.hh"')
-    code()
-    code('namespace Debug {')
-    code()
+    for name, flag in sorted(source[0].read().iteritems()):
+        n, compound, desc = flag
+        assert n == name
 
-    if not compound:
-        code('SimpleFlag $name("$name", "$desc");')
-    else:
-        code('CompoundFlag $name("$name", "$desc",')
-        code.indent()
-        last = len(compound) - 1
-        for i,flag in enumerate(compound):
-            if i != last:
-                code('$flag,')
-            else:
-                code('$flag);')
-        code.dedent()
+        if not compound:
+            code('SimpleFlag $name("$name", "$desc");')
+        else:
+            comp_code('CompoundFlag $name("$name", "$desc",')
+            comp_code.indent()
+            last = len(compound) - 1
+            for i,flag in enumerate(compound):
+                if i != last:
+                    comp_code('$flag,')
+                else:
+                    comp_code('$flag);')
+            comp_code.dedent()
 
+    code.append(comp_code)
     code()
     code('} // namespace Debug')
 
@@ -793,9 +795,7 @@
     # file header boilerplate
     code('''\
 /*
- * DO NOT EDIT THIS FILE!
- *
- * Automatically generated by SCons
+ * DO NOT EDIT THIS FILE! Automatically generated by SCons.
  */
 
 #ifndef __DEBUG_${name}_HH__
@@ -828,13 +828,14 @@
     assert n == name
 
     hh_file = 'debug/%s.hh' % name
-    cc_file = 'debug/%s.cc' % name
     env.Command(hh_file, Value(flag),
                 MakeAction(makeDebugFlagHH, Transform("TRACING", 0)))
-    env.Command(cc_file, Value(flag),
-                MakeAction(makeDebugFlagCC, Transform("TRACING", 0)))
-    env.Depends(SWIG, [hh_file, cc_file])
-    Source('debug/%s.cc' % name)
+    env.Depends(SWIG, hh_file)
+
+env.Command('debug/flags.cc', Value(debug_flags),
+            MakeAction(makeDebugFlagCC, Transform("TRACING", 0)))
+env.Depends(SWIG, 'debug/flags.cc')
+Source('debug/flags.cc')
 
 # Embed python files.  All .py files that have been indicated by a
 # PySource() call in a SConscript need to be embedded into the M5
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to