SConscript revision 6654
16757SAli.Saidi@ARM.com# -*- mode:python -*- 26757SAli.Saidi@ARM.com 36757SAli.Saidi@ARM.com# Copyright (c) 2009 The Hewlett-Packard Development Company 46757SAli.Saidi@ARM.com# All rights reserved. 56757SAli.Saidi@ARM.com# 67090SAli.Saidi@ARM.com# Redistribution and use in source and binary forms, with or without 77090SAli.Saidi@ARM.com# modification, are permitted provided that the following conditions are 87090SAli.Saidi@ARM.com# met: redistributions of source code must retain the above copyright 97090SAli.Saidi@ARM.com# notice, this list of conditions and the following disclaimer; 107090SAli.Saidi@ARM.com# redistributions in binary form must reproduce the above copyright 117090SAli.Saidi@ARM.com# notice, this list of conditions and the following disclaimer in the 127090SAli.Saidi@ARM.com# documentation and/or other materials provided with the distribution; 137090SAli.Saidi@ARM.com# neither the name of the copyright holders nor the names of its 147090SAli.Saidi@ARM.com# contributors may be used to endorse or promote products derived from 156757SAli.Saidi@ARM.com# this software without specific prior written permission. 166757SAli.Saidi@ARM.com# 176757SAli.Saidi@ARM.com# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 186757SAli.Saidi@ARM.com# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 196757SAli.Saidi@ARM.com# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 206757SAli.Saidi@ARM.com# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 216757SAli.Saidi@ARM.com# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 226757SAli.Saidi@ARM.com# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 236757SAli.Saidi@ARM.com# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 246757SAli.Saidi@ARM.com# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 256757SAli.Saidi@ARM.com# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 266757SAli.Saidi@ARM.com# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 276757SAli.Saidi@ARM.com# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 286757SAli.Saidi@ARM.com# 296757SAli.Saidi@ARM.com# Authors: Nathan Binkert 306757SAli.Saidi@ARM.com 316757SAli.Saidi@ARM.comimport os 326757SAli.Saidi@ARM.comimport re 336757SAli.Saidi@ARM.comimport string 346757SAli.Saidi@ARM.comimport sys 356757SAli.Saidi@ARM.com 366757SAli.Saidi@ARM.comfrom os.path import basename, dirname, exists, expanduser, isdir, isfile 376757SAli.Saidi@ARM.comfrom os.path import join as joinpath 386757SAli.Saidi@ARM.com 396757SAli.Saidi@ARM.comimport SCons 406757SAli.Saidi@ARM.com 416757SAli.Saidi@ARM.comImport('*') 426757SAli.Saidi@ARM.com 436757SAli.Saidi@ARM.comif not env['RUBY']: 446757SAli.Saidi@ARM.com Return() 456757SAli.Saidi@ARM.com 46slicc_dir = Dir('../slicc') 47protocol_dir = Dir('.') 48html_dir = Dir('html') 49 50# 51# Use SLICC 52# 53def slicc_generator(target, source, env, for_signature): 54 slicc_bin = str(source[0]) 55 protocol = source[1].get_contents() 56 pdir = str(protocol_dir) 57 hdir = str(html_dir) 58 59 if not isdir(pdir): 60 os.mkdir(pdir) 61 if not isdir(hdir): 62 os.mkdir(hdir) 63 64 do_html = "html" 65 cmdline = [ slicc_bin, pdir, hdir, protocol, do_html ] 66 cmdline += [ str(s) for s in source[2:] ] 67 cmdline = ' '.join(cmdline) 68 return cmdline 69 70slicc_builder = Builder(generator=slicc_generator) 71 72protocol = env['PROTOCOL'] 73sources = [ protocol_dir.File("RubySlicc_interfaces.slicc"), 74 protocol_dir.File("%s.slicc" % protocol) ] 75 76sys.path[0:0] = [env['ENV']['M5_PLY']] 77execfile(slicc_dir.File('parser/parser.py').srcnode().abspath) 78 79sm_files = read_slicc([s.srcnode().abspath for s in sources]) 80sm_files = [ protocol_dir.File(f) for f in sm_files ] 81 82hh, cc = scan([s.srcnode().abspath for s in sm_files]) 83hh = [ protocol_dir.File(f) for f in hh ] 84cc = [ protocol_dir.File(f) for f in cc ] 85 86slicc_bin = slicc_dir.File("slicc") 87 88env.Append(BUILDERS={'SLICC' : slicc_builder}) 89env.SLICC(hh + cc, [ slicc_bin, Value(protocol) ] + sm_files) 90 91for f in cc: 92 Source(f) 93