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