configure_lit_site_cfg(
  ${CMAKE_CURRENT_SOURCE_DIR}/lit.common.configured.in
  ${CMAKE_CURRENT_BINARY_DIR}/lit.common.configured)

# BlocksRuntime and builtins testsuites are not yet ported to lit.
# add_subdirectory(BlocksRuntime)
# add_subdirectory(builtins)

set(SANITIZER_COMMON_LIT_TEST_DEPS)
if(COMPILER_RT_STANDALONE_BUILD)
  add_executable(FileCheck IMPORTED GLOBAL)
  set_property(TARGET FileCheck PROPERTY IMPORTED_LOCATION ${LLVM_TOOLS_BINARY_DIR}/FileCheck)
  list(APPEND SANITIZER_COMMON_LIT_TEST_DEPS FileCheck)
endif()

# When ANDROID, we build tests with the host compiler (i.e. CMAKE_C_COMPILER),
# and run tests with tools from the host toolchain.
if(NOT ANDROID)
  if(NOT COMPILER_RT_STANDALONE_BUILD)
    # Use LLVM utils and Clang from the same build tree.
    list(APPEND SANITIZER_COMMON_LIT_TEST_DEPS
      clang clang-headers FileCheck count not llvm-config llvm-nm llvm-objdump
      llvm-symbolizer compiler-rt-headers)
    if (COMPILER_RT_HAS_PROFILE)
      list(APPEND SANITIZER_COMMON_LIT_TEST_DEPS profile)
    endif()
    if (WIN32)
      list(APPEND SANITIZER_COMMON_LIT_TEST_DEPS KillTheDoctor)
    endif()
  endif()
  if(UNIX)
    list(APPEND SANITIZER_COMMON_LIT_TEST_DEPS SanitizerLintCheck)
  endif()
endif()

# Run sanitizer tests only if we're sure that clang would produce
# working binaries.
if(COMPILER_RT_CAN_EXECUTE_TESTS)
  if(COMPILER_RT_HAS_ASAN)
    add_subdirectory(asan)
  endif()
  if(COMPILER_RT_HAS_DFSAN)
    add_subdirectory(dfsan)
  endif()
  if(COMPILER_RT_HAS_LSAN)
    add_subdirectory(lsan)
  endif()
  if(COMPILER_RT_HAS_MSAN)
    add_subdirectory(msan)
  endif()
  if(COMPILER_RT_HAS_PROFILE)
    add_subdirectory(profile)
  endif()
  if(COMPILER_RT_HAS_SANITIZER_COMMON)
    add_subdirectory(sanitizer_common)
  endif()
  if(COMPILER_RT_HAS_TSAN)
    add_subdirectory(tsan)
  endif()
  if(COMPILER_RT_HAS_UBSAN)
    add_subdirectory(ubsan)
  endif()
  # CFI tests require diagnostic mode, which is implemented in UBSan.
  if(COMPILER_RT_HAS_UBSAN)
    add_subdirectory(cfi)
  endif()
  if(COMPILER_RT_HAS_SAFESTACK)
    add_subdirectory(safestack)
  endif()
endif()

if(COMPILER_RT_STANDALONE_BUILD)
  # Now that we've traversed all the directories and know all the lit testsuites,
  # introduce a rule to run to run all of them.
  get_property(LLVM_LIT_TESTSUITES GLOBAL PROPERTY LLVM_LIT_TESTSUITES)
  get_property(LLVM_LIT_DEPENDS GLOBAL PROPERTY LLVM_LIT_DEPENDS)
  add_lit_target(check-all
    "Running all regression tests"
    ${LLVM_LIT_TESTSUITES}
    DEPENDS ${LLVM_LIT_DEPENDS})
endif()
