SConscript revision 6286:40b142645016
16019Shines@cs.fsu.edu# -*- mode:python -*- 27399SAli.Saidi@ARM.com 37399SAli.Saidi@ARM.com# Copyright (c) 2009 The Hewlett-Packard Development Company 47399SAli.Saidi@ARM.com# All rights reserved. 57399SAli.Saidi@ARM.com# 67399SAli.Saidi@ARM.com# Redistribution and use in source and binary forms, with or without 77399SAli.Saidi@ARM.com# modification, are permitted provided that the following conditions are 87399SAli.Saidi@ARM.com# met: redistributions of source code must retain the above copyright 97399SAli.Saidi@ARM.com# notice, this list of conditions and the following disclaimer; 107399SAli.Saidi@ARM.com# redistributions in binary form must reproduce the above copyright 117399SAli.Saidi@ARM.com# notice, this list of conditions and the following disclaimer in the 127399SAli.Saidi@ARM.com# documentation and/or other materials provided with the distribution; 137399SAli.Saidi@ARM.com# neither the name of the copyright holders nor the names of its 146019Shines@cs.fsu.edu# contributors may be used to endorse or promote products derived from 156019Shines@cs.fsu.edu# this software without specific prior written permission. 166019Shines@cs.fsu.edu# 176019Shines@cs.fsu.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 186019Shines@cs.fsu.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 196019Shines@cs.fsu.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 206019Shines@cs.fsu.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 216019Shines@cs.fsu.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 226019Shines@cs.fsu.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 236019Shines@cs.fsu.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 246019Shines@cs.fsu.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 256019Shines@cs.fsu.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 266019Shines@cs.fsu.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 276019Shines@cs.fsu.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 286019Shines@cs.fsu.edu# 296019Shines@cs.fsu.edu# Authors: Nathan Binkert 306019Shines@cs.fsu.edu 316019Shines@cs.fsu.eduimport os 326019Shines@cs.fsu.eduimport re 336019Shines@cs.fsu.eduimport string 346019Shines@cs.fsu.eduimport sys 356019Shines@cs.fsu.edu 366019Shines@cs.fsu.edufrom os.path import basename, dirname, exists, expanduser, isdir, isfile 376019Shines@cs.fsu.edufrom os.path import join as joinpath 386019Shines@cs.fsu.edu 396019Shines@cs.fsu.eduimport SCons 407399SAli.Saidi@ARM.com 416019Shines@cs.fsu.eduImport('*') 426019Shines@cs.fsu.edu 436019Shines@cs.fsu.eduif not env['RUBY']: 446019Shines@cs.fsu.edu Return() 456019Shines@cs.fsu.edu 466019Shines@cs.fsu.eduslicc_dir = Dir('../slicc') 476019Shines@cs.fsu.eduprotocol_dir = Dir('.') 486019Shines@cs.fsu.eduhtml_dir = Dir('html') 496019Shines@cs.fsu.edu 506019Shines@cs.fsu.edu# 516019Shines@cs.fsu.edu# Use SLICC 526019Shines@cs.fsu.edu# 536019Shines@cs.fsu.edudef slicc_generator(target, source, env, for_signature): 546116Snate@binkert.org slicc_bin = str(source[0]) 556019Shines@cs.fsu.edu protocol = source[1].get_contents() 566019Shines@cs.fsu.edu pdir = str(protocol_dir) 576019Shines@cs.fsu.edu hdir = str(html_dir) 586019Shines@cs.fsu.edu 596019Shines@cs.fsu.edu if not isdir(pdir): 606019Shines@cs.fsu.edu os.mkdir(pdir) 616019Shines@cs.fsu.edu if not isdir(hdir): 627404SAli.Saidi@ARM.com os.mkdir(hdir) 637404SAli.Saidi@ARM.com 646019Shines@cs.fsu.edu do_html = "no_html" 656019Shines@cs.fsu.edu cmdline = [ slicc_bin, pdir, hdir, protocol, do_html ] 667294Sgblack@eecs.umich.edu cmdline += [ str(s) for s in source[2:] ] 677294Sgblack@eecs.umich.edu cmdline = ' '.join(cmdline) 687294Sgblack@eecs.umich.edu return cmdline 697294Sgblack@eecs.umich.edu 707294Sgblack@eecs.umich.eduslicc_builder = Builder(generator=slicc_generator) 717294Sgblack@eecs.umich.edu 727294Sgblack@eecs.umich.eduprotocol = env['PROTOCOL'] 737294Sgblack@eecs.umich.edusources = [ protocol_dir.File("RubySlicc_interfaces.slicc"), 747294Sgblack@eecs.umich.edu protocol_dir.File("%s.slicc" % protocol) ] 757294Sgblack@eecs.umich.edu 767404SAli.Saidi@ARM.comsm_files = [] 777404SAli.Saidi@ARM.comfor s in sources: 787294Sgblack@eecs.umich.edu for sm_file in file(File(s).srcnode().abspath, "r"): 797294Sgblack@eecs.umich.edu sm_file = sm_file.strip() 807294Sgblack@eecs.umich.edu if not sm_file: 817404SAli.Saidi@ARM.com continue 827294Sgblack@eecs.umich.edu if sm_file.startswith("#"): 836019Shines@cs.fsu.edu continue 846019Shines@cs.fsu.edu sm_file = protocol_dir.File(sm_file) 856019Shines@cs.fsu.edu sm_file.srcnode().abspath 866019Shines@cs.fsu.edu sm_files.append(sm_file) 877404SAli.Saidi@ARM.com 886019Shines@cs.fsu.edusys.path[0:0] = [env['ENV']['M5_PLY']] 896019Shines@cs.fsu.eduexecfile(slicc_dir.File('parser/parser.py').srcnode().abspath) 907406SAli.Saidi@ARM.com 917436Sdam.sunwoo@arm.comhh, cc = scan([s.srcnode().abspath for s in sm_files]) 927436Sdam.sunwoo@arm.comhh = [ protocol_dir.File(f) for f in hh ] 937406SAli.Saidi@ARM.comcc = [ protocol_dir.File(f) for f in cc ] 947404SAli.Saidi@ARM.com 957406SAli.Saidi@ARM.comslicc_bin = slicc_dir.File("slicc") 966019Shines@cs.fsu.edu 976019Shines@cs.fsu.eduenv.Append(BUILDERS={'SLICC' : slicc_builder}) 987404SAli.Saidi@ARM.comenv.SLICC(hh + cc, [ slicc_bin, Value(protocol) ] + sm_files) 996019Shines@cs.fsu.edu 1007399SAli.Saidi@ARM.comfor f in cc: 1016020Sgblack@eecs.umich.edu Source(f) 1026020Sgblack@eecs.umich.edu