xref: /llvm-project/flang/test/CMakeLists.txt (revision 06eb10dadfaeaadc5d0d95d38bea4bfb5253e077)
1# Test runner infrastructure for Flang. This configures the Flang test trees
2# for use by Lit, and delegates to LLVM's lit test handlers.
3add_subdirectory(lib)
4
5llvm_canonicalize_cmake_booleans(
6  FLANG_STANDALONE_BUILD
7  LLVM_BUILD_EXAMPLES
8  LLVM_BYE_LINK_INTO_TOOLS
9  LLVM_ENABLE_PLUGINS
10)
11
12set(FLANG_TOOLS_DIR ${FLANG_BINARY_DIR}/bin)
13
14# Check if 128-bit float computations can be done via long double
15check_cxx_source_compiles(
16  "#include <cfloat>
17   #if LDBL_MANT_DIG != 113
18   #error LDBL_MANT_DIG != 113
19   #endif
20   int main() { return 0; }
21  "
22  HAVE_LDBL_MANT_DIG_113)
23
24# FIXME In out-of-tree builds, "SHLIBDIR" is undefined and passing it to
25# `configure_lit_site_cfg` leads to a configuration error. This is currently
26# only required by plugins/examples, which are not supported in out-of-tree
27# builds.
28if (FLANG_STANDALONE_BUILD)
29  set(PATHS_FOR_PLUGINS "")
30else ()
31  set(PATHS_FOR_PLUGINS "SHLIBDIR")
32endif ()
33
34configure_lit_site_cfg(
35  ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in
36  ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg.py
37  MAIN_CONFIG
38  ${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.py
39  PATHS
40  ${PATHS_FOR_PLUGINS}
41)
42
43configure_lit_site_cfg(
44  ${CMAKE_CURRENT_SOURCE_DIR}/Unit/lit.site.cfg.py.in
45  ${CMAKE_CURRENT_BINARY_DIR}/Unit/lit.site.cfg.py
46  MAIN_CONFIG
47  ${CMAKE_CURRENT_SOURCE_DIR}/Unit/lit.cfg.py
48)
49
50configure_lit_site_cfg(
51  ${CMAKE_CURRENT_SOURCE_DIR}/NonGtestUnit/lit.site.cfg.py.in
52  ${CMAKE_CURRENT_BINARY_DIR}/NonGtestUnit/lit.site.cfg.py
53  MAIN_CONFIG
54  ${CMAKE_CURRENT_SOURCE_DIR}/NonGtestUnit/lit.cfg.py
55)
56
57set(FLANG_TEST_PARAMS
58  flang_site_config=${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg.py)
59
60set(FLANG_TEST_DEPENDS
61  flang
62  llvm-config
63  FileCheck
64  count
65  not
66  module_files
67  fir-opt
68  tco
69  bbc
70  llvm-dis
71  llvm-objdump
72  llvm-readobj
73  split-file
74  FortranRuntime
75  FortranDecimal
76)
77if (LLVM_ENABLE_PLUGINS AND NOT WIN32)
78  list(APPEND FLANG_TEST_DEPENDS Bye)
79endif()
80
81if (FLANG_INCLUDE_TESTS)
82  if (FLANG_GTEST_AVAIL)
83    list(APPEND FLANG_TEST_DEPENDS FlangUnitTests)
84  endif()
85endif()
86
87if (LLVM_BUILD_EXAMPLES)
88  list(APPEND FLANG_TEST_DEPENDS
89    flangPrintFunctionNames
90    flangOmpReport
91    flangFeatureList
92    )
93endif ()
94
95add_custom_target(flang-test-depends DEPENDS ${FLANG_TEST_DEPENDS})
96set_target_properties(flang-test-depends PROPERTIES FOLDER "Flang/Meta")
97
98add_lit_testsuite(check-flang "Running the Flang regression tests"
99  ${CMAKE_CURRENT_BINARY_DIR}
100  PARAMS ${FLANG_TEST_PARAMS}
101  DEPENDS ${FLANG_TEST_DEPENDS}
102)
103set_target_properties(check-flang PROPERTIES FOLDER "Flang/Meta")
104
105# In case of standalone builds.
106if (FLANG_STANDALONE_BUILD)
107  add_lit_testsuites(FLANG ${CMAKE_CURRENT_BINARY_DIR}
108    PARAMS ${FLANG_TEST_PARAMS}
109    DEPENDS ${FLANG_TEST_DEPENDS})
110else()
111  add_lit_testsuites(FLANG ${CMAKE_CURRENT_SOURCE_DIR}
112    PARAMS ${FLANG_TEST_PARAMS}
113    DEPENDS ${FLANG_TEST_DEPENDS})
114endif()
115
116# To modify the default target triple for flang tests.
117if (DEFINED FLANG_TEST_TARGET_TRIPLE)
118  if (NOT DEFINED LLVM_TARGET_TRIPLE_ENV OR LLVM_TARGET_TRIPLE_ENV STREQUAL "")
119    message(FATAL_ERROR "LLVM_TARGET_TRIPLE_ENV must also be defined in order "
120                        "to use FLANG_TEST_TARGET_TRIPLE.")
121  endif()
122endif()
123