SConscript revision 4007:8c3bfad8bb92
112391Sjason@lowepower.com# -*- mode:python -*- 212391Sjason@lowepower.com 312391Sjason@lowepower.com# Copyright (c) 2004-2005 The Regents of The University of Michigan 412391Sjason@lowepower.com# All rights reserved. 512391Sjason@lowepower.com# 612391Sjason@lowepower.com# Redistribution and use in source and binary forms, with or without 712391Sjason@lowepower.com# modification, are permitted provided that the following conditions are 812391Sjason@lowepower.com# met: redistributions of source code must retain the above copyright 912391Sjason@lowepower.com# notice, this list of conditions and the following disclaimer; 1012391Sjason@lowepower.com# redistributions in binary form must reproduce the above copyright 1112391Sjason@lowepower.com# notice, this list of conditions and the following disclaimer in the 1212391Sjason@lowepower.com# documentation and/or other materials provided with the distribution; 1312391Sjason@lowepower.com# neither the name of the copyright holders nor the names of its 1412391Sjason@lowepower.com# contributors may be used to endorse or promote products derived from 1512391Sjason@lowepower.com# this software without specific prior written permission. 1612391Sjason@lowepower.com# 1712391Sjason@lowepower.com# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1812391Sjason@lowepower.com# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1912391Sjason@lowepower.com# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2012391Sjason@lowepower.com# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2112391Sjason@lowepower.com# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2212391Sjason@lowepower.com# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2312391Sjason@lowepower.com# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2412391Sjason@lowepower.com# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2512391Sjason@lowepower.com# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2612391Sjason@lowepower.com# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2712391Sjason@lowepower.com# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2812391Sjason@lowepower.com# 2912391Sjason@lowepower.com# Authors: Steve Reinhardt 3012391Sjason@lowepower.com 3112391Sjason@lowepower.comimport os 3212391Sjason@lowepower.comimport sys 3312391Sjason@lowepower.comfrom os.path import isfile, join as joinpath 3412391Sjason@lowepower.com 3512391Sjason@lowepower.com# This file defines how to build a particular configuration of M5 3612391Sjason@lowepower.com# based on variable settings in the 'env' build environment. 3712391Sjason@lowepower.com 3812391Sjason@lowepower.com# Import build environment variable from SConstruct. 3912391Sjason@lowepower.comImport('env') 4012391Sjason@lowepower.com 4112391Sjason@lowepower.com################################################### 4212391Sjason@lowepower.com# 4312391Sjason@lowepower.com# Define needed sources. 4412391Sjason@lowepower.com# 4512391Sjason@lowepower.com################################################### 4612391Sjason@lowepower.com 4714299Sbbruce@ucdavis.edu# Base sources used by all configurations. 4814299Sbbruce@ucdavis.edu 4914299Sbbruce@ucdavis.edubase_sources = Split(''' 5014299Sbbruce@ucdavis.edu base/annotate.cc 5114299Sbbruce@ucdavis.edu base/circlebuf.cc 5214299Sbbruce@ucdavis.edu base/cprintf.cc 5314299Sbbruce@ucdavis.edu base/fast_alloc.cc 5414299Sbbruce@ucdavis.edu base/fifo_buffer.cc 5514299Sbbruce@ucdavis.edu base/hostinfo.cc 5614299Sbbruce@ucdavis.edu base/hybrid_pred.cc 5714299Sbbruce@ucdavis.edu base/inifile.cc 5814299Sbbruce@ucdavis.edu base/intmath.cc 5914299Sbbruce@ucdavis.edu base/match.cc 6014299Sbbruce@ucdavis.edu base/misc.cc 6114299Sbbruce@ucdavis.edu base/output.cc 6214299Sbbruce@ucdavis.edu base/pollevent.cc 6314299Sbbruce@ucdavis.edu base/range.cc 6414299Sbbruce@ucdavis.edu base/random.cc 6514299Sbbruce@ucdavis.edu base/remote_gdb.cc 6614299Sbbruce@ucdavis.edu base/sat_counter.cc 6714299Sbbruce@ucdavis.edu base/socket.cc 6814299Sbbruce@ucdavis.edu base/statistics.cc 6914299Sbbruce@ucdavis.edu base/str.cc 7014299Sbbruce@ucdavis.edu base/time.cc 7114299Sbbruce@ucdavis.edu base/trace.cc 7212391Sjason@lowepower.com base/traceflags.cc 7312391Sjason@lowepower.com base/userinfo.cc 7412391Sjason@lowepower.com base/compression/lzss_compression.cc 7512391Sjason@lowepower.com base/loader/aout_object.cc 7612391Sjason@lowepower.com base/loader/ecoff_object.cc 7712391Sjason@lowepower.com base/loader/elf_object.cc 7812391Sjason@lowepower.com base/loader/raw_object.cc 7912391Sjason@lowepower.com base/loader/object_file.cc 8012391Sjason@lowepower.com base/loader/symtab.cc 8112391Sjason@lowepower.com base/stats/events.cc 8212391Sjason@lowepower.com base/stats/statdb.cc 8312391Sjason@lowepower.com base/stats/visit.cc 8412391Sjason@lowepower.com base/stats/text.cc 8512391Sjason@lowepower.com 8612391Sjason@lowepower.com cpu/activity.cc 8712391Sjason@lowepower.com cpu/base.cc 8812391Sjason@lowepower.com cpu/cpuevent.cc 8912391Sjason@lowepower.com cpu/exetrace.cc 9012391Sjason@lowepower.com cpu/func_unit.cc 9112391Sjason@lowepower.com cpu/op_class.cc 9212391Sjason@lowepower.com cpu/pc_event.cc 9312391Sjason@lowepower.com cpu/quiesce_event.cc 9412391Sjason@lowepower.com cpu/static_inst.cc 9512391Sjason@lowepower.com cpu/simple_thread.cc 9612391Sjason@lowepower.com cpu/thread_state.cc 9712391Sjason@lowepower.com 9812391Sjason@lowepower.com mem/bridge.cc 9912391Sjason@lowepower.com mem/bus.cc 10012391Sjason@lowepower.com mem/dram.cc 10112391Sjason@lowepower.com mem/mem_object.cc 10212391Sjason@lowepower.com mem/packet.cc 10312391Sjason@lowepower.com mem/physical.cc 10412391Sjason@lowepower.com mem/port.cc 10512391Sjason@lowepower.com mem/tport.cc 10612391Sjason@lowepower.com 10712391Sjason@lowepower.com mem/cache/base_cache.cc 10812391Sjason@lowepower.com mem/cache/cache.cc 10912391Sjason@lowepower.com mem/cache/coherence/coherence_protocol.cc 11012391Sjason@lowepower.com mem/cache/coherence/uni_coherence.cc 11112391Sjason@lowepower.com mem/cache/miss/blocking_buffer.cc 11212391Sjason@lowepower.com mem/cache/miss/miss_buffer.cc 11312391Sjason@lowepower.com mem/cache/miss/miss_queue.cc 11412391Sjason@lowepower.com mem/cache/miss/mshr.cc 11512391Sjason@lowepower.com mem/cache/miss/mshr_queue.cc 11612391Sjason@lowepower.com mem/cache/prefetch/base_prefetcher.cc 11712391Sjason@lowepower.com mem/cache/prefetch/ghb_prefetcher.cc 11812391Sjason@lowepower.com mem/cache/prefetch/stride_prefetcher.cc 11912391Sjason@lowepower.com mem/cache/prefetch/tagged_prefetcher.cc 12012391Sjason@lowepower.com mem/cache/tags/base_tags.cc 12112391Sjason@lowepower.com mem/cache/tags/fa_lru.cc 12212391Sjason@lowepower.com mem/cache/tags/iic.cc 12312391Sjason@lowepower.com mem/cache/tags/lru.cc 12412391Sjason@lowepower.com mem/cache/tags/repl/gen.cc 12512391Sjason@lowepower.com mem/cache/tags/repl/repl.cc 12612391Sjason@lowepower.com mem/cache/tags/split.cc 12712391Sjason@lowepower.com mem/cache/tags/split_lifo.cc 12812391Sjason@lowepower.com mem/cache/tags/split_lru.cc 12912391Sjason@lowepower.com 13012391Sjason@lowepower.com mem/cache/cache_builder.cc 13112391Sjason@lowepower.com 13212391Sjason@lowepower.com python/swig/init.cc 13312391Sjason@lowepower.com python/swig/debug_wrap.cc 13412391Sjason@lowepower.com python/swig/main_wrap.cc 13512391Sjason@lowepower.com python/swig/event_wrap.cc 13612391Sjason@lowepower.com python/swig/pyevent.cc 13712391Sjason@lowepower.com 13812391Sjason@lowepower.com sim/builder.cc 13912391Sjason@lowepower.com sim/debug.cc 14012391Sjason@lowepower.com sim/eventq.cc 14112391Sjason@lowepower.com sim/faults.cc 14212391Sjason@lowepower.com sim/main.cc 14312391Sjason@lowepower.com sim/param.cc 14412391Sjason@lowepower.com sim/root.cc 14512391Sjason@lowepower.com sim/serialize.cc 14612391Sjason@lowepower.com sim/sim_events.cc 14712391Sjason@lowepower.com sim/sim_object.cc 14812391Sjason@lowepower.com sim/startup.cc 14912391Sjason@lowepower.com sim/stat_context.cc 15012391Sjason@lowepower.com sim/stat_control.cc 15112391Sjason@lowepower.com sim/system.cc 15212391Sjason@lowepower.com sim/trace_context.cc 15312391Sjason@lowepower.com ''') 15412391Sjason@lowepower.com 15512391Sjason@lowepower.comtrace_reader_sources = Split(''' 15612391Sjason@lowepower.com cpu/trace/reader/mem_trace_reader.cc 15712391Sjason@lowepower.com cpu/trace/reader/ibm_reader.cc 15812391Sjason@lowepower.com cpu/trace/reader/itx_reader.cc 15912391Sjason@lowepower.com cpu/trace/reader/m5_reader.cc 16012391Sjason@lowepower.com cpu/trace/opt_cpu.cc 16112391Sjason@lowepower.com cpu/trace/trace_cpu.cc 16212391Sjason@lowepower.com ''') 16312391Sjason@lowepower.com 16412391Sjason@lowepower.com 16512391Sjason@lowepower.com 16612391Sjason@lowepower.com# MySql sources 16712391Sjason@lowepower.commysql_sources = Split(''' 16812391Sjason@lowepower.com base/mysql.cc 16912391Sjason@lowepower.com base/stats/mysql.cc 17012391Sjason@lowepower.com ''') 17112391Sjason@lowepower.com 17212391Sjason@lowepower.com# Full-system sources 17312391Sjason@lowepower.comfull_system_sources = Split(''' 17412391Sjason@lowepower.com base/crc.cc 17512391Sjason@lowepower.com base/inet.cc 17612391Sjason@lowepower.com 17712391Sjason@lowepower.com cpu/intr_control.cc 17812391Sjason@lowepower.com cpu/profile.cc 17912391Sjason@lowepower.com 18012391Sjason@lowepower.com dev/uart.cc 18112391Sjason@lowepower.com dev/uart8250.cc 18212391Sjason@lowepower.com 18312391Sjason@lowepower.com mem/vport.cc 18412391Sjason@lowepower.com 18512391Sjason@lowepower.com sim/pseudo_inst.cc 18612391Sjason@lowepower.com ''') 18712391Sjason@lowepower.com #dev/sinic.cc 18812391Sjason@lowepower.com #dev/i8254xGBe.cc 18912391Sjason@lowepower.com 19012391Sjason@lowepower.comif env['TARGET_ISA'] == 'alpha': 19112391Sjason@lowepower.com full_system_sources += Split(''' 19212391Sjason@lowepower.com kern/tru64/dump_mbuf.cc 19312391Sjason@lowepower.com kern/tru64/printf.cc 19412391Sjason@lowepower.com kern/tru64/tru64_events.cc 19512391Sjason@lowepower.com kern/tru64/tru64_syscalls.cc 19612391Sjason@lowepower.com ''') 19712391Sjason@lowepower.com 19812391Sjason@lowepower.com# Syscall emulation (non-full-system) sources 19912391Sjason@lowepower.comsyscall_emulation_sources = Split(''' 20012391Sjason@lowepower.com mem/translating_port.cc 20112391Sjason@lowepower.com mem/page_table.cc 20212391Sjason@lowepower.com sim/process.cc 20312391Sjason@lowepower.com sim/syscall_emul.cc 20412391Sjason@lowepower.com ''') 20512391Sjason@lowepower.com 20612391Sjason@lowepower.com#if env['TARGET_ISA'] == 'alpha': 20712391Sjason@lowepower.com# syscall_emulation_sources += Split(''' 20812391Sjason@lowepower.com# kern/tru64/tru64.cc 20912391Sjason@lowepower.com# ''') 21012391Sjason@lowepower.com 21112391Sjason@lowepower.commemtest_sources = Split(''' 21212391Sjason@lowepower.com cpu/memtest/memtest.cc 21312391Sjason@lowepower.com ''') 21412391Sjason@lowepower.com 21512391Sjason@lowepower.com# Include file paths are rooted in this directory. SCons will 21612391Sjason@lowepower.com# automatically expand '.' to refer to both the source directory and 21712391Sjason@lowepower.com# the corresponding build directory to pick up generated include 21812391Sjason@lowepower.com# files. 21912391Sjason@lowepower.comenv.Append(CPPPATH=Dir('.')) 22012391Sjason@lowepower.com 22112391Sjason@lowepower.com# Add a flag defining what THE_ISA should be for all compilation 22212391Sjason@lowepower.comenv.Append(CPPDEFINES=[('THE_ISA','%s_ISA' % env['TARGET_ISA'].upper())]) 22312391Sjason@lowepower.com 22412391Sjason@lowepower.comarch_sources = SConscript(os.path.join('arch', 'SConscript'), exports = 'env') 22512391Sjason@lowepower.com 22612391Sjason@lowepower.comcpu_sources = SConscript(os.path.join('cpu', 'SConscript'), exports = 'env') 22712391Sjason@lowepower.com 22812391Sjason@lowepower.comif env['FULL_SYSTEM']: 22912391Sjason@lowepower.com dev_sources = SConscript(os.path.join('dev', 'SConscript'), 23012391Sjason@lowepower.com exports = 'env') 23114299Sbbruce@ucdavis.edu full_system_sources += dev_sources 23214299Sbbruce@ucdavis.edu 23314299Sbbruce@ucdavis.edu kern_sources = SConscript(os.path.join('kern', 'SConscript'), 23414299Sbbruce@ucdavis.edu exports = 'env') 23514299Sbbruce@ucdavis.edu full_system_sources += kern_sources 23614299Sbbruce@ucdavis.edu 23712391Sjason@lowepower.com# Set up complete list of sources based on configuration. 23812391Sjason@lowepower.comsources = base_sources + arch_sources + cpu_sources 23912391Sjason@lowepower.com 24012391Sjason@lowepower.com# encumbered should be last because we're adding to some of the other groups 24112391Sjason@lowepower.comif isfile(joinpath(env['SRCDIR'], 'encumbered/SConscript')): 24212391Sjason@lowepower.com sources += SConscript('encumbered/SConscript', exports = 'env') 24312391Sjason@lowepower.com 24412391Sjason@lowepower.com 24512391Sjason@lowepower.comif env['FULL_SYSTEM']: 24612391Sjason@lowepower.com sources += full_system_sources 24712391Sjason@lowepower.comelse: 24812391Sjason@lowepower.com sources += syscall_emulation_sources 24912391Sjason@lowepower.com 25012391Sjason@lowepower.comif env['USE_MYSQL']: 25112391Sjason@lowepower.com sources += mysql_sources 25212391Sjason@lowepower.com 25312391Sjason@lowepower.comfor opt in env.ExportOptions: 25412391Sjason@lowepower.com env.ConfigFile(opt) 25512391Sjason@lowepower.com 25612391Sjason@lowepower.com################################################### 25712391Sjason@lowepower.com# 25812391Sjason@lowepower.com# Special build rules. 25912391Sjason@lowepower.com# 26012391Sjason@lowepower.com################################################### 26112391Sjason@lowepower.com 26212391Sjason@lowepower.com# base/traceflags.{cc,hh} are generated from base/traceflags.py. 26314299Sbbruce@ucdavis.edu# $TARGET.base will expand to "<build-dir>/base/traceflags". 26414299Sbbruce@ucdavis.eduenv.Command(Split('base/traceflags.hh base/traceflags.cc'), 26514299Sbbruce@ucdavis.edu 'base/traceflags.py', 26612391Sjason@lowepower.com 'python $SOURCE $TARGET.base') 26714299Sbbruce@ucdavis.edu 26814299Sbbruce@ucdavis.eduSConscript('python/SConscript', exports = ['env']) 26914299Sbbruce@ucdavis.edu 27014299Sbbruce@ucdavis.edu# This function adds the specified sources to the given build 27114299Sbbruce@ucdavis.edu# environment, and returns a list of all the corresponding SCons 27214299Sbbruce@ucdavis.edu# Object nodes (including an extra one for date.cc). We explicitly 27314299Sbbruce@ucdavis.edu# add the Object nodes so we can set up special dependencies for 27414299Sbbruce@ucdavis.edu# date.cc. 27514299Sbbruce@ucdavis.edudef make_objs(sources, env): 27614299Sbbruce@ucdavis.edu objs = [env.Object(s) for s in sources] 27714299Sbbruce@ucdavis.edu # make date.cc depend on all other objects so it always gets 27814299Sbbruce@ucdavis.edu # recompiled whenever anything else does 27914299Sbbruce@ucdavis.edu date_obj = env.Object('base/date.cc') 28014299Sbbruce@ucdavis.edu env.Depends(date_obj, objs) 28114299Sbbruce@ucdavis.edu objs.append(date_obj) 282 return objs 283 284################################################### 285# 286# Define binaries. Each different build type (debug, opt, etc.) gets 287# a slightly different build environment. 288# 289################################################### 290 291# List of constructed environments to pass back to SConstruct 292envList = [] 293 294# Function to create a new build environment as clone of current 295# environment 'env' with modified object suffix and optional stripped 296# binary. Additional keyword arguments are appended to corresponding 297# build environment vars. 298def makeEnv(label, objsfx, strip = False, **kwargs): 299 newEnv = env.Copy(OBJSUFFIX=objsfx) 300 newEnv.Label = label 301 newEnv.Append(**kwargs) 302 exe = 'm5.' + label # final executable 303 bin = exe + '.bin' # executable w/o appended Python zip archive 304 newEnv.Program(bin, make_objs(sources, newEnv)) 305 if strip: 306 stripped_bin = bin + '.stripped' 307 if sys.platform == 'sunos5': 308 newEnv.Command(stripped_bin, bin, 'cp $SOURCE $TARGET; strip $TARGET') 309 else: 310 newEnv.Command(stripped_bin, bin, 'strip $SOURCE -o $TARGET') 311 bin = stripped_bin 312 targets = newEnv.Concat(exe, [bin, 'python/m5py.zip']) 313 newEnv.M5Binary = targets[0] 314 envList.append(newEnv) 315 316# Debug binary 317ccflags = {} 318if env['GCC']: 319 if sys.platform == 'sunos5': 320 ccflags['debug'] = '-gstabs+' 321 else: 322 ccflags['debug'] = '-ggdb3' 323 ccflags['opt'] = '-g -O3' 324 ccflags['fast'] = '-O3' 325 ccflags['prof'] = '-O3 -g -pg' 326elif env['SUNCC']: 327 ccflags['debug'] = '-g0' 328 ccflags['opt'] = '-g -O' 329 ccflags['fast'] = '-fast' 330 ccflags['prof'] = '-fast -g -pg' 331elif env['ICC']: 332 ccflags['debug'] = '-g -O0' 333 ccflags['opt'] = '-g -O' 334 ccflags['fast'] = '-fast' 335 ccflags['prof'] = '-fast -g -pg' 336else: 337 print 'Unknown compiler, please fix compiler options' 338 Exit(1) 339 340makeEnv('debug', '.do', 341 CCFLAGS = Split(ccflags['debug']), 342 CPPDEFINES = ['DEBUG', 'TRACING_ON=1']) 343 344# Optimized binary 345makeEnv('opt', '.o', 346 CCFLAGS = Split(ccflags['opt']), 347 CPPDEFINES = ['TRACING_ON=1']) 348 349# "Fast" binary 350makeEnv('fast', '.fo', strip = True, 351 CCFLAGS = Split(ccflags['fast']), 352 CPPDEFINES = ['NDEBUG', 'TRACING_ON=0']) 353 354# Profiled binary 355makeEnv('prof', '.po', 356 CCFLAGS = Split(ccflags['prof']), 357 CPPDEFINES = ['NDEBUG', 'TRACING_ON=0'], 358 LINKFLAGS = '-pg') 359 360Return('envList') 361