[test] Reduce inconsistency between lit configuration files.
[lldb.git] / lldb / test / CMakeLists.txt
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
4 add_subdirectory(API)
5
6 # Configure and create module cache directories.
7 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.")
8 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.")
9 file(MAKE_DIRECTORY ${LLDB_TEST_MODULE_CACHE_LLDB})
10 file(MAKE_DIRECTORY ${LLDB_TEST_MODULE_CACHE_CLANG})
11
12 # LLVM_BUILD_MODE is used in lit.site.cfg
13 if (CMAKE_CFG_INTDIR STREQUAL ".")
14   set(LLVM_BUILD_MODE ".")
15 else ()
16   set(LLVM_BUILD_MODE "%(build_mode)s")
17 endif ()
18
19 if (CMAKE_SIZEOF_VOID_P EQUAL 8)
20   set(LLDB_IS_64_BITS 1)
21 endif()
22
23 get_property(LLDB_DOTEST_ARGS GLOBAL PROPERTY LLDB_DOTEST_ARGS_PROPERTY)
24 set(dotest_args_replacement ${LLVM_BUILD_MODE})
25
26
27 if(LLDB_BUILT_STANDALONE)
28   # In paths to our build-tree, replace CMAKE_CFG_INTDIR with our configuration name placeholder.
29   string(REPLACE ${CMAKE_CFG_INTDIR} ${LLVM_BUILD_MODE} config_runtime_output_dir ${LLVM_RUNTIME_OUTPUT_INTDIR})
30   string(REPLACE ${LLVM_RUNTIME_OUTPUT_INTDIR} ${config_runtime_output_dir} LLDB_DOTEST_ARGS "${LLDB_DOTEST_ARGS}")
31
32   # Remaining ones must be paths to the provided LLVM build-tree.
33   if(LLVM_CONFIGURATION_TYPES)
34     # LLDB uses single-config; LLVM multi-config; pick one and prefer Release types.
35     # Otherwise, if both use multi-config the default is fine.
36     if(NOT CMAKE_CONFIGURATION_TYPES)
37       if(RelWithDebInfo IN_LIST LLVM_CONFIGURATION_TYPES)
38         set(dotest_args_replacement RelWithDebInfo)
39       elseif(Release IN_LIST LLVM_CONFIGURATION_TYPES)
40         set(dotest_args_replacement Release)
41       else()
42         list(GET LLVM_CONFIGURATION_TYPES 0 dotest_args_replacement)
43       endif()
44     endif()
45   else()
46     # Common case: LLVM used a single-configuration generator like Ninja.
47     set(dotest_args_replacement ".")
48   endif()
49 endif()
50
51 string(REPLACE ${CMAKE_CFG_INTDIR} ${dotest_args_replacement} LLDB_DOTEST_ARGS "${LLDB_DOTEST_ARGS}")
52 string(REPLACE ${CMAKE_CFG_INTDIR} ${LLVM_BUILD_MODE} LLDB_LIBS_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR})
53 string(REPLACE ${CMAKE_CFG_INTDIR} ${LLVM_BUILD_MODE} LLDB_TOOLS_DIR ${LLVM_RUNTIME_OUTPUT_INTDIR})
54
55 add_lldb_test_dependency(
56   lit-cpuid
57   llc
58   lli
59   llvm-config
60   llvm-dwarfdump
61   llvm-nm
62   llvm-mc
63   llvm-objcopy
64   llvm-readobj
65   )
66
67 # Since llvm-strip is a symlink created by add_custom_target, it
68 # doesn't expose an export target when building standalone.
69 if(NOT LLDB_BUILT_STANDALONE)
70   add_lldb_test_dependency(llvm-strip)
71 endif()
72
73 if(TARGET lld)
74   add_lldb_test_dependency(lld)
75 else()
76   # LLD is required to link test executables on Windows.
77   if (CMAKE_SYSTEM_NAME MATCHES "Windows")
78     message(WARNING "lld required to test LLDB on Windows")
79   endif()
80 endif()
81
82 if(NOT LLDB_BUILT_STANDALONE)
83   add_lldb_test_dependency(
84     FileCheck
85     count
86     not
87   )
88 endif()
89
90 # These values are not canonicalized within LLVM.
91 llvm_canonicalize_cmake_booleans(
92   LLDB_DISABLE_PYTHON
93   LLVM_ENABLE_ZLIB
94   LLVM_ENABLE_SHARED_LIBS
95   LLDB_IS_64_BITS)
96
97 # Configure the top level test suite.
98 configure_lit_site_cfg(
99   ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in
100   ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg.py
101   MAIN_CONFIG
102   ${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.py)
103
104 # Configure the Shell test suite.
105 configure_lit_site_cfg(
106   ${CMAKE_CURRENT_SOURCE_DIR}/Shell/lit.site.cfg.py.in
107   ${CMAKE_CURRENT_BINARY_DIR}/Shell/lit.site.cfg.py
108   MAIN_CONFIG
109   ${CMAKE_CURRENT_SOURCE_DIR}/Shell/lit.cfg.py)
110
111 # Configure the Unit test suite.
112 configure_lit_site_cfg(
113   ${CMAKE_CURRENT_SOURCE_DIR}/Unit/lit.site.cfg.py.in
114   ${CMAKE_CURRENT_BINARY_DIR}/Unit/lit.site.cfg.py
115   MAIN_CONFIG
116   ${CMAKE_CURRENT_SOURCE_DIR}/Unit/lit.cfg.py)
117
118 # Configure the API test suite.
119 configure_lit_site_cfg(
120   ${CMAKE_CURRENT_SOURCE_DIR}/API/lit.site.cfg.py.in
121   ${CMAKE_CURRENT_BINARY_DIR}/API/lit.site.cfg.py
122   MAIN_CONFIG
123   ${CMAKE_CURRENT_SOURCE_DIR}/API/lit.cfg.py)
124 configure_file(
125   ${CMAKE_CURRENT_SOURCE_DIR}/Shell/lit-lldb-init.in
126   ${CMAKE_CURRENT_BINARY_DIR}/Shell/lit-lldb-init)
127
128
129 add_lit_testsuites(LLDB
130   ${CMAKE_CURRENT_SOURCE_DIR}
131   DEPENDS lldb-test-deps
132   )
133
134 add_lit_testsuite(check-lldb-lit "Running lldb lit test suite"
135   ${CMAKE_CURRENT_BINARY_DIR}
136   DEPENDS lldb-test-deps
137   )
138
139 set_target_properties(check-lldb-lit PROPERTIES FOLDER "lldb tests")
140
141 add_custom_target(check-lldb)
142 add_dependencies(check-lldb lldb-test-deps)
143 set_target_properties(check-lldb PROPERTIES FOLDER "lldb misc")
144 add_dependencies(check-lldb check-lldb-lit)