SConscript revision 11307
1247Sstever@eecs.umich.edu# -*- mode:python -*-
24018Sstever@eecs.umich.edu
3247Sstever@eecs.umich.edu# Copyright (c) 2009 The Hewlett-Packard Development Company
4247Sstever@eecs.umich.edu# All rights reserved.
5247Sstever@eecs.umich.edu#
6247Sstever@eecs.umich.edu# Redistribution and use in source and binary forms, with or without
7247Sstever@eecs.umich.edu# modification, are permitted provided that the following conditions are
8247Sstever@eecs.umich.edu# met: redistributions of source code must retain the above copyright
9247Sstever@eecs.umich.edu# notice, this list of conditions and the following disclaimer;
10247Sstever@eecs.umich.edu# redistributions in binary form must reproduce the above copyright
11247Sstever@eecs.umich.edu# notice, this list of conditions and the following disclaimer in the
12247Sstever@eecs.umich.edu# documentation and/or other materials provided with the distribution;
13247Sstever@eecs.umich.edu# neither the name of the copyright holders nor the names of its
14247Sstever@eecs.umich.edu# contributors may be used to endorse or promote products derived from
15247Sstever@eecs.umich.edu# this software without specific prior written permission.
16247Sstever@eecs.umich.edu#
17247Sstever@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18247Sstever@eecs.umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19247Sstever@eecs.umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20247Sstever@eecs.umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21247Sstever@eecs.umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22247Sstever@eecs.umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23247Sstever@eecs.umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24247Sstever@eecs.umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25247Sstever@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26247Sstever@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27247Sstever@eecs.umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28247Sstever@eecs.umich.edu#
29247Sstever@eecs.umich.edu# Authors: Nathan Binkert
301123Sstever@eecs.umich.edu
311123Sstever@eecs.umich.eduimport os
321123Sstever@eecs.umich.eduimport sys
331746Shsul@eecs.umich.edu
341746Shsul@eecs.umich.edufrom os.path import basename, isdir, join as joinpath
351123Sstever@eecs.umich.edu
363362Sstever@eecs.umich.eduimport SCons
373362Sstever@eecs.umich.edu
383362Sstever@eecs.umich.eduImport('*')
393362Sstever@eecs.umich.edu
403362Sstever@eecs.umich.eduDebugFlag('ProtocolTrace')
413362Sstever@eecs.umich.eduDebugFlag('RubyCache')
423362Sstever@eecs.umich.eduDebugFlag('RubyCacheTrace')
431123Sstever@eecs.umich.eduDebugFlag('RubyDma')
443370Sstever@eecs.umich.eduDebugFlag('RubyGenerated')
453370Sstever@eecs.umich.eduDebugFlag('RubyMemory')
463370Sstever@eecs.umich.eduDebugFlag('RubyNetwork')
473370Sstever@eecs.umich.eduDebugFlag('RubyPort')
483362Sstever@eecs.umich.eduDebugFlag('RubyPrefetcher')
493362Sstever@eecs.umich.eduDebugFlag('RubyQueue')
503362Sstever@eecs.umich.eduDebugFlag('RubySequencer')
513362Sstever@eecs.umich.eduDebugFlag('RubySlicc')
523362Sstever@eecs.umich.eduDebugFlag('RubySystem')
533362Sstever@eecs.umich.eduDebugFlag('RubyTester')
543362Sstever@eecs.umich.eduDebugFlag('RubyStats')
553362Sstever@eecs.umich.eduDebugFlag('RubyResourceStalls')
563362Sstever@eecs.umich.edu
573362Sstever@eecs.umich.eduCompoundFlag('Ruby', [ 'RubyQueue', 'RubyNetwork', 'RubyTester',
583362Sstever@eecs.umich.edu    'RubyGenerated', 'RubySlicc', 'RubySystem', 'RubyCache',
593362Sstever@eecs.umich.edu    'RubyMemory', 'RubyDma', 'RubyPort', 'RubySequencer', 'RubyCacheTrace',
603362Sstever@eecs.umich.edu    'RubyPrefetcher'])
611123Sstever@eecs.umich.edu
62247Sstever@eecs.umich.eduif env['PROTOCOL'] == 'None':
634018Sstever@eecs.umich.edu    Return()
644018Sstever@eecs.umich.edu
65247Sstever@eecs.umich.edudef do_embed_text(target, source, env):
663362Sstever@eecs.umich.edu    """convert a text file into a file that can be embedded in C
673362Sstever@eecs.umich.edu    using an #include statement, that defines a \"const char *\" pointing
683362Sstever@eecs.umich.edu    to the same text.
693362Sstever@eecs.umich.edu
703362Sstever@eecs.umich.edu    This is useful to embed scripts and configuration files in object files.
713362Sstever@eecs.umich.edu    """
723362Sstever@eecs.umich.edu
733362Sstever@eecs.umich.edu    escape = [ "\'", "\"", "\\", "\?" ]
743362Sstever@eecs.umich.edu
753362Sstever@eecs.umich.edu    # reads the text file in, line by line, converting it to a C string
763362Sstever@eecs.umich.edu    fin = open(str(source[0]), 'r')
773362Sstever@eecs.umich.edu    fout = open(str(target[0]), 'w' )
78247Sstever@eecs.umich.edu    fout.write("static const char *%s =\n" % source[1].get_contents());
79247Sstever@eecs.umich.edu    for l in fin:
80247Sstever@eecs.umich.edu        # add escape sequences for the characters in escape
813362Sstever@eecs.umich.edu        fout.write("\"")
823362Sstever@eecs.umich.edu        for char in l:
83247Sstever@eecs.umich.edu            if char == "\n":
843362Sstever@eecs.umich.edu                break
853362Sstever@eecs.umich.edu            if char in escape:
863362Sstever@eecs.umich.edu                fout.write("\\")
87247Sstever@eecs.umich.edu                fout.write(char)
883370Sstever@eecs.umich.edu            else:
893370Sstever@eecs.umich.edu                fout.write(char)
903370Sstever@eecs.umich.edu        fout.write("\\n\"\n");
913370Sstever@eecs.umich.edu    fout.write(";\n");
923370Sstever@eecs.umich.edu    fin.close()
933370Sstever@eecs.umich.edu    fout.close()
943370Sstever@eecs.umich.edu
953370Sstever@eecs.umich.edu#
961442Sstever@eecs.umich.edu# Link includes
971442Sstever@eecs.umich.edu#
981442Sstever@eecs.umich.edugenerated_dir = Dir('../protocol')
991442Sstever@eecs.umich.edu
1001442Sstever@eecs.umich.edudef MakeIncludeAction(target, source, env):
1011442Sstever@eecs.umich.edu    f = file(str(target[0]), 'w')
1021123Sstever@eecs.umich.edu    for s in source:
1033362Sstever@eecs.umich.edu        print >>f, '#include "%s"' % str(s.abspath)
1043362Sstever@eecs.umich.edu    f.close()
105247Sstever@eecs.umich.edu
1064018Sstever@eecs.umich.edudef MakeInclude(source):
1074018Sstever@eecs.umich.edu    target = generated_dir.File(basename(source))
1084018Sstever@eecs.umich.edu    include_action = MakeAction(MakeIncludeAction, Transform("MAKE INC", 1))
109247Sstever@eecs.umich.edu    env.Command(target, source, include_action)
110247Sstever@eecs.umich.edu
111247Sstever@eecs.umich.eduMakeInclude('slicc_interface/AbstractEntry.hh')
112247Sstever@eecs.umich.eduMakeInclude('slicc_interface/AbstractCacheEntry.hh')
113247Sstever@eecs.umich.eduMakeInclude('slicc_interface/Message.hh')
114247Sstever@eecs.umich.eduMakeInclude('slicc_interface/RubyRequest.hh')
115
116# External types
117MakeInclude('common/Address.hh')
118MakeInclude('common/BoolVec.hh')
119MakeInclude('common/DataBlock.hh')
120MakeInclude('common/IntVec.hh')
121MakeInclude('common/MachineID.hh')
122MakeInclude('common/NetDest.hh')
123MakeInclude('common/Set.hh')
124MakeInclude('common/WriteMask.hh')
125MakeInclude('filters/AbstractBloomFilter.hh')
126MakeInclude('network/MessageBuffer.hh')
127MakeInclude('structures/Prefetcher.hh')
128MakeInclude('structures/CacheMemory.hh')
129MakeInclude('system/DMASequencer.hh')
130MakeInclude('structures/DirectoryMemory.hh')
131MakeInclude('structures/WireBuffer.hh')
132MakeInclude('structures/PerfectCacheMemory.hh')
133MakeInclude('structures/PersistentTable.hh')
134MakeInclude('system/Sequencer.hh')
135MakeInclude('structures/TBETable.hh')
136MakeInclude('structures/TimerTable.hh')
137