SConscript revision 8471:18e560ba1539
17199Sgblack@eecs.umich.edu# -*- mode:python -*- 27199Sgblack@eecs.umich.edu 311939Snikos.nikoleris@arm.com# Copyright (c) 2006 The Regents of The University of Michigan 47199Sgblack@eecs.umich.edu# All rights reserved. 57199Sgblack@eecs.umich.edu# 67199Sgblack@eecs.umich.edu# Redistribution and use in source and binary forms, with or without 77199Sgblack@eecs.umich.edu# modification, are permitted provided that the following conditions are 87199Sgblack@eecs.umich.edu# met: redistributions of source code must retain the above copyright 97199Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer; 107199Sgblack@eecs.umich.edu# redistributions in binary form must reproduce the above copyright 117199Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer in the 127199Sgblack@eecs.umich.edu# documentation and/or other materials provided with the distribution; 137199Sgblack@eecs.umich.edu# neither the name of the copyright holders nor the names of its 147199Sgblack@eecs.umich.edu# contributors may be used to endorse or promote products derived from 157199Sgblack@eecs.umich.edu# this software without specific prior written permission. 167199Sgblack@eecs.umich.edu# 177199Sgblack@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 187199Sgblack@eecs.umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 197199Sgblack@eecs.umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 207199Sgblack@eecs.umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 217199Sgblack@eecs.umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 227199Sgblack@eecs.umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 237199Sgblack@eecs.umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 247199Sgblack@eecs.umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 257199Sgblack@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 267199Sgblack@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 277199Sgblack@eecs.umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 287199Sgblack@eecs.umich.edu# 297199Sgblack@eecs.umich.edu# Authors: Steve Reinhardt 307199Sgblack@eecs.umich.edu 317199Sgblack@eecs.umich.eduImport('*') 327199Sgblack@eecs.umich.edu 337199Sgblack@eecs.umich.eduif env['TARGET_ISA'] == 'no': 347199Sgblack@eecs.umich.edu Return() 357199Sgblack@eecs.umich.edu 367199Sgblack@eecs.umich.edu################################################################# 377199Sgblack@eecs.umich.edu# 387199Sgblack@eecs.umich.edu# Generate StaticInst execute() method signatures. 397199Sgblack@eecs.umich.edu# 407199Sgblack@eecs.umich.edu# There must be one signature for each CPU model compiled in. 417199Sgblack@eecs.umich.edu# Since the set of compiled-in models is flexible, we generate a 427199Sgblack@eecs.umich.edu# header containing the appropriate set of signatures on the fly. 4310474Sandreas.hansson@arm.com# 4410037SARM gem5 Developers################################################################# 4510037SARM gem5 Developers 4610037SARM gem5 Developers# Template for execute() signature. 4710037SARM gem5 Developersexec_sig_template = ''' 4810037SARM gem5 Developersvirtual Fault execute(%(type)s *xc, Trace::InstRecord *traceData) const = 0; 4910037SARM gem5 Developersvirtual Fault eaComp(%(type)s *xc, Trace::InstRecord *traceData) const 5010037SARM gem5 Developers{ panic("eaComp not defined!"); M5_DUMMY_RETURN }; 5110037SARM gem5 Developersvirtual Fault initiateAcc(%(type)s *xc, Trace::InstRecord *traceData) const 5210037SARM gem5 Developers{ panic("initiateAcc not defined!"); M5_DUMMY_RETURN }; 5310037SARM gem5 Developersvirtual Fault completeAcc(Packet *pkt, %(type)s *xc, 5410037SARM gem5 Developers Trace::InstRecord *traceData) const 5510037SARM gem5 Developers{ panic("completeAcc not defined!"); M5_DUMMY_RETURN }; 5610037SARM gem5 Developers''' 5710037SARM gem5 Developers 5810037SARM gem5 Developersmem_ini_sig_template = ''' 5910037SARM gem5 Developersvirtual Fault eaComp(%(type)s *xc, Trace::InstRecord *traceData) const 6010037SARM gem5 Developers{ panic("eaComp not defined!"); M5_DUMMY_RETURN }; 6110037SARM gem5 Developersvirtual Fault initiateAcc(%s *xc, Trace::InstRecord *traceData) const { panic("Not defined!"); M5_DUMMY_RETURN }; 6210474Sandreas.hansson@arm.com''' 6310474Sandreas.hansson@arm.com 6410037SARM gem5 Developersmem_comp_sig_template = ''' 6510037SARM gem5 Developersvirtual Fault completeAcc(uint8_t *data, %s *xc, Trace::InstRecord *traceData) const { panic("Not defined!"); return NoFault; M5_DUMMY_RETURN }; 6610037SARM gem5 Developers''' 6710037SARM gem5 Developers 6810474Sandreas.hansson@arm.com# Generate a temporary CPU list, including the CheckerCPU if 6910037SARM gem5 Developers# it's enabled. This isn't used for anything else other than StaticInst 7010037SARM gem5 Developers# headers. 718782Sgblack@eecs.umich.edutemp_cpu_list = env['CPU_MODELS'][:] 7210037SARM gem5 Developers 738782Sgblack@eecs.umich.eduif env['USE_CHECKER']: 747199Sgblack@eecs.umich.edu temp_cpu_list.append('CheckerCPU') 757199Sgblack@eecs.umich.edu SimObject('CheckerCPU.py') 7610037SARM gem5 Developers 7710037SARM gem5 Developers# Generate header. 788628SAli.Saidi@ARM.comdef gen_cpu_exec_signatures(target, source, env): 7910037SARM gem5 Developers f = open(str(target[0]), 'w') 8010037SARM gem5 Developers print >> f, ''' 8110037SARM gem5 Developers#ifndef __CPU_STATIC_INST_EXEC_SIGS_HH__ 8210037SARM gem5 Developers#define __CPU_STATIC_INST_EXEC_SIGS_HH__ 8310037SARM gem5 Developers''' 8410037SARM gem5 Developers for cpu in temp_cpu_list: 8510037SARM gem5 Developers xc_type = CpuModel.dict[cpu].strings['CPU_exec_context'] 8610037SARM gem5 Developers print >> f, exec_sig_template % { 'type' : xc_type } 8710037SARM gem5 Developers print >> f, ''' 8810037SARM gem5 Developers#endif // __CPU_STATIC_INST_EXEC_SIGS_HH__ 8910037SARM gem5 Developers''' 9010037SARM gem5 Developers 9110037SARM gem5 Developers# Generate string that gets printed when header is rebuilt 9210037SARM gem5 Developersdef gen_sigs_string(target, source, env): 9310037SARM gem5 Developers return " [GENERATE] static_inst_exec_sigs.hh: " \ 9410474Sandreas.hansson@arm.com + ', '.join(temp_cpu_list) 9510037SARM gem5 Developers 9610037SARM gem5 Developers# Add command to generate header to environment. 9710037SARM gem5 Developersenv.Command('static_inst_exec_sigs.hh', (), 9810037SARM gem5 Developers Action(gen_cpu_exec_signatures, gen_sigs_string, 9910037SARM gem5 Developers varlist = temp_cpu_list)) 10010037SARM gem5 Developers 10110037SARM gem5 Developersenv.Depends('static_inst_exec_sigs.hh', Value(env['USE_CHECKER'])) 10210037SARM gem5 Developersenv.Depends('static_inst_exec_sigs.hh', Value(env['CPU_MODELS'])) 10310037SARM gem5 Developers 10410037SARM gem5 Developers# List of suppported CPUs by the Checker. Errors out if USE_CHECKER=True 10510037SARM gem5 Developers# and one of these are not being used. 10610037SARM gem5 DevelopersCheckerSupportedCPUList = ['O3CPU', 'OzoneCPU'] 10710037SARM gem5 Developers 10810037SARM gem5 DevelopersSimObject('BaseCPU.py') 10910037SARM gem5 DevelopersSimObject('FuncUnit.py') 11010037SARM gem5 DevelopersSimObject('ExeTracer.py') 11110037SARM gem5 DevelopersSimObject('IntelTrace.py') 11210037SARM gem5 DevelopersSimObject('NativeTrace.py') 11310037SARM gem5 Developers 11410037SARM gem5 DevelopersSource('activity.cc') 11510037SARM gem5 DevelopersSource('base.cc') 11610037SARM gem5 DevelopersSource('cpuevent.cc') 11710037SARM gem5 DevelopersSource('exetrace.cc') 11810037SARM gem5 DevelopersSource('func_unit.cc') 11910037SARM gem5 DevelopersSource('inteltrace.cc') 12010037SARM gem5 DevelopersSource('nativetrace.cc') 12110037SARM gem5 DevelopersSource('pc_event.cc') 12210037SARM gem5 DevelopersSource('quiesce_event.cc') 12310037SARM gem5 DevelopersSource('static_inst.cc') 12410037SARM gem5 DevelopersSource('simple_thread.cc') 12510037SARM gem5 DevelopersSource('thread_context.cc') 12610037SARM gem5 DevelopersSource('thread_state.cc') 12710037SARM gem5 Developers 12810037SARM gem5 Developersif env['FULL_SYSTEM']: 12910037SARM gem5 Developers SimObject('IntrControl.py') 13010037SARM gem5 Developers 13110037SARM gem5 Developers Source('intr_control.cc') 13210037SARM gem5 Developers Source('profile.cc') 13311355Smitch.hayenga@arm.com 13411355Smitch.hayenga@arm.com if env['TARGET_ISA'] == 'sparc': 13510037SARM gem5 Developers SimObject('LegionTrace.py') 13610037SARM gem5 Developers Source('legiontrace.cc') 13710037SARM gem5 Developers 13810037SARM gem5 Developersif env['USE_CHECKER']: 13912258Sgiacomo.travaglini@arm.com Source('checker/cpu.cc') 14012258Sgiacomo.travaglini@arm.com DebugFlag('Checker') 14112258Sgiacomo.travaglini@arm.com checker_supports = False 14210037SARM gem5 Developers for i in CheckerSupportedCPUList: 14312258Sgiacomo.travaglini@arm.com if i in env['CPU_MODELS']: 14412258Sgiacomo.travaglini@arm.com checker_supports = True 14512258Sgiacomo.travaglini@arm.com if not checker_supports: 14612258Sgiacomo.travaglini@arm.com print "Checker only supports CPU models", 14712258Sgiacomo.travaglini@arm.com for i in CheckerSupportedCPUList: 14812258Sgiacomo.travaglini@arm.com print i, 14912258Sgiacomo.travaglini@arm.com print ", please set USE_CHECKER=False or use one of those CPU models" 15012258Sgiacomo.travaglini@arm.com Exit(1) 15112258Sgiacomo.travaglini@arm.com 15212258Sgiacomo.travaglini@arm.comDebugFlag('Activity') 15312258Sgiacomo.travaglini@arm.comDebugFlag('Commit') 15412258Sgiacomo.travaglini@arm.comDebugFlag('Context') 15512258Sgiacomo.travaglini@arm.comDebugFlag('Decode') 15612258Sgiacomo.travaglini@arm.comDebugFlag('DynInst') 15712258Sgiacomo.travaglini@arm.comDebugFlag('ExecEnable') 15812258Sgiacomo.travaglini@arm.comDebugFlag('ExecCPSeq') 15912258Sgiacomo.travaglini@arm.comDebugFlag('ExecEffAddr') 16012258Sgiacomo.travaglini@arm.comDebugFlag('ExecFaulting', 'Trace faulting instructions') 16112258Sgiacomo.travaglini@arm.comDebugFlag('ExecFetchSeq') 16212258Sgiacomo.travaglini@arm.comDebugFlag('ExecOpClass') 16312258Sgiacomo.travaglini@arm.comDebugFlag('ExecRegDelta') 16412258Sgiacomo.travaglini@arm.comDebugFlag('ExecResult') 16512258Sgiacomo.travaglini@arm.comDebugFlag('ExecSpeculative') 16612258Sgiacomo.travaglini@arm.comDebugFlag('ExecSymbol') 16712258Sgiacomo.travaglini@arm.comDebugFlag('ExecThread') 16812258Sgiacomo.travaglini@arm.comDebugFlag('ExecTicks') 16912258Sgiacomo.travaglini@arm.comDebugFlag('ExecMicro') 17012258Sgiacomo.travaglini@arm.comDebugFlag('ExecMacro') 17112258Sgiacomo.travaglini@arm.comDebugFlag('ExecUser') 17212258Sgiacomo.travaglini@arm.comDebugFlag('ExecKernel') 17312258Sgiacomo.travaglini@arm.comDebugFlag('ExecAsid') 17412258Sgiacomo.travaglini@arm.comDebugFlag('Fetch') 17512258Sgiacomo.travaglini@arm.comDebugFlag('IntrControl') 17612258Sgiacomo.travaglini@arm.comDebugFlag('O3PipeView') 17712258Sgiacomo.travaglini@arm.comDebugFlag('PCEvent') 17812258Sgiacomo.travaglini@arm.comDebugFlag('Quiesce') 17912258Sgiacomo.travaglini@arm.com 1807199Sgblack@eecs.umich.eduCompoundFlag('ExecAll', [ 'ExecEnable', 'ExecCPSeq', 'ExecEffAddr', 1817199Sgblack@eecs.umich.edu 'ExecFaulting', 'ExecFetchSeq', 'ExecOpClass', 'ExecRegDelta', 1827202Sgblack@eecs.umich.edu 'ExecResult', 'ExecSpeculative', 'ExecSymbol', 'ExecThread', 1837202Sgblack@eecs.umich.edu 'ExecTicks', 'ExecMicro', 'ExecMacro', 'ExecUser', 'ExecKernel', 1847202Sgblack@eecs.umich.edu 'ExecAsid' ]) 1857202Sgblack@eecs.umich.eduCompoundFlag('Exec', [ 'ExecEnable', 'ExecTicks', 'ExecOpClass', 'ExecThread', 1867202Sgblack@eecs.umich.edu 'ExecEffAddr', 'ExecResult', 'ExecSymbol', 'ExecMicro', 'ExecFaulting', 1878301SAli.Saidi@ARM.com 'ExecUser', 'ExecKernel' ]) 1888303SAli.Saidi@ARM.comCompoundFlag('ExecNoTicks', [ 'ExecEnable', 'ExecOpClass', 'ExecThread', 1898303SAli.Saidi@ARM.com 'ExecEffAddr', 'ExecResult', 'ExecMicro', 'ExecFaulting', 1908303SAli.Saidi@ARM.com 'ExecUser', 'ExecKernel' ]) 1918303SAli.Saidi@ARM.com