SConscript revision 2817
17893SN/A# -*- mode:python -*- 27893SN/A 37893SN/A# Copyright (c) 2004-2005 The Regents of The University of Michigan 49988Snilay@cs.wisc.edu# All rights reserved. 58825Snilay@cs.wisc.edu# 69988Snilay@cs.wisc.edu# Redistribution and use in source and binary forms, with or without 77893SN/A# modification, are permitted provided that the following conditions are 87893SN/A# met: redistributions of source code must retain the above copyright 97893SN/A# notice, this list of conditions and the following disclaimer; 107893SN/A# redistributions in binary form must reproduce the above copyright 117893SN/A# notice, this list of conditions and the following disclaimer in the 127893SN/A# documentation and/or other materials provided with the distribution; 1310315Snilay@cs.wisc.edu# neither the name of the copyright holders nor the names of its 148825Snilay@cs.wisc.edu# contributors may be used to endorse or promote products derived from 159885Sstever@gmail.com# this software without specific prior written permission. 169885Sstever@gmail.com# 179988Snilay@cs.wisc.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 188825Snilay@cs.wisc.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 198825Snilay@cs.wisc.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2010315Snilay@cs.wisc.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 218825Snilay@cs.wisc.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2210242Ssteve.reinhardt@amd.com# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 239449SAli.Saidi@ARM.com# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 249449SAli.Saidi@ARM.com# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 258464SN/A# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2610798Ssteve.reinhardt@amd.com# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 278721SN/A# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 288825Snilay@cs.wisc.edu# 298825Snilay@cs.wisc.edu# Authors: Steve Reinhardt 307935SN/A 317935SN/Aimport os 327935SN/Aimport sys 337935SN/Afrom os.path import isdir 347935SN/A 357935SN/A# This file defines how to build a particular configuration of M5 367935SN/A# based on variable settings in the 'env' build environment. 378983Snate@binkert.org 387893SN/A# Import build environment variable from SConstruct. 399885Sstever@gmail.comImport('env') 409885Sstever@gmail.com 419885Sstever@gmail.com################################################### 4210315Snilay@cs.wisc.edu# 439988Snilay@cs.wisc.edu# Define needed sources. 4410315Snilay@cs.wisc.edu# 459885Sstever@gmail.com################################################### 469885Sstever@gmail.com 477893SN/A# Base sources used by all configurations. 487893SN/A 499885Sstever@gmail.combase_sources = Split(''' 507893SN/A base/circlebuf.cc 517893SN/A base/cprintf.cc 528241SN/A base/fast_alloc.cc 538241SN/A base/fifo_buffer.cc 547893SN/A base/hostinfo.cc 557893SN/A base/hybrid_pred.cc 567893SN/A base/inifile.cc 577893SN/A base/intmath.cc 589481Snilay@cs.wisc.edu base/match.cc 597893SN/A base/misc.cc 607893SN/A base/output.cc 619885Sstever@gmail.com base/pollevent.cc 627893SN/A base/range.cc 637893SN/A base/random.cc 647893SN/A base/sat_counter.cc 657893SN/A base/socket.cc 667893SN/A base/statistics.cc 677893SN/A base/str.cc 687893SN/A base/time.cc 697893SN/A base/trace.cc 707893SN/A base/traceflags.cc 717893SN/A base/userinfo.cc 727893SN/A base/compression/lzss_compression.cc 738825Snilay@cs.wisc.edu base/loader/aout_object.cc 747893SN/A base/loader/ecoff_object.cc 757893SN/A base/loader/elf_object.cc 769988Snilay@cs.wisc.edu base/loader/object_file.cc 779988Snilay@cs.wisc.edu base/loader/symtab.cc 7810451Snilay@cs.wisc.edu base/stats/events.cc 797893SN/A base/stats/statdb.cc 807893SN/A base/stats/visit.cc 817893SN/A base/stats/text.cc 827893SN/A 837893SN/A cpu/activity.cc 847893SN/A cpu/base.cc 857893SN/A cpu/cpuevent.cc 867893SN/A cpu/exetrace.cc 877893SN/A cpu/func_unit.cc 887893SN/A cpu/op_class.cc 897893SN/A cpu/pc_event.cc 908825Snilay@cs.wisc.edu cpu/quiesce_event.cc 919449SAli.Saidi@ARM.com cpu/static_inst.cc 927893SN/A cpu/sampler/sampler.cc 937893SN/A cpu/simple_thread.cc 947893SN/A cpu/thread_state.cc 957893SN/A 967893SN/A mem/bridge.cc 977893SN/A mem/bus.cc 987893SN/A mem/mem_object.cc 998728SN/A mem/packet.cc 1007893SN/A mem/physical.cc 1019924Ssteve.reinhardt@amd.com mem/port.cc 1027893SN/A 1037893SN/A sim/builder.cc 1047893SN/A sim/debug.cc 1057893SN/A sim/eventq.cc 1067893SN/A sim/faults.cc 1078825Snilay@cs.wisc.edu sim/main.cc 1087893SN/A python/swig/cc_main_wrap.cc 1097893SN/A sim/param.cc 1107893SN/A sim/root.cc 1117893SN/A sim/serialize.cc 1127893SN/A sim/sim_events.cc 1137893SN/A sim/sim_object.cc 1149885Sstever@gmail.com sim/startup.cc 1157893SN/A sim/stat_context.cc 1167893SN/A sim/stat_control.cc 1177893SN/A sim/system.cc 1187893SN/A sim/trace_context.cc 1197893SN/A ''') 1207893SN/A 1217893SN/A# Old FullCPU sources 1227893SN/Afull_cpu_sources = Split(''' 1237893SN/A encumbered/cpu/full/bpred.cc 12410242Ssteve.reinhardt@amd.com encumbered/cpu/full/commit.cc 1257893SN/A encumbered/cpu/full/cpu.cc 1268521SN/A encumbered/cpu/full/create_vector.cc 1279449SAli.Saidi@ARM.com encumbered/cpu/full/cv_spec_state.cc 1287893SN/A encumbered/cpu/full/dd_queue.cc 1297893SN/A encumbered/cpu/full/dep_link.cc 1307893SN/A encumbered/cpu/full/dispatch.cc 1317893SN/A encumbered/cpu/full/dyn_inst.cc 1327893SN/A encumbered/cpu/full/execute.cc 1337893SN/A encumbered/cpu/full/fetch.cc 1347893SN/A encumbered/cpu/full/floss_reasons.cc 1357893SN/A encumbered/cpu/full/fu_pool.cc 1369885Sstever@gmail.com encumbered/cpu/full/inst_fifo.cc 1379885Sstever@gmail.com encumbered/cpu/full/instpipe.cc 1389885Sstever@gmail.com encumbered/cpu/full/issue.cc 1399885Sstever@gmail.com encumbered/cpu/full/ls_queue.cc 1409988Snilay@cs.wisc.edu encumbered/cpu/full/machine_queue.cc 1419885Sstever@gmail.com encumbered/cpu/full/pipetrace.cc 1429481Snilay@cs.wisc.edu encumbered/cpu/full/readyq.cc 14310798Ssteve.reinhardt@amd.com encumbered/cpu/full/reg_info.cc 1449481Snilay@cs.wisc.edu encumbered/cpu/full/rob_station.cc 1459481Snilay@cs.wisc.edu encumbered/cpu/full/spec_memory.cc 1469481Snilay@cs.wisc.edu encumbered/cpu/full/spec_state.cc 1479481Snilay@cs.wisc.edu encumbered/cpu/full/storebuffer.cc 1489481Snilay@cs.wisc.edu encumbered/cpu/full/writeback.cc 1499988Snilay@cs.wisc.edu encumbered/cpu/full/iq/iq_station.cc 1509481Snilay@cs.wisc.edu encumbered/cpu/full/iq/iqueue.cc 1519481Snilay@cs.wisc.edu encumbered/cpu/full/iq/segmented/chain_info.cc 1529481Snilay@cs.wisc.edu encumbered/cpu/full/iq/segmented/chain_wire.cc 1539481Snilay@cs.wisc.edu encumbered/cpu/full/iq/segmented/iq_seg.cc 1549481Snilay@cs.wisc.edu encumbered/cpu/full/iq/segmented/iq_segmented.cc 1559481Snilay@cs.wisc.edu encumbered/cpu/full/iq/segmented/seg_chain.cc 1569481Snilay@cs.wisc.edu encumbered/cpu/full/iq/seznec/iq_seznec.cc 1579481Snilay@cs.wisc.edu encumbered/cpu/full/iq/standard/iq_standard.cc 1587893SN/A ''') 15911103Snilay@cs.wisc.edu 1609885Sstever@gmail.comtrace_reader_sources = Split(''' 1618983Snate@binkert.org cpu/trace/reader/mem_trace_reader.cc 1627893SN/A cpu/trace/reader/ibm_reader.cc 1639885Sstever@gmail.com cpu/trace/reader/itx_reader.cc 16410645Snilay@cs.wisc.edu cpu/trace/reader/m5_reader.cc 1659988Snilay@cs.wisc.edu cpu/trace/opt_cpu.cc 1667893SN/A cpu/trace/trace_cpu.cc 1679348SAli.Saidi@ARM.com ''') 16810901Snilay@cs.wisc.edu 1697893SN/A 1709348SAli.Saidi@ARM.com 1717893SN/A# MySql sources 1728835SAli.Saidi@ARM.commysql_sources = Split(''' 1739348SAli.Saidi@ARM.com base/mysql.cc 17410036SAli.Saidi@ARM.com base/stats/mysql.cc 1757893SN/A ''') 1768835SAli.Saidi@ARM.com 1779885Sstever@gmail.com# Full-system sources 1787893SN/Afull_system_sources = Split(''' 1797893SN/A base/crc.cc 1807893SN/A base/inet.cc 1818983Snate@binkert.org base/remote_gdb.cc 1827893SN/A 1839885Sstever@gmail.com cpu/intr_control.cc 1849885Sstever@gmail.com cpu/profile.cc 1859885Sstever@gmail.com 1869885Sstever@gmail.com dev/alpha_console.cc 1879885Sstever@gmail.com dev/baddev.cc 1889988Snilay@cs.wisc.edu dev/disk_image.cc 1899885Sstever@gmail.com dev/etherbus.cc 19010036SAli.Saidi@ARM.com dev/etherdump.cc 1919885Sstever@gmail.com dev/etherint.cc 1929885Sstever@gmail.com dev/etherlink.cc 1937893SN/A dev/etherpkt.cc 1947893SN/A dev/ethertap.cc 1958825Snilay@cs.wisc.edu dev/ide_ctrl.cc 1969988Snilay@cs.wisc.edu dev/ide_disk.cc 1977893SN/A dev/io_device.cc 1988825Snilay@cs.wisc.edu dev/isa_fake.cc 1998825Snilay@cs.wisc.edu dev/ns_gige.cc 2008825Snilay@cs.wisc.edu dev/pciconfigall.cc 2018825Snilay@cs.wisc.edu dev/pcidev.cc 2029885Sstever@gmail.com dev/pcifake.cc 2039988Snilay@cs.wisc.edu dev/pktfifo.cc 2049885Sstever@gmail.com dev/platform.cc 2058825Snilay@cs.wisc.edu dev/simconsole.cc 2068983Snate@binkert.org dev/simple_disk.cc 2077893SN/A dev/sinic.cc 2087893SN/A dev/tsunami.cc 2097893SN/A dev/tsunami_cchip.cc 2107893SN/A dev/tsunami_io.cc 2117893SN/A dev/tsunami_fake.cc 2129988Snilay@cs.wisc.edu dev/tsunami_pchip.cc 2137893SN/A 2147893SN/A dev/uart.cc 2157893SN/A dev/uart8250.cc 2167893SN/A 2177893SN/A kern/kernel_stats.cc 2189988Snilay@cs.wisc.edu kern/system_events.cc 2197893SN/A kern/linux/events.cc 2207893SN/A kern/linux/linux_syscalls.cc 2217893SN/A kern/linux/printk.cc 2227893SN/A 2239988Snilay@cs.wisc.edu mem/vport.cc 2247893SN/A 2257893SN/A sim/pseudo_inst.cc 22610901Snilay@cs.wisc.edu ''') 2277893SN/A 2287893SN/A 2297893SN/Aif env['TARGET_ISA'] == 'alpha': 2307893SN/A full_system_sources += Split(''' 2317893SN/A kern/tru64/dump_mbuf.cc 2329988Snilay@cs.wisc.edu kern/tru64/printf.cc 2337893SN/A kern/tru64/tru64_events.cc 2347893SN/A kern/tru64/tru64_syscalls.cc 2357893SN/A ''') 2367893SN/A 2379988Snilay@cs.wisc.edu# turbolaser encumbered sources 2387893SN/Aturbolaser_sources = Split(''' 2397893SN/A encumbered/dev/dma.cc 24010901Snilay@cs.wisc.edu encumbered/dev/etherdev.cc 2417893SN/A encumbered/dev/scsi.cc 2427893SN/A encumbered/dev/scsi_ctrl.cc 2437893SN/A encumbered/dev/scsi_disk.cc 2449988Snilay@cs.wisc.edu encumbered/dev/scsi_none.cc 2457893SN/A encumbered/dev/tlaser_clock.cc 24610901Snilay@cs.wisc.edu encumbered/dev/tlaser_ipi.cc 24710901Snilay@cs.wisc.edu encumbered/dev/tlaser_mbox.cc 2487893SN/A encumbered/dev/tlaser_mc146818.cc 2497893SN/A encumbered/dev/tlaser_node.cc 2507893SN/A encumbered/dev/tlaser_pcia.cc 2517893SN/A encumbered/dev/tlaser_pcidev.cc 2527893SN/A encumbered/dev/tlaser_serial.cc 2539988Snilay@cs.wisc.edu encumbered/dev/turbolaser.cc 2547893SN/A encumbered/dev/uart8530.cc 2557893SN/A ''') 2567893SN/A 2577893SN/A# Syscall emulation (non-full-system) sources 2589988Snilay@cs.wisc.edusyscall_emulation_sources = Split(''' 2597893SN/A mem/translating_port.cc 2607893SN/A mem/page_table.cc 26110901Snilay@cs.wisc.edu sim/process.cc 2627893SN/A sim/syscall_emul.cc 2637893SN/A ''') 2647893SN/A 2659988Snilay@cs.wisc.edu#if env['TARGET_ISA'] == 'alpha': 2667893SN/A# syscall_emulation_sources += Split(''' 2677893SN/A# kern/tru64/tru64.cc 26810901Snilay@cs.wisc.edu# ''') 2697893SN/A 2707893SN/Aalpha_eio_sources = Split(''' 2717893SN/A encumbered/eio/exolex.cc 2729988Snilay@cs.wisc.edu encumbered/eio/libexo.cc 2737893SN/A encumbered/eio/eio.cc 2747893SN/A ''') 27510901Snilay@cs.wisc.edu 2767893SN/Aif env['TARGET_ISA'] == 'ALPHA_ISA': 2777893SN/A syscall_emulation_sources += alpha_eio_sources 2787893SN/A 2797893SN/Amemtest_sources = Split(''' 2807893SN/A cpu/memtest/memtest.cc 2819988Snilay@cs.wisc.edu ''') 2827893SN/A 2837893SN/A# Include file paths are rooted in this directory. SCons will 2847893SN/A# automatically expand '.' to refer to both the source directory and 2857893SN/A# the corresponding build directory to pick up generated include 2869988Snilay@cs.wisc.edu# files. 2877893SN/Aenv.Append(CPPPATH=Dir('.')) 2887893SN/A 28910901Snilay@cs.wisc.edu# Add a flag defining what THE_ISA should be for all compilation 2907893SN/Aenv.Append(CPPDEFINES=[('THE_ISA','%s_ISA' % env['TARGET_ISA'].upper())]) 2917893SN/A 2927893SN/Aarch_sources = SConscript('arch/SConscript', exports = 'env') 2939988Snilay@cs.wisc.edu 2947893SN/Acpu_sources = SConscript('cpu/SConscript', exports = 'env') 2957893SN/A 29610901Snilay@cs.wisc.edu# This is outside of cpu/SConscript since the source directory isn't 2977893SN/A# underneath 'cpu'. 2987893SN/Aif 'FullCPU' in env['CPU_MODELS']: 2997893SN/A cpu_sources += full_cpu_sources 3009988Snilay@cs.wisc.edu 3017893SN/A# Set up complete list of sources based on configuration. 3027893SN/Asources = base_sources + arch_sources + cpu_sources 30310901Snilay@cs.wisc.edu 3047893SN/Aif env['FULL_SYSTEM']: 3057893SN/A sources += full_system_sources 3067893SN/A if env['ALPHA_TLASER']: 3077893SN/A sources += turbolaser_sources 3087893SN/Aelse: 3099988Snilay@cs.wisc.edu sources += syscall_emulation_sources 3107893SN/A 3117893SN/Aif env['USE_MYSQL']: 3127893SN/A sources += mysql_sources 3137893SN/A 3149988Snilay@cs.wisc.edufor opt in env.ExportOptions: 3157893SN/A env.ConfigFile(opt) 3167893SN/A 31710901Snilay@cs.wisc.edu################################################### 3187893SN/A# 3197893SN/A# Special build rules. 3207893SN/A# 3217893SN/A################################################### 3227893SN/A 3239988Snilay@cs.wisc.edu# base/traceflags.{cc,hh} are generated from base/traceflags.py. 3247893SN/A# $TARGET.base will expand to "<build-dir>/base/traceflags". 3257893SN/Aenv.Command(Split('base/traceflags.hh base/traceflags.cc'), 3267893SN/A 'base/traceflags.py', 3277893SN/A 'python $SOURCE $TARGET.base') 3289988Snilay@cs.wisc.edu 3297893SN/ASConscript('python/SConscript', exports = ['env']) 3307893SN/A 33110901Snilay@cs.wisc.edu# This function adds the specified sources to the given build 3327893SN/A# environment, and returns a list of all the corresponding SCons 3337893SN/A# Object nodes (including an extra one for date.cc). We explicitly 3347893SN/A# add the Object nodes so we can set up special dependencies for 3359988Snilay@cs.wisc.edu# date.cc. 3367893SN/Adef make_objs(sources, env): 3377893SN/A objs = [env.Object(s) for s in sources] 33810901Snilay@cs.wisc.edu # make date.cc depend on all other objects so it always gets 3397893SN/A # recompiled whenever anything else does 3407893SN/A date_obj = env.Object('base/date.cc') 3417893SN/A env.Depends(date_obj, objs) 3429988Snilay@cs.wisc.edu objs.append(date_obj) 3437893SN/A return objs 3447893SN/A 34510901Snilay@cs.wisc.edu################################################### 3467893SN/A# 3477893SN/A# Define binaries. Each different build type (debug, opt, etc.) gets 3487893SN/A# a slightly different build environment. 3499988Snilay@cs.wisc.edu# 3507893SN/A################################################### 3517893SN/A 35210901Snilay@cs.wisc.edu# List of constructed environments to pass back to SConstruct 3537893SN/AenvList = [] 3547893SN/A 3557893SN/A# Function to create a new build environment as clone of current 3569988Snilay@cs.wisc.edu# environment 'env' with modified object suffix and optional stripped 3577893SN/A# binary. Additional keyword arguments are appended to corresponding 3587893SN/A# build environment vars. 35910901Snilay@cs.wisc.edudef makeEnv(label, objsfx, strip = False, **kwargs): 3607893SN/A newEnv = env.Copy(OBJSUFFIX=objsfx) 3617893SN/A newEnv.Label = label 3627893SN/A newEnv.Append(**kwargs) 3639988Snilay@cs.wisc.edu exe = 'm5.' + label # final executable 3647893SN/A bin = exe + '.bin' # executable w/o appended Python zip archive 3657893SN/A newEnv.Program(bin, make_objs(sources, newEnv)) 36610901Snilay@cs.wisc.edu if strip: 3677893SN/A stripped_bin = bin + '.stripped' 3687893SN/A newEnv.Command(stripped_bin, bin, 'strip $SOURCE -o $TARGET') 3697893SN/A bin = stripped_bin 3709988Snilay@cs.wisc.edu targets = newEnv.Concat(exe, [bin, 'python/m5py.zip']) 3717893SN/A newEnv.M5Binary = targets[0] 3727893SN/A envList.append(newEnv) 37310901Snilay@cs.wisc.edu 3747893SN/A# Debug binary 3757893SN/AmakeEnv('debug', '.do', 3767893SN/A CCFLAGS = Split('-g3 -gdwarf-2 -O0'), 3779988Snilay@cs.wisc.edu CPPDEFINES = 'DEBUG') 3787893SN/A 3797893SN/A# Optimized binary 38010901Snilay@cs.wisc.edumakeEnv('opt', '.o', 3817893SN/A CCFLAGS = Split('-g -O3')) 3827893SN/A 3837893SN/A# "Fast" binary 3849988Snilay@cs.wisc.edumakeEnv('fast', '.fo', strip = True, 3857893SN/A CCFLAGS = Split('-O3'), 3867893SN/A CPPDEFINES = 'NDEBUG') 38710901Snilay@cs.wisc.edu 3887893SN/A# Profiled binary 3897893SN/AmakeEnv('prof', '.po', 3907893SN/A CCFLAGS = Split('-O3 -g -pg'), 3919988Snilay@cs.wisc.edu LINKFLAGS = '-pg') 3927893SN/A 3937893SN/AReturn('envList') 39410901Snilay@cs.wisc.edu