SConscript revision 8232
15703SN/A# -*- mode:python -*- 25703SN/A 311860Sandreas.hansson@arm.com# Copyright (c) 2006 The Regents of The University of Michigan 411860Sandreas.hansson@arm.com# All rights reserved. 511860Sandreas.hansson@arm.com# 65703SN/A# Redistribution and use in source and binary forms, with or without 711860Sandreas.hansson@arm.com# modification, are permitted provided that the following conditions are 811860Sandreas.hansson@arm.com# met: redistributions of source code must retain the above copyright 911860Sandreas.hansson@arm.com# notice, this list of conditions and the following disclaimer; 1011860Sandreas.hansson@arm.com# redistributions in binary form must reproduce the above copyright 1111860Sandreas.hansson@arm.com# notice, this list of conditions and the following disclaimer in the 1211860Sandreas.hansson@arm.com# documentation and/or other materials provided with the distribution; 1311860Sandreas.hansson@arm.com# neither the name of the copyright holders nor the names of its 1410036SAli.Saidi@ARM.com# contributors may be used to endorse or promote products derived from 1510036SAli.Saidi@ARM.com# this software without specific prior written permission. 1611860Sandreas.hansson@arm.com# 1711860Sandreas.hansson@arm.com# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1811860Sandreas.hansson@arm.com# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1910352Sandreas.hansson@arm.com# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2011860Sandreas.hansson@arm.com# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2111860Sandreas.hansson@arm.com# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2211860Sandreas.hansson@arm.com# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2311860Sandreas.hansson@arm.com# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2411860Sandreas.hansson@arm.com# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2511860Sandreas.hansson@arm.com# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2611860Sandreas.hansson@arm.com# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2710352Sandreas.hansson@arm.com# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2811860Sandreas.hansson@arm.com# 2911860Sandreas.hansson@arm.com# Authors: Steve Reinhardt 3011860Sandreas.hansson@arm.com 3111860Sandreas.hansson@arm.comImport('*') 3211860Sandreas.hansson@arm.com 3311680SCurtis.Dunham@arm.comif env['TARGET_ISA'] == 'no': 3411860Sandreas.hansson@arm.com Return() 3511860Sandreas.hansson@arm.com 3611860Sandreas.hansson@arm.com################################################################# 3711860Sandreas.hansson@arm.com# 3811860Sandreas.hansson@arm.com# Generate StaticInst execute() method signatures. 3911860Sandreas.hansson@arm.com# 4011860Sandreas.hansson@arm.com# There must be one signature for each CPU model compiled in. 4111860Sandreas.hansson@arm.com# Since the set of compiled-in models is flexible, we generate a 4211680SCurtis.Dunham@arm.com# header containing the appropriate set of signatures on the fly. 4311860Sandreas.hansson@arm.com# 4411860Sandreas.hansson@arm.com################################################################# 4511860Sandreas.hansson@arm.com 4611860Sandreas.hansson@arm.com# Template for execute() signature. 4711860Sandreas.hansson@arm.comexec_sig_template = ''' 4811860Sandreas.hansson@arm.comvirtual Fault execute(%(type)s *xc, Trace::InstRecord *traceData) const = 0; 4911860Sandreas.hansson@arm.comvirtual Fault eaComp(%(type)s *xc, Trace::InstRecord *traceData) const 5011860Sandreas.hansson@arm.com{ panic("eaComp not defined!"); M5_DUMMY_RETURN }; 5111860Sandreas.hansson@arm.comvirtual Fault initiateAcc(%(type)s *xc, Trace::InstRecord *traceData) const 5211860Sandreas.hansson@arm.com{ panic("initiateAcc not defined!"); M5_DUMMY_RETURN }; 5311860Sandreas.hansson@arm.comvirtual Fault completeAcc(Packet *pkt, %(type)s *xc, 5410892Sandreas.hansson@arm.com Trace::InstRecord *traceData) const 5511336Sandreas.hansson@arm.com{ panic("completeAcc not defined!"); M5_DUMMY_RETURN }; 5611860Sandreas.hansson@arm.com''' 5711860Sandreas.hansson@arm.com 5811860Sandreas.hansson@arm.commem_ini_sig_template = ''' 5911860Sandreas.hansson@arm.comvirtual Fault eaComp(%(type)s *xc, Trace::InstRecord *traceData) const 6011860Sandreas.hansson@arm.com{ panic("eaComp not defined!"); M5_DUMMY_RETURN }; 6111860Sandreas.hansson@arm.comvirtual Fault initiateAcc(%s *xc, Trace::InstRecord *traceData) const { panic("Not defined!"); M5_DUMMY_RETURN }; 6211860Sandreas.hansson@arm.com''' 6311860Sandreas.hansson@arm.com 6411860Sandreas.hansson@arm.commem_comp_sig_template = ''' 6511860Sandreas.hansson@arm.comvirtual Fault completeAcc(uint8_t *data, %s *xc, Trace::InstRecord *traceData) const { panic("Not defined!"); return NoFault; M5_DUMMY_RETURN }; 6611860Sandreas.hansson@arm.com''' 6711860Sandreas.hansson@arm.com 6811860Sandreas.hansson@arm.com# Generate a temporary CPU list, including the CheckerCPU if 6911860Sandreas.hansson@arm.com# it's enabled. This isn't used for anything else other than StaticInst 7011754Sandreas.hansson@arm.com# headers. 7111860Sandreas.hansson@arm.comtemp_cpu_list = env['CPU_MODELS'][:] 7211860Sandreas.hansson@arm.com 7311860Sandreas.hansson@arm.comif env['USE_CHECKER']: 7411860Sandreas.hansson@arm.com temp_cpu_list.append('CheckerCPU') 7511860Sandreas.hansson@arm.com SimObject('CheckerCPU.py') 7611860Sandreas.hansson@arm.com 7711860Sandreas.hansson@arm.com# Generate header. 7811860Sandreas.hansson@arm.comdef gen_cpu_exec_signatures(target, source, env): 7911860Sandreas.hansson@arm.com f = open(str(target[0]), 'w') 8011860Sandreas.hansson@arm.com print >> f, ''' 8111860Sandreas.hansson@arm.com#ifndef __CPU_STATIC_INST_EXEC_SIGS_HH__ 8211754Sandreas.hansson@arm.com#define __CPU_STATIC_INST_EXEC_SIGS_HH__ 8311754Sandreas.hansson@arm.com''' 8411860Sandreas.hansson@arm.com for cpu in temp_cpu_list: 8511860Sandreas.hansson@arm.com xc_type = CpuModel.dict[cpu].strings['CPU_exec_context'] 8611754Sandreas.hansson@arm.com print >> f, exec_sig_template % { 'type' : xc_type } 8711860Sandreas.hansson@arm.com print >> f, ''' 889978Sandreas.hansson@arm.com#endif // __CPU_STATIC_INST_EXEC_SIGS_HH__ 8911860Sandreas.hansson@arm.com''' 9011860Sandreas.hansson@arm.com 919978Sandreas.hansson@arm.com# Generate string that gets printed when header is rebuilt 929978Sandreas.hansson@arm.comdef gen_sigs_string(target, source, env): 939978Sandreas.hansson@arm.com return " [GENERATE] static_inst_exec_sigs.hh: " \ 949978Sandreas.hansson@arm.com + ', '.join(temp_cpu_list) 959978Sandreas.hansson@arm.com 969978Sandreas.hansson@arm.com# Add command to generate header to environment. 9711860Sandreas.hansson@arm.comenv.Command('static_inst_exec_sigs.hh', (), 989978Sandreas.hansson@arm.com Action(gen_cpu_exec_signatures, gen_sigs_string, 999978Sandreas.hansson@arm.com varlist = temp_cpu_list)) 1009978Sandreas.hansson@arm.com 1019978Sandreas.hansson@arm.comenv.Depends('static_inst_exec_sigs.hh', Value(env['USE_CHECKER'])) 1029978Sandreas.hansson@arm.comenv.Depends('static_inst_exec_sigs.hh', Value(env['CPU_MODELS'])) 1039978Sandreas.hansson@arm.com 10411860Sandreas.hansson@arm.com# List of suppported CPUs by the Checker. Errors out if USE_CHECKER=True 10511860Sandreas.hansson@arm.com# and one of these are not being used. 10611860Sandreas.hansson@arm.comCheckerSupportedCPUList = ['O3CPU', 'OzoneCPU'] 10711860Sandreas.hansson@arm.com 10811860Sandreas.hansson@arm.comSimObject('BaseCPU.py') 10911860Sandreas.hansson@arm.comSimObject('FuncUnit.py') 11011860Sandreas.hansson@arm.comSimObject('ExeTracer.py') 11111860Sandreas.hansson@arm.comSimObject('IntelTrace.py') 11210352Sandreas.hansson@arm.comSimObject('NativeTrace.py') 11310352Sandreas.hansson@arm.com 11410352Sandreas.hansson@arm.comSource('activity.cc') 11510352Sandreas.hansson@arm.comSource('base.cc') 11610352Sandreas.hansson@arm.comSource('cpuevent.cc') 11710352Sandreas.hansson@arm.comSource('exetrace.cc') 11810352Sandreas.hansson@arm.comSource('func_unit.cc') 11910352Sandreas.hansson@arm.comSource('inteltrace.cc') 12010352Sandreas.hansson@arm.comSource('nativetrace.cc') 12110352Sandreas.hansson@arm.comSource('pc_event.cc') 12210352Sandreas.hansson@arm.comSource('quiesce_event.cc') 12310352Sandreas.hansson@arm.comSource('static_inst.cc') 12410352Sandreas.hansson@arm.comSource('simple_thread.cc') 12510352Sandreas.hansson@arm.comSource('thread_context.cc') 12610352Sandreas.hansson@arm.comSource('thread_state.cc') 1279978Sandreas.hansson@arm.com 1289312Sandreas.hansson@arm.comif env['FULL_SYSTEM']: 1299312Sandreas.hansson@arm.com SimObject('IntrControl.py') 1309312Sandreas.hansson@arm.com 1319312Sandreas.hansson@arm.com Source('intr_control.cc') 1329312Sandreas.hansson@arm.com Source('profile.cc') 1339312Sandreas.hansson@arm.com 1349312Sandreas.hansson@arm.com if env['TARGET_ISA'] == 'sparc': 1359312Sandreas.hansson@arm.com SimObject('LegionTrace.py') 1369312Sandreas.hansson@arm.com Source('legiontrace.cc') 13710148Sandreas.hansson@arm.com 13810148Sandreas.hansson@arm.comif env['USE_CHECKER']: 13910148Sandreas.hansson@arm.com Source('checker/cpu.cc') 14010148Sandreas.hansson@arm.com TraceFlag('Checker') 14110148Sandreas.hansson@arm.com checker_supports = False 14210148Sandreas.hansson@arm.com for i in CheckerSupportedCPUList: 14310148Sandreas.hansson@arm.com if i in env['CPU_MODELS']: 14410148Sandreas.hansson@arm.com checker_supports = True 14510148Sandreas.hansson@arm.com if not checker_supports: 14610148Sandreas.hansson@arm.com print "Checker only supports CPU models", 14710148Sandreas.hansson@arm.com for i in CheckerSupportedCPUList: 14810148Sandreas.hansson@arm.com print i, 14910148Sandreas.hansson@arm.com print ", please set USE_CHECKER=False or use one of those CPU models" 15010148Sandreas.hansson@arm.com Exit(1) 15110148Sandreas.hansson@arm.com 15211860Sandreas.hansson@arm.comTraceFlag('Activity') 15311860Sandreas.hansson@arm.comTraceFlag('Commit') 15411860Sandreas.hansson@arm.comTraceFlag('Context') 15511860Sandreas.hansson@arm.comTraceFlag('Decode') 15611860Sandreas.hansson@arm.comTraceFlag('DynInst') 15711860Sandreas.hansson@arm.comTraceFlag('ExecEnable') 15811860Sandreas.hansson@arm.comTraceFlag('ExecCPSeq') 15911860Sandreas.hansson@arm.comTraceFlag('ExecEffAddr') 16011860Sandreas.hansson@arm.comTraceFlag('ExecFaulting', 'Trace faulting instructions') 16111860Sandreas.hansson@arm.comTraceFlag('ExecFetchSeq') 16211860Sandreas.hansson@arm.comTraceFlag('ExecOpClass') 16311860Sandreas.hansson@arm.comTraceFlag('ExecRegDelta') 16411860Sandreas.hansson@arm.comTraceFlag('ExecResult') 16511860Sandreas.hansson@arm.comTraceFlag('ExecSpeculative') 16611860Sandreas.hansson@arm.comTraceFlag('ExecSymbol') 16711860Sandreas.hansson@arm.comTraceFlag('ExecThread') 16811860Sandreas.hansson@arm.comTraceFlag('ExecTicks') 16911860Sandreas.hansson@arm.comTraceFlag('ExecMicro') 17011860Sandreas.hansson@arm.comTraceFlag('ExecMacro') 17111860Sandreas.hansson@arm.comTraceFlag('Fetch') 17211860Sandreas.hansson@arm.comTraceFlag('IntrControl') 17311860Sandreas.hansson@arm.comTraceFlag('PCEvent') 17411860Sandreas.hansson@arm.comTraceFlag('Quiesce') 17511860Sandreas.hansson@arm.com 17611860Sandreas.hansson@arm.comCompoundFlag('ExecAll', [ 'ExecEnable', 'ExecCPSeq', 'ExecEffAddr', 17711860Sandreas.hansson@arm.com 'ExecFaulting', 'ExecFetchSeq', 'ExecOpClass', 'ExecRegDelta', 17811860Sandreas.hansson@arm.com 'ExecResult', 'ExecSpeculative', 'ExecSymbol', 'ExecThread', 17911860Sandreas.hansson@arm.com 'ExecTicks', 'ExecMicro', 'ExecMacro' ]) 18011860Sandreas.hansson@arm.comCompoundFlag('Exec', [ 'ExecEnable', 'ExecTicks', 'ExecOpClass', 'ExecThread', 18111860Sandreas.hansson@arm.com 'ExecEffAddr', 'ExecResult', 'ExecSymbol', 'ExecMicro', 'ExecFaulting' ]) 18211860Sandreas.hansson@arm.comCompoundFlag('ExecNoTicks', [ 'ExecEnable', 'ExecOpClass', 'ExecThread', 18311860Sandreas.hansson@arm.com 'ExecEffAddr', 'ExecResult', 'ExecMicro', 'ExecFaulting' ]) 18411860Sandreas.hansson@arm.com