From f7c6a2cbed3fa0653e3badfcdbc48f7c3792ba53 Mon Sep 17 00:00:00 2001 From: Curtis Dunham Date: Tue, 12 Aug 2014 17:35:28 -0500 Subject: scons: Generate a single debug flag C++ file Reduces target count/compiler invocations by ~180. --- src/SConscript | 63 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 32 insertions(+), 31 deletions(-) (limited to 'src/SConscript') diff --git a/src/SConscript b/src/SConscript index 5bd1fc811..3737ef51b 100755 --- a/src/SConscript +++ b/src/SConscript @@ -743,40 +743,42 @@ elif ProtoBuf.all: 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() + # 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" -''') - for flag in compound: - code('#include "debug/$flag.hh"') - code() - code('namespace Debug {') - code() +namespace Debug { - 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() +''') + + 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: + 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 @@ def makeDebugFlagHH(target, source, env): # 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 @@ for name,flag in sorted(debug_flags.iteritems()): 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 -- cgit v1.2.3