SConscript revision 2400
17860SN/A# -*- mode:python -*-
27860SN/A
37860SN/A# Copyright (c) 2004-2005 The Regents of The University of Michigan
48825Snilay@cs.wisc.edu# All rights reserved.
57935SN/A#
67935SN/A# Redistribution and use in source and binary forms, with or without
77935SN/A# modification, are permitted provided that the following conditions are
87860SN/A# met: redistributions of source code must retain the above copyright
97860SN/A# notice, this list of conditions and the following disclaimer;
107860SN/A# redistributions in binary form must reproduce the above copyright
119885Sstever@gmail.com# notice, this list of conditions and the following disclaimer in the
128825Snilay@cs.wisc.edu# documentation and/or other materials provided with the distribution;
139885Sstever@gmail.com# neither the name of the copyright holders nor the names of its
149885Sstever@gmail.com# contributors may be used to endorse or promote products derived from
158825Snilay@cs.wisc.edu# this software without specific prior written permission.
168825Snilay@cs.wisc.edu#
178825Snilay@cs.wisc.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
189449SAli.Saidi@ARM.com# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
199449SAli.Saidi@ARM.com# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
208464SN/A# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
218721SN/A# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
228825Snilay@cs.wisc.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
238825Snilay@cs.wisc.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
247935SN/A# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
257935SN/A# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
267935SN/A# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
277935SN/A# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
287935SN/A
297935SN/Aimport os
307935SN/Aimport sys
318893Ssaidi@eecs.umich.edufrom os.path import isdir
327860SN/A
339885Sstever@gmail.com# This file defines how to build a particular configuration of M5
349885Sstever@gmail.com# based on variable settings in the 'env' build environment.
359885Sstever@gmail.com
369885Sstever@gmail.com# Import build environment variable from SConstruct.
379885Sstever@gmail.comImport('env')
387860SN/A
397860SN/A###################################################
409481Snilay@cs.wisc.edu#
417860SN/A# Define needed sources.
427860SN/A#
438210SN/A###################################################
448210SN/A
457860SN/A# Base sources used by all configurations.
467860SN/Abase_sources = Split('''
477860SN/A	arch/alpha/decoder.cc
487860SN/A	arch/alpha/faults.cc
499481Snilay@cs.wisc.edu	arch/alpha/isa_traits.cc
507860SN/A
517860SN/A	base/circlebuf.cc
529885Sstever@gmail.com	base/copyright.cc
537860SN/A	base/cprintf.cc
547860SN/A        base/embedfile.cc
557860SN/A	base/fast_alloc.cc
567860SN/A	base/fifo_buffer.cc
577860SN/A	base/hostinfo.cc
587860SN/A	base/hybrid_pred.cc
597860SN/A	base/inifile.cc
607860SN/A	base/intmath.cc
617860SN/A	base/match.cc
627860SN/A	base/misc.cc
637860SN/A	base/output.cc
648825Snilay@cs.wisc.edu	base/pollevent.cc
657860SN/A	base/range.cc
667860SN/A	base/random.cc
677860SN/A	base/sat_counter.cc
687860SN/A	base/socket.cc
697860SN/A	base/statistics.cc
707860SN/A	base/str.cc
717860SN/A	base/time.cc
727860SN/A	base/trace.cc
737860SN/A	base/traceflags.cc
747860SN/A	base/userinfo.cc
757860SN/A	base/compression/lzss_compression.cc
767860SN/A	base/loader/aout_object.cc
777860SN/A	base/loader/ecoff_object.cc
788825Snilay@cs.wisc.edu	base/loader/elf_object.cc
799449SAli.Saidi@ARM.com	base/loader/object_file.cc
807860SN/A	base/loader/symtab.cc
817860SN/A	base/stats/events.cc
827860SN/A	base/stats/statdb.cc
837860SN/A	base/stats/visit.cc
847860SN/A	base/stats/text.cc
857860SN/A
867860SN/A	cpu/base.cc
878825Snilay@cs.wisc.edu	cpu/exec_context.cc
887860SN/A	cpu/exetrace.cc
899924Ssteve.reinhardt@amd.com	cpu/pc_event.cc
907860SN/A	cpu/static_inst.cc
917860SN/A        cpu/sampler/sampler.cc
927860SN/A
937860SN/A        mem/memory.cc
947860SN/A        mem/page_table.cc
958825Snilay@cs.wisc.edu        mem/physical.cc
967860SN/A        mem/translating_port.cc
977860SN/A
987860SN/A        python/pyconfig.cc
997860SN/A        python/embedded_py.cc
1007860SN/A
1017860SN/A	sim/builder.cc
1029885Sstever@gmail.com	sim/configfile.cc
1037860SN/A	sim/debug.cc
1047860SN/A	sim/eventq.cc
1057860SN/A	sim/main.cc
1067860SN/A	sim/param.cc
1077860SN/A	sim/profile.cc
1087860SN/A	sim/root.cc
1097860SN/A	sim/serialize.cc
1107860SN/A	sim/sim_events.cc
1117860SN/A	sim/sim_exit.cc
1127860SN/A	sim/sim_object.cc
1138521SN/A	sim/startup.cc
1149449SAli.Saidi@ARM.com	sim/stat_context.cc
1157860SN/A	sim/stat_control.cc
1167860SN/A	sim/system.cc
1177860SN/A	sim/trace_context.cc
1187860SN/A        ''')
1197860SN/A
1207860SN/Afast_cpu_sources = Split('''
1217860SN/A	arch/alpha/fast_cpu_exec.cc
1227860SN/A	cpu/fast/cpu.cc
1237860SN/A        ''')
1249481Snilay@cs.wisc.edu
1259481Snilay@cs.wisc.edusimple_cpu_sources = Split('''
1269481Snilay@cs.wisc.edu	arch/alpha/simple_cpu_exec.cc
1279481Snilay@cs.wisc.edu        cpu/simple/cpu.cc
1289481Snilay@cs.wisc.edu        ''')
1299481Snilay@cs.wisc.edu
1309481Snilay@cs.wisc.edutrace_reader_sources = Split('''
1319481Snilay@cs.wisc.edu        cpu/trace/reader/mem_trace_reader.cc
1329481Snilay@cs.wisc.edu        cpu/trace/reader/ibm_reader.cc
1339481Snilay@cs.wisc.edu        cpu/trace/reader/itx_reader.cc
1349481Snilay@cs.wisc.edu        cpu/trace/reader/m5_reader.cc
1359481Snilay@cs.wisc.edu        cpu/trace/opt_cpu.cc
1369481Snilay@cs.wisc.edu        cpu/trace/trace_cpu.cc
1379481Snilay@cs.wisc.edu        ''')
1389481Snilay@cs.wisc.edu
1399481Snilay@cs.wisc.edufull_cpu_sources = Split('''
1407860SN/A	arch/alpha/full_cpu_exec.cc
1417860SN/A        cpu/base_dyn_inst.cc
1429885Sstever@gmail.com	encumbered/cpu/full/bpred.cc
1438893Ssaidi@eecs.umich.edu	encumbered/cpu/full/commit.cc
1447860SN/A	encumbered/cpu/full/cpu.cc
1459885Sstever@gmail.com	encumbered/cpu/full/create_vector.cc
1467860SN/A	encumbered/cpu/full/cv_spec_state.cc
1479348SAli.Saidi@ARM.com	encumbered/cpu/full/dd_queue.cc
1488150SN/A	encumbered/cpu/full/dep_link.cc
1497860SN/A	encumbered/cpu/full/dispatch.cc
1509348SAli.Saidi@ARM.com	encumbered/cpu/full/dyn_inst.cc
1517860SN/A	encumbered/cpu/full/execute.cc
1528835SAli.Saidi@ARM.com	encumbered/cpu/full/fetch.cc
1539348SAli.Saidi@ARM.com	encumbered/cpu/full/floss_reasons.cc
1547860SN/A	encumbered/cpu/full/inst_fifo.cc
1558835SAli.Saidi@ARM.com	encumbered/cpu/full/instpipe.cc
1569885Sstever@gmail.com	encumbered/cpu/full/issue.cc
1577860SN/A	encumbered/cpu/full/ls_queue.cc
1587860SN/A	encumbered/cpu/full/machine_queue.cc
1597860SN/A        encumbered/cpu/full/pipetrace.cc
1607860SN/A        encumbered/cpu/full/readyq.cc
1618893Ssaidi@eecs.umich.edu        encumbered/cpu/full/reg_info.cc
1627860SN/A        encumbered/cpu/full/rob_station.cc
1639885Sstever@gmail.com        encumbered/cpu/full/spec_memory.cc
1649885Sstever@gmail.com        encumbered/cpu/full/spec_state.cc
1659885Sstever@gmail.com        encumbered/cpu/full/storebuffer.cc
1669885Sstever@gmail.com        encumbered/cpu/full/writeback.cc
1679885Sstever@gmail.com        encumbered/cpu/full/iq/iq_station.cc
1689885Sstever@gmail.com        encumbered/cpu/full/iq/iqueue.cc
1699885Sstever@gmail.com        encumbered/cpu/full/iq/segmented/chain_info.cc
1709885Sstever@gmail.com        encumbered/cpu/full/iq/segmented/chain_wire.cc
1717860SN/A        encumbered/cpu/full/iq/segmented/iq_seg.cc
1727860SN/A        encumbered/cpu/full/iq/segmented/iq_segmented.cc
1738825Snilay@cs.wisc.edu        encumbered/cpu/full/iq/segmented/seg_chain.cc
1747860SN/A        encumbered/cpu/full/iq/seznec/iq_seznec.cc
1758825Snilay@cs.wisc.edu        encumbered/cpu/full/iq/standard/iq_standard.cc
1768825Snilay@cs.wisc.edu        ''')
1778825Snilay@cs.wisc.edu
1788825Snilay@cs.wisc.eduo3_cpu_sources = Split('''
1799885Sstever@gmail.com        arch/alpha/alpha_o3_exec.cc
1809265SAli.Saidi@ARM.com        cpu/o3/2bit_local_pred.cc
1818825Snilay@cs.wisc.edu        cpu/o3/alpha_dyn_inst.cc
1828893Ssaidi@eecs.umich.edu        cpu/o3/alpha_cpu.cc
1837860SN/A        cpu/o3/alpha_cpu_builder.cc
1847860SN/A        cpu/o3/bpred_unit.cc
1857860SN/A        cpu/o3/btb.cc
1867860SN/A        cpu/o3/commit.cc
1877860SN/A        cpu/o3/decode.cc
1887860SN/A        cpu/o3/fetch.cc
1897860SN/A        cpu/o3/free_list.cc
1907860SN/A        cpu/o3/cpu.cc
1917860SN/A        cpu/o3/iew.cc
1927860SN/A        cpu/o3/inst_queue.cc
1937860SN/A        cpu/o3/ldstq.cc
1947860SN/A        cpu/o3/mem_dep_unit.cc
1957860SN/A        cpu/o3/ras.cc
1967860SN/A        cpu/o3/rename.cc
1977860SN/A        cpu/o3/rename_map.cc
1987860SN/A        cpu/o3/rob.cc
1997860SN/A        cpu/o3/sat_counter.cc
2007860SN/A        cpu/o3/store_set.cc
2017860SN/A        cpu/o3/tournament_pred.cc
2027860SN/A        ''')
2037860SN/A
2047860SN/A# MySql sources
2057860SN/Amysql_sources = Split('''
2067860SN/A	base/mysql.cc
2077860SN/A	base/stats/mysql.cc
2087860SN/A        ''')
2097860SN/A
2107860SN/A# Full-system sources
2117860SN/Afull_system_sources = Split('''
2127860SN/A	arch/alpha/alpha_memory.cc
2137860SN/A	arch/alpha/arguments.cc
2147860SN/A	arch/alpha/ev5.cc
2157860SN/A	arch/alpha/osfpal.cc
2167860SN/A	arch/alpha/pseudo_inst.cc
2177860SN/A	arch/alpha/stacktrace.cc
2187860SN/A	arch/alpha/vtophys.cc
2197860SN/A
2207860SN/A	base/crc.cc
2217860SN/A	base/inet.cc
2227860SN/A	base/remote_gdb.cc
2237860SN/A
2247860SN/A	cpu/intr_control.cc
2257860SN/A        cpu/profile.cc
2267860SN/A
2277860SN/A	dev/alpha_console.cc
2287860SN/A	dev/baddev.cc
2297860SN/A        dev/simconsole.cc
2307860SN/A	dev/disk_image.cc
2317860SN/A	dev/etherbus.cc
2327860SN/A	dev/etherdump.cc
2337860SN/A	dev/etherint.cc
2347860SN/A	dev/etherlink.cc
2357860SN/A	dev/etherpkt.cc
2367860SN/A	dev/ethertap.cc
2377860SN/A	dev/ide_ctrl.cc
2387860SN/A	dev/ide_disk.cc
2397860SN/A	dev/io_device.cc
2407860SN/A	dev/ns_gige.cc
2417860SN/A	dev/pciconfigall.cc
2427860SN/A	dev/pcidev.cc
2437860SN/A	dev/pcifake.cc
2447860SN/A	dev/pktfifo.cc
2457860SN/A	dev/platform.cc
2467860SN/A	dev/sinic.cc
2477860SN/A	dev/simple_disk.cc
2487860SN/A	dev/tsunami.cc
2497860SN/A	dev/tsunami_cchip.cc
2507860SN/A	dev/isa_fake.cc
2517860SN/A	dev/tsunami_io.cc
2527860SN/A	dev/tsunami_pchip.cc
2537860SN/A	dev/uart.cc
2547860SN/A	dev/uart8250.cc
2557860SN/A
2567860SN/A	kern/kernel_binning.cc
2577860SN/A	kern/kernel_stats.cc
2587860SN/A	kern/system_events.cc
2597860SN/A	kern/freebsd/freebsd_system.cc
2607860SN/A	kern/linux/linux_syscalls.cc
2617860SN/A	kern/linux/linux_system.cc
2627860SN/A	kern/linux/printk.cc
2637860SN/A	kern/tru64/dump_mbuf.cc
2647860SN/A	kern/tru64/printf.cc
2657860SN/A	kern/tru64/tru64_events.cc
2667860SN/A	kern/tru64/tru64_syscalls.cc
2677860SN/A	kern/tru64/tru64_system.cc
2687860SN/A
2697860SN/A	mem/functional/memory_control.cc
2707860SN/A        ''')
2717860SN/A
2727860SN/A# turbolaser encumbered sources
2737860SN/Aturbolaser_sources = Split('''
2747860SN/A	encumbered/dev/dma.cc
2757860SN/A	encumbered/dev/etherdev.cc
2767860SN/A	encumbered/dev/scsi.cc
2777860SN/A	encumbered/dev/scsi_ctrl.cc
2787860SN/A	encumbered/dev/scsi_disk.cc
2797860SN/A	encumbered/dev/scsi_none.cc
2807860SN/A	encumbered/dev/tlaser_clock.cc
2817860SN/A	encumbered/dev/tlaser_ipi.cc
2827860SN/A	encumbered/dev/tlaser_mbox.cc
2837860SN/A	encumbered/dev/tlaser_mc146818.cc
2847860SN/A	encumbered/dev/tlaser_node.cc
2857860SN/A	encumbered/dev/tlaser_pcia.cc
2867860SN/A	encumbered/dev/tlaser_pcidev.cc
2877860SN/A	encumbered/dev/tlaser_serial.cc
2887860SN/A	encumbered/dev/turbolaser.cc
2897860SN/A	encumbered/dev/uart8530.cc
2907860SN/A        ''')
2917860SN/A
2927860SN/A# Syscall emulation (non-full-system) sources
2937860SN/Asyscall_emulation_sources = Split('''
2947860SN/A	arch/alpha/alpha_common_syscall_emul.cc
2957860SN/A	arch/alpha/alpha_linux_process.cc
2967860SN/A	arch/alpha/alpha_tru64_process.cc
2977860SN/A
2987860SN/A	encumbered/eio/exolex.cc
2997860SN/A	encumbered/eio/libexo.cc
3007860SN/A	sim/process.cc
3017860SN/A	sim/syscall_emul.cc
3027860SN/A        ''')
3037860SN/A
3047860SN/Aeio_sources = Split('''
3057860SN/A	encumbered/eio/eio.cc
3067860SN/A        ''')
3077860SN/A
3087860SN/Amemtest_sources = Split('''
3097860SN/A	cpu/memtest/memtest.cc
3107860SN/A        ''')
3117860SN/A
3127860SN/Atargetarch_files = Split('''
3137860SN/A        alpha_common_syscall_emul.hh
3147860SN/A        alpha_linux_process.hh
3157860SN/A        alpha_memory.hh
3167860SN/A        alpha_tru64_process.hh
3177860SN/A        aout_machdep.h
3187860SN/A        arguments.hh
3197860SN/A        byte_swap.hh
3207860SN/A        ecoff_machdep.h
3217860SN/A        ev5.hh
3227860SN/A        faults.hh
3237860SN/A        isa_fullsys_traits.hh
3247860SN/A        isa_traits.hh
3257860SN/A        osfpal.hh
3267860SN/A        pseudo_inst.hh
3277860SN/A        stacktrace.hh
3287860SN/A        vptr.hh
3297860SN/A        vtophys.hh
3307860SN/A        ''')
3317860SN/A
3327860SN/Afor f in targetarch_files:
3337860SN/A    env.Command('targetarch/' + f, 'arch/alpha/' + f,
3347860SN/A                '''echo '#include "arch/alpha/%s"' > $TARGET''' % f)
3357860SN/A
3367860SN/A
3377860SN/A# Set up complete list of sources based on configuration.
3387860SN/Asources = base_sources
3397860SN/A
3407860SN/Aif env['FULL_SYSTEM']:
3417860SN/A    sources += full_system_sources
3427860SN/A    if env['ALPHA_TLASER']:
3437860SN/A        sources += turbolaser_sources
3447860SN/Aelse:
3457860SN/A    sources += syscall_emulation_sources
3467860SN/A
3477860SN/Aif env['USE_MYSQL']:
3487860SN/A    sources += mysql_sources
3497860SN/A
3507860SN/Afor opt in env.ExportOptions:
3517860SN/A    env.ConfigFile(opt)
3527860SN/A
3537860SN/A###################################################
3547860SN/A#
3557860SN/A# Special build rules.
3567860SN/A#
3577860SN/A###################################################
3587860SN/A
3597860SN/A# base/traceflags.{cc,hh} are generated from base/traceflags.py.
3607860SN/A# $TARGET.base will expand to "<build-dir>/base/traceflags".
3617860SN/Aenv.Command(Split('base/traceflags.hh base/traceflags.cc'),
3627860SN/A            'base/traceflags.py',
3637860SN/A            'python $SOURCE $TARGET.base')
3647860SN/A
3657860SN/A# several files are generated from arch/$TARGET_ISA/isa_desc.
3667860SN/Aenv.Command(Split('''arch/alpha/decoder.cc
3677860SN/A		     arch/alpha/decoder.hh
3687860SN/A                     arch/alpha/alpha_o3_exec.cc
3697860SN/A		     arch/alpha/fast_cpu_exec.cc
3707860SN/A                     arch/alpha/simple_cpu_exec.cc'''),
3717860SN/A            Split('''arch/alpha/isa_desc
3727860SN/A		     arch/isa_parser.py'''),
3737860SN/A            '$SRCDIR/arch/isa_parser.py $SOURCE $TARGET.dir arch/alpha')
3747860SN/A
3757860SN/A
3767860SN/A# libelf build is described in its own SConscript file.
3777860SN/A# SConscript-local is the per-config build, which just copies some
3787860SN/A# header files into a place where they can be found.
3797860SN/ASConscript('libelf/SConscript-local', exports = 'env', duplicate=0)
3807860SN/ASConscript('python/SConscript', exports = ['env'], duplicate=0)
3817860SN/A
3827860SN/A# This function adds the specified sources to the given build
3837860SN/A# environment, and returns a list of all the corresponding SCons
3847860SN/A# Object nodes (including an extra one for date.cc).  We explicitly
3857860SN/A# add the Object nodes so we can set up special dependencies for
3867860SN/A# date.cc.
3877860SN/Adef make_objs(sources, env):
3887860SN/A    objs = [env.Object(s) for s in sources]
3897860SN/A    # make date.cc depend on all other objects so it always gets
3907860SN/A    # recompiled whenever anything else does
3917860SN/A    date_obj = env.Object('base/date.cc')
3927860SN/A    env.Depends(date_obj, objs)
3937860SN/A    objs.append(date_obj)
3947860SN/A    return objs
3957860SN/A
3967860SN/A###################################################
3977860SN/A#
3987860SN/A# Define binaries.  Each different build type (debug, opt, etc.) gets
3997860SN/A# a slightly different build environment.
4007860SN/A#
4017860SN/A###################################################
4027860SN/A
4037860SN/A# Include file paths are rooted in this directory.  SCons will
4047860SN/A# automatically expand '.' to refer to both the source directory and
4057860SN/A# the corresponding build directory to pick up generated include
4067860SN/A# files.
4077860SN/Aenv.Append(CPPPATH='.')
4087860SN/A
4097860SN/A# Debug binary
4107860SN/AdebugEnv = env.Copy(OBJSUFFIX='.do')
4117860SN/AdebugEnv.Label = 'debug'
4127860SN/AdebugEnv.Append(CCFLAGS=Split('-g -gstabs+ -O0'))
4137860SN/AdebugEnv.Append(CPPDEFINES='DEBUG')
4147860SN/Atlist = debugEnv.Program(target = 'm5.debug',
4157860SN/A                         source = make_objs(sources, debugEnv))
4167860SN/AdebugEnv.M5Binary = tlist[0]
4177860SN/A
4187860SN/A# Optimized binary
4197860SN/AoptEnv = env.Copy()
4207860SN/AoptEnv.Label = 'opt'
4217860SN/AoptEnv.Append(CCFLAGS=Split('-g -O5'))
4227860SN/Atlist = optEnv.Program(target = 'm5.opt',
4237860SN/A                       source = make_objs(sources, optEnv))
4247860SN/AoptEnv.M5Binary = tlist[0]
4257860SN/A
4267860SN/A# "Fast" binary
4277860SN/AfastEnv = env.Copy(OBJSUFFIX='.fo')
4287860SN/AfastEnv.Label = 'fast'
4297860SN/AfastEnv.Append(CCFLAGS=Split('-O5'))
4307860SN/AfastEnv.Append(CPPDEFINES='NDEBUG')
4317860SN/AfastEnv.Program(target = 'm5.fast.unstripped',
4327860SN/A                source = make_objs(sources, fastEnv))
4337860SN/Atlist = fastEnv.Command(target = 'm5.fast',
4347860SN/A                        source = 'm5.fast.unstripped',
4357860SN/A                        action = 'strip $SOURCE -o $TARGET')
4367860SN/AfastEnv.M5Binary = tlist[0]
4377860SN/A
4387860SN/A# Profiled binary
4397860SN/AprofEnv = env.Copy(OBJSUFFIX='.po')
4407860SN/AprofEnv.Label = 'prof'
4417860SN/AprofEnv.Append(CCFLAGS=Split('-O5 -g -pg'), LINKFLAGS='-pg')
4427860SN/Atlist = profEnv.Program(target = 'm5.prof',
4437860SN/A                        source = make_objs(sources, profEnv))
4447860SN/AprofEnv.M5Binary = tlist[0]
4457860SN/A
4467860SN/AenvList = [debugEnv, optEnv, fastEnv, profEnv]
4477860SN/A
4487860SN/AReturn('envList')
4499885Sstever@gmail.com