| # -*- Python -*- |
| |
| import os |
| |
| # Setup config name. |
| config.name = 'EfficiencySanitizer' + config.name_suffix |
| |
| # Setup source root. |
| config.test_source_root = os.path.dirname(__file__) |
| |
| # Setup default compiler flags used with -fsanitize=efficiency option. |
| base_cflags = ([config.target_cflags] + config.debug_info_flags) |
| base_cxxflags = config.cxx_mode_flags + base_cflags |
| |
| frag_cflags = (["-fsanitize=efficiency-cache-frag"] + base_cflags) |
| wset_cflags = (["-fsanitize=efficiency-working-set"] + base_cflags) |
| esan_incdir = config.test_source_root + "/../../lib" |
| unit_cxxflags = (["-I%s" % esan_incdir, "-std=c++11", |
| # We need to link with the esan runtime. |
| # Tests should pass %env_esan_opts="record_snapshots=0". |
| "-fsanitize=efficiency-working-set"] + base_cxxflags) |
| |
| def build_invocation(compile_flags): |
| return " " + " ".join([config.clang] + compile_flags) + " " |
| |
| config.substitutions.append( ("%clang ", |
| build_invocation(base_cflags)) ) |
| config.substitutions.append( ("%clang_esan_frag ", |
| build_invocation(frag_cflags)) ) |
| config.substitutions.append( ("%clang_esan_wset ", |
| build_invocation(wset_cflags)) ) |
| config.substitutions.append( ("%clangxx_unit", |
| build_invocation(unit_cxxflags)) ) |
| |
| default_esan_opts = '' |
| config.substitutions.append(('%env_esan_opts=', |
| 'env ESAN_OPTIONS=' + default_esan_opts)) |
| |
| # Default test suffixes. |
| config.suffixes = ['.c', '.cpp'] |
| |
| # EfficiencySanitizer tests are currently supported on Linux x86-64 only. |
| if config.host_os not in ['Linux'] or config.target_arch not in ['x86_64', 'mips64'] : |
| config.unsupported = True |