# -*- mode:python -*- # Copyright (c) 2009 The Hewlett-Packard Development Company # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer; # redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution; # neither the name of the copyright holders nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # Authors: Nathan Binkert from __future__ import print_function import os import sys from os.path import basename, isdir, join as joinpath import SCons from gem5_scons import Transform Import('*') if env['PROTOCOL'] == 'None': Return() DebugFlag('ProtocolTrace') DebugFlag('RubyCache') DebugFlag('RubyCacheTrace') DebugFlag('RubyDma') DebugFlag('RubyGenerated') DebugFlag('RubyNetwork') DebugFlag('RubyPort') DebugFlag('RubyPrefetcher') DebugFlag('RubyQueue') DebugFlag('RubySequencer') DebugFlag('RubySlicc') DebugFlag('RubySystem') DebugFlag('RubyTester') DebugFlag('RubyStats') DebugFlag('RubyResourceStalls') CompoundFlag('Ruby', [ 'RubyQueue', 'RubyNetwork', 'RubyTester', 'RubyGenerated', 'RubySlicc', 'RubySystem', 'RubyCache', 'RubyDma', 'RubyPort', 'RubySequencer', 'RubyCacheTrace', 'RubyPrefetcher']) def do_embed_text(target, source, env): """convert a text file into a file that can be embedded in C using an #include statement, that defines a \"const char *\" pointing to the same text. This is useful to embed scripts and configuration files in object files. """ escape = [ "\'", "\"", "\\", "\?" ] # reads the text file in, line by line, converting it to a C string fin = open(str(source[0]), 'r') fout = open(str(target[0]), 'w' ) fout.write("static const char *%s =\n" % source[1].get_contents()); for l in fin: # add escape sequences for the characters in escape fout.write("\"") for char in l: if char == "\n": break if char in escape: fout.write("\\") fout.write(char) else: fout.write(char) fout.write("\\n\"\n"); fout.write(";\n"); fin.close() fout.close() # # Link includes # generated_dir = Dir('protocol') def MakeIncludeAction(target, source, env): f = file(str(target[0]), 'w') for s in source: print('#include "%s"' % str(s.abspath), file=f) f.close() def MakeInclude(source): target = generated_dir.File(basename(source)) include_action = MakeAction(MakeIncludeAction, Transform("MAKE INC", 1)) env.Command(target, source, include_action) MakeInclude('slicc_interface/AbstractCacheEntry.hh') MakeInclude('slicc_interface/Message.hh') MakeInclude('slicc_interface/RubyRequest.hh') # External types MakeInclude('common/Address.hh') MakeInclude('common/BoolVec.hh') MakeInclude('common/DataBlock.hh') MakeInclude('common/IntVec.hh') MakeInclude('common/MachineID.hh') MakeInclude('common/NetDest.hh') MakeInclude('common/Set.hh') MakeInclude('common/WriteMask.hh') MakeInclude('network/MessageBuffer.hh') MakeInclude('structures/CacheMemory.hh') MakeInclude('structures/DirectoryMemory.hh') MakeInclude('structures/PerfectCacheMemory.hh') MakeInclude('structures/PersistentTable.hh') MakeInclude('structures/Prefetcher.hh') MakeInclude('structures/TBETable.hh') MakeInclude('structures/TimerTable.hh') MakeInclude('structures/WireBuffer.hh') MakeInclude('system/DMASequencer.hh') MakeInclude('system/Sequencer.hh') # External types : Group "mem/ruby/protocol" : include "header.hh" to the # bottom of this MakeIncludes if it is referenced as # <# include "mem/ruby/protocol/header.hh"> in any file # generated_dir = Dir('protocol') MakeInclude('system/GPUCoalescer.hh') MakeInclude('system/VIPERCoalescer.hh')