# -*- Python -*-

import os

# Setup config name.
config.name = 'TypeSanitizer' + getattr(config, 'name_suffix', 'default')

# Setup source root.
config.test_source_root = os.path.dirname(__file__)

# Setup default compiler flags used with -fsanitize=type option.
clang_tysan_cflags = (["-fsanitize=type",
                      "-mno-omit-leaf-frame-pointer",
                      "-fno-omit-frame-pointer",
                      "-fno-optimize-sibling-calls"] +
                      config.target_cflags +
                      config.debug_info_flags)
clang_tysan_cxxflags = config.cxx_mode_flags + clang_tysan_cflags

def build_invocation(compile_flags):
  return " " + " ".join([config.clang] + compile_flags) + " "

config.substitutions.append( ("%clang_tysan ", build_invocation(clang_tysan_cflags)) )
config.substitutions.append( ("%clangxx_tysan ", build_invocation(clang_tysan_cxxflags)) )

# Default test suffixes.
config.suffixes = ['.c', '.cc', '.cpp']

# TypeSanitizer tests are currently supported on Linux only.
if config.host_os not in ['Linux']:
  config.unsupported = True

if config.target_arch != 'aarch64':
  config.available_features.add('stable-runtime')

