[NFC][Coroutines] Use structured binding with llvm::enumerate in CoroSplit (#116879)
[llvm-project.git] / lldb / test / CMakeLists.txt
blob6449ac5a9247f696277db64649c11bab8cf639dc
1 # Test runner infrastructure for LLDB. This configures the LLDB test trees
2 # for use by Lit, and delegates to LLVM's lit test handlers.
3 # Lit requires a Python3 interpreter, let's be careful and fail early if it's
4 # not present.
5 if (NOT DEFINED Python3_EXECUTABLE)
6   message(SEND_ERROR
7     "LLDB test suite requires a Python3 interpreter but none "
8     "was found. Please install Python3 or disable tests with "
9     "`LLDB_INCLUDE_TESTS=OFF`.")
10 endif()
12 if(LLDB_ENFORCE_STRICT_TEST_REQUIREMENTS)
13   message(STATUS "Enforcing strict test requirements for LLDB")
14   # Lit uses psutil to do per-test timeouts.
15   set(useful_python_modules psutil packaging)
17   if(NOT WIN32)
18     # We no longer vendor pexpect and it is not used on Windows.
19     list(APPEND pexpect)
20   endif()
22   foreach(module ${useful_python_modules})
23     lldb_find_python_module(${module})
24     if (NOT PY_${module}_FOUND)
25       message(SEND_ERROR
26         "Python module '${module}' not found. Please install it via pip or via "
27         "your operating system's package manager. Alternatively, disable "
28         "strict testing requirements with "
29         "`LLDB_ENFORCE_STRICT_TEST_REQUIREMENTS=OFF`")
30     endif()
31   endforeach()
32 endif()
34 if(LLDB_BUILT_STANDALONE)
35   # In order to run check-lldb-* we need the correct map_config directives in
36   # llvm-lit. Because this is a standalone build, LLVM doesn't know about LLDB,
37   # and the lldb mappings are missing. We build our own llvm-lit, and tell LLVM
38   # to use the llvm-lit in the lldb build directory.
39   if (EXISTS ${LLVM_MAIN_SRC_DIR}/utils/llvm-lit)
40     set(LLVM_EXTERNAL_LIT ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/llvm-lit)
41   endif()
42 endif()
44 # Configure the build directory.
45 # The .noindex suffix is a marker for Spotlight to never index the
46 # build directory.  LLDB queries Spotlight to locate .dSYM bundles
47 # based on the UUID embedded in a binary, and because the UUID is a
48 # hash of filename and .text section, there *will* be conflicts inside
49 # the build directory.
50 set(LLDB_TEST_BUILD_DIRECTORY "${PROJECT_BINARY_DIR}/lldb-test-build.noindex" CACHE PATH "The build root for building tests.")
52 # Configure and create module cache directories.
53 set(LLDB_TEST_MODULE_CACHE_LLDB "${LLDB_TEST_BUILD_DIRECTORY}/module-cache-lldb" CACHE PATH "The Clang module cache used by the Clang embedded in LLDB while running tests.")
54 set(LLDB_TEST_MODULE_CACHE_CLANG "${LLDB_TEST_BUILD_DIRECTORY}/module-cache-clang" CACHE PATH "The Clang module cache used by the Clang while building tests.")
55 file(MAKE_DIRECTORY ${LLDB_TEST_MODULE_CACHE_LLDB})
56 file(MAKE_DIRECTORY ${LLDB_TEST_MODULE_CACHE_CLANG})
58 # Windows and Linux have no built-in ObjC runtime. Turn this on in order to run tests with GNUstep.
59 option(LLDB_TEST_OBJC_GNUSTEP "Enable ObjC tests with GNUstep libobjc2 on non-Apple platforms" Off)
60 set(LLDB_TEST_OBJC_GNUSTEP_DIR "" CACHE PATH "Custom path to the GNUstep shared library")
62 if (LLDB_TEST_OBJC_GNUSTEP)
63   if (LLDB_TEST_OBJC_GNUSTEP_DIR)
64     set(GNUstepObjC_DIR ${LLDB_TEST_OBJC_GNUSTEP_DIR})
65   endif()
66   find_package(GNUstepObjC)
67   if (NOT GNUstepObjC_FOUND)
68     if (LLDB_TEST_OBJC_GNUSTEP_DIR)
69       message(SEND_ERROR "Failed to find GNUstep libobjc2 in ${LLDB_TEST_OBJC_GNUSTEP_DIR}. "
70                           "Please check LLDB_TEST_OBJC_GNUSTEP_DIR or turn off LLDB_TEST_OBJC_GNUSTEP.")
71     else()
72       message(SEND_ERROR "Failed to find GNUstep libobjc2. "
73                           "Please set LLDB_TEST_OBJC_GNUSTEP_DIR or turn off LLDB_TEST_OBJC_GNUSTEP.")
74     endif()
75   endif()
76   set(LLDB_TEST_OBJC_GNUSTEP_DIR ${GNUstepObjC_DIR})
77 elseif (LLDB_TEST_OBJC_GNUSTEP_DIR)
78   message(STATUS "Reset LLDB_TEST_OBJC_GNUSTEP_DIR since LLDB_TEST_OBJC_GNUSTEP is off")
79   set(LLDB_TEST_OBJC_GNUSTEP_DIR "" CACHE PATH "Custom path to the GNUstep shared library" FORCE)
80 endif()
82 # LLVM_BUILD_MODE is used in lit.site.cfg
83 if (CMAKE_CFG_INTDIR STREQUAL ".")
84   set(LLVM_BUILD_MODE ".")
85 else ()
86   set(LLVM_BUILD_MODE "%(build_mode)s")
87 endif ()
89 string(REPLACE ${CMAKE_CFG_INTDIR} ${LLVM_BUILD_MODE} LLDB_LIBS_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR})
90 string(REPLACE ${CMAKE_CFG_INTDIR} ${LLVM_BUILD_MODE} LLDB_TOOLS_DIR ${LLVM_RUNTIME_OUTPUT_INTDIR})
92 # Create a custom target to track test dependencies.
93 add_custom_target(lldb-test-depends)
94 set_target_properties(lldb-test-depends PROPERTIES FOLDER "LLDB/Tests")
96 # Create an alias for the legacy name of lldb-test-depends
97 add_custom_target(lldb-test-deps)
98 set_target_properties(lldb-test-deps PROPERTIES FOLDER "LLDB/Tests")
99 add_dependencies(lldb-test-deps lldb-test-depends)
101 function(add_lldb_test_dependency)
102   foreach(dependency ${ARGN})
103     add_dependencies(lldb-test-depends ${dependency})
104   endforeach()
105 endfunction(add_lldb_test_dependency)
107 # lldb itself and lldb-test is an hard dependency for the testsuites.
108 add_lldb_test_dependency(lldb)
109 add_lldb_test_dependency(lldb-test)
111 # On Darwin, darwin-debug is an hard dependency for the testsuites.
112 if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
113   add_lldb_test_dependency(darwin-debug)
114 endif()
116 if(TARGET debugserver)
117   add_lldb_test_dependency(debugserver)
118 endif()
119 if(TARGET lldb-server)
120   add_lldb_test_dependency(lldb-server)
121 endif()
123 if(TARGET lldb-dap)
124   add_lldb_test_dependency(lldb-dap)
125 endif()
127 if(TARGET liblldb)
128   add_lldb_test_dependency(liblldb)
129 endif()
131 if(TARGET lldb-framework)
132   add_lldb_test_dependency(lldb-framework)
133 endif()
135 # Add dependencies that are not exported targets when building standalone.
136 if(NOT LLDB_BUILT_STANDALONE)
137   add_lldb_test_dependency(
138     FileCheck
139     count
140     dsymutil
141     llvm-strip
142     not
143     split-file
144     yaml2obj
145   )
146 endif()
148 if (LLVM_ENABLE_RUNTIMES)
149   add_lldb_test_dependency(runtimes)
150 endif()
152 # Add dependencies if we test with the in-tree clang.
153 # This works with standalone builds as they import the clang target.
154 if(TARGET clang)
155   add_lldb_test_dependency(clang)
157   # TestFullLtoStepping depends on LTO, and only runs when the compiler is clang.
158   add_lldb_test_dependency(LTO)
160   if (TARGET libcxx OR ("libcxx" IN_LIST LLVM_ENABLE_RUNTIMES))
161     set(LLDB_HAS_LIBCXX ON)
162     if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
163       set(LIBCXX_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LLVM_DEFAULT_TARGET_TRIPLE})
164       set(LIBCXX_GENERATED_INCLUDE_DIR "${LLVM_BINARY_DIR}/include/c++/v1")
165       set(LIBCXX_GENERATED_INCLUDE_TARGET_DIR "${LLVM_BINARY_DIR}/include/${LLVM_DEFAULT_TARGET_TRIPLE}/c++/v1")
166     else()
167       set(LIBCXX_LIBRARY_DIR ${CMAKE_BINARY_DIR}/lib${LIBCXX_LIBDIR_SUFFIX})
168       set(LIBCXX_GENERATED_INCLUDE_DIR "${CMAKE_BINARY_DIR}/include/c++/v1")
169     endif()
170   endif()
172   if (TARGET compiler-rt OR "compiler-rt" IN_LIST LLVM_ENABLE_RUNTIMES)
173     set(LLDB_HAS_COMPILER_RT ON)
174   endif()
176   if(APPLE AND NOT LLVM_TARGET_IS_CROSSCOMPILE_HOST)
177     # FIXME: Standalone builds should import the cxx target as well.
178     if(LLDB_BUILT_STANDALONE)
179       # For now check that the include directory exists.
180       set(cxx_dir "${LLDB_TEST_LIBCXX_ROOT_DIR}/include/c++")
181       if(EXISTS ${cxx_dir})
182         # These variables make sure the API tests can run against a custom
183         # build of libcxx even for standalone builds.
184         set(LLDB_HAS_LIBCXX ON)
185         set(LIBCXX_LIBRARY_DIR "${LLDB_TEST_LIBCXX_ROOT_DIR}/lib${LIBCXX_LIBDIR_SUFFIX}")
186         set(LIBCXX_GENERATED_INCLUDE_DIR "${LLDB_TEST_LIBCXX_ROOT_DIR}/include/c++/v1")
187       else()
188         message(SEND_ERROR
189             "Couldn't find libcxx build in '${LLDB_TEST_LIBCXX_ROOT_DIR}'. To run the "
190             "test-suite for a standalone LLDB build please build libcxx and point "
191             "LLDB_TEST_LIBCXX_ROOT_DIR to it.")
192       endif()
193     else()
194       # We require libcxx for the test suite, so if we aren't building it,
195       # provide a helpful error about how to resolve the situation.
196       if(NOT LLDB_HAS_LIBCXX)
197         message(SEND_ERROR
198           "LLDB test suite requires libc++, but it is currently disabled. "
199           "Please add `libcxx` to `LLVM_ENABLE_RUNTIMES` or disable tests via "
200           "`LLDB_INCLUDE_TESTS=OFF`.")
201       endif()
202     endif()
203   endif()
204 endif()
206 if (LLDB_BUILT_STANDALONE)
207   set(LLVM_HOST_TRIPLE ${LLVM_TARGET_TRIPLE})
208 endif()
210 add_lldb_test_dependency(
211   lit-cpuid
212   llc
213   lli
214   llvm-config
215   llvm-dwarfdump
216   llvm-dwp
217   llvm-nm
218   llvm-mc
219   llvm-objcopy
220   llvm-pdbutil
221   llvm-readobj
222   llvm-ar
223   )
225 if(TARGET lld)
226   add_lldb_test_dependency(lld)
227 else()
228   # LLD is required to link test executables on Windows.
229   if (CMAKE_SYSTEM_NAME MATCHES "Windows")
230     message(WARNING "lld required to test LLDB on Windows")
231   endif()
232 endif()
234 if (CMAKE_SIZEOF_VOID_P EQUAL 8)
235   set(LLDB_IS_64_BITS 1)
236 endif()
238 set(LLDB_TEST_SHELL_DISABLE_REMOTE OFF CACHE BOOL "Disable remote Shell tests execution")
240 # These values are not canonicalized within LLVM.
241 llvm_canonicalize_cmake_booleans(
242   LLDB_BUILD_INTEL_PT
243   LLDB_ENABLE_PYTHON
244   LLDB_ENABLE_LUA
245   LLDB_ENABLE_LZMA
246   LLVM_ENABLE_ZLIB
247   LLVM_ENABLE_SHARED_LIBS
248   LLDB_HAS_LIBCXX
249   LLDB_TEST_SHELL_DISABLE_REMOTE
250   LLDB_TOOL_LLDB_SERVER_BUILD
251   LLDB_USE_SYSTEM_DEBUGSERVER
252   LLDB_IS_64_BITS)
254 # Configure the individual test suites.
255 add_subdirectory(API)
256 add_subdirectory(Shell)
257 add_subdirectory(Unit)
259 # Configure the top level test suite.
260 configure_lit_site_cfg(
261   ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in
262   ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg.py
263   MAIN_CONFIG
264   ${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.py)
266 add_lit_testsuite(check-lldb "Running lldb lit test suite"
267   ${CMAKE_CURRENT_BINARY_DIR}
268   DEPENDS
269     lldb-api-test-deps
270     lldb-shell-test-deps
271     lldb-unit-test-deps)
273 if(LLDB_BUILT_STANDALONE)
274   # This has to happen *AFTER* add_lit_testsuite.
275   if (EXISTS ${LLVM_MAIN_SRC_DIR}/utils/llvm-lit)
276     # LLVM's make_paths_relative uses Python3_EXECUTABLE which isn't set in a
277     # standalone LLDB build.
278     set(Python3_EXECUTABLE ${Python3_EXECUTABLE})
279     add_subdirectory(${LLVM_MAIN_SRC_DIR}/utils/llvm-lit ${CMAKE_CURRENT_BINARY_DIR}/llvm-lit)
280   endif()
281 endif()