diff options
Diffstat (limited to 'src/base')
-rw-r--r-- | src/base/traceflags.py | 258 |
1 files changed, 128 insertions, 130 deletions
diff --git a/src/base/traceflags.py b/src/base/traceflags.py index 800c24dee..dd5ade5af 100644 --- a/src/base/traceflags.py +++ b/src/base/traceflags.py @@ -29,19 +29,7 @@ # Authors: Nathan Binkert # Steve Reinhardt -# -# This file generates the header and source files for the flags -# that control the tracing facility. -# - -import sys - -if len(sys.argv) != 2: - print "%s: Need argument (basename of cc/hh files)" % sys.argv[0] - sys.exit(1) - -hhfilename = sys.argv[1] + '.hh' -ccfilename = sys.argv[1] + '.cc' +__all__ = [ 'allFlags', 'baseFlags', 'compoundFlagsMap', 'compoundFlags' ] # # The list of trace flags that can be used to condition DPRINTFs etc. @@ -196,100 +184,98 @@ compoundFlagMap = { 'ScsiAll' : [ 'ScsiDisk', 'ScsiCtrl', 'ScsiNone' ] } -############################################################# -# -# Everything below this point generates the appropriate C++ -# declarations and definitions for the trace flags. If you are simply -# adding or modifying flag definitions, you should not have to change -# anything below. -# - -import sys - # extract just the compound flag names into a list compoundFlags = [] compoundFlags.extend(compoundFlagMap.keys()) compoundFlags.sort() -# -# First generate the header file. This defines the Flag enum -# and some extern declarations for the .cc file. -# -try: - hhfile = file(hhfilename, 'w') -except IOError, e: - sys.exit("can't open %s: %s" % (hhfilename, e)) - -# file header boilerplate -print >>hhfile, ''' -/* - * DO NOT EDIT THIS FILE! - * - * Automatically generated from traceflags.py - */ +allFlags = frozenset(baseFlags + compoundFlags) -#ifndef __BASE_TRACE_FLAGS_HH__ -#define __BASE_TRACE_FLAGS_HH__ - -namespace Trace { - -enum Flags { -''', - -# Generate the enum. Base flags come first, then compound flags. -idx = 0 -for flag in baseFlags: - print >>hhfile, ' %s = %d,' % (flag, idx) - idx += 1 - -numBaseFlags = idx -print >>hhfile, ' NumFlags = %d,' % idx - -# put a comment in here to separate base from compound flags -print >>hhfile, ''' - // The remaining enum values are *not* valid indices for Trace::flags. - // They are "compound" flags, which correspond to sets of base - // flags, and are used only by TraceParamContext::setFlags(). -''', - -for flag in compoundFlags: - print >>hhfile, ' %s = %d,' % (flag, idx) - idx += 1 - -numCompoundFlags = idx - numBaseFlags -print >>hhfile, ' NumCompoundFlags = %d' % numCompoundFlags - -# trailer boilerplate -print >>hhfile, '''\ -}; // enum Flags - -// Array of strings for SimpleEnumParam -extern const char *flagStrings[]; -extern const int numFlagStrings; - -// Array of arraay pointers: for each compound flag, gives the list of -// base flags to set. Inidividual flag arrays are terminated by -1. -extern const Flags *compoundFlags[]; - -/* namespace Trace */ } - -#endif // __BASE_TRACE_FLAGS_HH__ -''', - -hhfile.close() - -# -# -# Print out .cc file with array definitions. +############################################################# # +# Everything below this point generates the appropriate C++ +# declarations and definitions for the trace flags. If you are simply +# adding or modifying flag definitions, you should not have to change +# anything below. # -try: - ccfile = file(ccfilename, 'w') -except OSError, e: - sys.exit("can't open %s: %s" % (ccfilename, e)) - -# file header -print >>ccfile, ''' +def gen_hh(filename): + # + # First generate the header file. This defines the Flag enum + # and some extern declarations for the .cc file. + # + try: + hhfile = file(filename, 'w') + except IOError, e: + sys.exit("can't open %s: %s" % (hhfilename, e)) + + # file header boilerplate + print >>hhfile, ''' + /* + * DO NOT EDIT THIS FILE! + * + * Automatically generated from traceflags.py + */ + + #ifndef __BASE_TRACE_FLAGS_HH__ + #define __BASE_TRACE_FLAGS_HH__ + + namespace Trace { + + enum Flags { + ''', + + # Generate the enum. Base flags come first, then compound flags. + idx = 0 + for flag in baseFlags: + print >>hhfile, ' %s = %d,' % (flag, idx) + idx += 1 + + numBaseFlags = idx + print >>hhfile, ' NumFlags = %d,' % idx + + # put a comment in here to separate base from compound flags + print >>hhfile, ''' + // The remaining enum values are *not* valid indices for Trace::flags. + // They are "compound" flags, which correspond to sets of base + // flags, and are used only by TraceParamContext::setFlags(). + ''', + + for flag in compoundFlags: + print >>hhfile, ' %s = %d,' % (flag, idx) + idx += 1 + + numCompoundFlags = idx - numBaseFlags + print >>hhfile, ' NumCompoundFlags = %d' % numCompoundFlags + + # trailer boilerplate + print >>hhfile, '''\ + }; // enum Flags + + // Array of strings for SimpleEnumParam + extern const char *flagStrings[]; + extern const int numFlagStrings; + + // Array of arraay pointers: for each compound flag, gives the list of + // base flags to set. Inidividual flag arrays are terminated by -1. + extern const Flags *compoundFlags[]; + + /* namespace Trace */ } + + #endif // __BASE_TRACE_FLAGS_HH__ + ''', + + hhfile.close() + +def gen_cc(filename): + '''Print out .cc file with array definitions.''' + + try: + ccfile = file(filename, 'w') + except OSError, e: + sys.exit("can't open %s: %s" % (ccfilename, e)) + + # file header + print >>ccfile, ''' /* * DO NOT EDIT THIS FILE! * @@ -304,45 +290,57 @@ const char *Trace::flagStrings[] = { ''', -# The string array is used by SimpleEnumParam to map the strings -# provided by the user to enum values. -for flag in baseFlags: - print >>ccfile, ' "%s",' % flag + # The string array is used by SimpleEnumParam to map the strings + # provided by the user to enum values. + for flag in baseFlags: + print >>ccfile, ' "%s",' % flag -for flag in compoundFlags: - print >>ccfile, ' "%s",' % flag + for flag in compoundFlags: + print >>ccfile, ' "%s",' % flag -print >>ccfile, '};\n' + print >>ccfile, '};\n' -numFlagStrings = len(baseFlags) + len(compoundFlags); + numFlagStrings = len(baseFlags) + len(compoundFlags); -print >>ccfile, 'const int Trace::numFlagStrings = %d;' % numFlagStrings -print >>ccfile + print >>ccfile, 'const int Trace::numFlagStrings = %d;' % numFlagStrings + print >>ccfile -# -# Now define the individual compound flag arrays. There is an array -# for each compound flag listing the component base flags. -# + # + # Now define the individual compound flag arrays. There is an array + # for each compound flag listing the component base flags. + # -for flag in compoundFlags: - flags = compoundFlagMap[flag] - flags.append('(Flags)-1') - print >>ccfile, 'static const Flags %sMap[] =' % flag - print >>ccfile, '{ %s };' % (', '.join(flags)) - print >>ccfile + for flag in compoundFlags: + flags = compoundFlagMap[flag] + flags.append('(Flags)-1') + print >>ccfile, 'static const Flags %sMap[] =' % flag + print >>ccfile, '{ %s };' % (', '.join(flags)) + print >>ccfile -# -# Finally the compoundFlags[] array maps the compound flags -# to their individual arrays/ -# -print >>ccfile, 'const Flags *Trace::compoundFlags[] =' -print >>ccfile, '{' + # + # Finally the compoundFlags[] array maps the compound flags + # to their individual arrays/ + # + print >>ccfile, 'const Flags *Trace::compoundFlags[] =' + print >>ccfile, '{' + + for flag in compoundFlags: + print >>ccfile, ' %sMap,' % flag + + # file trailer + print >>ccfile, '};' + + ccfile.close() -for flag in compoundFlags: - print >>ccfile, ' %sMap,' % flag +if __name__ == '__main__': + # This file generates the header and source files for the flags + # that control the tracing facility. -# file trailer -print >>ccfile, '};' + import sys -ccfile.close() + if len(sys.argv) != 2: + print "%s: Need argument (basename of cc/hh files)" % sys.argv[0] + sys.exit(1) + gen_hh(sys.argv[1] + '.hh') + gen_cc(sys.argv[1] + '.cc') |