33e6b13184f3f9e58ee5670f0e156824f933d3f1
[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 # the value is 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_lit_site_cfg(
98   ${CMAKE_CURRENT_SOURCE_DIR}/Shell/lit.site.cfg.py.in
99   ${CMAKE_CURRENT_BINARY_DIR}/Shell/lit.site.cfg.py
100   MAIN_CONFIG
101   ${CMAKE_CURRENT_SOURCE_DIR}/Shell/lit.cfg.py)
102 configure_lit_site_cfg(
103   ${CMAKE_CURRENT_SOURCE_DIR}/Unit/lit.site.cfg.py.in
104   ${CMAKE_CURRENT_BINARY_DIR}/Unit/lit.site.cfg.py
105   MAIN_CONFIG
106   ${CMAKE_CURRENT_SOURCE_DIR}/Unit/lit.cfg.py)
107 configure_lit_site_cfg(
108   ${CMAKE_CURRENT_SOURCE_DIR}/API/lit.site.cfg.in
109   ${CMAKE_CURRENT_BINARY_DIR}/API/lit.site.cfg)
110 configure_lit_site_cfg(
111   ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in
112   ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg.py
113   MAIN_CONFIG
114   ${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.py)
115
116 configure_file(
117   ${CMAKE_CURRENT_SOURCE_DIR}/Shell/lit-lldb-init.in
118   ${CMAKE_CURRENT_BINARY_DIR}/Shell/lit-lldb-init)
119
120
121 add_lit_testsuites(LLDB
122   ${CMAKE_CURRENT_SOURCE_DIR}
123   DEPENDS lldb-test-deps
124   )
125
126 add_lit_testsuite(check-lldb-lit "Running lldb lit test suite"
127   ${CMAKE_CURRENT_BINARY_DIR}
128   DEPENDS lldb-test-deps
129   )
130
131 set_target_properties(check-lldb-lit PROPERTIES FOLDER "lldb tests")
132
133 add_custom_target(check-lldb)
134 add_dependencies(check-lldb lldb-test-deps)
135 set_target_properties(check-lldb PROPERTIES FOLDER "lldb misc")
136 add_dependencies(check-lldb check-lldb-lit)