ruby: convert block size, memory size to unsigned
[gem5.git] / SConstruct
index 6795a25d9fd9c85f7b3b802c81b2c07fb8d36475..93adc85de27d2ed4044e07e64c35819b3e902fef 100755 (executable)
@@ -516,22 +516,25 @@ if main['GCC'] + main['CLANG'] > 1:
 
 # Set up default C++ compiler flags
 if main['GCC']:
+    # Check for a supported version of gcc, >= 4.4 is needed for c++0x
+    # support. See http://gcc.gnu.org/projects/cxx0x.html for details
+    gcc_version = readCommand([main['CXX'], '-dumpversion'], exception=False)
+    if compareVersions(gcc_version, "4.4") < 0:
+        print 'Error: gcc version 4.4 or newer required.'
+        print '       Installed version:', gcc_version
+        Exit(1)
+
+    main['GCC_VERSION'] = gcc_version
     main.Append(CCFLAGS=['-pipe'])
     main.Append(CCFLAGS=['-fno-strict-aliasing'])
     main.Append(CCFLAGS=['-Wall', '-Wno-sign-compare', '-Wundef'])
-    # Read the GCC version to check for versions with bugs
-    # Note CCVERSION doesn't work here because it is run with the CC
-    # before we override it from the command line
-    gcc_version = readCommand([main['CXX'], '-dumpversion'], exception=False)
-    main['GCC_VERSION'] = gcc_version
+    main.Append(CXXFLAGS=['-std=c++0x'])
+
+    # Check for versions with bugs
     if not compareVersions(gcc_version, '4.4.1') or \
        not compareVersions(gcc_version, '4.4.2'):
         print 'Info: Tree vectorizer in GCC 4.4.1 & 4.4.2 is buggy, disabling.'
         main.Append(CCFLAGS=['-fno-tree-vectorize'])
-    # c++0x support in gcc is useful already from 4.4, see
-    # http://gcc.gnu.org/projects/cxx0x.html for details
-    if compareVersions(gcc_version, '4.4') >= 0:
-        main.Append(CXXFLAGS=['-std=c++0x'])
 
     # LTO support is only really working properly from 4.6 and beyond
     if compareVersions(gcc_version, '4.6') >= 0:
@@ -551,6 +554,9 @@ if main['GCC']:
                                    '-fuse-linker-plugin']
 
 elif main['CLANG']:
+    # Check for a supported version of clang, >= 2.9 is needed to
+    # support similar features as gcc 4.4. See
+    # http://clang.llvm.org/cxx_status.html for details
     clang_version_re = re.compile(".* version (\d+\.\d+)")
     clang_version_match = clang_version_re.match(CXX_version)
     if (clang_version_match):
@@ -571,11 +577,18 @@ elif main['CLANG']:
     # Ruby makes frequent use of extraneous parantheses in the printing
     # of if-statements
     main.Append(CCFLAGS=['-Wno-parentheses'])
+    main.Append(CXXFLAGS=['-std=c++0x'])
+    # On Mac OS X/Darwin we need to also use libc++ (part of XCode) as
+    # opposed to libstdc++ to make the transition from TR1 to
+    # C++11. See http://libcxx.llvm.org. However, clang has chosen a
+    # strict implementation of the C++11 standard, and does not allow
+    # incomplete types in template arguments (besides unique_ptr and
+    # shared_ptr), and the libc++ STL containers create problems in
+    # combination with the current gem5 code. For now, we stick with
+    # libstdc++ and use the TR1 namespace.
+    # if sys.platform == "darwin":
+    #     main.Append(CXXFLAGS=['-stdlib=libc++'])
 
-    # clang 2.9 does not play well with c++0x as it ships with C++
-    # headers that produce errors, this was fixed in 3.0
-    if compareVersions(clang_version, "3") >= 0:
-        main.Append(CXXFLAGS=['-std=c++0x'])
 else:
     print termcap.Yellow + termcap.Bold + 'Error' + termcap.Normal,
     print "Don't know what compiler options to use for your compiler."
@@ -624,21 +637,32 @@ if len(protoc_version) < 2 or protoc_version[0] != 'libprotoc':
         termcap.Normal
     main['PROTOC'] = False
 else:
-    # Determine the appropriate include path and library path using
-    # pkg-config, that means we also need to check for pkg-config
-    if not readCommand(['pkg-config', '--version'], exception=''):
-        print 'Error: pkg-config not found. Please install and retry.'
-        Exit(1)
-
-    main.ParseConfig('pkg-config --cflags --libs-only-L protobuf')
-
     # Based on the availability of the compress stream wrappers,
     # require 2.1.0
     min_protoc_version = '2.1.0'
     if compareVersions(protoc_version[1], min_protoc_version) < 0:
-        print 'Error: protoc version', min_protoc_version, 'or newer required.'
-        print '       Installed version:', protoc_version[1]
-        Exit(1)
+        print termcap.Yellow + termcap.Bold + \
+            'Warning: protoc version', min_protoc_version, \
+            'or newer required.\n' + \
+            '         Installed version:', protoc_version[1], \
+            termcap.Normal
+        main['PROTOC'] = False
+    else:
+        # Attempt to determine the appropriate include path and
+        # library path using pkg-config, that means we also need to
+        # check for pkg-config. Note that it is possible to use
+        # protobuf without the involvement of pkg-config. Later on we
+        # check go a library config check and at that point the test
+        # will fail if libprotobuf cannot be found.
+        if readCommand(['pkg-config', '--version'], exception=''):
+            try:
+                # Attempt to establish what linking flags to add for protobuf
+                # using pkg-config
+                main.ParseConfig('pkg-config --cflags --libs-only-L protobuf')
+            except:
+                print termcap.Yellow + termcap.Bold + \
+                    'Warning: pkg-config could not get protobuf flags.' + \
+                    termcap.Normal
 
 # Check for SWIG
 if not main.has_key('SWIG'):
@@ -711,34 +735,17 @@ def CheckLeading(context):
     context.Result(ret)
     return ret
 
-# Test for the presence of C++11 static asserts. If the compiler lacks
-# support for static asserts, base/compiler.hh enables a macro that
-# removes any static asserts in the code.
-def CheckStaticAssert(context):
-    context.Message("Checking for C++11 static_assert support...")
-    ret = context.TryCompile('''
-        static_assert(1, "This assert is always true");
-        ''', extension=".cc")
-    context.env.Append(HAVE_STATIC_ASSERT=ret)
-    context.Result(ret)
-    return ret
-
 # Platform-specific configuration.  Note again that we assume that all
 # builds under a given build root run on the same host platform.
 conf = Configure(main,
                  conf_dir = joinpath(build_root, '.scons_config'),
                  log_file = joinpath(build_root, 'scons_config.log'),
-                 custom_tests = { 'CheckLeading' : CheckLeading,
-                                  'CheckStaticAssert' : CheckStaticAssert,
-                                })
+                 custom_tests = { 'CheckLeading' : CheckLeading })
 
 # Check for leading underscores.  Don't really need to worry either
 # way so don't need to check the return code.
 conf.CheckLeading()
 
-# Check for C++11 features we want to use if they exist
-conf.CheckStaticAssert()
-
 # Check if we should compile a 64 bit binary on Mac OS X/Darwin
 try:
     import platform
@@ -850,11 +857,12 @@ main['HAVE_PROTOBUF'] = main['PROTOC'] and \
     conf.CheckLibWithHeader('protobuf', 'google/protobuf/message.h',
                             'C++', 'GOOGLE_PROTOBUF_VERIFY_VERSION;')
 
-# If we have the compiler but not the library, treat it as an error.
+# If we have the compiler but not the library, print another warning.
 if main['PROTOC'] and not main['HAVE_PROTOBUF']:
-    print 'Error: did not find protocol buffer library and/or headers.'
-    print '       Please install libprotobuf-dev and try again.'
-    Exit(1)
+    print termcap.Yellow + termcap.Bold + \
+        'Warning: did not find protocol buffer library and/or headers.\n' + \
+    '       Please install libprotobuf-dev for tracing support.' + \
+    termcap.Normal
 
 # Check for librt.
 have_posix_clock = \
@@ -980,9 +988,8 @@ sticky_vars.AddVariables(
     )
 
 # These variables get exported to #defines in config/*.hh (see src/SConscript).
-export_vars += ['USE_FENV', 'SS_COMPATIBLE_FP',
-                'TARGET_ISA', 'CP_ANNOTATE', 'USE_POSIX_CLOCK', 'PROTOCOL',
-                'HAVE_STATIC_ASSERT', 'HAVE_PROTOBUF']
+export_vars += ['USE_FENV', 'SS_COMPATIBLE_FP', 'TARGET_ISA', 'CP_ANNOTATE',
+                'USE_POSIX_CLOCK', 'PROTOCOL', 'HAVE_PROTOBUF']
 
 ###################################################
 #