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