#
# SCons top-level build description (SConstruct) file.
#
-# While in this directory ('m5'), just type 'scons' to build the default
+# While in this directory ('gem5'), just type 'scons' to build the default
# configuration (see below), or type 'scons build/<CONFIG>/<binary>'
-# to build some other configuration (e.g., 'build/ALPHA_FS/m5.opt' for
+# to build some other configuration (e.g., 'build/ALPHA/gem5.opt' for
# the optimized full-system version).
#
-# You can build M5 in a different directory as long as there is a
+# You can build gem5 in a different directory as long as there is a
# 'build/<CONFIG>' somewhere along the target path. The build system
# expects that all configs under the same build directory are being
# built for the same host system.
#
# The following two commands are equivalent. The '-u' option tells
# scons to search up the directory tree for this SConstruct file.
-# % cd <path-to-src>/m5 ; scons build/ALPHA_FS/m5.debug
-# % cd <path-to-src>/m5/build/ALPHA_FS; scons -u m5.debug
+# % cd <path-to-src>/gem5 ; scons build/ALPHA/gem5.debug
+# % cd <path-to-src>/gem5/build/ALPHA; scons -u gem5.debug
#
# The following two commands are equivalent and demonstrate building
# in a directory outside of the source tree. The '-C' option tells
# scons to chdir to the specified directory to find this SConstruct
# file.
-# % cd <path-to-src>/m5 ; scons /local/foo/build/ALPHA_FS/m5.debug
-# % cd /local/foo/build/ALPHA_FS; scons -C <path-to-src>/m5 m5.debug
+# % cd <path-to-src>/gem5 ; scons /local/foo/build/ALPHA/gem5.debug
+# % cd /local/foo/build/ALPHA; scons -C <path-to-src>/gem5 gem5.debug
#
# You can use 'scons -H' to print scons options. If you're in this
-# 'm5' directory (or use -u or -C to tell scons where to find this
-# file), you can use 'scons -h' to print all the M5-specific build
+# 'gem5' directory (or use -u or -C to tell scons where to find this
+# file), you can use 'scons -h' to print all the gem5-specific build
# options as well.
#
###################################################
except SystemExit, e:
print """
For more details, see:
- http://m5sim.org/wiki/index.php/Compiling_M5
+ http://gem5.org/Dependencies
"""
raise
on the scons script.
For more details, see:
- http://m5sim.org/wiki/index.php/Using_a_non-default_Python_installation
+ http://gem5.org/wiki/index.php/Using_a_non-default_Python_installation
"""
raise
import SCons.Node
extra_python_paths = [
- Dir('src/python').srcnode().abspath, # M5 includes
+ Dir('src/python').srcnode().abspath, # gem5 includes
Dir('ext/ply').srcnode().abspath, # ply is used by several files
]
Export("help_texts")
-def AddM5Option(*args, **kwargs):
+
+# There's a bug in scons in that (1) by default, the help texts from
+# AddOption() are supposed to be displayed when you type 'scons -h'
+# and (2) you can override the help displayed by 'scons -h' using the
+# Help() function, but these two features are incompatible: once
+# you've overridden the help text using Help(), there's no way to get
+# at the help texts from AddOptions. See:
+# http://scons.tigris.org/issues/show_bug.cgi?id=2356
+# http://scons.tigris.org/issues/show_bug.cgi?id=2611
+# This hack lets us extract the help text from AddOptions and
+# re-inject it via Help(). Ideally someday this bug will be fixed and
+# we can just use AddOption directly.
+def AddLocalOption(*args, **kwargs):
col_width = 30
help = " " + ", ".join(args)
AddOption(*args, **kwargs)
-AddM5Option('--colors', dest='use_colors', action='store_true',
- help="Add color to abbreviated scons output")
-AddM5Option('--no-colors', dest='use_colors', action='store_false',
- help="Don't add color to abbreviated scons output")
-AddM5Option('--default', dest='default', type='string', action='store',
- help='Override which build_opts file to use for defaults')
-AddM5Option('--ignore-style', dest='ignore_style', action='store_true',
- help='Disable style checking hooks')
-AddM5Option('--update-ref', dest='update_ref', action='store_true',
- help='Update test reference outputs')
-AddM5Option('--verbose', dest='verbose', action='store_true',
- help='Print full tool command lines')
+AddLocalOption('--colors', dest='use_colors', action='store_true',
+ help="Add color to abbreviated scons output")
+AddLocalOption('--no-colors', dest='use_colors', action='store_false',
+ help="Don't add color to abbreviated scons output")
+AddLocalOption('--default', dest='default', type='string', action='store',
+ help='Override which build_opts file to use for defaults')
+AddLocalOption('--ignore-style', dest='ignore_style', action='store_true',
+ help='Disable style checking hooks')
+AddLocalOption('--update-ref', dest='update_ref', action='store_true',
+ help='Update test reference outputs')
+AddLocalOption('--verbose', dest='verbose', action='store_true',
+ help='Print full tool command lines')
use_colors = GetOption('use_colors')
if use_colors:
use_env[key] = val
main = Environment(ENV=use_env)
+main.Decider('MD5-timestamp')
main.root = Dir(".") # The current directory (where this file lives).
main.srcdir = Dir("src") # The source directory
#
# Mercurial Stuff.
#
-# If the M5 directory is a mercurial repository, we should do some
+# If the gem5 directory is a mercurial repository, we should do some
# extra things.
#
########################################################################
###################################################
# Find default configuration & binary.
-Default(environ.get('M5_DEFAULT_BINARY', 'build/ALPHA_SE/m5.debug'))
+Default(environ.get('M5_DEFAULT_BINARY', 'build/ALPHA/gem5.debug'))
# helper function: find last occurrence of element in list
def rfind(l, elt, offs = -1):
main['GCC'] = CXX_version and CXX_version.find('g++') >= 0
main['SUNCC'] = CXX_V and CXX_V.find('Sun C++') >= 0
main['ICC'] = CXX_V and CXX_V.find('Intel') >= 0
-if main['GCC'] + main['SUNCC'] + main['ICC'] > 1:
+main['CLANG'] = CXX_V and CXX_V.find('clang') >= 0
+if main['GCC'] + main['SUNCC'] + main['ICC'] + main['CLANG'] > 1:
print 'Error: How can we have two at the same time?'
Exit(1)
main.Append(CCFLAGS=['-library=stlport4'])
main.Append(CCFLAGS=['-xar'])
#main.Append(CCFLAGS=['-instances=semiexplicit'])
+elif main['CLANG']:
+ clang_version_re = re.compile(".* version (\d+\.\d+)")
+ clang_version_match = clang_version_re.match(CXX_version)
+ if (clang_version_match):
+ clang_version = clang_version_match.groups()[0]
+ if compareVersions(clang_version, "2.9") < 0:
+ print 'Error: clang version 2.9 or newer required.'
+ print ' Installed version:', clang_version
+ Exit(1)
+ else:
+ print 'Error: Unable to determine clang version.'
+ Exit(1)
+
+ main.Append(CCFLAGS=['-pipe'])
+ main.Append(CCFLAGS=['-fno-strict-aliasing'])
+ main.Append(CCFLAGS=['-Wall', '-Wno-sign-compare', '-Wundef'])
+ main.Append(CCFLAGS=['-Wno-tautological-compare'])
+ main.Append(CCFLAGS=['-Wno-self-assign'])
else:
print 'Error: Don\'t know what compiler options to use for your compiler.'
print ' Please fix SConstruct and src/SConscript and try again.'
sticky_vars.AddVariables(
EnumVariable('TARGET_ISA', 'Target ISA', 'alpha', all_isa_list),
- BoolVariable('FULL_SYSTEM', 'Full-system support', False),
ListVariable('CPU_MODELS', 'CPU models',
sorted(n for n,m in CpuModel.dict.iteritems() if m.default),
sorted(CpuModel.list)),
BoolVariable('NO_FAST_ALLOC', 'Disable fast object allocator', False),
BoolVariable('FORCE_FAST_ALLOC',
- 'Enable fast object allocator, even for m5.debug', False),
+ 'Enable fast object allocator, even for gem5.debug', False),
BoolVariable('FAST_ALLOC_STATS', 'Enable fast object allocator statistics',
False),
BoolVariable('EFENCE', 'Link with Electric Fence malloc debugger',
False),
BoolVariable('USE_POSIX_CLOCK', 'Use POSIX Clocks', have_posix_clock),
BoolVariable('USE_FENV', 'Use <fenv.h> IEEE mode control', have_fenv),
- BoolVariable('USE_CHECKER', 'Use checker for detailed CPU models', False),
BoolVariable('CP_ANNOTATE', 'Enable critical path annotation capability', False),
)
# These variables get exported to #defines in config/*.hh (see src/SConscript).
-export_vars += ['FULL_SYSTEM', 'USE_FENV',
- 'NO_FAST_ALLOC', 'FORCE_FAST_ALLOC', 'FAST_ALLOC_STATS',
- 'SS_COMPATIBLE_FP', 'USE_CHECKER', 'TARGET_ISA', 'CP_ANNOTATE',
- 'USE_POSIX_CLOCK' ]
+export_vars += ['USE_FENV', 'NO_FAST_ALLOC', 'FORCE_FAST_ALLOC',
+ 'FAST_ALLOC_STATS', 'SS_COMPATIBLE_FP',
+ 'TARGET_ISA', 'CP_ANNOTATE', 'USE_POSIX_CLOCK' ]
###################################################
#