SConscript revision 8454
13534Sgblack@eecs.umich.edu# -*- mode:python -*- 23534Sgblack@eecs.umich.edu 33534Sgblack@eecs.umich.edu# Copyright (c) 2009 The Hewlett-Packard Development Company 43534Sgblack@eecs.umich.edu# All rights reserved. 53534Sgblack@eecs.umich.edu# 63534Sgblack@eecs.umich.edu# Redistribution and use in source and binary forms, with or without 73534Sgblack@eecs.umich.edu# modification, are permitted provided that the following conditions are 83534Sgblack@eecs.umich.edu# met: redistributions of source code must retain the above copyright 93534Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer; 103534Sgblack@eecs.umich.edu# redistributions in binary form must reproduce the above copyright 113534Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer in the 123534Sgblack@eecs.umich.edu# documentation and/or other materials provided with the distribution; 133534Sgblack@eecs.umich.edu# neither the name of the copyright holders nor the names of its 143534Sgblack@eecs.umich.edu# contributors may be used to endorse or promote products derived from 153534Sgblack@eecs.umich.edu# this software without specific prior written permission. 163534Sgblack@eecs.umich.edu# 173534Sgblack@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 183534Sgblack@eecs.umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 193534Sgblack@eecs.umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 203534Sgblack@eecs.umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 213534Sgblack@eecs.umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 223534Sgblack@eecs.umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 233534Sgblack@eecs.umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 243534Sgblack@eecs.umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 253534Sgblack@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 263534Sgblack@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 273534Sgblack@eecs.umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 283534Sgblack@eecs.umich.edu# 293534Sgblack@eecs.umich.edu# Authors: Nathan Binkert 303534Sgblack@eecs.umich.edu 313534Sgblack@eecs.umich.eduimport os 324202Sbinkertn@umich.eduimport re 333534Sgblack@eecs.umich.eduimport sys 347768SAli.Saidi@ARM.com 357768SAli.Saidi@ARM.comfrom os.path import isdir, isfile, join as joinpath 367768SAli.Saidi@ARM.com 374202Sbinkertn@umich.edufrom SCons.Scanner import Classic 384486Sbinkertn@umich.edu 395794Ssaidi@eecs.umich.eduImport('*') 404486Sbinkertn@umich.edu 414486Sbinkertn@umich.eduif not env['RUBY']: 424486Sbinkertn@umich.edu Return() 434486Sbinkertn@umich.edu 444486Sbinkertn@umich.eduprotocol_dir = Dir('.') 454486Sbinkertn@umich.eduhtml_dir = Dir('html') 464486Sbinkertn@umich.eduslicc_dir = Dir('../slicc') 475478Snate@binkert.org 484486Sbinkertn@umich.edusys.path[1:1] = [ Dir('..').srcnode().abspath ] 494486Sbinkertn@umich.edufrom slicc.parser import SLICC 504202Sbinkertn@umich.edu 515794Ssaidi@eecs.umich.eduslicc_depends = [] 524202Sbinkertn@umich.edufor root,dirs,files in os.walk(slicc_dir.srcnode().abspath): 534202Sbinkertn@umich.edu for f in files: 545485Snate@binkert.org if f.endswith('.py'): 554202Sbinkertn@umich.edu slicc_depends.append(File(joinpath(root, f))) 564202Sbinkertn@umich.edu 574202Sbinkertn@umich.edu# 584202Sbinkertn@umich.edu# Use SLICC 594762Snate@binkert.org# 604218Ssaidi@eecs.umich.eduenv['SLICC_PATH'] = str(protocol_dir) 614202Sbinkertn@umich.eduslicc_scanner = Classic("SliccScanner", ['.sm', '.slicc'], "SLICC_PATH", 624202Sbinkertn@umich.edu r'''include[ \t]["'](.*)["'];''') 635443Sgblack@eecs.umich.eduenv.Append(SCANNERS=slicc_scanner) 644202Sbinkertn@umich.edu 654202Sbinkertn@umich.edudef slicc_emitter(target, source, env): 665392Sgblack@eecs.umich.edu assert len(source) == 1 674202Sbinkertn@umich.edu filepath = source[0].srcnode().abspath 684202Sbinkertn@umich.edu 694202Sbinkertn@umich.edu slicc = SLICC(filepath, verbose=False) 704202Sbinkertn@umich.edu slicc.process() 714202Sbinkertn@umich.edu slicc.writeCodeFiles(protocol_dir.abspath) 724202Sbinkertn@umich.edu if not env['NO_HTML']: 734762Snate@binkert.org slicc.writeHTMLFiles(html_dir.abspath) 745478Snate@binkert.org 754202Sbinkertn@umich.edu target.extend([protocol_dir.File(f) for f in sorted(slicc.files())]) 764202Sbinkertn@umich.edu return target, source 775192Ssaidi@eecs.umich.edu 785192Ssaidi@eecs.umich.edudef slicc_action(target, source, env): 795192Ssaidi@eecs.umich.edu assert len(source) == 1 805192Ssaidi@eecs.umich.edu filepath = source[0].srcnode().abspath 815794Ssaidi@eecs.umich.edu 825192Ssaidi@eecs.umich.edu slicc = SLICC(filepath, verbose=True) 835192Ssaidi@eecs.umich.edu slicc.process() 845192Ssaidi@eecs.umich.edu slicc.writeCodeFiles(protocol_dir.abspath) 855192Ssaidi@eecs.umich.edu if not env['NO_HTML']: 865192Ssaidi@eecs.umich.edu slicc.writeHTMLFiles(html_dir.abspath) 875192Ssaidi@eecs.umich.edu 885192Ssaidi@eecs.umich.eduslicc_builder = Builder(action=MakeAction(slicc_action, Transform("SLICC")), 895192Ssaidi@eecs.umich.edu emitter=slicc_emitter) 905192Ssaidi@eecs.umich.edu 915192Ssaidi@eecs.umich.eduprotocol = env['PROTOCOL'] 925192Ssaidi@eecs.umich.edusources = [ protocol_dir.File("%s.slicc" % protocol) ] 935443Sgblack@eecs.umich.edu 945192Ssaidi@eecs.umich.eduenv.Append(BUILDERS={'SLICC' : slicc_builder}) 955392Sgblack@eecs.umich.edunodes = env.SLICC([], sources) 965192Ssaidi@eecs.umich.eduenv.Depends(nodes, slicc_depends) 975192Ssaidi@eecs.umich.edu 985192Ssaidi@eecs.umich.edufor f in nodes: 995192Ssaidi@eecs.umich.edu s = str(f) 1005478Snate@binkert.org if s.endswith('.cc'): 1015478Snate@binkert.org Source(f) 1025192Ssaidi@eecs.umich.edu elif s.endswith('.py'): 1035192Ssaidi@eecs.umich.edu SimObject(f) 1045192Ssaidi@eecs.umich.edu 1055192Ssaidi@eecs.umich.edu