SConscript revision 9850
110259SAndrew.Bardsley@arm.com# -*- mode:python -*- 210259SAndrew.Bardsley@arm.com 310259SAndrew.Bardsley@arm.com# Copyright (c) 2009 The Hewlett-Packard Development Company 410259SAndrew.Bardsley@arm.com# All rights reserved. 510259SAndrew.Bardsley@arm.com# 610259SAndrew.Bardsley@arm.com# Redistribution and use in source and binary forms, with or without 710259SAndrew.Bardsley@arm.com# modification, are permitted provided that the following conditions are 810259SAndrew.Bardsley@arm.com# met: redistributions of source code must retain the above copyright 910259SAndrew.Bardsley@arm.com# notice, this list of conditions and the following disclaimer; 1010259SAndrew.Bardsley@arm.com# redistributions in binary form must reproduce the above copyright 1110259SAndrew.Bardsley@arm.com# notice, this list of conditions and the following disclaimer in the 1210259SAndrew.Bardsley@arm.com# documentation and/or other materials provided with the distribution; 1310259SAndrew.Bardsley@arm.com# neither the name of the copyright holders nor the names of its 1410259SAndrew.Bardsley@arm.com# contributors may be used to endorse or promote products derived from 1510259SAndrew.Bardsley@arm.com# this software without specific prior written permission. 1610259SAndrew.Bardsley@arm.com# 1710259SAndrew.Bardsley@arm.com# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1810259SAndrew.Bardsley@arm.com# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1910259SAndrew.Bardsley@arm.com# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2010259SAndrew.Bardsley@arm.com# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2110259SAndrew.Bardsley@arm.com# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2210259SAndrew.Bardsley@arm.com# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2310259SAndrew.Bardsley@arm.com# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2410259SAndrew.Bardsley@arm.com# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2510259SAndrew.Bardsley@arm.com# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2610259SAndrew.Bardsley@arm.com# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2710259SAndrew.Bardsley@arm.com# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2810259SAndrew.Bardsley@arm.com# 2910259SAndrew.Bardsley@arm.com# Authors: Nathan Binkert 3010259SAndrew.Bardsley@arm.com 3110259SAndrew.Bardsley@arm.comimport os 3210259SAndrew.Bardsley@arm.comimport sys 3310259SAndrew.Bardsley@arm.com 3410259SAndrew.Bardsley@arm.comfrom os.path import basename, isdir, join as joinpath 3510259SAndrew.Bardsley@arm.com 3610259SAndrew.Bardsley@arm.comimport SCons 3710259SAndrew.Bardsley@arm.com 3810259SAndrew.Bardsley@arm.comImport('*') 3910259SAndrew.Bardsley@arm.com 4010259SAndrew.Bardsley@arm.comif env['TARGET_ISA'] == 'null': 4110259SAndrew.Bardsley@arm.com Return() 4210259SAndrew.Bardsley@arm.com 4310259SAndrew.Bardsley@arm.comif env['PROTOCOL'] == 'None': 4410259SAndrew.Bardsley@arm.com Return() 4510259SAndrew.Bardsley@arm.com 4610259SAndrew.Bardsley@arm.comdef do_embed_text(target, source, env): 4710259SAndrew.Bardsley@arm.com """convert a text file into a file that can be embedded in C 4810259SAndrew.Bardsley@arm.com using an #include statement, that defines a \"const char *\" pointing 4910259SAndrew.Bardsley@arm.com to the same text. 5010259SAndrew.Bardsley@arm.com 5110259SAndrew.Bardsley@arm.com This is useful to embed scripts and configuration files in object files. 5210259SAndrew.Bardsley@arm.com """ 5310259SAndrew.Bardsley@arm.com 5410259SAndrew.Bardsley@arm.com escape = [ "\'", "\"", "\\", "\?" ] 5510259SAndrew.Bardsley@arm.com 5610259SAndrew.Bardsley@arm.com # reads the text file in, line by line, converting it to a C string 5710259SAndrew.Bardsley@arm.com fin = open(str(source[0]), 'r') 5810259SAndrew.Bardsley@arm.com fout = open(str(target[0]), 'w' ) 5910259SAndrew.Bardsley@arm.com fout.write("static const char *%s =\n" % source[1].get_contents()); 6010259SAndrew.Bardsley@arm.com for l in fin: 6110259SAndrew.Bardsley@arm.com # add escape sequences for the characters in escape 6210259SAndrew.Bardsley@arm.com fout.write("\"") 6310259SAndrew.Bardsley@arm.com for char in l: 6410259SAndrew.Bardsley@arm.com if char == "\n": 6510259SAndrew.Bardsley@arm.com break 6610259SAndrew.Bardsley@arm.com if char in escape: 6710259SAndrew.Bardsley@arm.com fout.write("\\") 6810259SAndrew.Bardsley@arm.com fout.write(char) 6910259SAndrew.Bardsley@arm.com else: 7010259SAndrew.Bardsley@arm.com fout.write(char) 7110259SAndrew.Bardsley@arm.com fout.write("\\n\"\n"); 7210259SAndrew.Bardsley@arm.com fout.write(";\n"); 7310259SAndrew.Bardsley@arm.com fin.close() 7410259SAndrew.Bardsley@arm.com fout.close() 7510259SAndrew.Bardsley@arm.com 7610259SAndrew.Bardsley@arm.com# 7710259SAndrew.Bardsley@arm.com# Link includes 7810259SAndrew.Bardsley@arm.com# 7910259SAndrew.Bardsley@arm.comgenerated_dir = Dir('../protocol') 8010259SAndrew.Bardsley@arm.com 8110259SAndrew.Bardsley@arm.comdef MakeIncludeAction(target, source, env): 8210259SAndrew.Bardsley@arm.com f = file(str(target[0]), 'w') 8310259SAndrew.Bardsley@arm.com for s in source: 8410259SAndrew.Bardsley@arm.com print >>f, '#include "%s"' % str(s.abspath) 8510259SAndrew.Bardsley@arm.com f.close() 8610259SAndrew.Bardsley@arm.com 8710259SAndrew.Bardsley@arm.comdef MakeInclude(source): 8810259SAndrew.Bardsley@arm.com target = generated_dir.File(basename(source)) 8910259SAndrew.Bardsley@arm.com include_action = MakeAction(MakeIncludeAction, Transform("MAKE INC", 1)) 9010259SAndrew.Bardsley@arm.com env.Command(target, source, include_action) 9110259SAndrew.Bardsley@arm.com 9210259SAndrew.Bardsley@arm.comMakeInclude('slicc_interface/AbstractEntry.hh') 9310259SAndrew.Bardsley@arm.comMakeInclude('slicc_interface/AbstractCacheEntry.hh') 9410259SAndrew.Bardsley@arm.comMakeInclude('slicc_interface/AbstractProtocol.hh') 9510259SAndrew.Bardsley@arm.comMakeInclude('slicc_interface/Message.hh') 9610259SAndrew.Bardsley@arm.comMakeInclude('slicc_interface/NetworkMessage.hh') 9710259SAndrew.Bardsley@arm.comMakeInclude('slicc_interface/RubyRequest.hh') 9810259SAndrew.Bardsley@arm.com 9910259SAndrew.Bardsley@arm.com# External types 10010259SAndrew.Bardsley@arm.comMakeInclude('buffers/MessageBuffer.hh') 10110259SAndrew.Bardsley@arm.comMakeInclude('common/Address.hh') 10210259SAndrew.Bardsley@arm.comMakeInclude('common/DataBlock.hh') 10310259SAndrew.Bardsley@arm.comMakeInclude('common/NetDest.hh') 10410259SAndrew.Bardsley@arm.comMakeInclude('common/Set.hh') 10510259SAndrew.Bardsley@arm.comMakeInclude('filters/GenericBloomFilter.hh') 10610259SAndrew.Bardsley@arm.comMakeInclude('structures/Prefetcher.hh') 10710259SAndrew.Bardsley@arm.comMakeInclude('system/CacheMemory.hh') 10810259SAndrew.Bardsley@arm.comMakeInclude('system/DMASequencer.hh') 10910259SAndrew.Bardsley@arm.comMakeInclude('system/DirectoryMemory.hh') 11010259SAndrew.Bardsley@arm.comMakeInclude('system/MachineID.hh') 11110259SAndrew.Bardsley@arm.comMakeInclude('system/MemoryControl.hh') 11210259SAndrew.Bardsley@arm.comMakeInclude('system/WireBuffer.hh') 11310259SAndrew.Bardsley@arm.comMakeInclude('system/PerfectCacheMemory.hh') 11410259SAndrew.Bardsley@arm.comMakeInclude('system/PersistentTable.hh') 11510259SAndrew.Bardsley@arm.comMakeInclude('system/Sequencer.hh') 11610259SAndrew.Bardsley@arm.comMakeInclude('system/TBETable.hh') 11710259SAndrew.Bardsley@arm.comMakeInclude('system/TimerTable.hh') 11810259SAndrew.Bardsley@arm.com