X86: Get rid of BasicOperate format which wasn't used and referred to SparcStaticInst
[gem5.git] / SConstruct
index fa2366963f227a0d310679b7d99c105c81fed472..30c1ed0a637ec7fc840ded00983a68e9a60999e8 100644 (file)
@@ -67,7 +67,7 @@ import sys
 import os
 import subprocess
 
-from os.path import join as joinpath
+from os.path import isdir, join as joinpath
 
 # Check for recent-enough Python and SCons versions.  If your system's
 # default installation of Python is not recent enough, you can use a
@@ -86,7 +86,7 @@ except:
     print "Error checking current SCons version."
     print "SCons", ".".join(map(str,min_scons_version)), "or greater required."
     Exit(2)
-    
+
 
 # The absolute path to the current directory (where this file lives).
 ROOT = Dir('.').abspath
@@ -97,6 +97,34 @@ SRCDIR = joinpath(ROOT, 'src')
 # tell python where to find m5 python code
 sys.path.append(joinpath(ROOT, 'src/python'))
 
+def check_style_hook(ui):
+    ui.readconfig(joinpath(ROOT, '.hg', 'hgrc'))
+    style_hook = ui.config('hooks', 'pretxncommit.style', None)
+
+    if not style_hook:
+        print """\
+You're missing the M5 style hook.
+Please install the hook so we can ensure that all code fits a common style.
+
+All you'd need to do is add the following lines to your repository .hg/hgrc
+or your personal .hgrc
+----------------
+
+[extensions]
+style = %s/util/style.py
+
+[hooks]
+pretxncommit.style = python:style.check_whitespace
+""" % (ROOT)
+        sys.exit(1)
+
+if ARGUMENTS.get('IGNORE_STYLE') != 'True' and isdir(joinpath(ROOT, '.hg')):
+    try:
+        from mercurial import ui
+        check_style_hook(ui.ui())
+    except ImportError:
+        pass
+
 ###################################################
 #
 # Figure out which configurations to set up based on the path(s) of
@@ -183,7 +211,7 @@ env = Environment(ENV = os.environ,  # inherit user's environment vars
                   ROOT = ROOT,
                   SRCDIR = SRCDIR)
 
-#Parse CC/CXX early so that we use the correct compiler for 
+#Parse CC/CXX early so that we use the correct compiler for
 # to test for dependencies/versions/libraries/includes
 if ARGUMENTS.get('CC', None):
     env['CC'] = ARGUMENTS.get('CC')
@@ -212,14 +240,14 @@ env.Append(ENV = { 'M5_PLY' : Dir('ext/ply') })
 env['GCC'] = False
 env['SUNCC'] = False
 env['ICC'] = False
-env['GCC'] = subprocess.Popen(env['CXX'] + ' --version', shell=True, 
-        stdout=subprocess.PIPE, stderr=subprocess.STDOUT, 
+env['GCC'] = subprocess.Popen(env['CXX'] + ' --version', shell=True,
+        stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
         close_fds=True).communicate()[0].find('GCC') >= 0
-env['SUNCC'] = subprocess.Popen(env['CXX'] + ' -V', shell=True, 
-        stdout=subprocess.PIPE, stderr=subprocess.STDOUT, 
+env['SUNCC'] = subprocess.Popen(env['CXX'] + ' -V', shell=True,
+        stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
         close_fds=True).communicate()[0].find('Sun C++') >= 0
-env['ICC'] = subprocess.Popen(env['CXX'] + ' -V', shell=True, 
-        stdout=subprocess.PIPE, stderr=subprocess.STDOUT, 
+env['ICC'] = subprocess.Popen(env['CXX'] + ' -V', shell=True,
+        stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
         close_fds=True).communicate()[0].find('Intel') >= 0
 if env['GCC'] + env['SUNCC'] + env['ICC'] > 1:
     print 'Error: How can we have two at the same time?'
@@ -259,7 +287,8 @@ if not env.has_key('SWIG'):
 # Check for appropriate SWIG version
 swig_version = os.popen('swig -version').read().split()
 # First 3 words should be "SWIG Version x.y.z"
-if swig_version[0] != 'SWIG' or swig_version[1] != 'Version':
+if len(swig_version) < 3 or \
+        swig_version[0] != 'SWIG' or swig_version[1] != 'Version':
     print 'Error determining SWIG version.'
     Exit(1)
 
@@ -280,7 +309,7 @@ for scanner in env['SCANNERS']:
     skeys = scanner.skeys
     if skeys == '.i':
         continue
-    
+
     if isinstance(skeys, (list, tuple)) and '.i' in skeys:
         continue
 
@@ -406,6 +435,15 @@ all_isa_list.sort()
 all_cpu_list.sort()
 default_cpus.sort()
 
+def ExtraPathValidator(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
+
 sticky_opts.AddOptions(
     EnumOption('TARGET_ISA', 'Target ISA', 'alpha', all_isa_list),
     BoolOption('FULL_SYSTEM', 'Full-system support', False),
@@ -432,7 +470,9 @@ sticky_opts.AddOptions(
     ('BATCH_CMD', 'Batch pool submission command name', 'qdo'),
     ('PYTHONHOME',
      'Override the default PYTHONHOME for this system (use with caution)',
-     '%s:%s' % (sys.prefix, sys.exec_prefix))
+     '%s:%s' % (sys.prefix, sys.exec_prefix)),
+    ('EXTRAS', 'Add Extra directories to the compilation', '',
+     ExtraPathValidator)
     )
 
 nonsticky_opts.AddOptions(
@@ -488,7 +528,7 @@ def config_emitter(target, source, env):
         val = int(val)
     elif isinstance(val, str):
         val = '"' + val + '"'
-        
+
     # Sources are option name & value (packaged in SCons Value nodes)
     return ([target], [Value(option), Value(val)])
 
@@ -545,22 +585,22 @@ def make_switching_dir(dirname, switch_headers, env):
     # header to generate.  'source' is a dummy variable, since we get the
     # list of ISAs from env['ALL_ISA_LIST'].
     def gen_switch_hdr(target, source, env):
-       fname = str(target[0])
-       basename = os.path.basename(fname)
-       f = open(fname, 'w')
-       f.write('#include "arch/isa_specific.hh"\n')
-       cond = '#if'
-       for isa in all_isa_list:
-           f.write('%s THE_ISA == %s_ISA\n#include "%s/%s/%s"\n'
-                   % (cond, isa.upper(), dirname, isa, basename))
-           cond = '#elif'
-       f.write('#else\n#error "THE_ISA not set"\n#endif\n')
-       f.close()
-       return 0
+        fname = str(target[0])
+        basename = os.path.basename(fname)
+        f = open(fname, 'w')
+        f.write('#include "arch/isa_specific.hh"\n')
+        cond = '#if'
+        for isa in all_isa_list:
+            f.write('%s THE_ISA == %s_ISA\n#include "%s/%s/%s"\n'
+                    % (cond, isa.upper(), dirname, isa, basename))
+            cond = '#elif'
+        f.write('#else\n#error "THE_ISA not set"\n#endif\n')
+        f.close()
+        return 0
 
     # String to print when generating header
     def gen_switch_hdr_string(target, source, env):
-       return "Generating switch header " + str(target[0])
+        return "Generating switch header " + str(target[0])
 
     # Build SCons Action object. 'varlist' specifies env vars that this
     # action depends on; when env['ALL_ISA_LIST'] changes these actions
@@ -584,6 +624,8 @@ base_env = env
 
 for build_path in build_paths:
     print "Building in", build_path
+    env['BUILDDIR'] = build_path
+
     # build_dir is the tail component of build path, and is used to
     # determine the build parameters (e.g., 'ALPHA_SE')
     (build_root, build_dir) = os.path.split(build_path)