SConscript revision 7768
13534Sgblack@eecs.umich.edu# -*- mode:python -*-
23534Sgblack@eecs.umich.edu
33534Sgblack@eecs.umich.edu# Copyright (c) 2009 The Hewlett-Packard Development Company
43534Sgblack@eecs.umich.edu# All rights reserved.
53534Sgblack@eecs.umich.edu#
63534Sgblack@eecs.umich.edu# Redistribution and use in source and binary forms, with or without
73534Sgblack@eecs.umich.edu# modification, are permitted provided that the following conditions are
83534Sgblack@eecs.umich.edu# met: redistributions of source code must retain the above copyright
93534Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer;
103534Sgblack@eecs.umich.edu# redistributions in binary form must reproduce the above copyright
113534Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer in the
123534Sgblack@eecs.umich.edu# documentation and/or other materials provided with the distribution;
133534Sgblack@eecs.umich.edu# neither the name of the copyright holders nor the names of its
143534Sgblack@eecs.umich.edu# contributors may be used to endorse or promote products derived from
153534Sgblack@eecs.umich.edu# this software without specific prior written permission.
163534Sgblack@eecs.umich.edu#
173534Sgblack@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
183534Sgblack@eecs.umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
193534Sgblack@eecs.umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
203534Sgblack@eecs.umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
213534Sgblack@eecs.umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
223534Sgblack@eecs.umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
233534Sgblack@eecs.umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
243534Sgblack@eecs.umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
253534Sgblack@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
263534Sgblack@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
273534Sgblack@eecs.umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
283534Sgblack@eecs.umich.edu#
293534Sgblack@eecs.umich.edu# Authors: Nathan Binkert
303534Sgblack@eecs.umich.edu
313534Sgblack@eecs.umich.eduimport os
324202Sbinkertn@umich.eduimport sys
333534Sgblack@eecs.umich.edu
347768SAli.Saidi@ARM.comfrom os.path import basename, isdir, join as joinpath
357768SAli.Saidi@ARM.com
367768SAli.Saidi@ARM.comimport SCons
378739Sgblack@eecs.umich.edu
388739Sgblack@eecs.umich.eduImport('*')
398739Sgblack@eecs.umich.edu
408739Sgblack@eecs.umich.eduif env['TARGET_ISA'] == 'no':
418739Sgblack@eecs.umich.edu    Return()
428739Sgblack@eecs.umich.edu
438739Sgblack@eecs.umich.eduif not env['RUBY']:
448739Sgblack@eecs.umich.edu    Return()
458739Sgblack@eecs.umich.edu
468739Sgblack@eecs.umich.eduSource('libruby.cc')
478739Sgblack@eecs.umich.edu
484486Sbinkertn@umich.edudef do_embed_text(target, source, env):
498739Sgblack@eecs.umich.edu    """convert a text file into a file that can be embedded in C
508739Sgblack@eecs.umich.edu    using an #include statement, that defines a \"const char *\" pointing
518739Sgblack@eecs.umich.edu    to the same text.
529016Sandreas.hansson@arm.com
538739Sgblack@eecs.umich.edu    This is useful to embed scripts and configuration files in object files.
548739Sgblack@eecs.umich.edu    """
558739Sgblack@eecs.umich.edu
568739Sgblack@eecs.umich.edu    escape = [ "\'", "\"", "\\", "\?" ]
578739Sgblack@eecs.umich.edu
588739Sgblack@eecs.umich.edu    # reads the text file in, line by line, converting it to a C string
598739Sgblack@eecs.umich.edu    fin = open(str(source[0]), 'r')
608739Sgblack@eecs.umich.edu    fout = open(str(target[0]), 'w' )
618739Sgblack@eecs.umich.edu    fout.write("static const char *%s =\n" % source[1].get_contents());
628739Sgblack@eecs.umich.edu    for l in fin:
638739Sgblack@eecs.umich.edu        # add escape sequences for the characters in escape
648739Sgblack@eecs.umich.edu        fout.write("\"")
658739Sgblack@eecs.umich.edu        for char in l:
668739Sgblack@eecs.umich.edu            if char == "\n":
678739Sgblack@eecs.umich.edu                break
688739Sgblack@eecs.umich.edu            if char in escape:
698739Sgblack@eecs.umich.edu                fout.write("\\")
708739Sgblack@eecs.umich.edu                fout.write(char)
718739Sgblack@eecs.umich.edu            else:
728739Sgblack@eecs.umich.edu                fout.write(char)
738739Sgblack@eecs.umich.edu        fout.write("\\n\"\n");
748739Sgblack@eecs.umich.edu    fout.write(";\n");
758739Sgblack@eecs.umich.edu    fin.close()
768739Sgblack@eecs.umich.edu    fout.close()
778739Sgblack@eecs.umich.edu
785192Ssaidi@eecs.umich.edu#
798739Sgblack@eecs.umich.edu# Link includes
808739Sgblack@eecs.umich.edu#
818739Sgblack@eecs.umich.edugenerated_dir = Dir('../protocol')
828739Sgblack@eecs.umich.edu
838739Sgblack@eecs.umich.edudef MakeIncludeAction(target, source, env):
848739Sgblack@eecs.umich.edu    f = file(str(target[0]), 'w')
858739Sgblack@eecs.umich.edu    for s in source:
868739Sgblack@eecs.umich.edu        print >>f, '#include "%s"' % str(s.abspath)
878739Sgblack@eecs.umich.edu    f.close()
888739Sgblack@eecs.umich.edu
898739Sgblack@eecs.umich.edudef MakeInclude(source):
908739Sgblack@eecs.umich.edu    target = generated_dir.File(basename(source))
918739Sgblack@eecs.umich.edu    env.Command(target, source, MakeIncludeAction)
928739Sgblack@eecs.umich.edu
938739Sgblack@eecs.umich.eduMakeInclude('slicc_interface/AbstractEntry.hh')
948739Sgblack@eecs.umich.eduMakeInclude('slicc_interface/AbstractCacheEntry.hh')
958739Sgblack@eecs.umich.eduMakeInclude('slicc_interface/AbstractProtocol.hh')
968739Sgblack@eecs.umich.eduMakeInclude('slicc_interface/Message.hh')
978739Sgblack@eecs.umich.eduMakeInclude('slicc_interface/NetworkMessage.hh')
988739Sgblack@eecs.umich.edu
998739Sgblack@eecs.umich.edu# External types
1008739Sgblack@eecs.umich.eduMakeInclude('buffers/MessageBuffer.hh')
1018739Sgblack@eecs.umich.eduMakeInclude('common/Address.hh')
1028739Sgblack@eecs.umich.eduMakeInclude('common/DataBlock.hh')
1038739Sgblack@eecs.umich.eduMakeInclude('common/NetDest.hh')
1045192Ssaidi@eecs.umich.eduMakeInclude('common/Set.hh')
1058739Sgblack@eecs.umich.eduMakeInclude('filters/GenericBloomFilter.hh')
1068739Sgblack@eecs.umich.eduMakeInclude('system/CacheMemory.hh')
1078739Sgblack@eecs.umich.eduMakeInclude('system/DMASequencer.hh')
1088739Sgblack@eecs.umich.eduMakeInclude('system/DirectoryMemory.hh')
1098739Sgblack@eecs.umich.eduMakeInclude('system/MachineID.hh')
1108739Sgblack@eecs.umich.eduMakeInclude('system/MemoryControl.hh')
1118739Sgblack@eecs.umich.eduMakeInclude('system/NodeID.hh')
112MakeInclude('system/PerfectCacheMemory.hh')
113MakeInclude('system/PersistentTable.hh')
114MakeInclude('system/Sequencer.hh')
115MakeInclude('system/TBETable.hh')
116MakeInclude('system/TimerTable.hh')
117