518a519,527
> # 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
522,526c531,533
< # 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
531,534d537
< # 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'])
553a557,559
> # 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
573a580,590
> 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++'])
575,578d591
< # 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'])
714,725d726
< # 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
<
731,733c732
< custom_tests = { 'CheckLeading' : CheckLeading,
< 'CheckStaticAssert' : CheckStaticAssert,
< })
---
> custom_tests = { 'CheckLeading' : CheckLeading })
739,741d737
< # Check for C++11 features we want to use if they exist
< conf.CheckStaticAssert()
<
983,985c979,980
< 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']