File: CMakeLists.txt

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (134 lines) | stat: -rw-r--r-- 4,890 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
add_subdirectory(tools)

# By default, libcxx and libcxxabi share a library directory.
if (NOT LIBCXX_CXX_ABI_LIBRARY_PATH)
  set(LIBCXX_CXX_ABI_LIBRARY_PATH "${LIBCXX_LIBRARY_DIR}" CACHE PATH
      "The path to libc++abi library.")
endif()

set(LIBCXX_EXECUTOR "\\\"${Python3_EXECUTABLE}\\\" ${CMAKE_CURRENT_LIST_DIR}/../utils/run.py" CACHE STRING
    "Executor to use when running tests.")

set(AUTO_GEN_COMMENT "## Autogenerated by libcxx configuration.\n# Do not edit!")
set(SERIALIZED_LIT_PARAMS "# Lit parameters serialized here for llvm-lit to pick them up\n")

macro(serialize_lit_param param value)
  string(APPEND SERIALIZED_LIT_PARAMS "config.${param} = ${value}\n")
endmacro()

if (NOT LIBCXX_ENABLE_EXCEPTIONS)
  serialize_lit_param(enable_exceptions False)
endif()

if (NOT LIBCXX_ENABLE_RTTI)
  serialize_lit_param(enable_rtti False)
endif()

if (LIBCXX_ENABLE_ASSERTIONS)
  serialize_lit_param(enable_assertions True)
endif()

serialize_lit_param(hardening_mode "\"${LIBCXX_HARDENING_MODE}\"")

if (CMAKE_CXX_COMPILER_TARGET)
  serialize_lit_param(target_triple "\"${CMAKE_CXX_COMPILER_TARGET}\"")
else()
  serialize_lit_param(target_triple "\"${LLVM_DEFAULT_TARGET_TRIPLE}\"")
endif()

if (LLVM_USE_SANITIZER)
  serialize_lit_param(use_sanitizer "\"${LLVM_USE_SANITIZER}\"")
endif()

foreach(param IN LISTS LIBCXX_TEST_PARAMS)
  string(REGEX REPLACE "(.+)=(.+)" "\\1" name "${param}")
  string(REGEX REPLACE "(.+)=(.+)" "\\2" value "${param}")
  serialize_lit_param("${name}" "\"${value}\"")
endforeach()

if (NOT DEFINED LIBCXX_TEST_DEPS)
  message(FATAL_ERROR "Expected LIBCXX_TEST_DEPS to be defined")
endif()

if (LIBCXX_INCLUDE_TESTS)
  include(AddLLVM) # for configure_lit_site_cfg and add_lit_testsuite

  configure_file("${CMAKE_CURRENT_SOURCE_DIR}/configs/cmake-bridge.cfg.in"
                 "${CMAKE_CURRENT_BINARY_DIR}/cmake-bridge.cfg"
                 @ONLY)

  configure_lit_site_cfg(
    "${LIBCXX_TEST_CONFIG}"
    ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg
    MAIN_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.py")

  add_custom_target(cxx-test-depends
    DEPENDS cxx ${LIBCXX_TEST_DEPS}
    COMMENT "Builds dependencies required to run the test suite.")

  add_lit_testsuite(check-cxx
    "Running libcxx tests"
    ${CMAKE_CURRENT_BINARY_DIR}
    DEPENDS cxx-test-depends)

  if(LIBCXX_ENABLE_STD_MODULES)
    # Generates the modules used in the test.
    # Note the test will regenerate this with the proper setting
    # - the right DCMAKE_CXX_STANDARD
    # - the right test compilation flags
    # Since modules depend on these flags there currently is no way to
    # avoid generating these for the tests. The advantage of the
    # pre generation is that less build information needs to be shared
    # in the bridge.
    add_custom_command(
        OUTPUT "${CMAKE_BINARY_DIR}/test/__config_module__/CMakeCache.txt"
        COMMAND
        ${CMAKE_COMMAND}
            "-G${CMAKE_GENERATOR}"
            "-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}"
            "-B${CMAKE_BINARY_DIR}/test/__config_module__"
            "-H${LIBCXX_GENERATED_MODULE_DIR}"
            "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
            "-DCMAKE_CXX_STANDARD=23"
            "-DCMAKE_EXPORT_COMPILE_COMMANDS=ON"
            )
  add_custom_target(generate-test-module-std
      DEPENDS "${CMAKE_BINARY_DIR}/test/__config_module__/CMakeCache.txt"
      COMMENT "Builds generic module std.")
  endif()
endif()

if (LIBCXX_GENERATE_COVERAGE)
  include(CodeCoverage)
  set(output_dir "${CMAKE_CURRENT_BINARY_DIR}/coverage")
  set(capture_dirs
      "${LIBCXX_LIB_CMAKEFILES_DIR}/cxx_objects.dir/"
      "${LIBCXX_LIB_CMAKEFILES_DIR}/cxx.dir/"
      "${LIBCXX_LIB_CMAKEFILES_DIR}/cxx_experimental.dir/"
      "${CMAKE_CURRENT_BINARY_DIR}")
  set(extract_dirs "${LIBCXX_SOURCE_DIR}/include;${LIBCXX_SOURCE_DIR}/src")
  setup_lcov_test_target_coverage("cxx" "${output_dir}" "${capture_dirs}" "${extract_dirs}")
endif()

if (LIBCXX_CONFIGURE_IDE)
  # Create dummy targets for each of the tests in the test suite, this allows
  # IDE's such as CLion to correctly highlight the tests because it knows
  # roughly what include paths/compile flags/macro definitions are needed.
  include_directories(support)
  file(GLOB_RECURSE LIBCXX_TESTS ${CMAKE_CURRENT_SOURCE_DIR}/*.pass.cpp)
  file(GLOB LIBCXX_TEST_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/support/*)
  file(GLOB_RECURSE LIBCXX_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../include/*)
  add_executable(libcxx_test_objects EXCLUDE_FROM_ALL
          ${LIBCXX_TESTS} ${LIBCXX_TEST_HEADERS} ${LIBCXX_HEADERS})
  add_dependencies(libcxx_test_objects cxx)

  split_list(LIBCXX_COMPILE_FLAGS)
  split_list(LIBCXX_LINK_FLAGS)

  set_target_properties(libcxx_test_objects
          PROPERTIES
            COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}"
            LINK_FLAGS "${LIBCXX_LINK_FLAGS}"
            EXCLUDE_FROM_ALL ON
  )
endif()