SConscript revision 2037
16782SN/A# -*- mode:python -*-
28683SN/A
310973Sdavid.hashe@amd.com# Copyright (c) 2004-2005 The Regents of The University of Michigan
46782SN/A# All rights reserved.
56782SN/A#
66782SN/A# Redistribution and use in source and binary forms, with or without
76782SN/A# modification, are permitted provided that the following conditions are
86782SN/A# met: redistributions of source code must retain the above copyright
96782SN/A# notice, this list of conditions and the following disclaimer;
106782SN/A# redistributions in binary form must reproduce the above copyright
116782SN/A# notice, this list of conditions and the following disclaimer in the
126782SN/A# documentation and/or other materials provided with the distribution;
136782SN/A# neither the name of the copyright holders nor the names of its
146782SN/A# contributors may be used to endorse or promote products derived from
156782SN/A# this software without specific prior written permission.
166782SN/A#
176782SN/A# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
186782SN/A# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
196782SN/A# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
206782SN/A# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
216782SN/A# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
226782SN/A# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
236782SN/A# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
246782SN/A# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
256782SN/A# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
266782SN/A# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
276782SN/A# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
286782SN/A
296782SN/Aimport os
3011793Sbrandon.potter@amd.comimport sys
3111793Sbrandon.potter@amd.comfrom os.path import isdir
327056SN/A
3313449Sgabeblack@google.com# This file defines how to build a particular configuration of M5
348232SN/A# based on variable settings in the 'env' build environment.
358937SN/A
369105SN/A# Import build environment variable from SConstruct.
379104SN/AImport('env')
3814184Sgabeblack@google.com
3911108Sdavid.hashe@amd.com###################################################
4011308Santhony.gutierrez@amd.com#
416782SN/A# Define needed sources.
427055SN/A#
437055SN/A###################################################
447039SN/A
457039SN/A# Base sources used by all configurations.
466782SN/A
477039SN/Abase_sources = Split('''
487039SN/A	base/circlebuf.cc
497039SN/A	base/copyright.cc
506782SN/A	base/cprintf.cc
516782SN/A        base/embedfile.cc
526876SN/A	base/fast_alloc.cc
536876SN/A	base/fifo_buffer.cc
546782SN/A	base/hostinfo.cc
556876SN/A	base/hybrid_pred.cc
566782SN/A	base/inifile.cc
576782SN/A	base/intmath.cc
586876SN/A	base/match.cc
599105SN/A	base/misc.cc
6010919Sbrandon.potter@amd.com	base/output.cc
6110919Sbrandon.potter@amd.com	base/pollevent.cc
6210919Sbrandon.potter@amd.com	base/range.cc
6310919Sbrandon.potter@amd.com	base/random.cc
646782SN/A	base/sat_counter.cc
656882SN/A	base/socket.cc
666876SN/A	base/statistics.cc
6710970Sdavid.hashe@amd.com	base/str.cc
6810980Sdavid.hashe@amd.com	base/time.cc
697564SN/A	base/trace.cc
708653SN/A	base/traceflags.cc
719105SN/A	base/userinfo.cc
7211308Santhony.gutierrez@amd.com	base/compression/lzss_compression.cc
736876SN/A	base/loader/aout_object.cc
746876SN/A	base/loader/ecoff_object.cc
757039SN/A	base/loader/elf_object.cc
767039SN/A	base/loader/object_file.cc
776876SN/A	base/loader/symtab.cc
7811308Santhony.gutierrez@amd.com	base/stats/events.cc
7911308Santhony.gutierrez@amd.com	base/stats/statdb.cc
8011308Santhony.gutierrez@amd.com	base/stats/visit.cc
8111308Santhony.gutierrez@amd.com	base/stats/text.cc
826882SN/A
837056SN/A	cpu/base.cc
846882SN/A        cpu/base_dyn_inst.cc
857039SN/A	cpu/exec_context.cc
8611308Santhony.gutierrez@amd.com	cpu/exetrace.cc
8711308Santhony.gutierrez@amd.com	cpu/pc_event.cc
886782SN/A	cpu/static_inst.cc
896782SN/A        cpu/o3/2bit_local_pred.cc
906782SN/A        cpu/o3/alpha_dyn_inst.cc
916782SN/A        cpu/o3/alpha_cpu.cc
9211308Santhony.gutierrez@amd.com        cpu/o3/alpha_cpu_builder.cc
937039SN/A        cpu/o3/bpred_unit.cc
947039SN/A        cpu/o3/btb.cc
957039SN/A        cpu/o3/commit.cc
967039SN/A        cpu/o3/decode.cc
977039SN/A        cpu/o3/fetch.cc
986783SN/A        cpu/o3/free_list.cc
996782SN/A        cpu/o3/cpu.cc
1006782SN/A        cpu/o3/iew.cc
1016782SN/A        cpu/o3/inst_queue.cc
10211061Snilay@cs.wisc.edu        cpu/o3/ldstq.cc
10311025Snilay@cs.wisc.edu        cpu/o3/mem_dep_unit.cc
1046782SN/A        cpu/o3/ras.cc
10511025Snilay@cs.wisc.edu        cpu/o3/rename.cc
10611025Snilay@cs.wisc.edu        cpu/o3/rename_map.cc
10711025Snilay@cs.wisc.edu        cpu/o3/rob.cc
1086782SN/A        cpu/o3/sat_counter.cc
1096782SN/A        cpu/o3/store_set.cc
1106782SN/A        cpu/o3/tournament_pred.cc
1116782SN/A	cpu/fast/cpu.cc
1127039SN/A        cpu/sampler/sampler.cc
11311061Snilay@cs.wisc.edu        cpu/simple/cpu.cc
1146782SN/A        cpu/trace/reader/mem_trace_reader.cc
11511025Snilay@cs.wisc.edu        cpu/trace/reader/ibm_reader.cc
1167039SN/A        cpu/trace/reader/itx_reader.cc
11711168Sandreas.hansson@arm.com        cpu/trace/reader/m5_reader.cc
1187039SN/A        cpu/trace/opt_cpu.cc
1197039SN/A        cpu/trace/trace_cpu.cc
1207039SN/A
1217039SN/A	encumbered/cpu/full/bpred.cc
1227039SN/A	encumbered/cpu/full/commit.cc
1236782SN/A	encumbered/cpu/full/cpu.cc
1246782SN/A	encumbered/cpu/full/create_vector.cc
1256782SN/A	encumbered/cpu/full/cv_spec_state.cc
1266782SN/A	encumbered/cpu/full/dd_queue.cc
1277039SN/A	encumbered/cpu/full/dep_link.cc
12811061Snilay@cs.wisc.edu	encumbered/cpu/full/dispatch.cc
12911025Snilay@cs.wisc.edu	encumbered/cpu/full/dyn_inst.cc
1306782SN/A	encumbered/cpu/full/execute.cc
13111025Snilay@cs.wisc.edu	encumbered/cpu/full/fetch.cc
1327039SN/A	encumbered/cpu/full/floss_reasons.cc
13311168Sandreas.hansson@arm.com	encumbered/cpu/full/fu_pool.cc
1347039SN/A	encumbered/cpu/full/inst_fifo.cc
1357039SN/A	encumbered/cpu/full/instpipe.cc
1367039SN/A	encumbered/cpu/full/issue.cc
1376782SN/A	encumbered/cpu/full/ls_queue.cc
1386782SN/A	encumbered/cpu/full/machine_queue.cc
13910973Sdavid.hashe@amd.com        encumbered/cpu/full/pipetrace.cc
14010973Sdavid.hashe@amd.com        encumbered/cpu/full/readyq.cc
14110973Sdavid.hashe@amd.com        encumbered/cpu/full/reg_info.cc
14211025Snilay@cs.wisc.edu        encumbered/cpu/full/rob_station.cc
14310973Sdavid.hashe@amd.com        encumbered/cpu/full/spec_memory.cc
14410973Sdavid.hashe@amd.com        encumbered/cpu/full/spec_state.cc
14511025Snilay@cs.wisc.edu        encumbered/cpu/full/storebuffer.cc
14610973Sdavid.hashe@amd.com        encumbered/cpu/full/writeback.cc
14710973Sdavid.hashe@amd.com        encumbered/cpu/full/iq/iq_station.cc
14810973Sdavid.hashe@amd.com        encumbered/cpu/full/iq/iqueue.cc
14910973Sdavid.hashe@amd.com        encumbered/cpu/full/iq/segmented/chain_info.cc
15010973Sdavid.hashe@amd.com        encumbered/cpu/full/iq/segmented/chain_wire.cc
15110973Sdavid.hashe@amd.com        encumbered/cpu/full/iq/segmented/iq_seg.cc
15210973Sdavid.hashe@amd.com        encumbered/cpu/full/iq/segmented/iq_segmented.cc
15310973Sdavid.hashe@amd.com        encumbered/cpu/full/iq/segmented/seg_chain.cc
15410973Sdavid.hashe@amd.com        encumbered/cpu/full/iq/seznec/iq_seznec.cc
15510973Sdavid.hashe@amd.com        encumbered/cpu/full/iq/standard/iq_standard.cc
15610973Sdavid.hashe@amd.com	encumbered/mem/functional/main.cc
15710973Sdavid.hashe@amd.com
15810973Sdavid.hashe@amd.com	mem/base_hier.cc
15910973Sdavid.hashe@amd.com	mem/base_mem.cc
16010973Sdavid.hashe@amd.com	mem/hier_params.cc
16110973Sdavid.hashe@amd.com	mem/mem_cmd.cc
16211049Snilay@cs.wisc.edu	mem/mem_debug.cc
16311049Snilay@cs.wisc.edu	mem/mem_req.cc
16411049Snilay@cs.wisc.edu	mem/memory_interface.cc
16511049Snilay@cs.wisc.edu	mem/bus/base_interface.cc
16611049Snilay@cs.wisc.edu	mem/bus/bus.cc
16711118Snilay@cs.wisc.edu	mem/bus/bus_bridge.cc
16811061Snilay@cs.wisc.edu	mem/bus/bus_bridge_master.cc
16911049Snilay@cs.wisc.edu	mem/bus/bus_bridge_slave.cc
17011049Snilay@cs.wisc.edu	mem/bus/bus_interface.cc
17111049Snilay@cs.wisc.edu	mem/bus/dma_bus_interface.cc
17211049Snilay@cs.wisc.edu	mem/bus/dma_interface.cc
17311049Snilay@cs.wisc.edu	mem/bus/master_interface.cc
17411049Snilay@cs.wisc.edu	mem/bus/slave_interface.cc
17511049Snilay@cs.wisc.edu	mem/cache/base_cache.cc
17611049Snilay@cs.wisc.edu	mem/cache/cache.cc
17711049Snilay@cs.wisc.edu	mem/cache/cache_builder.cc
17811049Snilay@cs.wisc.edu	mem/cache/coherence/coherence_protocol.cc
17911049Snilay@cs.wisc.edu	mem/cache/coherence/uni_coherence.cc
18011049Snilay@cs.wisc.edu	mem/cache/miss/blocking_buffer.cc
18111049Snilay@cs.wisc.edu	mem/cache/miss/miss_queue.cc
18211049Snilay@cs.wisc.edu	mem/cache/miss/mshr.cc
18311049Snilay@cs.wisc.edu	mem/cache/miss/mshr_queue.cc
18411049Snilay@cs.wisc.edu        mem/cache/prefetch/base_prefetcher.cc
18511049Snilay@cs.wisc.edu        mem/cache/prefetch/prefetcher.cc
18611049Snilay@cs.wisc.edu        mem/cache/prefetch/tagged_prefetcher.cc
18711049Snilay@cs.wisc.edu	mem/cache/tags/base_tags.cc
18811049Snilay@cs.wisc.edu	mem/cache/tags/cache_tags.cc	
18911049Snilay@cs.wisc.edu	mem/cache/tags/fa_lru.cc
19011049Snilay@cs.wisc.edu	mem/cache/tags/iic.cc
19111049Snilay@cs.wisc.edu	mem/cache/tags/lru.cc
19211049Snilay@cs.wisc.edu	mem/cache/tags/repl/gen.cc
19311049Snilay@cs.wisc.edu	mem/cache/tags/repl/repl.cc
19411118Snilay@cs.wisc.edu	mem/cache/tags/split.cc
19511061Snilay@cs.wisc.edu	mem/cache/tags/split_lru.cc
19611049Snilay@cs.wisc.edu	mem/cache/tags/split_lifo.cc
19711049Snilay@cs.wisc.edu	mem/functional/functional.cc
19811049Snilay@cs.wisc.edu	mem/timing/base_memory.cc
19911049Snilay@cs.wisc.edu	mem/timing/memory_builder.cc
20011049Snilay@cs.wisc.edu	mem/timing/simple_mem_bank.cc
20111049Snilay@cs.wisc.edu        mem/trace/itx_writer.cc
20211049Snilay@cs.wisc.edu	mem/trace/mem_trace_writer.cc
20311049Snilay@cs.wisc.edu	mem/trace/m5_writer.cc
20411049Snilay@cs.wisc.edu
20511049Snilay@cs.wisc.edu        python/pyconfig.cc
20611049Snilay@cs.wisc.edu        python/embedded_py.cc
20711049Snilay@cs.wisc.edu
20811049Snilay@cs.wisc.edu	sim/builder.cc
20911049Snilay@cs.wisc.edu	sim/configfile.cc
21011049Snilay@cs.wisc.edu	sim/debug.cc
21111049Snilay@cs.wisc.edu	sim/eventq.cc
2126782SN/A	sim/main.cc
2137039SN/A	sim/param.cc
21411025Snilay@cs.wisc.edu	sim/profile.cc
2156782SN/A	sim/root.cc
21611025Snilay@cs.wisc.edu	sim/serialize.cc
21711061Snilay@cs.wisc.edu	sim/sim_events.cc
2187039SN/A	sim/sim_exit.cc
2196782SN/A	sim/sim_object.cc
2207039SN/A	sim/startup.cc
2217039SN/A	sim/stat_context.cc
22211118Snilay@cs.wisc.edu	sim/stat_control.cc
2237039SN/A	sim/trace_context.cc
2247039SN/A        ''')
22511118Snilay@cs.wisc.edu# These are now included by the architecture specific SConscript
2267039SN/A#	arch/alpha/decoder.cc
2276782SN/A#	arch/alpha/alpha_o3_exec.cc
2286782SN/A#	arch/alpha/fast_cpu_exec.cc
2296782SN/A#	arch/alpha/simple_cpu_exec.cc
2306782SN/A#	arch/alpha/full_cpu_exec.cc
2316782SN/A#	arch/alpha/faults.cc
2327039SN/A#	arch/alpha/isa_traits.cc
23311025Snilay@cs.wisc.edu
2346782SN/A# MySql sources
23511025Snilay@cs.wisc.edumysql_sources = Split('''
2366782SN/A	base/mysql.cc
23711061Snilay@cs.wisc.edu	base/stats/mysql.cc
2386782SN/A        ''')
2397039SN/A
2407039SN/A# Full-system sources
2417039SN/Afull_system_sources = Split('''
2427039SN/A	base/crc.cc
2437039SN/A	base/inet.cc
2447039SN/A	base/remote_gdb.cc
2457039SN/A
2467039SN/A	cpu/intr_control.cc
2477039SN/A        cpu/profile.cc
2487039SN/A
2497039SN/A	dev/alpha_console.cc
2506782SN/A	dev/baddev.cc
2517039SN/A        dev/simconsole.cc
2526782SN/A	dev/disk_image.cc
2536782SN/A	dev/etherbus.cc
2547839SN/A	dev/etherdump.cc
25511086Snilay@cs.wisc.edu	dev/etherint.cc
2566782SN/A	dev/etherlink.cc
25711025Snilay@cs.wisc.edu	dev/etherpkt.cc
2587039SN/A	dev/ethertap.cc
2597039SN/A	dev/ide_ctrl.cc
26011118Snilay@cs.wisc.edu	dev/ide_disk.cc
2616782SN/A	dev/io_device.cc
2627039SN/A	dev/ns_gige.cc
26311061Snilay@cs.wisc.edu	dev/pciconfigall.cc
2647454SN/A	dev/pcidev.cc
2657039SN/A	dev/pcifake.cc
2667039SN/A	dev/pktfifo.cc
26711145Sjthestness@gmail.com	dev/platform.cc
26811145Sjthestness@gmail.com	dev/sinic.cc
26911145Sjthestness@gmail.com	dev/simple_disk.cc
27011145Sjthestness@gmail.com	dev/tsunami.cc
27111145Sjthestness@gmail.com	dev/tsunami_cchip.cc
27211145Sjthestness@gmail.com	dev/isa_fake.cc
27311145Sjthestness@gmail.com	dev/tsunami_io.cc
2747039SN/A	dev/tsunami_pchip.cc
2757039SN/A	dev/uart.cc
2767039SN/A	dev/uart8250.cc
2777039SN/A
2787039SN/A	kern/kernel_binning.cc
2797839SN/A	kern/kernel_stats.cc
2807039SN/A	kern/system_events.cc
28111086Snilay@cs.wisc.edu	kern/freebsd/freebsd_system.cc
28211086Snilay@cs.wisc.edu	kern/linux/linux_syscalls.cc
2836782SN/A	kern/linux/linux_system.cc
28410974Sdavid.hashe@amd.com	kern/linux/printk.cc
28510974Sdavid.hashe@amd.com	kern/tru64/dump_mbuf.cc
28610974Sdavid.hashe@amd.com	kern/tru64/printf.cc
2876782SN/A	kern/tru64/tru64_events.cc
2887839SN/A	kern/tru64/tru64_syscalls.cc
2897039SN/A	kern/tru64/tru64_system.cc
2906782SN/A
2917805SN/A	mem/functional/memory_control.cc
2926782SN/A	mem/functional/physical.cc
2936782SN/A
2947039SN/A	sim/system.cc
29511025Snilay@cs.wisc.edu        ''')
2966782SN/A
29711025Snilay@cs.wisc.edu# These are now included by the architecture specific SConscript
2987039SN/A#	arch/alpha/alpha_memory.cc
29911118Snilay@cs.wisc.edu#	arch/alpha/arguments.cc
30011061Snilay@cs.wisc.edu#	arch/alpha/ev5.cc
3017039SN/A#	arch/alpha/osfpal.cc
3027039SN/A#	arch/alpha/pseudo_inst.cc
3037039SN/A#	arch/alpha/stacktrace.cc
3047039SN/A#	arch/alpha/vtophys.cc
3057039SN/A
3067039SN/A# turbolaser encumbered sources
3076782SN/Aturbolaser_sources = Split('''
3086782SN/A	encumbered/dev/dma.cc
3096782SN/A	encumbered/dev/etherdev.cc
31011025Snilay@cs.wisc.edu	encumbered/dev/scsi.cc
31111025Snilay@cs.wisc.edu	encumbered/dev/scsi_ctrl.cc
3126782SN/A	encumbered/dev/scsi_disk.cc
31311025Snilay@cs.wisc.edu	encumbered/dev/scsi_none.cc
3147039SN/A	encumbered/dev/tlaser_clock.cc
3156782SN/A	encumbered/dev/tlaser_ipi.cc
31611061Snilay@cs.wisc.edu	encumbered/dev/tlaser_mbox.cc
3177039SN/A	encumbered/dev/tlaser_mc146818.cc
3187039SN/A	encumbered/dev/tlaser_node.cc
3196782SN/A	encumbered/dev/tlaser_pcia.cc
3206782SN/A	encumbered/dev/tlaser_pcidev.cc
3216782SN/A	encumbered/dev/tlaser_serial.cc
3227839SN/A	encumbered/dev/turbolaser.cc
32311025Snilay@cs.wisc.edu	encumbered/dev/uart8530.cc
3246782SN/A        ''')
32511025Snilay@cs.wisc.edu
32611061Snilay@cs.wisc.edu# Syscall emulation (non-full-system) sources
3277039SN/Asyscall_emulation_sources = Split('''
32811321Ssteve.reinhardt@amd.com	cpu/memtest/memtest.cc
3297839SN/A	encumbered/eio/eio.cc
3306782SN/A	encumbered/eio/exolex.cc
3316782SN/A	encumbered/eio/libexo.cc
3326782SN/A	sim/process.cc
3337839SN/A	sim/syscall_emul.cc
33411025Snilay@cs.wisc.edu        ''')
3356782SN/A
33611025Snilay@cs.wisc.edu# These are now included by the architecture specific SConscript
33711061Snilay@cs.wisc.edu#	arch/alpha/alpha_common_syscall_emul.cc
3387039SN/A#	arch/alpha/alpha_linux_process.cc
33911321Ssteve.reinhardt@amd.com#	arch/alpha/alpha_tru64_process.cc
3407839SN/A
3416782SN/Atargetarch_files = Split('''
3426782SN/A        alpha_linux_process.hh
3436782SN/A        alpha_memory.hh
3447039SN/A        alpha_tru64_process.hh
34511025Snilay@cs.wisc.edu        aout_machdep.h
3466782SN/A        arguments.hh
34711061Snilay@cs.wisc.edu        ecoff_machdep.h
3488828SN/A        ev5.hh
3496782SN/A        faults.hh
35011321Ssteve.reinhardt@amd.com        isa_fullsys_traits.hh
3519171SN/A        isa_traits.hh
3526782SN/A        pseudo_inst.hh
3536782SN/A        stacktrace.hh
3547039SN/A        vptr.hh
35511087Snilay@cs.wisc.edu        vtophys.hh
35611087Snilay@cs.wisc.edu        ''')
35711087Snilay@cs.wisc.edu#        osfpal.hh
35811087Snilay@cs.wisc.edu#        byte_swap.hh
35911087Snilay@cs.wisc.edu#        alpha_common_syscall_emul.hh
36011087Snilay@cs.wisc.edu
36111087Snilay@cs.wisc.edu# Set up bridging headers to the architecture specific versions
36211087Snilay@cs.wisc.edufor f in targetarch_files:
36311308Santhony.gutierrez@amd.com    env.Command('targetarch/' + f, 'arch/%s/%s' % (env['TARGET_ISA'], f),
36411308Santhony.gutierrez@amd.com                '''echo '#include "arch/%s/%s"' > $TARGET''' % (env['TARGET_ISA'], f))
36511308Santhony.gutierrez@amd.com
36611308Santhony.gutierrez@amd.com# Let the target architecture define what sources it needs
36711308Santhony.gutierrez@amd.comarch_source = SConscript('arch/%s/SConscript' % env['TARGET_ISA'],
36811321Ssteve.reinhardt@amd.com	build_dir = 'build/%s/' % env['BUILD_DIR'],
36911308Santhony.gutierrez@amd.com	exports = 'env', duplicate = False)
37011308Santhony.gutierrez@amd.com
37111308Santhony.gutierrez@amd.com# Add a flag defining what THE_ISA should be for all compilation
37211308Santhony.gutierrez@amd.comenv.Append(CPPDEFINES=[('THE_ISA','%s_ISA' % env['TARGET_ISA'].upper())])
37311308Santhony.gutierrez@amd.com
37411308Santhony.gutierrez@amd.com# Set up complete list of sources based on configuration.
37511308Santhony.gutierrez@amd.comsources = base_sources + arch_source
37611308Santhony.gutierrez@amd.com
37711308Santhony.gutierrez@amd.comif env['FULL_SYSTEM']:
37811308Santhony.gutierrez@amd.com    sources += full_system_sources
37911308Santhony.gutierrez@amd.com    if env['ALPHA_TLASER']:
38011308Santhony.gutierrez@amd.com        sources += turbolaser_sources
38111308Santhony.gutierrez@amd.comelse:
38211308Santhony.gutierrez@amd.com    sources += syscall_emulation_sources
38311308Santhony.gutierrez@amd.com
38411308Santhony.gutierrez@amd.comif env['USE_MYSQL']:
38511321Ssteve.reinhardt@amd.com    sources += mysql_sources
38611308Santhony.gutierrez@amd.com
38711308Santhony.gutierrez@amd.comfor opt in env.ExportOptions:
38811308Santhony.gutierrez@amd.com    env.ConfigFile(opt)
38911308Santhony.gutierrez@amd.com
39011308Santhony.gutierrez@amd.com###################################################
39111308Santhony.gutierrez@amd.com#
39211308Santhony.gutierrez@amd.com# Add an SCons scanner for ISA files
39311308Santhony.gutierrez@amd.com#
3948683SN/A###################################################
3956782SN/Aimport SCons.Scanner
39611061Snilay@cs.wisc.edu
39711061Snilay@cs.wisc.edudef ISAScan():
39811061Snilay@cs.wisc.edu   return SCons.Scanner.Classic("ISAScan",
3998683SN/A                                "$ISASUFFIXES",
4007039SN/A                                "SRCDIR",
4017039SN/A                                '^[ \t]*##[ \t]*include[ \t]*"([^>"]+)"')
4028683SN/A
4038683SN/Adef ISAPath(env, dir, a=None):
4048683SN/A   return (Dir(env['SRCDIR']), Dir('.'))   
4058683SN/A
4068683SN/Aiscan = Scanner(function = ISAScan().scan, skeys = [".isa", ".ISA"],
4078683SN/A                path_function = ISAPath)
4088683SN/Aenv.Append(SCANNERS = iscan)
4098683SN/A
4108683SN/A 
4118683SN/A###################################################
4128683SN/A#
4137039SN/A# Special build rules.
4147039SN/A#
4158683SN/A###################################################
41611025Snilay@cs.wisc.edu
4178683SN/A# base/traceflags.{cc,hh} are generated from base/traceflags.py.
4188683SN/A# $TARGET.base will expand to "<build-dir>/base/traceflags".
4198683SN/Aenv.Command(Split('base/traceflags.hh base/traceflags.cc'),
4208683SN/A            'base/traceflags.py',
4218683SN/A            'python $SOURCE $TARGET.base')
4227039SN/A
4236782SN/A# several files are generated from arch/$TARGET_ISA/isa_desc.
4246782SN/Aenv.Command(Split('''
4258683SN/A	arch/%s/decoder.cc
4268937SN/A	arch/%s/decoder.hh
4278683SN/A        arch/%s/alpha_o3_exec.cc
42811061Snilay@cs.wisc.edu	arch/%s/fast_cpu_exec.cc
4296782SN/A        arch/%s/simple_cpu_exec.cc
4306782SN/A        arch/%s/full_cpu_exec.cc''' %
4317039SN/A	(env['TARGET_ISA'],
4327039SN/A	env['TARGET_ISA'],
4336782SN/A	env['TARGET_ISA'],
43410080SN/A	env['TARGET_ISA'],
4357039SN/A	env['TARGET_ISA'],
4367039SN/A	env['TARGET_ISA'])),
4377039SN/A	Split('''
4387039SN/A	arch/%s/isa/main.isa
4397039SN/A	arch/isa_parser.py''' %
4407039SN/A	env['TARGET_ISA']),
4417039SN/A	'$SRCDIR/arch/isa_parser.py $SOURCE $TARGET.dir arch/%s' % env['TARGET_ISA'])
4427039SN/A
4437039SN/A
4447039SN/A# libelf build is described in its own SConscript file.
4457039SN/A# SConscript-local is the per-config build, which just copies some
4467039SN/A# header files into a place where they can be found.
4476782SN/ASConscript('libelf/SConscript-local', exports = 'env', duplicate=0)
4486782SN/ASConscript('python/SConscript', exports = ['env'], duplicate=0)
4496782SN/A
4507039SN/A# This function adds the specified sources to the given build
4517039SN/A# environment, and returns a list of all the corresponding SCons
4526782SN/A# Object nodes (including an extra one for date.cc).  We explicitly
4537039SN/A# add the Object nodes so we can set up special dependencies for
4546782SN/A# date.cc.
4556782SN/Adef make_objs(sources, env):
4567039SN/A    objs = [env.Object(s) for s in sources]
45711025Snilay@cs.wisc.edu    # make date.cc depend on all other objects so it always gets
4587039SN/A    # recompiled whenever anything else does
45911118Snilay@cs.wisc.edu    date_obj = env.Object('base/date.cc')
46011025Snilay@cs.wisc.edu    env.Depends(date_obj, objs)
46111061Snilay@cs.wisc.edu    objs.append(date_obj)
4627039SN/A    return objs
4637039SN/A
46411059Snilay@cs.wisc.edu###################################################
4656782SN/A#
4666782SN/A# Define binaries.  Each different build type (debug, opt, etc.) gets
4677039SN/A# a slightly different build environment.
46811025Snilay@cs.wisc.edu#
4696782SN/A###################################################
47011118Snilay@cs.wisc.edu
47111025Snilay@cs.wisc.edu# Include file paths are rooted in this directory.  SCons will
47211061Snilay@cs.wisc.edu# automatically expand '.' to refer to both the source directory and
4737039SN/A# the corresponding build directory to pick up generated include
4747039SN/A# files.
47511059Snilay@cs.wisc.eduenv.Append(CPPPATH='.')
4766782SN/A
4776782SN/A# Debug binary
4786782SN/AdebugEnv = env.Copy(OBJSUFFIX='.do')
47911025Snilay@cs.wisc.edudebugEnv.Label = 'debug'
4806782SN/AdebugEnv.Append(CCFLAGS=Split('-g -gstabs+ -O0'))
48111025Snilay@cs.wisc.edudebugEnv.Append(CPPDEFINES='DEBUG')
48211061Snilay@cs.wisc.edutlist = debugEnv.Program(target = 'm5.debug',
4837039SN/A                         source = make_objs(sources, debugEnv))
4847039SN/AdebugEnv.M5Binary = tlist[0]
48511118Snilay@cs.wisc.edu
4867839SN/A# Optimized binary
48711059Snilay@cs.wisc.eduoptEnv = env.Copy()
4886782SN/AoptEnv.Label = 'opt'
4896782SN/AoptEnv.Append(CCFLAGS=Split('-g -O5'))
4909104SN/Atlist = optEnv.Program(target = 'm5.opt',
4919692SN/A                       source = make_objs(sources, optEnv))
4929692SN/AoptEnv.M5Binary = tlist[0]
49311523Sdavid.guillen@arm.com
49411523Sdavid.guillen@arm.com# "Fast" binary
4959692SN/AfastEnv = env.Copy(OBJSUFFIX='.fo')
4969692SN/AfastEnv.Label = 'fast'
4979692SN/AfastEnv.Append(CCFLAGS=Split('-O5'))
4989692SN/AfastEnv.Append(CPPDEFINES='NDEBUG')
4999692SN/AfastEnv.Program(target = 'm5.fast.unstripped',
5009692SN/A                source = make_objs(sources, fastEnv))
5019692SN/Atlist = fastEnv.Command(target = 'm5.fast',
5029692SN/A                        source = 'm5.fast.unstripped',
5039692SN/A                        action = 'strip $SOURCE -o $TARGET')
5049692SN/AfastEnv.M5Binary = tlist[0]
5059692SN/A
5069692SN/A# Profiled binary
5079692SN/AprofEnv = env.Copy(OBJSUFFIX='.po')
5089692SN/AprofEnv.Label = 'prof'
5099692SN/AprofEnv.Append(CCFLAGS=Split('-O5 -g -pg'), LINKFLAGS='-pg')
5109692SN/Atlist = profEnv.Program(target = 'm5.prof',
5119692SN/A                        source = make_objs(sources, profEnv))
5129692SN/AprofEnv.M5Binary = tlist[0]
5139692SN/A
5149692SN/AenvList = [debugEnv, optEnv, fastEnv, profEnv]
5159692SN/A
5169692SN/AReturn('envList')
5179692SN/A