scons: Bump minimum gcc version to 4.8

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).
This commit is contained in:
Andreas Hansson 2016-05-30 02:10:48 -04:00
parent 7c8d6e3660
commit be014d4338
2 changed files with 22 additions and 23 deletions

View file

@ -675,12 +675,12 @@ else:
Exit(1) Exit(1)
if main['GCC']: 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 # level of c++11 support. See
# http://gcc.gnu.org/projects/cxx0x.html for details. # http://gcc.gnu.org/projects/cxx0x.html for details.
gcc_version = readCommand([main['CXX'], '-dumpversion'], exception=False) gcc_version = readCommand([main['CXX'], '-dumpversion'], exception=False)
if compareVersions(gcc_version, "4.7") < 0: if compareVersions(gcc_version, "4.8") < 0:
print 'Error: gcc version 4.7 or newer required.' print 'Error: gcc version 4.8 or newer required.'
print ' Installed version:', gcc_version print ' Installed version:', gcc_version
Exit(1) Exit(1)
@ -690,23 +690,21 @@ if main['GCC']:
# to avoid performance penalties on certain AMD chips. Older # to avoid performance penalties on certain AMD chips. Older
# assemblers detect this as an error, "Error: expecting string # assemblers detect this as an error, "Error: expecting string
# instruction after `rep'" # instruction after `rep'"
if compareVersions(gcc_version, "4.8") > 0: as_version_raw = readCommand([main['AS'], '-v', '/dev/null'],
as_version_raw = readCommand([main['AS'], '-v', '/dev/null'], exception=False).split()
exception=False).split()
# version strings may contain extra distro-specific # version strings may contain extra distro-specific
# qualifiers, so play it safe and keep only what comes before # qualifiers, so play it safe and keep only what comes before
# the first hyphen # the first hyphen
as_version = as_version_raw[-1].split('-')[0] if as_version_raw \ as_version = as_version_raw[-1].split('-')[0] if as_version_raw else None
else None
if not as_version or compareVersions(as_version, "2.23") < 0: if not as_version or compareVersions(as_version, "2.23") < 0:
print termcap.Yellow + termcap.Bold + \ print termcap.Yellow + termcap.Bold + \
'Warning: This combination of gcc and binutils have' + \ 'Warning: This combination of gcc and binutils have' + \
' known incompatibilities.\n' + \ ' known incompatibilities.\n' + \
' If you encounter build problems, please update ' + \ ' If you encounter build problems, please update ' + \
'binutils to 2.23.' + \ 'binutils to 2.23.' + \
termcap.Normal termcap.Normal
# Make sure we warn if the user has requested to compile with the # Make sure we warn if the user has requested to compile with the
# Undefined Benahvior Sanitizer and this version of gcc does not # Undefined Benahvior Sanitizer and this version of gcc does not
@ -739,7 +737,7 @@ if main['GCC']:
elif main['CLANG']: elif main['CLANG']:
# Check for a supported version of clang, >= 3.1 is needed to # 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 # http://clang.llvm.org/cxx_status.html for details
clang_version_re = re.compile(".* version (\d+\.\d+)") clang_version_re = re.compile(".* version (\d+\.\d+)")
clang_version_match = clang_version_re.search(CXX_version) clang_version_match = clang_version_re.search(CXX_version)

View file

@ -1084,9 +1084,9 @@ def makeEnv(env, label, objsfx, strip = False, **kwargs):
new_env.Append(LINKFLAGS='-fsanitize=undefined') new_env.Append(LINKFLAGS='-fsanitize=undefined')
# The address sanitizer is available for gcc >= 4.8 # The address sanitizer is available for gcc >= 4.8
if GetOption('with_asan') and \ if GetOption('with_asan'):
compareVersions(env['GCC_VERSION'], '4.8') >= 0: new_env.Append(CCFLAGS=['-fsanitize=address',
new_env.Append(CCFLAGS='-fsanitize=address') '-fno-omit-frame-pointer'])
new_env.Append(LINKFLAGS='-fsanitize=address') new_env.Append(LINKFLAGS='-fsanitize=address')
if env['CLANG']: if env['CLANG']:
@ -1101,7 +1101,8 @@ def makeEnv(env, label, objsfx, strip = False, **kwargs):
new_env.Append(LINKFLAGS='-fsanitize=undefined') new_env.Append(LINKFLAGS='-fsanitize=undefined')
if GetOption('with_asan'): 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') new_env.Append(LINKFLAGS='-fsanitize=address')
werror_env = new_env.Clone() werror_env = new_env.Clone()