SConscript revision 6797
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.eduif not env['RUBY']:
413362Sstever@eecs.umich.edu    Return()
423362Sstever@eecs.umich.edu
431123Sstever@eecs.umich.eduSource('libruby.cc')
443370Sstever@eecs.umich.edu
453370Sstever@eecs.umich.edudef do_embed_text(target, source, env):
463370Sstever@eecs.umich.edu    """convert a text file into a file that can be embedded in C
473370Sstever@eecs.umich.edu    using an #include statement, that defines a \"const char *\" pointing
483362Sstever@eecs.umich.edu    to the same text.
493362Sstever@eecs.umich.edu
503362Sstever@eecs.umich.edu    This is useful to embed scripts and configuration files in object files.
513362Sstever@eecs.umich.edu    """
523362Sstever@eecs.umich.edu
533362Sstever@eecs.umich.edu    escape = [ "\'", "\"", "\\", "\?" ]
543362Sstever@eecs.umich.edu
553362Sstever@eecs.umich.edu    # reads the text file in, line by line, converting it to a C string
563362Sstever@eecs.umich.edu    fin = open(str(source[0]), 'r')
573362Sstever@eecs.umich.edu    fout = open(str(target[0]), 'w' )
583362Sstever@eecs.umich.edu    fout.write("static const char *%s =\n" % source[1].get_contents());
593362Sstever@eecs.umich.edu    for l in fin:
603362Sstever@eecs.umich.edu        # add escape sequences for the characters in escape
611123Sstever@eecs.umich.edu        fout.write("\"")
62247Sstever@eecs.umich.edu        for char in l:
634018Sstever@eecs.umich.edu            if char == "\n":
644018Sstever@eecs.umich.edu                break
65247Sstever@eecs.umich.edu            if char in escape:
663362Sstever@eecs.umich.edu                fout.write("\\")
673362Sstever@eecs.umich.edu                fout.write(char)
683362Sstever@eecs.umich.edu            else:
693362Sstever@eecs.umich.edu                fout.write(char)
703362Sstever@eecs.umich.edu        fout.write("\\n\"\n");
713362Sstever@eecs.umich.edu    fout.write(";\n");
723362Sstever@eecs.umich.edu    fin.close()
733362Sstever@eecs.umich.edu    fout.close()
743362Sstever@eecs.umich.edu
753362Sstever@eecs.umich.edudef EmbedText(target, source, param):
763362Sstever@eecs.umich.edu    env.Command(target, [source, Value(param)], do_embed_text)
773362Sstever@eecs.umich.edu
78247Sstever@eecs.umich.eduEmbedText('default_param.hh', 'config/rubyconfig.defaults',
79247Sstever@eecs.umich.edu          'global_default_param')
80247Sstever@eecs.umich.eduEmbedText('tester_param.hh', 'config/tester.defaults',
813362Sstever@eecs.umich.edu          'global_default_tester_param')
823362Sstever@eecs.umich.edu
83247Sstever@eecs.umich.edu#
843362Sstever@eecs.umich.edu# Link includes
853362Sstever@eecs.umich.edu#
863362Sstever@eecs.umich.edugenerated_dir = Dir('../protocol')
87247Sstever@eecs.umich.edu
883370Sstever@eecs.umich.edudef MakeIncludeAction(target, source, env):
893370Sstever@eecs.umich.edu    f = file(str(target[0]), 'w')
903370Sstever@eecs.umich.edu    for s in source:
913370Sstever@eecs.umich.edu        print >>f, '#include "%s"' % str(s.abspath)
923370Sstever@eecs.umich.edu    f.close()
933370Sstever@eecs.umich.edu
943370Sstever@eecs.umich.edudef MakeInclude(source):
953370Sstever@eecs.umich.edu    target = generated_dir.File(basename(source))
961442Sstever@eecs.umich.edu    env.Command(target, source, MakeIncludeAction)
971442Sstever@eecs.umich.edu
981442Sstever@eecs.umich.eduMakeInclude('slicc_interface/AbstractCacheEntry.hh')
991442Sstever@eecs.umich.eduMakeInclude('slicc_interface/AbstractProtocol.hh')
1001442Sstever@eecs.umich.eduMakeInclude('slicc_interface/Message.hh')
1011442Sstever@eecs.umich.eduMakeInclude('slicc_interface/NetworkMessage.hh')
1021123Sstever@eecs.umich.edu
1033362Sstever@eecs.umich.edu# External types
1043362Sstever@eecs.umich.eduMakeInclude('buffers/MessageBuffer.hh')
105247Sstever@eecs.umich.eduMakeInclude('common/Address.hh')
1064018Sstever@eecs.umich.eduMakeInclude('common/DataBlock.hh')
1074018Sstever@eecs.umich.eduMakeInclude('common/NetDest.hh')
1084018Sstever@eecs.umich.eduMakeInclude('common/Set.hh')
109247Sstever@eecs.umich.eduMakeInclude('filters/GenericBloomFilter.hh')
110247Sstever@eecs.umich.eduMakeInclude('system/CacheMemory.hh')
111247Sstever@eecs.umich.eduMakeInclude('system/DMASequencer.hh')
112247Sstever@eecs.umich.eduMakeInclude('system/DirectoryMemory.hh')
113247Sstever@eecs.umich.eduMakeInclude('system/MachineID.hh')
114247Sstever@eecs.umich.eduMakeInclude('system/MemoryControl.hh')
115MakeInclude('system/NodeID.hh')
116MakeInclude('system/PerfectCacheMemory.hh')
117MakeInclude('system/PersistentTable.hh')
118MakeInclude('system/Sequencer.hh')
119MakeInclude('system/TBETable.hh')
120MakeInclude('system/TimerTable.hh')
121