scons: Bump minimum gcc version to 4.8
authorAndreas Hansson <andreas.hansson@arm.com>
Mon, 30 May 2016 06:10:48 +0000 (02:10 -0400)
committerAndreas Hansson <andreas.hansson@arm.com>
Mon, 30 May 2016 06:10:48 +0000 (02:10 -0400)
After reaching consensus on the mailing list, this patch officially
makes gcc 4.8 the minimum.

A few checks in the SConstruct are cleaned up as a result. This patch
also adds "-fno-omit-frame-pointer" when using ASAN (which is part of
the gcc/clang  recommended flags).

SConstruct
src/SConscript

index 53dd6d352edb0d15660526720d4e896c007ecf20..f8eac47e6d049a7d57b9c04a70c54abff91fc277 100755 (executable)
@@ -675,12 +675,12 @@ else:
     Exit(1)
 
 if main['GCC']:
-    # Check for a supported version of gcc. >= 4.7 is chosen for its
+    # Check for a supported version of gcc. >= 4.8 is chosen for its
     # level of c++11 support. See
     # http://gcc.gnu.org/projects/cxx0x.html for details.
     gcc_version = readCommand([main['CXX'], '-dumpversion'], exception=False)
-    if compareVersions(gcc_version, "4.7") < 0:
-        print 'Error: gcc version 4.7 or newer required.'
+    if compareVersions(gcc_version, "4.8") < 0:
+        print 'Error: gcc version 4.8 or newer required.'
         print '       Installed version:', gcc_version
         Exit(1)
 
@@ -690,23 +690,21 @@ if main['GCC']:
     # to avoid performance penalties on certain AMD chips. Older
     # assemblers detect this as an error, "Error: expecting string
     # instruction after `rep'"
-    if compareVersions(gcc_version, "4.8") > 0:
-        as_version_raw = readCommand([main['AS'], '-v', '/dev/null'],
-                                     exception=False).split()
-
-        # version strings may contain extra distro-specific
-        # qualifiers, so play it safe and keep only what comes before
-        # the first hyphen
-        as_version = as_version_raw[-1].split('-')[0] if as_version_raw \
-            else None
-
-        if not as_version or compareVersions(as_version, "2.23") < 0:
-            print termcap.Yellow + termcap.Bold + \
-                'Warning: This combination of gcc and binutils have' + \
-                ' known incompatibilities.\n' + \
-                '         If you encounter build problems, please update ' + \
-                'binutils to 2.23.' + \
-                termcap.Normal
+    as_version_raw = readCommand([main['AS'], '-v', '/dev/null'],
+                                 exception=False).split()
+
+    # version strings may contain extra distro-specific
+    # qualifiers, so play it safe and keep only what comes before
+    # the first hyphen
+    as_version = as_version_raw[-1].split('-')[0] if as_version_raw else None
+
+    if not as_version or compareVersions(as_version, "2.23") < 0:
+        print termcap.Yellow + termcap.Bold + \
+            'Warning: This combination of gcc and binutils have' + \
+            ' known incompatibilities.\n' + \
+            '         If you encounter build problems, please update ' + \
+            'binutils to 2.23.' + \
+            termcap.Normal
 
     # Make sure we warn if the user has requested to compile with the
     # Undefined Benahvior Sanitizer and this version of gcc does not
@@ -739,7 +737,7 @@ if main['GCC']:
 
 elif main['CLANG']:
     # Check for a supported version of clang, >= 3.1 is needed to
-    # support similar features as gcc 4.7. See
+    # support similar features as gcc 4.8. See
     # http://clang.llvm.org/cxx_status.html for details
     clang_version_re = re.compile(".* version (\d+\.\d+)")
     clang_version_match = clang_version_re.search(CXX_version)
index d0835bda3d15f35f85e29aa18209b059ed311c93..bb6f26fc1221820d6fd36e3ac6a6e3e6315a5dce 100755 (executable)
@@ -1084,9 +1084,9 @@ def makeEnv(env, label, objsfx, strip = False, **kwargs):
             new_env.Append(LINKFLAGS='-fsanitize=undefined')
 
         # The address sanitizer is available for gcc >= 4.8
-        if GetOption('with_asan')  and \
-                compareVersions(env['GCC_VERSION'], '4.8') >= 0:
-            new_env.Append(CCFLAGS='-fsanitize=address')
+        if GetOption('with_asan'):
+            new_env.Append(CCFLAGS=['-fsanitize=address',
+                                    '-fno-omit-frame-pointer'])
             new_env.Append(LINKFLAGS='-fsanitize=address')
 
     if env['CLANG']:
@@ -1101,7 +1101,8 @@ def makeEnv(env, label, objsfx, strip = False, **kwargs):
             new_env.Append(LINKFLAGS='-fsanitize=undefined')
 
         if GetOption('with_asan'):
-            new_env.Append(CCFLAGS='-fsanitize=address')
+            new_env.Append(CCFLAGS=['-fsanitize=address',
+                                    '-fno-omit-frame-pointer'])
             new_env.Append(LINKFLAGS='-fsanitize=address')
 
     werror_env = new_env.Clone()