• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1include(HandleLitArguments)
2add_subdirectory(tools)
3
4# By default, libcxx and libcxxabi share a library directory.
5if (NOT LIBCXX_CXX_ABI_LIBRARY_PATH)
6  set(LIBCXX_CXX_ABI_LIBRARY_PATH "${LIBCXX_LIBRARY_DIR}" CACHE PATH
7      "The path to libc++abi library.")
8endif()
9
10set(AUTO_GEN_COMMENT "## Autogenerated by libcxx configuration.\n# Do not edit!")
11set(SERIALIZED_LIT_PARAMS "# Lit parameters serialized here for llvm-lit to pick them up\n")
12
13if (LIBCXX_EXECUTOR)
14  message(DEPRECATION "LIBCXX_EXECUTOR is deprecated, please add executor=... to LIBCXX_TEST_PARAMS")
15  serialize_lit_string_param(SERIALIZED_LIT_PARAMS executor "${LIBCXX_EXECUTOR}")
16endif()
17
18if (NOT LIBCXX_ENABLE_EXCEPTIONS)
19  serialize_lit_param(SERIALIZED_LIT_PARAMS enable_exceptions False)
20endif()
21
22if (NOT LIBCXX_ENABLE_RTTI)
23  serialize_lit_param(SERIALIZED_LIT_PARAMS enable_rtti False)
24endif()
25
26serialize_lit_string_param(SERIALIZED_LIT_PARAMS hardening_mode "${LIBCXX_HARDENING_MODE}")
27
28if (CMAKE_CXX_COMPILER_TARGET)
29  serialize_lit_string_param(SERIALIZED_LIT_PARAMS target_triple "${CMAKE_CXX_COMPILER_TARGET}")
30else()
31  serialize_lit_string_param(SERIALIZED_LIT_PARAMS target_triple "${LLVM_DEFAULT_TARGET_TRIPLE}")
32endif()
33
34if (LLVM_USE_SANITIZER)
35  serialize_lit_string_param(SERIALIZED_LIT_PARAMS use_sanitizer "${LLVM_USE_SANITIZER}")
36endif()
37
38serialize_lit_params_list(SERIALIZED_LIT_PARAMS LIBCXX_TEST_PARAMS)
39
40if (NOT DEFINED LIBCXX_TEST_DEPS)
41  message(FATAL_ERROR "Expected LIBCXX_TEST_DEPS to be defined")
42endif()
43
44if (MSVC)
45  # Shared code for initializing some parameters used by all
46  # llvm-libc++-*-clangcl.cfg.in test configs.
47  set(dbg_include "")
48
49  if (NOT CMAKE_MSVC_RUNTIME_LIBRARY OR CMAKE_MSVC_RUNTIME_LIBRARY MATCHES "DLL$")
50    set(fms_runtime_lib "dll")
51    set(cxx_lib "msvcprt")
52  else()
53    set(fms_runtime_lib "static")
54    set(cxx_lib "libcpmt")
55  endif()
56
57  if ((NOT CMAKE_MSVC_RUNTIME_LIBRARY AND uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG")
58      OR (CMAKE_MSVC_RUNTIME_LIBRARY MATCHES "Debug"))
59    set(dbg_include " -include set_windows_crt_report_mode.h")
60    set(fms_runtime_lib "${fms_runtime_lib}_dbg")
61    set(cxx_lib "${cxx_lib}d")
62  endif()
63
64  serialize_lit_string_param(SERIALIZED_LIT_PARAMS dbg_include "${dbg_include}")
65  serialize_lit_string_param(SERIALIZED_LIT_PARAMS fms_runtime_lib "${fms_runtime_lib}")
66  serialize_lit_string_param(SERIALIZED_LIT_PARAMS cxx_lib "${cxx_lib}")
67endif()
68
69if (LIBCXX_INCLUDE_TESTS)
70  include(AddLLVM) # for configure_lit_site_cfg and add_lit_testsuite
71
72  configure_file("${CMAKE_CURRENT_SOURCE_DIR}/configs/cmake-bridge.cfg.in"
73                 "${CMAKE_CURRENT_BINARY_DIR}/cmake-bridge.cfg"
74                 @ONLY)
75
76  configure_lit_site_cfg(
77    "${LIBCXX_TEST_CONFIG}"
78    ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg
79    MAIN_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.py")
80
81  add_custom_target(cxx-test-depends
82    DEPENDS cxx ${LIBCXX_TEST_DEPS}
83    COMMENT "Builds dependencies required to run the test suite.")
84
85  add_lit_testsuite(check-cxx
86    "Running libcxx tests"
87    ${CMAKE_CURRENT_BINARY_DIR}
88    DEPENDS cxx-test-depends)
89
90  if(LIBCXX_ENABLE_STD_MODULES)
91    # Generates the modules used in the test.
92    # Note the test will regenerate this with the proper setting
93    # - the right DCMAKE_CXX_STANDARD
94    # - the right test compilation flags
95    # Since modules depend on these flags there currently is no way to
96    # avoid generating these for the tests. The advantage of the
97    # pre generation is that less build information needs to be shared
98    # in the bridge.
99    add_custom_command(
100        OUTPUT "${CMAKE_BINARY_DIR}/test/__config_module__/CMakeCache.txt"
101        COMMAND
102        ${CMAKE_COMMAND}
103            "-G${CMAKE_GENERATOR}"
104            "-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}"
105            "-B${CMAKE_BINARY_DIR}/test/__config_module__"
106            "-H${LIBCXX_GENERATED_MODULE_DIR}"
107            "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
108            "-DCMAKE_CXX_STANDARD=23"
109            "-DCMAKE_EXPORT_COMPILE_COMMANDS=ON"
110            )
111  add_custom_target(generate-test-module-std
112      DEPENDS "${CMAKE_BINARY_DIR}/test/__config_module__/CMakeCache.txt"
113      COMMENT "Builds generic module std.")
114  endif()
115endif()
116
117if (LIBCXX_GENERATE_COVERAGE)
118  include(CodeCoverage)
119  set(output_dir "${CMAKE_CURRENT_BINARY_DIR}/coverage")
120  set(capture_dirs
121      "${LIBCXX_LIB_CMAKEFILES_DIR}/cxx_objects.dir/"
122      "${LIBCXX_LIB_CMAKEFILES_DIR}/cxx.dir/"
123      "${LIBCXX_LIB_CMAKEFILES_DIR}/cxx_experimental.dir/"
124      "${CMAKE_CURRENT_BINARY_DIR}")
125  set(extract_dirs "${LIBCXX_SOURCE_DIR}/include;${LIBCXX_SOURCE_DIR}/src")
126  setup_lcov_test_target_coverage("cxx" "${output_dir}" "${capture_dirs}" "${extract_dirs}")
127endif()
128
129if (LIBCXX_CONFIGURE_IDE)
130  # Create dummy targets for each of the tests in the test suite, this allows
131  # IDE's such as CLion to correctly highlight the tests because it knows
132  # roughly what include paths/compile flags/macro definitions are needed.
133  include_directories(support)
134  file(GLOB_RECURSE LIBCXX_TESTS ${CMAKE_CURRENT_SOURCE_DIR}/*.pass.cpp)
135  file(GLOB LIBCXX_TEST_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/support/*)
136  file(GLOB_RECURSE LIBCXX_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../include/*)
137  add_executable(libcxx_test_objects EXCLUDE_FROM_ALL
138          ${LIBCXX_TESTS} ${LIBCXX_TEST_HEADERS} ${LIBCXX_HEADERS})
139  add_dependencies(libcxx_test_objects cxx)
140
141  split_list(LIBCXX_COMPILE_FLAGS)
142  split_list(LIBCXX_LINK_FLAGS)
143
144  set_target_properties(libcxx_test_objects
145          PROPERTIES
146            COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}"
147            LINK_FLAGS "${LIBCXX_LINK_FLAGS}"
148            EXCLUDE_FROM_ALL ON
149  )
150endif()
151