help='Disable linking against tcmalloc')
AddLocalOption('--with-ubsan', dest='with_ubsan', action='store_true',
help='Build with Undefined Behavior Sanitizer if available')
+AddLocalOption('--with-asan', dest='with_asan', action='store_true',
+ help='Build with Address Sanitizer if available')
termcap = get_termcap(GetOption('use_colors'))
'PYTHONPATH', 'RANLIB', 'SWIG', 'TERM' ])
use_prefixes = [
+ "ASAN_", # address sanitizer symbolizer path and settings
"CCACHE_", # ccache (caching compiler wrapper) configuration
"CCC_", # clang static analyzer configuration
"DISTCC_", # distcc (distributed compiler wrapper) configuration
new_env.Append(CCFLAGS='-fsanitize=undefined')
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')
+ new_env.Append(LINKFLAGS='-fsanitize=address')
+
if env['CLANG']:
swig_env.Append(CCFLAGS=['-Wno-sometimes-uninitialized',
'-Wno-deprecated-register',
'-Wno-tautological-compare'])
- # All supported clang versions have support for UBSan, so if
- # asked to use it, append the compiler and linker flags.
+ # We require clang >= 3.1, so there is no need to check any
+ # versions here.
if GetOption('with_ubsan'):
new_env.Append(CCFLAGS='-fsanitize=undefined')
new_env.Append(LINKFLAGS='-fsanitize=undefined')
+ if GetOption('with_asan'):
+ new_env.Append(CCFLAGS='-fsanitize=address')
+ new_env.Append(LINKFLAGS='-fsanitize=address')
+
werror_env = new_env.Clone()
# Treat warnings as errors but white list some warnings that we
# want to allow (e.g., deprecation warnings).