Initial SCons-based build system. See www.scons.org.
[gem5.git] / base / traceflags.py
1 #!/usr/bin/env python
2
3 # Copyright (c) 2004 The Regents of The University of Michigan
4 # All rights reserved.
5 #
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions are
8 # met: redistributions of source code must retain the above copyright
9 # notice, this list of conditions and the following disclaimer;
10 # redistributions in binary form must reproduce the above copyright
11 # notice, this list of conditions and the following disclaimer in the
12 # documentation and/or other materials provided with the distribution;
13 # neither the name of the copyright holders nor the names of its
14 # contributors may be used to endorse or promote products derived from
15 # this software without specific prior written permission.
16 #
17 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
29 #
30 # This file generates the header and source files for the flags
31 # that control the tracing facility.
32 #
33
34 import sys
35
36 if len(sys.argv) != 2:
37 print "%s: Need argument (basename of cc/hh files)" % sys.argv[0]
38 sys.exit(1)
39
40 hhfilename = sys.argv[1] + '.hh'
41 ccfilename = sys.argv[1] + '.cc'
42
43 #
44 # The list of trace flags that can be used to condition DPRINTFs etc.
45 # To define a new flag, simply add it to this list.
46 #
47 baseFlags = [
48 'TCPIP',
49 'Bus',
50 'ScsiDisk',
51 'ScsiCtrl',
52 'ScsiNone',
53 'DMA',
54 'DMAReadVerbose',
55 'DMAWriteVerbose',
56 'TLB',
57 'SimpleDisk',
58 'SimpleDiskData',
59 'Clock',
60 'Regs',
61 'MC146818',
62 'IPI',
63 'Timer',
64 'Mbox',
65 'PCIA',
66 'PCIDEV',
67 'PciConfigAll',
68 'ISP',
69 'BADADDR',
70 'Console',
71 'ConsolePoll',
72 'ConsoleVerbose',
73 'AlphaConsole',
74 'Flow',
75 'Interrupt',
76 'Fault',
77 'Cycle',
78 'Loader',
79 'MMU',
80 'Ethernet',
81 'EthernetPIO',
82 'EthernetDMA',
83 'EthernetData',
84 'EthernetDesc',
85 'EthernetIntr',
86 'EthernetSM',
87 'EthernetCksum',
88 'GDBMisc',
89 'GDBAcc',
90 'GDBRead',
91 'GDBWrite',
92 'GDBSend',
93 'GDBRecv',
94 'GDBExtra',
95 'VtoPhys',
96 'Printf',
97 'DebugPrintf',
98 'Serialize',
99 'Event',
100 'PCEvent',
101 'SyscallWarnings',
102 'SyscallVerbose',
103 'DiskImage',
104 'DiskImageRead',
105 'DiskImageWrite',
106 'InstExec',
107 'BPredRAS',
108 'Cache',
109 'IIC',
110 'IICMore',
111 'MSHR',
112 'Chains',
113 'Dispatch',
114 'Stats',
115 'StatEvents',
116 'Context',
117 'Config',
118 'Sampler',
119 'WriteBarrier',
120 'IdeCtrl',
121 'IdeDisk',
122 'Tsunami',
123 'Uart'
124 ]
125
126 #
127 # "Compound" flags correspond to a set of base flags. These exist
128 # solely for convenience in setting them via the command line: if a
129 # compound flag is specified, all of the corresponding base flags are
130 # set. Compound flags cannot be used directly in DPRINTFs etc.
131 # To define a new compound flag, add a new entry to this hash
132 # following the existing examples.
133 #
134 compoundFlagMap = {
135 'GDBAll' : [ 'GDBMisc', 'GDBAcc', 'GDBRead', 'GDBWrite', 'GDBSend', 'GDBRecv', 'GDBExtra' ],
136 'ScsiAll' : [ 'ScsiDisk', 'ScsiCtrl', 'ScsiNone' ],
137 'DiskImageAll' : [ 'DiskImage', 'DiskImageRead', 'DiskImageWrite' ],
138 'EthernetAll' : [ 'Ethernet', 'EthernetPIO', 'EthernetDMA', 'EthernetData' , 'EthernetDesc', 'EthernetIntr', 'EthernetSM', 'EthernetCksum' ],
139 'IdeAll' : [ 'IdeCtrl', 'IdeDisk' ]
140 }
141
142 #############################################################
143 #
144 # Everything below this point generates the appropriate C++
145 # declarations and definitions for the trace flags. If you are simply
146 # adding or modifying flag definitions, you should not have to change
147 # anything below.
148 #
149
150 import sys
151
152 # extract just the compound flag names into a list
153 compoundFlags = []
154 compoundFlags.extend(compoundFlagMap.keys())
155 compoundFlags.sort()
156
157 #
158 # First generate the header file. This defines the Flag enum
159 # and some extern declarations for the .cc file.
160 #
161 try:
162 hhfile = file(hhfilename, 'w')
163 except IOError, e:
164 sys.exit("can't open %s: %s" % (hhfilename, e))
165
166 # file header boilerplate
167 print >>hhfile, '''/* $Id $ */
168
169 /*
170 * Copyright (c) 2004
171 * The Regents of The University of Michigan
172 * All Rights Reserved
173 *
174 * This code is part of the M5 simulator, developed by Nathan Binkert,
175 * Erik Hallnor, Steve Raasch, and Steve Reinhardt, with contributions
176 * from Ron Dreslinski, Dave Greene, and Lisa Hsu.
177 *
178 * Permission is granted to use, copy, create derivative works and
179 * redistribute this software and such derivative works for any
180 * purpose, so long as the copyright notice above, this grant of
181 * permission, and the disclaimer below appear in all copies made; and
182 * so long as the name of The University of Michigan is not used in
183 * any advertising or publicity pertaining to the use or distribution
184 * of this software without specific, written prior authorization.
185 *
186 * THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION FROM THE
187 * UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY PURPOSE, AND
188 * WITHOUT WARRANTY BY THE UNIVERSITY OF MICHIGAN OF ANY KIND, EITHER
189 * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
190 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
191 * PURPOSE. THE REGENTS OF THE UNIVERSITY OF MICHIGAN SHALL NOT BE
192 * LIABLE FOR ANY DAMAGES, INCLUDING DIRECT, SPECIAL, INDIRECT,
193 * INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WITH RESPECT TO ANY CLAIM
194 * ARISING OUT OF OR IN CONNECTION WITH THE USE OF THE SOFTWARE, EVEN
195 * IF IT HAS BEEN OR IS HEREAFTER ADVISED OF THE POSSIBILITY OF SUCH
196 * DAMAGES.
197 */
198
199 /*
200 * DO NOT EDIT THIS FILE!
201 *
202 * Automatically generated from traceflags.py
203 */
204
205 #ifndef __BASE_TRACE_FLAGS_HH__
206 #define __BASE_TRACE_FLAGS_HH__
207
208 namespace Trace {
209
210 enum Flags {
211 ''',
212
213 # Generate the enum. Base flags come first, then compound flags.
214 idx = 0
215 for flag in baseFlags:
216 print >>hhfile, ' %s = %d,' % (flag, idx)
217 idx += 1
218
219 numBaseFlags = idx
220 print >>hhfile, ' NumFlags = %d,' % idx
221
222 # put a comment in here to separate base from compound flags
223 print >>hhfile, '''
224 // The remaining enum values are *not* valid indices for Trace::flags.
225 // They are "compound" flags, which correspond to sets of base
226 // flags, and are used only by TraceParamContext::setFlags().
227 ''',
228
229 for flag in compoundFlags:
230 print >>hhfile, ' %s = %d,' % (flag, idx)
231 idx += 1
232
233 numCompoundFlags = idx - numBaseFlags
234 print >>hhfile, ' NumCompoundFlags = %d' % numCompoundFlags
235
236 # trailer boilerplate
237 print >>hhfile, '''\
238 }; // enum Flags
239
240 // Array of strings for SimpleEnumParam
241 extern const char *flagStrings[];
242 extern const int numFlagStrings;
243
244 // Array of arraay pointers: for each compound flag, gives the list of
245 // base flags to set. Inidividual flag arrays are terminated by -1.
246 extern const Flags *compoundFlags[];
247
248 /* namespace Trace */ }
249
250 #endif // __BASE_TRACE_FLAGS_HH__
251 ''',
252
253 hhfile.close()
254
255 #
256 #
257 # Print out .cc file with array definitions.
258 #
259 #
260 try:
261 ccfile = file(ccfilename, 'w')
262 except OSError, e:
263 sys.exit("can't open %s: %s" % (ccfilename, e))
264
265 # file header
266 print >>ccfile, '''\
267 /* $Id $ */
268
269 /*
270 * Copyright (c) 2004
271 * The Regents of The University of Michigan
272 * All Rights Reserved
273 *
274 * This code is part of the M5 simulator, developed by Nathan Binkert,
275 * Erik Hallnor, Steve Raasch, and Steve Reinhardt, with contributions
276 * from Ron Dreslinski, Dave Greene, and Lisa Hsu.
277 *
278 * Permission is granted to use, copy, create derivative works and
279 * redistribute this software and such derivative works for any
280 * purpose, so long as the copyright notice above, this grant of
281 * permission, and the disclaimer below appear in all copies made; and
282 * so long as the name of The University of Michigan is not used in
283 * any advertising or publicity pertaining to the use or distribution
284 * of this software without specific, written prior authorization.
285 *
286 * THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION FROM THE
287 * UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY PURPOSE, AND
288 * WITHOUT WARRANTY BY THE UNIVERSITY OF MICHIGAN OF ANY KIND, EITHER
289 * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
290 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
291 * PURPOSE. THE REGENTS OF THE UNIVERSITY OF MICHIGAN SHALL NOT BE
292 * LIABLE FOR ANY DAMAGES, INCLUDING DIRECT, SPECIAL, INDIRECT,
293 * INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WITH RESPECT TO ANY CLAIM
294 * ARISING OUT OF OR IN CONNECTION WITH THE USE OF THE SOFTWARE, EVEN
295 * IF IT HAS BEEN OR IS HEREAFTER ADVISED OF THE POSSIBILITY OF SUCH
296 * DAMAGES.
297 */
298
299 /*
300 * DO NOT EDIT THIS FILE!
301 *
302 * Automatically generated from traceflags.pl.
303 */
304
305 #include "base/traceflags.hh"
306
307 using namespace Trace;
308
309 const char *Trace::flagStrings[] =
310 {
311 ''',
312
313 # The string array is used by SimpleEnumParam to map the strings
314 # provided by the user to enum values.
315 for flag in baseFlags:
316 print >>ccfile, ' "%s",' % flag
317
318 for flag in compoundFlags:
319 print >>ccfile, ' "%s",' % flag
320
321 print >>ccfile, '};\n'
322
323 numFlagStrings = len(baseFlags) + len(compoundFlags);
324
325 print >>ccfile, 'const int Trace::numFlagStrings = %d;' % numFlagStrings
326 print >>ccfile
327
328 #
329 # Now define the individual compound flag arrays. There is an array
330 # for each compound flag listing the component base flags.
331 #
332
333 for flag in compoundFlags:
334 flags = compoundFlagMap[flag]
335 flags.append('(Flags)-1')
336 print >>ccfile, 'static const Flags %sMap[] =' % flag
337 print >>ccfile, '{ %s };' % (', '.join(flags))
338 print >>ccfile
339
340 #
341 # Finally the compoundFlags[] array maps the compound flags
342 # to their individual arrays/
343 #
344 print >>ccfile, 'const Flags *Trace::compoundFlags[] ='
345 print >>ccfile, '{'
346
347 for flag in compoundFlags:
348 print >>ccfile, ' %sMap,' % flag
349
350 # file trailer
351 print >>ccfile, '};'
352
353 ccfile.close()
354