scons: Generate a single debug flag C++ file
Reduces target count/compiler invocations by ~180.
This commit is contained in:
parent
f780e85dc3
commit
f7c6a2cbed
1 changed files with 31 additions and 30 deletions
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue