SConscript revision 9363:e2616dc035ce
14897Sstever@eecs.umich.edu# -*- mode:python -*-
24897Sstever@eecs.umich.edu
34897Sstever@eecs.umich.edu# Copyright (c) 2009 The Hewlett-Packard Development Company
44897Sstever@eecs.umich.edu# All rights reserved.
54897Sstever@eecs.umich.edu#
64897Sstever@eecs.umich.edu# Redistribution and use in source and binary forms, with or without
74897Sstever@eecs.umich.edu# modification, are permitted provided that the following conditions are
84897Sstever@eecs.umich.edu# met: redistributions of source code must retain the above copyright
94897Sstever@eecs.umich.edu# notice, this list of conditions and the following disclaimer;
104897Sstever@eecs.umich.edu# redistributions in binary form must reproduce the above copyright
114897Sstever@eecs.umich.edu# notice, this list of conditions and the following disclaimer in the
124897Sstever@eecs.umich.edu# documentation and/or other materials provided with the distribution;
134897Sstever@eecs.umich.edu# neither the name of the copyright holders nor the names of its
144897Sstever@eecs.umich.edu# contributors may be used to endorse or promote products derived from
154897Sstever@eecs.umich.edu# this software without specific prior written permission.
164897Sstever@eecs.umich.edu#
174897Sstever@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
184897Sstever@eecs.umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
194897Sstever@eecs.umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
204897Sstever@eecs.umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
214897Sstever@eecs.umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
224897Sstever@eecs.umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
234897Sstever@eecs.umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
244897Sstever@eecs.umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
254897Sstever@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
264897Sstever@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
274897Sstever@eecs.umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
284897Sstever@eecs.umich.edu#
294897Sstever@eecs.umich.edu# Authors: Nathan Binkert
304897Sstever@eecs.umich.edu
314897Sstever@eecs.umich.eduimport os
324897Sstever@eecs.umich.eduimport sys
334897Sstever@eecs.umich.edu
344897Sstever@eecs.umich.edufrom os.path import basename, isdir, join as joinpath
354897Sstever@eecs.umich.edu
364897Sstever@eecs.umich.eduimport SCons
374897Sstever@eecs.umich.edu
384897Sstever@eecs.umich.eduImport('*')
394897Sstever@eecs.umich.edu
404897Sstever@eecs.umich.eduif env['TARGET_ISA'] == 'no':
414897Sstever@eecs.umich.edu    Return()
424897Sstever@eecs.umich.edu
434897Sstever@eecs.umich.eduif env['PROTOCOL'] == 'None':
444897Sstever@eecs.umich.edu    Return()
454897Sstever@eecs.umich.edu
464897Sstever@eecs.umich.edudef do_embed_text(target, source, env):
474897Sstever@eecs.umich.edu    """convert a text file into a file that can be embedded in C
484897Sstever@eecs.umich.edu    using an #include statement, that defines a \"const char *\" pointing
494897Sstever@eecs.umich.edu    to the same text.
504897Sstever@eecs.umich.edu
514897Sstever@eecs.umich.edu    This is useful to embed scripts and configuration files in object files.
524897Sstever@eecs.umich.edu    """
534897Sstever@eecs.umich.edu
544897Sstever@eecs.umich.edu    escape = [ "\'", "\"", "\\", "\?" ]
554897Sstever@eecs.umich.edu
564897Sstever@eecs.umich.edu    # reads the text file in, line by line, converting it to a C string
574897Sstever@eecs.umich.edu    fin = open(str(source[0]), 'r')
584897Sstever@eecs.umich.edu    fout = open(str(target[0]), 'w' )
594897Sstever@eecs.umich.edu    fout.write("static const char *%s =\n" % source[1].get_contents());
604897Sstever@eecs.umich.edu    for l in fin:
614897Sstever@eecs.umich.edu        # add escape sequences for the characters in escape
624897Sstever@eecs.umich.edu        fout.write("\"")
634897Sstever@eecs.umich.edu        for char in l:
644897Sstever@eecs.umich.edu            if char == "\n":
654897Sstever@eecs.umich.edu                break
664897Sstever@eecs.umich.edu            if char in escape:
674897Sstever@eecs.umich.edu                fout.write("\\")
684897Sstever@eecs.umich.edu                fout.write(char)
694897Sstever@eecs.umich.edu            else:
704897Sstever@eecs.umich.edu                fout.write(char)
714897Sstever@eecs.umich.edu        fout.write("\\n\"\n");
724897Sstever@eecs.umich.edu    fout.write(";\n");
734897Sstever@eecs.umich.edu    fin.close()
744897Sstever@eecs.umich.edu    fout.close()
754897Sstever@eecs.umich.edu
764897Sstever@eecs.umich.edu#
774897Sstever@eecs.umich.edu# Link includes
784897Sstever@eecs.umich.edu#
794897Sstever@eecs.umich.edugenerated_dir = Dir('../protocol')
804897Sstever@eecs.umich.edu
814897Sstever@eecs.umich.edudef MakeIncludeAction(target, source, env):
824897Sstever@eecs.umich.edu    f = file(str(target[0]), 'w')
834897Sstever@eecs.umich.edu    for s in source:
844897Sstever@eecs.umich.edu        print >>f, '#include "%s"' % str(s.abspath)
854897Sstever@eecs.umich.edu    f.close()
864897Sstever@eecs.umich.edu
874897Sstever@eecs.umich.edudef MakeInclude(source):
884897Sstever@eecs.umich.edu    target = generated_dir.File(basename(source))
894897Sstever@eecs.umich.edu    include_action = MakeAction(MakeIncludeAction, Transform("MAKE INC", 1))
904897Sstever@eecs.umich.edu    env.Command(target, source, include_action)
914897Sstever@eecs.umich.edu
924897Sstever@eecs.umich.eduMakeInclude('slicc_interface/AbstractEntry.hh')
934897Sstever@eecs.umich.eduMakeInclude('slicc_interface/AbstractCacheEntry.hh')
944897Sstever@eecs.umich.eduMakeInclude('slicc_interface/AbstractProtocol.hh')
954897Sstever@eecs.umich.eduMakeInclude('slicc_interface/Message.hh')
964897Sstever@eecs.umich.eduMakeInclude('slicc_interface/NetworkMessage.hh')
974897Sstever@eecs.umich.eduMakeInclude('slicc_interface/RubyRequest.hh')
984897Sstever@eecs.umich.edu
994897Sstever@eecs.umich.edu# External types
1004897Sstever@eecs.umich.eduMakeInclude('buffers/MessageBuffer.hh')
1014897Sstever@eecs.umich.eduMakeInclude('common/Address.hh')
1024897Sstever@eecs.umich.eduMakeInclude('common/DataBlock.hh')
1034897Sstever@eecs.umich.eduMakeInclude('common/NetDest.hh')
1044897Sstever@eecs.umich.eduMakeInclude('common/Set.hh')
1054897Sstever@eecs.umich.eduMakeInclude('filters/GenericBloomFilter.hh')
1064897Sstever@eecs.umich.eduMakeInclude('structures/Prefetcher.hh')
1074897Sstever@eecs.umich.eduMakeInclude('system/CacheMemory.hh')
1084897Sstever@eecs.umich.eduMakeInclude('system/DMASequencer.hh')
1094897Sstever@eecs.umich.eduMakeInclude('system/DirectoryMemory.hh')
1104897Sstever@eecs.umich.eduMakeInclude('system/MachineID.hh')
1114897Sstever@eecs.umich.eduMakeInclude('system/MemoryControl.hh')
11210179Smitch.hayenga@arm.comMakeInclude('system/WireBuffer.hh')
11310179Smitch.hayenga@arm.comMakeInclude('system/PerfectCacheMemory.hh')
11410179Smitch.hayenga@arm.comMakeInclude('system/PersistentTable.hh')
11510179Smitch.hayenga@arm.comMakeInclude('system/Sequencer.hh')
11610179Smitch.hayenga@arm.comMakeInclude('system/TBETable.hh')
1174897Sstever@eecs.umich.eduMakeInclude('system/TimerTable.hh')
118