SConscript revision 2716:b9114064d77a
15086Sgblack@eecs.umich.edu# -*- mode:python -*-
25086Sgblack@eecs.umich.edu
35086Sgblack@eecs.umich.edu# Copyright (c) 2004-2005 The Regents of The University of Michigan
45086Sgblack@eecs.umich.edu# All rights reserved.
55086Sgblack@eecs.umich.edu#
65086Sgblack@eecs.umich.edu# Redistribution and use in source and binary forms, with or without
75086Sgblack@eecs.umich.edu# modification, are permitted provided that the following conditions are
85086Sgblack@eecs.umich.edu# met: redistributions of source code must retain the above copyright
95086Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer;
105086Sgblack@eecs.umich.edu# redistributions in binary form must reproduce the above copyright
115086Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer in the
125086Sgblack@eecs.umich.edu# documentation and/or other materials provided with the distribution;
135086Sgblack@eecs.umich.edu# neither the name of the copyright holders nor the names of its
145086Sgblack@eecs.umich.edu# contributors may be used to endorse or promote products derived from
155086Sgblack@eecs.umich.edu# this software without specific prior written permission.
165086Sgblack@eecs.umich.edu#
175086Sgblack@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
185086Sgblack@eecs.umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
195086Sgblack@eecs.umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
205086Sgblack@eecs.umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
215086Sgblack@eecs.umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
225086Sgblack@eecs.umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
235086Sgblack@eecs.umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
245086Sgblack@eecs.umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
255086Sgblack@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
265086Sgblack@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
275086Sgblack@eecs.umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
285086Sgblack@eecs.umich.edu#
295086Sgblack@eecs.umich.edu# Authors: Steve Reinhardt
305086Sgblack@eecs.umich.edu
315086Sgblack@eecs.umich.eduimport os
325086Sgblack@eecs.umich.eduimport sys
335086Sgblack@eecs.umich.edufrom os.path import isdir
345086Sgblack@eecs.umich.edu
355086Sgblack@eecs.umich.edu# This file defines how to build a particular configuration of M5
365086Sgblack@eecs.umich.edu# based on variable settings in the 'env' build environment.
375086Sgblack@eecs.umich.edu
385086Sgblack@eecs.umich.edu# Import build environment variable from SConstruct.
395086Sgblack@eecs.umich.eduImport('env')
405086Sgblack@eecs.umich.edu
415086Sgblack@eecs.umich.edu###################################################
425086Sgblack@eecs.umich.edu#
435086Sgblack@eecs.umich.edu# Define needed sources.
445086Sgblack@eecs.umich.edu#
455086Sgblack@eecs.umich.edu###################################################
465086Sgblack@eecs.umich.edu
475086Sgblack@eecs.umich.edu# Base sources used by all configurations.
485086Sgblack@eecs.umich.edu
495086Sgblack@eecs.umich.edubase_sources = Split('''
505086Sgblack@eecs.umich.edu	base/circlebuf.cc
515086Sgblack@eecs.umich.edu	base/cprintf.cc
525086Sgblack@eecs.umich.edu	base/fast_alloc.cc
535086Sgblack@eecs.umich.edu	base/fifo_buffer.cc
545086Sgblack@eecs.umich.edu	base/hostinfo.cc
555086Sgblack@eecs.umich.edu	base/hybrid_pred.cc
565086Sgblack@eecs.umich.edu	base/inifile.cc
575086Sgblack@eecs.umich.edu	base/intmath.cc
585135Sgblack@eecs.umich.edu	base/match.cc
595135Sgblack@eecs.umich.edu	base/misc.cc
605135Sgblack@eecs.umich.edu	base/output.cc
615086Sgblack@eecs.umich.edu	base/pollevent.cc
625135Sgblack@eecs.umich.edu	base/range.cc
635234Sgblack@eecs.umich.edu	base/random.cc
645086Sgblack@eecs.umich.edu	base/sat_counter.cc
655086Sgblack@eecs.umich.edu        base/serializer.cc
665086Sgblack@eecs.umich.edu	base/socket.cc
675086Sgblack@eecs.umich.edu	base/statistics.cc
685086Sgblack@eecs.umich.edu	base/str.cc
695086Sgblack@eecs.umich.edu	base/time.cc
705086Sgblack@eecs.umich.edu	base/trace.cc
715086Sgblack@eecs.umich.edu	base/traceflags.cc
725086Sgblack@eecs.umich.edu	base/userinfo.cc
735086Sgblack@eecs.umich.edu	base/compression/lzss_compression.cc
745086Sgblack@eecs.umich.edu	base/loader/aout_object.cc
755135Sgblack@eecs.umich.edu	base/loader/ecoff_object.cc
765135Sgblack@eecs.umich.edu	base/loader/elf_object.cc
775135Sgblack@eecs.umich.edu	base/loader/object_file.cc
785135Sgblack@eecs.umich.edu	base/loader/symtab.cc
795135Sgblack@eecs.umich.edu	base/stats/events.cc
805135Sgblack@eecs.umich.edu	base/stats/statdb.cc
815135Sgblack@eecs.umich.edu	base/stats/visit.cc
825135Sgblack@eecs.umich.edu	base/stats/text.cc
835135Sgblack@eecs.umich.edu
845135Sgblack@eecs.umich.edu        cpu/activity.cc
855135Sgblack@eecs.umich.edu	cpu/base.cc
865135Sgblack@eecs.umich.edu	cpu/cpuevent.cc
875135Sgblack@eecs.umich.edu	cpu/exetrace.cc
885135Sgblack@eecs.umich.edu        cpu/op_class.cc
895135Sgblack@eecs.umich.edu	cpu/pc_event.cc
905135Sgblack@eecs.umich.edu        cpu/quiesce_event.cc
915135Sgblack@eecs.umich.edu	cpu/static_inst.cc
925135Sgblack@eecs.umich.edu        cpu/sampler/sampler.cc
935135Sgblack@eecs.umich.edu        cpu/simple_thread.cc
945135Sgblack@eecs.umich.edu        cpu/thread_state.cc
955135Sgblack@eecs.umich.edu
965135Sgblack@eecs.umich.edu        encumbered/cpu/full/fu_pool.cc
975135Sgblack@eecs.umich.edu        
985135Sgblack@eecs.umich.edu        mem/bridge.cc
995135Sgblack@eecs.umich.edu        mem/bus.cc
1005135Sgblack@eecs.umich.edu        mem/connector.cc
1015135Sgblack@eecs.umich.edu        mem/mem_object.cc
1025135Sgblack@eecs.umich.edu        mem/packet.cc
1035135Sgblack@eecs.umich.edu        mem/physical.cc
1045135Sgblack@eecs.umich.edu        mem/port.cc
1055135Sgblack@eecs.umich.edu
1065135Sgblack@eecs.umich.edu	sim/builder.cc
1075135Sgblack@eecs.umich.edu	sim/configfile.cc
1085135Sgblack@eecs.umich.edu	sim/debug.cc
1095135Sgblack@eecs.umich.edu	sim/eventq.cc
1105135Sgblack@eecs.umich.edu	sim/faults.cc
1115141Sgblack@eecs.umich.edu	sim/main.cc
1125141Sgblack@eecs.umich.edu        python/swig/main_wrap.cc
1135141Sgblack@eecs.umich.edu	sim/param.cc
1145141Sgblack@eecs.umich.edu	sim/profile.cc
1155141Sgblack@eecs.umich.edu	sim/root.cc
1165141Sgblack@eecs.umich.edu	sim/serialize.cc
1175141Sgblack@eecs.umich.edu	sim/sim_events.cc
1185135Sgblack@eecs.umich.edu	sim/sim_object.cc
1195135Sgblack@eecs.umich.edu	sim/startup.cc
1205135Sgblack@eecs.umich.edu	sim/stat_context.cc
1215135Sgblack@eecs.umich.edu	sim/stat_control.cc
1225141Sgblack@eecs.umich.edu	sim/system.cc
1235135Sgblack@eecs.umich.edu	sim/trace_context.cc
1245135Sgblack@eecs.umich.edu        ''')
1255141Sgblack@eecs.umich.edu
1265141Sgblack@eecs.umich.edu# Old FullCPU sources
1275141Sgblack@eecs.umich.edufull_cpu_sources = Split('''
1285141Sgblack@eecs.umich.edu	encumbered/cpu/full/bpred.cc
1295141Sgblack@eecs.umich.edu	encumbered/cpu/full/commit.cc
1305141Sgblack@eecs.umich.edu	encumbered/cpu/full/cpu.cc
1315141Sgblack@eecs.umich.edu	encumbered/cpu/full/create_vector.cc
1325135Sgblack@eecs.umich.edu	encumbered/cpu/full/cv_spec_state.cc
1335135Sgblack@eecs.umich.edu	encumbered/cpu/full/dd_queue.cc
1345135Sgblack@eecs.umich.edu	encumbered/cpu/full/dep_link.cc
1355135Sgblack@eecs.umich.edu	encumbered/cpu/full/dispatch.cc
1365141Sgblack@eecs.umich.edu	encumbered/cpu/full/dyn_inst.cc
1375135Sgblack@eecs.umich.edu	encumbered/cpu/full/execute.cc
1385135Sgblack@eecs.umich.edu	encumbered/cpu/full/fetch.cc
1395135Sgblack@eecs.umich.edu	encumbered/cpu/full/floss_reasons.cc
1405135Sgblack@eecs.umich.edu	encumbered/cpu/full/fu_pool.cc
1415135Sgblack@eecs.umich.edu	encumbered/cpu/full/inst_fifo.cc
1425135Sgblack@eecs.umich.edu	encumbered/cpu/full/instpipe.cc
1435135Sgblack@eecs.umich.edu	encumbered/cpu/full/issue.cc
1445135Sgblack@eecs.umich.edu	encumbered/cpu/full/ls_queue.cc
1455135Sgblack@eecs.umich.edu	encumbered/cpu/full/machine_queue.cc
1465135Sgblack@eecs.umich.edu        encumbered/cpu/full/pipetrace.cc
1475135Sgblack@eecs.umich.edu        encumbered/cpu/full/readyq.cc
1485135Sgblack@eecs.umich.edu        encumbered/cpu/full/reg_info.cc
1495135Sgblack@eecs.umich.edu        encumbered/cpu/full/rob_station.cc
1505135Sgblack@eecs.umich.edu        encumbered/cpu/full/spec_memory.cc
1515135Sgblack@eecs.umich.edu        encumbered/cpu/full/spec_state.cc
1525135Sgblack@eecs.umich.edu        encumbered/cpu/full/storebuffer.cc
1535135Sgblack@eecs.umich.edu        encumbered/cpu/full/writeback.cc
1545135Sgblack@eecs.umich.edu        encumbered/cpu/full/iq/iq_station.cc
1555135Sgblack@eecs.umich.edu        encumbered/cpu/full/iq/iqueue.cc
1565135Sgblack@eecs.umich.edu        encumbered/cpu/full/iq/segmented/chain_info.cc
1575135Sgblack@eecs.umich.edu        encumbered/cpu/full/iq/segmented/chain_wire.cc
1585135Sgblack@eecs.umich.edu        encumbered/cpu/full/iq/segmented/iq_seg.cc
1595135Sgblack@eecs.umich.edu        encumbered/cpu/full/iq/segmented/iq_segmented.cc
1605135Sgblack@eecs.umich.edu        encumbered/cpu/full/iq/segmented/seg_chain.cc
1615135Sgblack@eecs.umich.edu        encumbered/cpu/full/iq/seznec/iq_seznec.cc
1625135Sgblack@eecs.umich.edu        encumbered/cpu/full/iq/standard/iq_standard.cc
1635135Sgblack@eecs.umich.edu        ''')
1645135Sgblack@eecs.umich.edu
1655141Sgblack@eecs.umich.edutrace_reader_sources = Split('''
1665141Sgblack@eecs.umich.edu        cpu/trace/reader/mem_trace_reader.cc
1675141Sgblack@eecs.umich.edu        cpu/trace/reader/ibm_reader.cc
1685141Sgblack@eecs.umich.edu        cpu/trace/reader/itx_reader.cc
1695141Sgblack@eecs.umich.edu        cpu/trace/reader/m5_reader.cc
1705141Sgblack@eecs.umich.edu        cpu/trace/opt_cpu.cc
1715141Sgblack@eecs.umich.edu        cpu/trace/trace_cpu.cc
1725141Sgblack@eecs.umich.edu        ''')
1735141Sgblack@eecs.umich.edu
1745182Sgblack@eecs.umich.edu
1755141Sgblack@eecs.umich.edu
1765141Sgblack@eecs.umich.edu# MySql sources
1775141Sgblack@eecs.umich.edumysql_sources = Split('''
1785141Sgblack@eecs.umich.edu	base/mysql.cc
1795141Sgblack@eecs.umich.edu	base/stats/mysql.cc
1805141Sgblack@eecs.umich.edu        ''')
1815135Sgblack@eecs.umich.edu
1825141Sgblack@eecs.umich.edu# Full-system sources
1835141Sgblack@eecs.umich.edufull_system_sources = Split('''
1845141Sgblack@eecs.umich.edu	base/crc.cc
1855141Sgblack@eecs.umich.edu	base/inet.cc
1865141Sgblack@eecs.umich.edu	base/remote_gdb.cc
1875141Sgblack@eecs.umich.edu
1885141Sgblack@eecs.umich.edu	cpu/intr_control.cc
1895141Sgblack@eecs.umich.edu        cpu/profile.cc
1905141Sgblack@eecs.umich.edu
1915141Sgblack@eecs.umich.edu	dev/alpha_console.cc
1925141Sgblack@eecs.umich.edu	dev/baddev.cc
1935141Sgblack@eecs.umich.edu	dev/disk_image.cc
1945135Sgblack@eecs.umich.edu	dev/etherbus.cc
1955135Sgblack@eecs.umich.edu	dev/etherdump.cc
1965135Sgblack@eecs.umich.edu	dev/etherint.cc
1975135Sgblack@eecs.umich.edu	dev/etherlink.cc
1985135Sgblack@eecs.umich.edu	dev/etherpkt.cc
1995135Sgblack@eecs.umich.edu	dev/ethertap.cc	
2005135Sgblack@eecs.umich.edu        dev/ide_ctrl.cc
2015135Sgblack@eecs.umich.edu	dev/ide_disk.cc
2025135Sgblack@eecs.umich.edu	dev/io_device.cc
2035141Sgblack@eecs.umich.edu	dev/isa_fake.cc
2045141Sgblack@eecs.umich.edu	dev/ns_gige.cc
2055135Sgblack@eecs.umich.edu	dev/pciconfigall.cc
2065141Sgblack@eecs.umich.edu	dev/pcidev.cc
2075141Sgblack@eecs.umich.edu	dev/pcifake.cc
2085141Sgblack@eecs.umich.edu	dev/pktfifo.cc
2095141Sgblack@eecs.umich.edu	dev/platform.cc
2105135Sgblack@eecs.umich.edu        dev/simconsole.cc
2115141Sgblack@eecs.umich.edu	dev/simple_disk.cc
2125141Sgblack@eecs.umich.edu	dev/sinic.cc
2135141Sgblack@eecs.umich.edu	dev/tsunami.cc
2145141Sgblack@eecs.umich.edu	dev/tsunami_cchip.cc
2155141Sgblack@eecs.umich.edu	dev/tsunami_io.cc
2165141Sgblack@eecs.umich.edu	dev/tsunami_fake.cc
2175141Sgblack@eecs.umich.edu	dev/tsunami_pchip.cc
2185141Sgblack@eecs.umich.edu
2195141Sgblack@eecs.umich.edu	dev/uart.cc
2205141Sgblack@eecs.umich.edu	dev/uart8250.cc
2215141Sgblack@eecs.umich.edu
2225141Sgblack@eecs.umich.edu	kern/kernel_stats.cc
2235141Sgblack@eecs.umich.edu	kern/system_events.cc
2245141Sgblack@eecs.umich.edu	kern/linux/events.cc
2255141Sgblack@eecs.umich.edu	kern/linux/linux_syscalls.cc
2265141Sgblack@eecs.umich.edu	kern/linux/printk.cc
2275141Sgblack@eecs.umich.edu
2285141Sgblack@eecs.umich.edu        mem/vport.cc
2295141Sgblack@eecs.umich.edu
2305141Sgblack@eecs.umich.edu	sim/pseudo_inst.cc
2315141Sgblack@eecs.umich.edu        ''')
2325141Sgblack@eecs.umich.edu
2335141Sgblack@eecs.umich.edu
2345141Sgblack@eecs.umich.eduif env['TARGET_ISA'] == 'alpha':
2355141Sgblack@eecs.umich.edu    full_system_sources += Split('''
2365141Sgblack@eecs.umich.edu	kern/tru64/dump_mbuf.cc
2375141Sgblack@eecs.umich.edu	kern/tru64/printf.cc
2385141Sgblack@eecs.umich.edu	kern/tru64/tru64_events.cc
2395141Sgblack@eecs.umich.edu	kern/tru64/tru64_syscalls.cc
2405141Sgblack@eecs.umich.edu        ''')
2415135Sgblack@eecs.umich.edu
2425135Sgblack@eecs.umich.edu# turbolaser encumbered sources
2435135Sgblack@eecs.umich.eduturbolaser_sources = Split('''
2445135Sgblack@eecs.umich.edu	encumbered/dev/dma.cc
2455135Sgblack@eecs.umich.edu	encumbered/dev/etherdev.cc
2465135Sgblack@eecs.umich.edu	encumbered/dev/scsi.cc
2475141Sgblack@eecs.umich.edu	encumbered/dev/scsi_ctrl.cc
2485141Sgblack@eecs.umich.edu	encumbered/dev/scsi_disk.cc
2495141Sgblack@eecs.umich.edu	encumbered/dev/scsi_none.cc
2505141Sgblack@eecs.umich.edu	encumbered/dev/tlaser_clock.cc
2515141Sgblack@eecs.umich.edu	encumbered/dev/tlaser_ipi.cc
2525141Sgblack@eecs.umich.edu	encumbered/dev/tlaser_mbox.cc
2535135Sgblack@eecs.umich.edu	encumbered/dev/tlaser_mc146818.cc
2545135Sgblack@eecs.umich.edu	encumbered/dev/tlaser_node.cc
2555135Sgblack@eecs.umich.edu	encumbered/dev/tlaser_pcia.cc
2565135Sgblack@eecs.umich.edu	encumbered/dev/tlaser_pcidev.cc
2575234Sgblack@eecs.umich.edu	encumbered/dev/tlaser_serial.cc
2585135Sgblack@eecs.umich.edu	encumbered/dev/turbolaser.cc
2595135Sgblack@eecs.umich.edu	encumbered/dev/uart8530.cc
2605135Sgblack@eecs.umich.edu        ''')
2615135Sgblack@eecs.umich.edu
2625234Sgblack@eecs.umich.edu# Syscall emulation (non-full-system) sources
2635234Sgblack@eecs.umich.edusyscall_emulation_sources = Split('''
2645234Sgblack@eecs.umich.edu        mem/translating_port.cc
2655234Sgblack@eecs.umich.edu        mem/page_table.cc
2665234Sgblack@eecs.umich.edu	sim/process.cc
2675234Sgblack@eecs.umich.edu	sim/syscall_emul.cc
2685135Sgblack@eecs.umich.edu        ''')
2695234Sgblack@eecs.umich.edu
2705234Sgblack@eecs.umich.edu#if env['TARGET_ISA'] == 'alpha':
2715234Sgblack@eecs.umich.edu#    syscall_emulation_sources += Split('''
2725234Sgblack@eecs.umich.edu#        kern/tru64/tru64.cc
2735234Sgblack@eecs.umich.edu#        ''')
2745234Sgblack@eecs.umich.edu
2755234Sgblack@eecs.umich.edualpha_eio_sources = Split('''
2765234Sgblack@eecs.umich.edu	encumbered/eio/exolex.cc
2775234Sgblack@eecs.umich.edu	encumbered/eio/libexo.cc
2785234Sgblack@eecs.umich.edu	encumbered/eio/eio.cc
2795234Sgblack@eecs.umich.edu        ''')
2805234Sgblack@eecs.umich.edu
2815234Sgblack@eecs.umich.eduif env['TARGET_ISA'] == 'ALPHA_ISA':
2825234Sgblack@eecs.umich.edu    syscall_emulation_sources += alpha_eio_sources
2835234Sgblack@eecs.umich.edu    
2845234Sgblack@eecs.umich.edumemtest_sources = Split('''
2855234Sgblack@eecs.umich.edu	cpu/memtest/memtest.cc
2865234Sgblack@eecs.umich.edu        ''')
2875234Sgblack@eecs.umich.edu
2885234Sgblack@eecs.umich.edu# Include file paths are rooted in this directory.  SCons will
2895234Sgblack@eecs.umich.edu# automatically expand '.' to refer to both the source directory and
2905234Sgblack@eecs.umich.edu# the corresponding build directory to pick up generated include
2915234Sgblack@eecs.umich.edu# files.
2925234Sgblack@eecs.umich.eduenv.Append(CPPPATH=Dir('.'))
2935234Sgblack@eecs.umich.edu
2945234Sgblack@eecs.umich.edu# Add a flag defining what THE_ISA should be for all compilation
2955234Sgblack@eecs.umich.eduenv.Append(CPPDEFINES=[('THE_ISA','%s_ISA' % env['TARGET_ISA'].upper())])
2965234Sgblack@eecs.umich.edu
2975234Sgblack@eecs.umich.eduarch_sources = SConscript('arch/SConscript', exports = 'env')
2985234Sgblack@eecs.umich.edu
2995234Sgblack@eecs.umich.educpu_sources = SConscript('cpu/SConscript', exports = 'env')
3005234Sgblack@eecs.umich.edu
3015234Sgblack@eecs.umich.edu# This is outside of cpu/SConscript since the source directory isn't
3025234Sgblack@eecs.umich.edu# underneath 'cpu'.
3035234Sgblack@eecs.umich.eduif 'FullCPU' in env['CPU_MODELS']:
3045234Sgblack@eecs.umich.edu    cpu_sources += full_cpu_sources
3055234Sgblack@eecs.umich.edu
3065234Sgblack@eecs.umich.edu# Set up complete list of sources based on configuration.
3075234Sgblack@eecs.umich.edusources = base_sources + arch_sources + cpu_sources
3085234Sgblack@eecs.umich.edu
3095234Sgblack@eecs.umich.eduif env['FULL_SYSTEM']:
3105234Sgblack@eecs.umich.edu    sources += full_system_sources
3115234Sgblack@eecs.umich.edu    if env['ALPHA_TLASER']:
3125234Sgblack@eecs.umich.edu        sources += turbolaser_sources
3135234Sgblack@eecs.umich.eduelse:
3145234Sgblack@eecs.umich.edu    sources += syscall_emulation_sources
3155234Sgblack@eecs.umich.edu
3165234Sgblack@eecs.umich.eduif env['USE_MYSQL']:
3175234Sgblack@eecs.umich.edu    sources += mysql_sources
3185234Sgblack@eecs.umich.edu
3195234Sgblack@eecs.umich.edufor opt in env.ExportOptions:
3205234Sgblack@eecs.umich.edu    env.ConfigFile(opt)
3215234Sgblack@eecs.umich.edu
3225234Sgblack@eecs.umich.edu###################################################
3235234Sgblack@eecs.umich.edu#
3245234Sgblack@eecs.umich.edu# Special build rules.
3255234Sgblack@eecs.umich.edu#
3265234Sgblack@eecs.umich.edu###################################################
3275234Sgblack@eecs.umich.edu
3285234Sgblack@eecs.umich.edu# base/traceflags.{cc,hh} are generated from base/traceflags.py.
3295234Sgblack@eecs.umich.edu# $TARGET.base will expand to "<build-dir>/base/traceflags".
3305234Sgblack@eecs.umich.eduenv.Command(Split('base/traceflags.hh base/traceflags.cc'),
3315234Sgblack@eecs.umich.edu            'base/traceflags.py',
3325234Sgblack@eecs.umich.edu            'python $SOURCE $TARGET.base')
3335234Sgblack@eecs.umich.edu
3345234Sgblack@eecs.umich.eduSConscript('python/SConscript', exports = ['env'])
3355234Sgblack@eecs.umich.edu
3365234Sgblack@eecs.umich.edu# This function adds the specified sources to the given build
3375234Sgblack@eecs.umich.edu# environment, and returns a list of all the corresponding SCons
3385234Sgblack@eecs.umich.edu# Object nodes (including an extra one for date.cc).  We explicitly
3395234Sgblack@eecs.umich.edu# add the Object nodes so we can set up special dependencies for
3405234Sgblack@eecs.umich.edu# date.cc.
3415234Sgblack@eecs.umich.edudef make_objs(sources, env):
3425234Sgblack@eecs.umich.edu    objs = [env.Object(s) for s in sources]
3435234Sgblack@eecs.umich.edu    # make date.cc depend on all other objects so it always gets
3445234Sgblack@eecs.umich.edu    # recompiled whenever anything else does
3455234Sgblack@eecs.umich.edu    date_obj = env.Object('base/date.cc')
3465234Sgblack@eecs.umich.edu    env.Depends(date_obj, objs)
3475234Sgblack@eecs.umich.edu    objs.append(date_obj)
3485234Sgblack@eecs.umich.edu    return objs
3495234Sgblack@eecs.umich.edu
3505234Sgblack@eecs.umich.edu###################################################
3515234Sgblack@eecs.umich.edu#
3525234Sgblack@eecs.umich.edu# Define binaries.  Each different build type (debug, opt, etc.) gets
3535234Sgblack@eecs.umich.edu# a slightly different build environment.
3545234Sgblack@eecs.umich.edu#
3555234Sgblack@eecs.umich.edu###################################################
3565234Sgblack@eecs.umich.edu
3575234Sgblack@eecs.umich.edu# List of constructed environments to pass back to SConstruct
3585234Sgblack@eecs.umich.eduenvList = []
3595234Sgblack@eecs.umich.edu
3605234Sgblack@eecs.umich.edu# Function to create a new build environment as clone of current
3615234Sgblack@eecs.umich.edu# environment 'env' with modified object suffix and optional stripped
3625234Sgblack@eecs.umich.edu# binary.  Additional keyword arguments are appended to corresponding
3635234Sgblack@eecs.umich.edu# build environment vars.
3645234Sgblack@eecs.umich.edudef makeEnv(label, objsfx, strip = False, **kwargs):
3655234Sgblack@eecs.umich.edu    newEnv = env.Copy(OBJSUFFIX=objsfx)
3665234Sgblack@eecs.umich.edu    newEnv.Label = label
3675234Sgblack@eecs.umich.edu    newEnv.Append(**kwargs)
3685234Sgblack@eecs.umich.edu    exe = 'm5.' + label  # final executable
3695234Sgblack@eecs.umich.edu    bin = exe + '.bin'   # executable w/o appended Python zip archive
3705234Sgblack@eecs.umich.edu    newEnv.Program(bin, make_objs(sources, newEnv))
3715234Sgblack@eecs.umich.edu    if strip:
3725234Sgblack@eecs.umich.edu        stripped_bin = bin + '.stripped'
3735234Sgblack@eecs.umich.edu        newEnv.Command(stripped_bin, bin, 'strip $SOURCE -o $TARGET')
3745234Sgblack@eecs.umich.edu        bin = stripped_bin
3755234Sgblack@eecs.umich.edu    targets = newEnv.Concat(exe, [bin, 'python/m5py.zip'])
3765234Sgblack@eecs.umich.edu    newEnv.M5Binary = targets[0]
3775234Sgblack@eecs.umich.edu    envList.append(newEnv)
3785234Sgblack@eecs.umich.edu
3795234Sgblack@eecs.umich.edu# Debug binary
3805234Sgblack@eecs.umich.edumakeEnv('debug', '.do',
3815234Sgblack@eecs.umich.edu        CCFLAGS = Split('-g3 -gdwarf-2 -O0'),
3825234Sgblack@eecs.umich.edu        CPPDEFINES = 'DEBUG')
3835234Sgblack@eecs.umich.edu
3845234Sgblack@eecs.umich.edu# Optimized binary
3855234Sgblack@eecs.umich.edumakeEnv('opt', '.o',
3865234Sgblack@eecs.umich.edu        CCFLAGS = Split('-g -O3'))
3875234Sgblack@eecs.umich.edu
3885234Sgblack@eecs.umich.edu# "Fast" binary
3895234Sgblack@eecs.umich.edumakeEnv('fast', '.fo', strip = True,
3905234Sgblack@eecs.umich.edu        CCFLAGS = Split('-O3'),
3915234Sgblack@eecs.umich.edu        CPPDEFINES = 'NDEBUG')
3925234Sgblack@eecs.umich.edu
3935234Sgblack@eecs.umich.edu# Profiled binary
3945234Sgblack@eecs.umich.edumakeEnv('prof', '.po',
3955234Sgblack@eecs.umich.edu        CCFLAGS = Split('-O3 -g -pg'),
3965234Sgblack@eecs.umich.edu        LINKFLAGS = '-pg')
3975234Sgblack@eecs.umich.edu
3985234Sgblack@eecs.umich.eduReturn('envList')
3995234Sgblack@eecs.umich.edu