import lit.formats
import os

config.name = 'cfi'
config.suffixes = ['.c', '.cpp', '.test']
config.test_source_root = os.path.dirname(__file__)

clangxx = ' '.join([config.clang] + config.cxx_mode_flags)

config.substitutions.append((r"%clangxx ", clangxx + ' '))
if config.lto_supported:
  clangxx_cfi = ' '.join(config.lto_launch + [clangxx] + config.lto_flags + ['-flto -fsanitize=cfi '])
  clangxx_cfi_diag = clangxx_cfi + '-fno-sanitize-trap=cfi -fsanitize-recover=cfi '
  config.substitutions.append((r"%clangxx_cfi ", clangxx_cfi))
  config.substitutions.append((r"%clangxx_cfi_diag ", clangxx_cfi_diag))
  config.substitutions.append((r"%clangxx_cfi_dso ", clangxx_cfi + '-fsanitize-cfi-cross-dso '))
  config.substitutions.append((r"%clangxx_cfi_dso_diag ", clangxx_cfi_diag + '-fsanitize-cfi-cross-dso '))
else:
  config.unsupported = True

if lit_config.params.get('check_supported', None) and config.unsupported:
  raise BaseException("Tests unsupported")
