scons: Generate a single debug flag C++ file

Reduces target count/compiler invocations by ~180.
This commit is contained in:
Curtis Dunham 2014-08-12 17:35:28 -05:00
parent f780e85dc3
commit f7c6a2cbed

View file

@ -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"
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 @@ 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