blob: e9f4f83f98923c62fdeeb56c83ba526f9c7bfd7e [file] [log] [blame]
# Test runner infrastructure for Clang. This configures the Clang test trees
# for use by Lit, and delegates to LLVM's lit test handlers.
llvm_canonicalize_cmake_booleans(
BUILD_SHARED_LIBS
CLANG_BUILD_EXAMPLES
CLANG_BUILT_STANDALONE
CLANG_DEFAULT_PIE_ON_LINUX
CLANG_ENABLE_STATIC_ANALYZER
CLANG_PLUGIN_SUPPORT
CLANG_SPAWN_CC1
CLANG_ENABLE_CIR
CLANG_ENABLE_OBJC_REWRITER
CLANG_LINK_CLANG_DYLIB
ENABLE_BACKTRACES
LLVM_BUILD_EXAMPLES
LLVM_BYE_LINK_INTO_TOOLS
LLVM_ENABLE_PLUGINS
LLVM_ENABLE_ZLIB
LLVM_ENABLE_ZSTD
LLVM_ENABLE_PER_TARGET_RUNTIME_DIR
LLVM_ENABLE_THREADS
LLVM_ENABLE_REVERSE_ITERATION
LLVM_LINK_LLVM_DYLIB
LLVM_WITH_Z3
PPC_LINUX_DEFAULT_IEEELONGDOUBLE
LLVM_TOOL_LLVM_DRIVER_BUILD
LLVM_INCLUDE_SPIRV_TOOLS_TESTS
)
# Run tests requiring Z3 headers only if LLVM was built with Z3
# and the headers are available while building Clang -- the latter may
# not be the case when building standalone against installed LLVM.
set(TEST_WITH_Z3_MOCK 0)
if(LLVM_WITH_Z3 AND Z3_FOUND AND CMAKE_SYSTEM_NAME MATCHES "Linux")
llvm_add_library(
MockZ3SolverCheck
MODULE Analysis/z3/Inputs/MockZ3_solver_check.cpp
DISABLE_LLVM_LINK_LLVM_DYLIB)
if(TARGET MockZ3SolverCheck)
list(APPEND CLANG_TEST_DEPS
MockZ3SolverCheck)
target_include_directories(
MockZ3SolverCheck
PRIVATE ${Z3_INCLUDE_DIR})
set(TEST_WITH_Z3_MOCK 1)
endif()
endif()
configure_lit_site_cfg(
${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in
${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg.py
MAIN_CONFIG
${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.py
PATHS
"LLVM_SOURCE_DIR"
"LLVM_BINARY_DIR"
"LLVM_TOOLS_DIR"
"LLVM_LIBS_DIR"
"SHLIBDIR"
"LLVM_LIT_TOOLS_DIR"
"LLVM_EXTERNAL_LIT"
"CLANG_BINARY_DIR"
"CLANG_SOURCE_DIR"
"CURRENT_TOOLS_DIR"
"CMAKE_LIBRARY_OUTPUT_DIRECTORY"
)
configure_lit_site_cfg(
${CMAKE_CURRENT_SOURCE_DIR}/Unit/lit.site.cfg.py.in
${CMAKE_CURRENT_BINARY_DIR}/Unit/lit.site.cfg.py
MAIN_CONFIG
${CMAKE_CURRENT_SOURCE_DIR}/Unit/lit.cfg.py
PATHS
"LLVM_SOURCE_DIR"
"LLVM_BINARY_DIR"
"LLVM_TOOLS_DIR"
"LLVM_LIBS_DIR"
"CLANG_BINARY_DIR"
"SHLIBDIR"
)
option(CLANG_TEST_USE_VG "Run Clang tests under Valgrind" OFF)
if(CLANG_TEST_USE_VG)
set(CLANG_TEST_EXTRA_ARGS ${CLANG_TEST_EXTRA_ARGS} "--vg")
endif ()
list(APPEND CLANG_TEST_DEPS
apinotes-test
c-index-test
clang
clang-fuzzer-dictionary
clang-resource-headers
clang-format
clang-tblgen
clang-offload-bundler
clang-import-test
clang-refactor
clang-diff
clang-installapi
clang-scan-deps
clang-linker-wrapper
clang-nvlink-wrapper
clang-offload-bundler
clang-offload-packager
clang-sycl-linker
diagtool
hmaptool
)
if(CLANG_ENABLE_CIR)
list(APPEND CLANG_TEST_DEPS
cir-opt
cir-translate
mlir-translate
)
endif()
if(CLANG_ENABLE_STATIC_ANALYZER)
list(APPEND CLANG_TEST_DEPS
clang-check
clang-extdef-mapping
)
endif()
if(CLANG_BUILD_EXAMPLES AND CLANG_PLUGIN_SUPPORT)
list(APPEND CLANG_TEST_DEPS
Attribute
AnnotateFunctions
CallSuperAttr
PluginsOrder
PrintFunctionNames
LLVMPrintFunctionNames
)
endif ()
if(LLVM_INCLUDE_SPIRV_TOOLS_TESTS)
list(APPEND CLANG_TEST_DEPS
spirv-dis
spirv-val
spirv-as
spirv-link
)
endif()
if( NOT CLANG_BUILT_STANDALONE )
list(APPEND CLANG_TEST_DEPS
llvm-config
FileCheck count not
llc
llvm-ar
llvm-as
llvm-bcanalyzer
llvm-cat
llvm-cxxfilt
llvm-dis
llvm-dwarfdump
llvm-ifs
llvm-link
llvm-lto2
llvm-mc
llvm-modextract
llvm-nm
llvm-objcopy
llvm-objdump
llvm-pdbutil
llvm-profdata
llvm-rc
llvm-readelf
llvm-readobj
llvm-readtapi
llvm-strip
llvm-symbolizer
llvm-windres
obj2yaml
opt
split-file
yaml2obj
)
if(TARGET llvm-lto)
list(APPEND CLANG_TEST_DEPS llvm-lto)
endif()
endif()
if(CLANG_ENABLE_STATIC_ANALYZER)
if(CLANG_PLUGIN_SUPPORT AND LLVM_ENABLE_PLUGINS) # Determine if we built them
list(APPEND CLANG_TEST_DEPS
SampleAnalyzerPlugin
CheckerDependencyHandlingAnalyzerPlugin
CheckerOptionHandlingAnalyzerPlugin
)
endif()
endif()
if (HAVE_CLANG_REPL_SUPPORT)
list(APPEND CLANG_TEST_DEPS
clang-repl
)
endif()
# Copy gen_ast_dump_json_test.py to the clang build dir. This allows invoking
# it without having to pass the --clang= argument
configure_file(AST/gen_ast_dump_json_test.py
${CLANG_BINARY_DIR}/bin/gen_ast_dump_json_test.py COPYONLY)
add_custom_target(clang-test-depends DEPENDS ${CLANG_TEST_DEPS})
set_target_properties(clang-test-depends PROPERTIES FOLDER "Clang/Tests")
add_lit_testsuite(check-clang "Running the Clang regression tests"
${CMAKE_CURRENT_BINARY_DIR}
#LIT ${LLVM_LIT}
DEPENDS ${CLANG_TEST_DEPS}
ARGS ${CLANG_TEST_EXTRA_ARGS}
)
add_lit_testsuites(CLANG ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${CLANG_TEST_DEPS}
FOLDER "Clang tests/Suites"
)
# Add a legacy target spelling: clang-test
add_custom_target(clang-test)
add_dependencies(clang-test check-clang)
set_target_properties(clang-test PROPERTIES FOLDER "Clang/Tests")
# FIXME: This logic can be removed once all buildbots have moved
# debuginfo-test from clang/test to llvm/projects or monorepo.
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/debuginfo-tests)
message(WARNING "Including debuginfo-tests in clang/test is deprecated. Move to llvm/projects or use monorepo.")
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/debuginfo-tests/CMakeLists.txt)
add_subdirectory(debuginfo-tests)
endif()
endif()
add_subdirectory(Analysis/LifetimeSafety)