X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=SConscript;h=360f91b3a507da8469e082f9299ac0d89bfabd26;hb=71bf22165acb4a330a98e183f96188daf49d078f;hp=7b5b2a970fbe1a29bfb068b0bc9a6c610dfa3856;hpb=c03e97b62d2adbe335a883b5fafa10c973e2c4d1;p=gem5.git diff --git a/SConscript b/SConscript index 7b5b2a970..360f91b3a 100644 --- a/SConscript +++ b/SConscript @@ -1,6 +1,6 @@ # -*- mode:python -*- -# Copyright (c) 2004 The Regents of The University of Michigan +# Copyright (c) 2004-2005 The Regents of The University of Michigan # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -43,16 +43,8 @@ Import('env') ################################################### # Base sources used by all configurations. -base_sources = Split(''' - arch/alpha/decoder.cc - arch/alpha/alpha_full_cpu_exec.cc - arch/alpha/fast_cpu_exec.cc - arch/alpha/simple_cpu_exec.cc - arch/alpha/inorder_cpu_exec.cc - arch/alpha/full_cpu_exec.cc - arch/alpha/faults.cc - arch/alpha/isa_traits.cc +base_sources = Split(''' base/circlebuf.cc base/copyright.cc base/cprintf.cc @@ -67,7 +59,6 @@ base_sources = Split(''' base/misc.cc base/output.cc base/pollevent.cc - base/python.cc base/range.cc base/random.cc base/sat_counter.cc @@ -85,83 +76,84 @@ base_sources = Split(''' base/loader/object_file.cc base/loader/symtab.cc base/stats/events.cc - base/stats/python.cc base/stats/statdb.cc base/stats/visit.cc base/stats/text.cc - cpu/base_cpu.cc + cpu/base.cc cpu/base_dyn_inst.cc cpu/exec_context.cc cpu/exetrace.cc cpu/pc_event.cc cpu/static_inst.cc - cpu/beta_cpu/2bit_local_pred.cc - cpu/beta_cpu/alpha_dyn_inst.cc - cpu/beta_cpu/alpha_full_cpu.cc - cpu/beta_cpu/alpha_full_cpu_builder.cc - cpu/beta_cpu/bpred_unit.cc - cpu/beta_cpu/btb.cc - cpu/beta_cpu/commit.cc - cpu/beta_cpu/decode.cc - cpu/beta_cpu/fetch.cc - cpu/beta_cpu/free_list.cc - cpu/beta_cpu/full_cpu.cc - cpu/beta_cpu/iew.cc - cpu/beta_cpu/inst_queue.cc - cpu/beta_cpu/ldstq.cc - cpu/beta_cpu/mem_dep_unit.cc - cpu/beta_cpu/ras.cc - cpu/beta_cpu/rename.cc - cpu/beta_cpu/rename_map.cc - cpu/beta_cpu/rob.cc - cpu/beta_cpu/sat_counter.cc - cpu/beta_cpu/store_set.cc - cpu/beta_cpu/tournament_pred.cc - cpu/fast_cpu/fast_cpu.cc - cpu/full_cpu/bpred.cc - cpu/full_cpu/commit.cc - cpu/full_cpu/create_vector.cc - cpu/full_cpu/cv_spec_state.cc - cpu/full_cpu/dd_queue.cc - cpu/full_cpu/dep_link.cc - cpu/full_cpu/dispatch.cc - cpu/full_cpu/dyn_inst.cc - cpu/full_cpu/execute.cc - cpu/full_cpu/fetch.cc - cpu/full_cpu/floss_reasons.cc - cpu/full_cpu/fu_pool.cc - cpu/full_cpu/full_cpu.cc - cpu/full_cpu/inst_fifo.cc - cpu/full_cpu/instpipe.cc - cpu/full_cpu/issue.cc - cpu/full_cpu/ls_queue.cc - cpu/full_cpu/machine_queue.cc - cpu/full_cpu/pc_sample_profile.cc - cpu/full_cpu/pipetrace.cc - cpu/full_cpu/readyq.cc - cpu/full_cpu/reg_info.cc - cpu/full_cpu/rob_station.cc - cpu/full_cpu/spec_memory.cc - cpu/full_cpu/spec_state.cc - cpu/full_cpu/storebuffer.cc - cpu/full_cpu/writeback.cc - cpu/full_cpu/iq/iq_station.cc - cpu/full_cpu/iq/iqueue.cc - cpu/full_cpu/iq/segmented/chain_info.cc - cpu/full_cpu/iq/segmented/chain_wire.cc - cpu/full_cpu/iq/segmented/iq_seg.cc - cpu/full_cpu/iq/segmented/iq_segmented.cc - cpu/full_cpu/iq/segmented/seg_chain.cc - cpu/full_cpu/iq/seznec/iq_seznec.cc - cpu/full_cpu/iq/standard/iq_standard.cc - cpu/inorder_cpu/inorder_cpu.cc - cpu/sampling_cpu/sampling_cpu.cc - cpu/simple_cpu/simple_cpu.cc + cpu/o3/2bit_local_pred.cc + cpu/o3/alpha_dyn_inst.cc + cpu/o3/alpha_cpu.cc + cpu/o3/alpha_cpu_builder.cc + cpu/o3/bpred_unit.cc + cpu/o3/btb.cc + cpu/o3/commit.cc + cpu/o3/decode.cc + cpu/o3/fetch.cc + cpu/o3/free_list.cc + cpu/o3/cpu.cc + cpu/o3/iew.cc + cpu/o3/inst_queue.cc + cpu/o3/ldstq.cc + cpu/o3/mem_dep_unit.cc + cpu/o3/ras.cc + cpu/o3/rename.cc + cpu/o3/rename_map.cc + cpu/o3/rob.cc + cpu/o3/sat_counter.cc + cpu/o3/store_set.cc + cpu/o3/tournament_pred.cc + cpu/fast/cpu.cc + cpu/sampler/sampler.cc + cpu/simple/cpu.cc cpu/trace/reader/mem_trace_reader.cc cpu/trace/reader/ibm_reader.cc cpu/trace/reader/itx_reader.cc cpu/trace/reader/m5_reader.cc + cpu/trace/opt_cpu.cc + cpu/trace/trace_cpu.cc + + encumbered/cpu/full/bpred.cc + encumbered/cpu/full/commit.cc + encumbered/cpu/full/cpu.cc + encumbered/cpu/full/create_vector.cc + encumbered/cpu/full/cv_spec_state.cc + encumbered/cpu/full/dd_queue.cc + encumbered/cpu/full/dep_link.cc + encumbered/cpu/full/dispatch.cc + encumbered/cpu/full/dyn_inst.cc + encumbered/cpu/full/execute.cc + encumbered/cpu/full/fetch.cc + encumbered/cpu/full/floss_reasons.cc + encumbered/cpu/full/fu_pool.cc + encumbered/cpu/full/inst_fifo.cc + encumbered/cpu/full/instpipe.cc + encumbered/cpu/full/issue.cc + encumbered/cpu/full/ls_queue.cc + encumbered/cpu/full/machine_queue.cc + encumbered/cpu/full/pipetrace.cc + encumbered/cpu/full/readyq.cc + encumbered/cpu/full/reg_info.cc + encumbered/cpu/full/rob_station.cc + encumbered/cpu/full/spec_memory.cc + encumbered/cpu/full/spec_state.cc + encumbered/cpu/full/storebuffer.cc + encumbered/cpu/full/writeback.cc + encumbered/cpu/full/iq/iq_station.cc + encumbered/cpu/full/iq/iqueue.cc + encumbered/cpu/full/iq/segmented/chain_info.cc + encumbered/cpu/full/iq/segmented/chain_wire.cc + encumbered/cpu/full/iq/segmented/iq_seg.cc + encumbered/cpu/full/iq/segmented/iq_segmented.cc + encumbered/cpu/full/iq/segmented/seg_chain.cc + encumbered/cpu/full/iq/seznec/iq_seznec.cc + encumbered/cpu/full/iq/standard/iq_standard.cc + encumbered/mem/functional/main.cc mem/base_hier.cc mem/base_mem.cc @@ -190,25 +182,22 @@ base_sources = Split(''' mem/cache/miss/mshr.cc mem/cache/miss/mshr_queue.cc mem/cache/prefetch/base_prefetcher.cc - mem/cache/prefetch/ghb_prefetcher.cc mem/cache/prefetch/prefetcher.cc - mem/cache/prefetch/stride_prefetcher.cc mem/cache/prefetch/tagged_prefetcher.cc mem/cache/tags/base_tags.cc - mem/cache/tags/cache_tags.cc + mem/cache/tags/cache_tags.cc mem/cache/tags/fa_lru.cc mem/cache/tags/iic.cc mem/cache/tags/lru.cc - mem/cache/tags/split.cc - mem/cache/tags/split_lifo.cc - mem/cache/tags/split_lru.cc mem/cache/tags/repl/gen.cc mem/cache/tags/repl/repl.cc - mem/functional_mem/functional_memory.cc - mem/functional_mem/main_memory.cc - mem/timing_mem/base_memory.cc - mem/timing_mem/memory_builder.cc - mem/timing_mem/simple_mem_bank.cc + mem/cache/tags/split.cc + mem/cache/tags/split_lru.cc + mem/cache/tags/split_lifo.cc + mem/functional/functional.cc + mem/timing/base_memory.cc + mem/timing/memory_builder.cc + mem/timing/simple_mem_bank.cc mem/trace/itx_writer.cc mem/trace/mem_trace_writer.cc mem/trace/m5_writer.cc @@ -220,9 +209,11 @@ base_sources = Split(''' sim/configfile.cc sim/debug.cc sim/eventq.cc + sim/faults.cc sim/main.cc sim/param.cc sim/profile.cc + sim/root.cc sim/serialize.cc sim/sim_events.cc sim/sim_exit.cc @@ -231,8 +222,15 @@ base_sources = Split(''' sim/stat_context.cc sim/stat_control.cc sim/trace_context.cc - sim/universe.cc ''') +# These are now included by the architecture specific SConscript +# arch/alpha/decoder.cc +# arch/alpha/alpha_o3_exec.cc +# arch/alpha/fast_cpu_exec.cc +# arch/alpha/simple_cpu_exec.cc +# arch/alpha/full_cpu_exec.cc +# arch/alpha/faults.cc +# arch/alpha/isa_traits.cc # MySql sources mysql_sources = Split(''' @@ -242,24 +240,17 @@ mysql_sources = Split(''' # Full-system sources full_system_sources = Split(''' - arch/alpha/alpha_memory.cc - arch/alpha/arguments.cc - arch/alpha/ev5.cc - arch/alpha/osfpal.cc - arch/alpha/pseudo_inst.cc - arch/alpha/vtophys.cc - base/crc.cc base/inet.cc base/remote_gdb.cc cpu/intr_control.cc + cpu/profile.cc dev/alpha_console.cc dev/baddev.cc dev/simconsole.cc dev/disk_image.cc - dev/dma.cc dev/etherbus.cc dev/etherdump.cc dev/etherint.cc @@ -270,36 +261,25 @@ full_system_sources = Split(''' dev/ide_disk.cc dev/io_device.cc dev/ns_gige.cc - dev/etherdev.cc dev/pciconfigall.cc dev/pcidev.cc + dev/pcifake.cc dev/pktfifo.cc - dev/scsi.cc - dev/scsi_ctrl.cc - dev/scsi_disk.cc - dev/scsi_none.cc + dev/platform.cc dev/sinic.cc dev/simple_disk.cc - dev/tlaser_clock.cc - dev/tlaser_ipi.cc - dev/tlaser_mbox.cc - dev/tlaser_mc146818.cc - dev/tlaser_node.cc - dev/tlaser_pcia.cc - dev/tlaser_pcidev.cc - dev/tlaser_serial.cc - dev/turbolaser.cc dev/tsunami.cc dev/tsunami_cchip.cc - dev/tsunami_fake.cc + dev/isa_fake.cc dev/tsunami_io.cc dev/tsunami_pchip.cc dev/uart.cc + dev/uart8250.cc kern/kernel_binning.cc kern/kernel_stats.cc kern/system_events.cc - kern/linux/linux_events.cc + kern/freebsd/freebsd_system.cc kern/linux/linux_syscalls.cc kern/linux/linux_system.cc kern/linux/printk.cc @@ -309,75 +289,127 @@ full_system_sources = Split(''' kern/tru64/tru64_syscalls.cc kern/tru64/tru64_system.cc - mem/functional_mem/memory_control.cc - mem/functional_mem/physical_memory.cc - dev/platform.cc + mem/functional/memory_control.cc + mem/functional/physical.cc sim/system.cc + sim/pseudo_inst.cc + ''') + +# These are now included by the architecture specific SConscript +# arch/alpha/alpha_memory.cc +# arch/alpha/arguments.cc +# arch/alpha/ev5.cc +# arch/alpha/osfpal.cc +# arch/alpha/pseudo_inst.cc +# arch/alpha/stacktrace.cc +# arch/alpha/vtophys.cc + +# turbolaser encumbered sources +turbolaser_sources = Split(''' + encumbered/dev/dma.cc + encumbered/dev/etherdev.cc + encumbered/dev/scsi.cc + encumbered/dev/scsi_ctrl.cc + encumbered/dev/scsi_disk.cc + encumbered/dev/scsi_none.cc + encumbered/dev/tlaser_clock.cc + encumbered/dev/tlaser_ipi.cc + encumbered/dev/tlaser_mbox.cc + encumbered/dev/tlaser_mc146818.cc + encumbered/dev/tlaser_node.cc + encumbered/dev/tlaser_pcia.cc + encumbered/dev/tlaser_pcidev.cc + encumbered/dev/tlaser_serial.cc + encumbered/dev/turbolaser.cc + encumbered/dev/uart8530.cc ''') # Syscall emulation (non-full-system) sources syscall_emulation_sources = Split(''' - arch/alpha/alpha_common_syscall_emul.cc - arch/alpha/alpha_linux_process.cc - arch/alpha/alpha_tru64_process.cc cpu/memtest/memtest.cc - cpu/trace/opt_cpu.cc - cpu/trace/trace_cpu.cc - eio/eio.cc - eio/exolex.cc - eio/libexo.cc + encumbered/eio/eio.cc + encumbered/eio/exolex.cc + encumbered/eio/libexo.cc sim/process.cc sim/syscall_emul.cc ''') +# These are now included by the architecture specific SConscript +# arch/alpha/alpha_common_syscall_emul.cc +# arch/alpha/alpha_linux_process.cc +# arch/alpha/alpha_tru64_process.cc + targetarch_files = Split(''' - alpha_common_syscall_emul.hh alpha_linux_process.hh alpha_memory.hh alpha_tru64_process.hh aout_machdep.h arguments.hh - byte_swap.hh ecoff_machdep.h - elf_machdep.h ev5.hh faults.hh - isa_fullsys_traits.hh - isa_traits.hh - machine_exo.h - osfpal.hh - pseudo_inst.hh - vptr.hh + stacktrace.hh vtophys.hh ''') - +# pseudo_inst.hh +# isa_traits.hh +# osfpal.hh +# byte_swap.hh +# alpha_common_syscall_emul.hh +# vptr.hh +# isa_fullsys_traits.hh + +# Set up bridging headers to the architecture specific versions for f in targetarch_files: - env.Command('targetarch/' + f, 'arch/alpha/' + f, - '''echo '#include "arch/alpha/%s"' > $TARGET''' % f) + env.Command('targetarch/' + f, 'arch/%s/%s' % (env['TARGET_ISA'], f), + '''echo '#include "arch/%s/%s"' > $TARGET''' % (env['TARGET_ISA'], f)) + +# Let the target architecture define what sources it needs +arch_source = SConscript('arch/%s/SConscript' % env['TARGET_ISA'], + build_dir = 'build/%s/' % env['BUILD_DIR'], + exports = 'env', duplicate = False) +# Add a flag defining what THE_ISA should be for all compilation +env.Append(CPPDEFINES=[('THE_ISA','%s_ISA' % env['TARGET_ISA'].upper())]) # Set up complete list of sources based on configuration. -sources = base_sources +sources = base_sources + arch_source if env['FULL_SYSTEM']: sources += full_system_sources + if env['ALPHA_TLASER']: + sources += turbolaser_sources else: sources += syscall_emulation_sources -extra_libraries = [] -env.Append(LIBS=['z']) -if isdir('/usr/lib64/mysql') or isdir('/usr/lib/mysql') or \ - isdir('/usr/local/lib/mysql'): - print 'Compiling with MySQL support!' - env.Append(LIBPATH=['/usr/lib64/mysql', '/usr/local/lib/mysql/', - '/usr/lib/mysql']) - env.Append(CPPPATH=['/usr/local/include/mysql', '/usr/include/mysql']) +if env['USE_MYSQL']: sources += mysql_sources - env.Append(CPPDEFINES = 'USE_MYSQL') - env.Append(CPPDEFINES = 'STATS_BINNING') - env.Append(LIBS=['mysqlclient']) + +for opt in env.ExportOptions: + env.ConfigFile(opt) +################################################### +# +# Add an SCons scanner for ISA files +# +################################################### +import SCons.Scanner + +def ISAScan(): + return SCons.Scanner.Classic("ISAScan", + "$ISASUFFIXES", + "SRCDIR", + '^[ \t]*##[ \t]*include[ \t]*"([^>"]+)"') + +def ISAPath(env, dir, target=None, source=None, a=None): + return (Dir(env['SRCDIR']), Dir('.')) + +iscan = Scanner(function = ISAScan().scan, skeys = [".isa", ".ISA"], + path_function = ISAPath) +env.Append(SCANNERS = iscan) + + ################################################### # # Special build rules. @@ -391,16 +423,24 @@ env.Command(Split('base/traceflags.hh base/traceflags.cc'), 'python $SOURCE $TARGET.base') # several files are generated from arch/$TARGET_ISA/isa_desc. -env.Command(Split('''arch/alpha/decoder.cc - arch/alpha/decoder.hh - arch/alpha/alpha_full_cpu_exec.cc - arch/alpha/fast_cpu_exec.cc - arch/alpha/simple_cpu_exec.cc - arch/alpha/inorder_cpu_exec.cc - arch/alpha/full_cpu_exec.cc'''), - Split('''arch/alpha/isa_desc - arch/isa_parser.py'''), - '$SRCDIR/arch/isa_parser.py $SOURCE $TARGET.dir arch/alpha') +env.Command(Split(''' + arch/%s/decoder.cc + arch/%s/decoder.hh + arch/%s/alpha_o3_exec.cc + arch/%s/fast_cpu_exec.cc + arch/%s/simple_cpu_exec.cc + arch/%s/full_cpu_exec.cc''' % + (env['TARGET_ISA'], + env['TARGET_ISA'], + env['TARGET_ISA'], + env['TARGET_ISA'], + env['TARGET_ISA'], + env['TARGET_ISA'])), + Split(''' + arch/%s/isa/main.isa + arch/isa_parser.py''' % + env['TARGET_ISA']), + '$SRCDIR/arch/isa_parser.py $SOURCE $TARGET.dir arch/%s' % env['TARGET_ISA']) # libelf build is described in its own SConscript file. @@ -408,7 +448,6 @@ env.Command(Split('''arch/alpha/decoder.cc # header files into a place where they can be found. SConscript('libelf/SConscript-local', exports = 'env', duplicate=0) SConscript('python/SConscript', exports = ['env'], duplicate=0) -SConscript('simobj/SConscript', exports = 'env', duplicate=0) # This function adds the specified sources to the given build # environment, and returns a list of all the corresponding SCons @@ -422,7 +461,6 @@ def make_objs(sources, env): date_obj = env.Object('base/date.cc') env.Depends(date_obj, objs) objs.append(date_obj) - objs.extend(extra_libraries) return objs ################################################### @@ -439,25 +477,42 @@ def make_objs(sources, env): env.Append(CPPPATH='.') # Debug binary -debug = env.Copy(OBJSUFFIX='.do') -debug.Append(CCFLAGS=Split('-g -gstabs+ -O0')) -debug.Append(CPPDEFINES='DEBUG') -debug.Program(target = 'm5.debug', source = make_objs(sources, debug)) +debugEnv = env.Copy(OBJSUFFIX='.do') +debugEnv.Label = 'debug' +debugEnv.Append(CCFLAGS=Split('-g -gstabs+ -O0')) +debugEnv.Append(CPPDEFINES='DEBUG') +tlist = debugEnv.Program(target = 'm5.debug', + source = make_objs(sources, debugEnv)) +debugEnv.M5Binary = tlist[0] # Optimized binary -opt = env.Copy() -opt.Append(CCFLAGS=Split('-g -O5')) -opt.Program(target = 'm5.opt', source = make_objs(sources, opt)) +optEnv = env.Copy() +optEnv.Label = 'opt' +optEnv.Append(CCFLAGS=Split('-g -O5')) +tlist = optEnv.Program(target = 'm5.opt', + source = make_objs(sources, optEnv)) +optEnv.M5Binary = tlist[0] # "Fast" binary -fast = env.Copy(OBJSUFFIX='.fo') -fast.Append(CCFLAGS=Split('-O5')) -fast.Append(CPPDEFINES='NDEBUG') -fast.Program(target = 'm5.fast.unstripped', source = make_objs(sources, fast)) -fast.Command(target = 'm5.fast', source = 'm5.fast.unstripped', - action = 'strip $SOURCE -o $TARGET') +fastEnv = env.Copy(OBJSUFFIX='.fo') +fastEnv.Label = 'fast' +fastEnv.Append(CCFLAGS=Split('-O5')) +fastEnv.Append(CPPDEFINES='NDEBUG') +fastEnv.Program(target = 'm5.fast.unstripped', + source = make_objs(sources, fastEnv)) +tlist = fastEnv.Command(target = 'm5.fast', + source = 'm5.fast.unstripped', + action = 'strip $SOURCE -o $TARGET') +fastEnv.M5Binary = tlist[0] # Profiled binary -prof = env.Copy(OBJSUFFIX='.po') -prof.Append(CCFLAGS=Split('-O5 -g -pg'), LINKFLAGS='-pg') -prof.Program(target = 'm5.prof', source = make_objs(sources, prof)) +profEnv = env.Copy(OBJSUFFIX='.po') +profEnv.Label = 'prof' +profEnv.Append(CCFLAGS=Split('-O5 -g -pg'), LINKFLAGS='-pg') +tlist = profEnv.Program(target = 'm5.prof', + source = make_objs(sources, profEnv)) +profEnv.M5Binary = tlist[0] + +envList = [debugEnv, optEnv, fastEnv, profEnv] + +Return('envList')