X86: Move startup code to the system object to initialize a Linux system.
[gem5.git] / SConstruct
index 4bd787b1d6ea31363e9493d5bbe95e6585680385..062df47d6db3d4b59728545cd2dcbdc4733539d6 100644 (file)
 
 import sys
 import os
-import subprocess
 
 from os.path import isdir, join as joinpath
 
+import SCons
+
 # Check for recent-enough Python and SCons versions.  If your system's
 # default installation of Python is not recent enough, you can use a
 # non-default installation of the Python interpreter by either (1)
@@ -77,6 +78,10 @@ from os.path import isdir, join as joinpath
 # scons script, e.g., "/usr/local/bin/python2.4 `which scons` [args]".
 EnsurePythonVersion(2,4)
 
+# Import subprocess after we check the version since it doesn't exist in
+# Python < 2.4.
+import subprocess
+
 # Ironically, SCons 0.96 dies if you give EnsureSconsVersion a
 # 3-element version number.
 min_scons_version = (0,96,91)
@@ -329,6 +334,22 @@ conf = Configure(env,
                  conf_dir = joinpath(build_root, '.scons_config'),
                  log_file = joinpath(build_root, 'scons_config.log'))
 
+# Check if we should compile a 64 bit binary on Mac OS X/Darwin
+try:
+    import platform
+    uname = platform.uname()
+    if uname[0] == 'Darwin' and compare_versions(uname[2], '9.0.0') >= 0:
+        if int(subprocess.Popen('sysctl -n hw.cpu64bit_capable', shell=True,
+               stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
+               close_fds=True).communicate()[0][0]):
+            env.Append(CCFLAGS='-arch x86_64')
+            env.Append(CFLAGS='-arch x86_64')
+            env.Append(LINKFLAGS='-arch x86_64')
+            env.Append(ASFLAGS='-arch x86_64')
+            env['OSX64bit'] = True
+except:
+    pass
+
 # Recent versions of scons substitute a "Null" object for Configure()
 # when configuration isn't necessary, e.g., if the "--help" option is
 # present.  Unfortuantely this Null object always returns false,
@@ -454,14 +475,19 @@ all_isa_list.sort()
 all_cpu_list.sort()
 default_cpus.sort()
 
-def ExtraPathValidator(key, val, env):
+def PathListMakeAbsolute(val):
+    if not val:
+        return val
+    f = lambda p: os.path.abspath(os.path.expanduser(p))
+    return ':'.join(map(f, val.split(':')))
+
+def PathListAllExist(key, val, env):
     if not val:
         return
     paths = val.split(':')
     for path in paths:
-        path = os.path.expanduser(path)
         if not isdir(path):
-            raise AttributeError, "Invalid path: '%s'" % path
+            raise SCons.Errors.UserError("Path does not exist: '%s'" % path)
 
 sticky_opts.AddOptions(
     EnumOption('TARGET_ISA', 'Target ISA', 'alpha', all_isa_list),
@@ -491,7 +517,7 @@ sticky_opts.AddOptions(
      'Override the default PYTHONHOME for this system (use with caution)',
      '%s:%s' % (sys.prefix, sys.exec_prefix)),
     ('EXTRAS', 'Add Extra directories to the compilation', '',
-     ExtraPathValidator)
+     PathListAllExist, PathListMakeAbsolute)
     )
 
 nonsticky_opts.AddOptions(