blob: 4e9bf900af4c53ba885be708482277eb97371c13 [file] [log] [blame]
Michael J. Spencerf5799be2010-12-10 19:47:541# Get sources
Petr Hosekf80c4b62019-05-01 06:40:362set(LIBCXX_SOURCES
3 algorithm.cpp
4 any.cpp
Petr Hosekf80c4b62019-05-01 06:40:365 bind.cpp
Louis Dionnecf7d4f52023-11-06 00:08:246 call_once.cpp
Petr Hosekf80c4b62019-05-01 06:40:367 charconv.cpp
8 chrono.cpp
Chris Bowlerfbdf6842022-06-10 14:04:079 error_category.cpp
Petr Hosekf80c4b62019-05-01 06:40:3610 exception.cpp
Louis Dionne22629bb2024-04-16 14:54:2811 expected.cpp
Louis Dionnec352fa72023-06-05 19:53:4212 filesystem/filesystem_clock.cpp
13 filesystem/filesystem_error.cpp
14 filesystem/path_parser.h
15 filesystem/path.cpp
Petr Hosekf80c4b62019-05-01 06:40:3616 functional.cpp
Petr Hosekf80c4b62019-05-01 06:40:3617 hash.cpp
18 include/apple_availability.h
19 include/atomic_support.h
20 include/config_elast.h
21 include/refstring.h
Mark de Weverabb5dd6e2021-02-09 16:52:4122 include/ryu/common.h
23 include/ryu/d2fixed.h
24 include/ryu/d2fixed_full_table.h
25 include/ryu/d2s.h
26 include/ryu/d2s_full_table.h
27 include/ryu/d2s_intrinsics.h
28 include/ryu/digit_table.h
29 include/ryu/f2s.h
30 include/ryu/ryu.h
31 include/to_chars_floating_point.h
Michael Jones6c4267f2024-10-21 22:04:0632 include/from_chars_floating_point.h
Petr Hosekf80c4b62019-05-01 06:40:3633 memory.cpp
Arthur O'Dwyer243da902022-10-06 20:53:3034 memory_resource.cpp
Louis Dionne80e4cca2023-06-14 20:37:5735 new_handler.cpp
Louis Dionne3956a342023-06-14 22:36:3736 new_helpers.cpp
Petr Hosekf80c4b62019-05-01 06:40:3637 optional.cpp
Mark de Wever3f65f7182023-04-21 06:09:0638 print.cpp
Louis Dionnece6153a2020-06-30 16:42:4439 random_shuffle.cpp
Mark de Weverabb5dd6e2021-02-09 16:52:4140 ryu/d2fixed.cpp
41 ryu/d2s.cpp
42 ryu/f2s.cpp
Petr Hosekf80c4b62019-05-01 06:40:3643 stdexcept.cpp
44 string.cpp
Petr Hosekf80c4b62019-05-01 06:40:3645 support/runtime/exception_fallback.ipp
46 support/runtime/exception_glibcxx.ipp
47 support/runtime/exception_libcxxabi.ipp
48 support/runtime/exception_libcxxrt.ipp
49 support/runtime/exception_msvc.ipp
50 support/runtime/exception_pointer_cxxabi.ipp
51 support/runtime/exception_pointer_glibcxx.ipp
52 support/runtime/exception_pointer_msvc.ipp
53 support/runtime/exception_pointer_unimplemented.ipp
Petr Hosekf80c4b62019-05-01 06:40:3654 support/runtime/stdexcept_default.ipp
55 support/runtime/stdexcept_vcruntime.ipp
56 system_error.cpp
Petr Hosekf80c4b62019-05-01 06:40:3657 typeinfo.cpp
Petr Hosekf80c4b62019-05-01 06:40:3658 valarray.cpp
59 variant.cpp
60 vector.cpp
Louis Dionne507125a2022-07-25 17:43:4761 verbose_abort.cpp
Petr Hosekf80c4b62019-05-01 06:40:3662 )
63
Louis Dionnecf7d4f52023-11-06 00:08:2464if (LIBCXX_ENABLE_THREADS)
65 list(APPEND LIBCXX_SOURCES
66 atomic.cpp
67 barrier.cpp
68 condition_variable_destructor.cpp
69 condition_variable.cpp
70 future.cpp
71 mutex_destructor.cpp
72 mutex.cpp
73 shared_mutex.cpp
74 thread.cpp
75 )
76endif()
77
Louis Dionnee0d01292020-10-15 14:32:0978if (LIBCXX_ENABLE_RANDOM_DEVICE)
79 list(APPEND LIBCXX_SOURCES
80 random.cpp
81 )
82endif()
83
Louis Dionne88ffc722020-10-09 19:31:0584if (LIBCXX_ENABLE_LOCALIZATION)
85 list(APPEND LIBCXX_SOURCES
Hristo Hristov92e24312024-01-07 16:01:0386 fstream.cpp
Arthur O'Dwyer0b10bb72021-04-26 13:56:5087 include/sso_allocator.h
Louis Dionne88ffc722020-10-09 19:31:0588 ios.cpp
Louis Dionnec6eaa142020-11-02 15:30:2989 ios.instantiations.cpp
Louis Dionne88ffc722020-10-09 19:31:0590 iostream.cpp
91 locale.cpp
Mark de Wever2fd40842023-12-19 18:32:1792 ostream.cpp
Louis Dionne88ffc722020-10-09 19:31:0593 regex.cpp
94 strstream.cpp
95 )
96endif()
97
Howard Hinnant3c78ca02011-09-22 19:10:1898if(WIN32)
Petr Hosekf80c4b62019-05-01 06:40:3699 list(APPEND LIBCXX_SOURCES
Nikolas Klauser5aacf932024-07-05 09:25:59100 support/win32/compiler_rt_shims.cpp
Petr Hosekf80c4b62019-05-01 06:40:36101 support/win32/locale_win32.cpp
102 support/win32/support.cpp
Petr Hosekf80c4b62019-05-01 06:40:36103 )
Colin Finck0f5020a2021-02-16 15:03:04104
105 if (NOT LIBCXX_HAS_PTHREAD_API)
106 list(APPEND LIBCXX_SOURCES
107 support/win32/thread_win32.cpp
108 )
109 endif()
Muiez Ahmedebe61612021-03-08 19:20:22110elseif(ZOS)
111 list(APPEND LIBCXX_SOURCES
Muiez Ahmed42473812021-09-13 13:43:21112 support/ibm/mbsnrtowcs.cpp
113 support/ibm/wcsnrtombs.cpp
Muiez Ahmedebe61612021-03-08 19:20:22114 support/ibm/xlocale_zos.cpp
115 )
Howard Hinnant3c78ca02011-09-22 19:10:18116endif()
Michael J. Spencerf5799be2010-12-10 19:47:54117
Eric Fiselierf1d87f82019-03-21 00:04:31118if (LIBCXX_ENABLE_FILESYSTEM)
Petr Hosekf80c4b62019-05-01 06:40:36119 list(APPEND LIBCXX_SOURCES
Louis Dionnec7d3c842023-06-12 17:43:55120 filesystem/directory_entry.cpp
Petr Hosekf80c4b62019-05-01 06:40:36121 filesystem/directory_iterator.cpp
Louis Dionnec7d3c842023-06-12 17:43:55122 filesystem/file_descriptor.h
Louis Dionnec7d3c842023-06-12 17:43:55123 filesystem/operations.cpp
Martin Storsjö2ff86622020-11-04 14:59:07124 filesystem/posix_compat.h
Louis Dionnec7d3c842023-06-12 17:43:55125 filesystem/time_utils.h
Petr Hosekf80c4b62019-05-01 06:40:36126 )
Eric Fiselierf1d87f82019-03-21 00:04:31127 # Filesystem uses __int128_t, which requires a definition of __muloi4 when
128 # compiled with UBSAN. This definition is not provided by libgcc_s, but is
129 # provided by compiler-rt. So we need to disable it to avoid having multiple
130 # definitions. See filesystem/int128_builtins.cpp.
131 if (NOT LIBCXX_USE_COMPILER_RT)
Petr Hosekf80c4b62019-05-01 06:40:36132 list(APPEND LIBCXX_SOURCES
133 filesystem/int128_builtins.cpp
134 )
Eric Fiselierf1d87f82019-03-21 00:04:31135 endif()
Louis Dionnecc37af72019-03-19 20:56:13136endif()
137
Louis Dionneafc5cca2023-06-14 22:31:20138if (LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS)
139 list(APPEND LIBCXX_SOURCES
140 new.cpp
141 )
142endif()
143
Eric Fiselierd1bac4c2015-07-22 00:33:36144if (APPLE AND LLVM_USE_SANITIZER)
Kuba Brecka50bc34ca312016-09-15 11:04:53145 if (("${LLVM_USE_SANITIZER}" STREQUAL "Address") OR
146 ("${LLVM_USE_SANITIZER}" STREQUAL "Address;Undefined") OR
147 ("${LLVM_USE_SANITIZER}" STREQUAL "Undefined;Address"))
Eric Fiselierd1bac4c2015-07-22 00:33:36148 set(LIBFILE "libclang_rt.asan_osx_dynamic.dylib")
149 elseif("${LLVM_USE_SANITIZER}" STREQUAL "Undefined")
150 set(LIBFILE "libclang_rt.ubsan_osx_dynamic.dylib")
Kuba Breckad634df52016-09-14 14:12:50151 elseif("${LLVM_USE_SANITIZER}" STREQUAL "Thread")
152 set(LIBFILE "libclang_rt.tsan_osx_dynamic.dylib")
Eric Fiselierd1bac4c2015-07-22 00:33:36153 else()
154 message(WARNING "LLVM_USE_SANITIZER=${LLVM_USE_SANITIZER} is not supported on OS X")
155 endif()
156 if (LIBFILE)
Petr Hosek22acda42020-09-29 00:37:20157 find_compiler_rt_library(builtins LIBCXX_BUILTINS_LIBRARY)
158 get_filename_component(LIBDIR "${LIBCXX_BUILTINS_LIBRARY}" DIRECTORY)
Eric Fiselierd1bac4c2015-07-22 00:33:36159 if (NOT IS_DIRECTORY "${LIBDIR}")
160 message(FATAL_ERROR "Cannot find compiler-rt directory on OS X required for LLVM_USE_SANITIZER")
161 endif()
162 set(LIBCXX_SANITIZER_LIBRARY "${LIBDIR}/${LIBFILE}")
163 set(LIBCXX_SANITIZER_LIBRARY "${LIBCXX_SANITIZER_LIBRARY}" PARENT_SCOPE)
164 message(STATUS "Manually linking compiler-rt library: ${LIBCXX_SANITIZER_LIBRARY}")
Eric Fiselier10ed6c32015-07-30 22:30:34165 add_library_flags("${LIBCXX_SANITIZER_LIBRARY}")
166 add_link_flags("-Wl,-rpath,${LIBDIR}")
Eric Fiselierd1bac4c2015-07-22 00:33:36167 endif()
168endif()
169
Louis Dionne989eca62019-03-14 14:19:08170split_list(LIBCXX_COMPILE_FLAGS)
171split_list(LIBCXX_LINK_FLAGS)
Petr Hosek9e49a332016-08-08 22:57:25172
Michael Jones6c4267f2024-10-21 22:04:06173include(FindLibcCommonUtils)
174
Petr Hosek9e49a332016-08-08 22:57:25175# Build the shared library.
Louis Dionne43ba97e2024-10-10 17:13:17176add_library(cxx_shared SHARED ${LIBCXX_SOURCES} ${LIBCXX_HEADERS})
177target_include_directories(cxx_shared PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
178target_link_libraries(cxx_shared PUBLIC cxx-headers libcxx-libc-shared
Michael Jones6c4267f2024-10-21 22:04:06179 PRIVATE ${LIBCXX_LIBRARIES}
180 PRIVATE llvm-libc-common-utilities)
Louis Dionne43ba97e2024-10-10 17:13:17181set_target_properties(cxx_shared
182 PROPERTIES
183 EXCLUDE_FROM_ALL "$<IF:$<BOOL:${LIBCXX_ENABLE_SHARED}>,FALSE,TRUE>"
184 COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}"
185 LINK_FLAGS "${LIBCXX_LINK_FLAGS}"
186 OUTPUT_NAME "${LIBCXX_SHARED_OUTPUT_NAME}"
187 VERSION "${LIBCXX_LIBRARY_VERSION}"
188 SOVERSION "${LIBCXX_ABI_VERSION}"
189 DEFINE_SYMBOL ""
190)
191cxx_add_common_build_flags(cxx_shared)
192
193if(ZOS)
194 add_custom_command(TARGET cxx_shared POST_BUILD
195 COMMAND
196 ${LIBCXX_SOURCE_DIR}/utils/zos_rename_dll_side_deck.sh
197 $<TARGET_LINKER_FILE_NAME:cxx_shared> $<TARGET_FILE_NAME:cxx_shared> "${LIBCXX_DLL_NAME}"
198 COMMENT "Rename dll name inside the side deck file"
199 WORKING_DIRECTORY $<TARGET_FILE_DIR:cxx_shared>
Michael J. Spencerf5799be2010-12-10 19:47:54200 )
Louis Dionne43ba97e2024-10-10 17:13:17201endif()
Louis Dionne989eca62019-03-14 14:19:08202
Louis Dionne43ba97e2024-10-10 17:13:17203# Link against libc++abi
204if (LIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY)
205 target_link_libraries(cxx_shared PRIVATE libcxx-abi-shared-objects)
206else()
207 target_link_libraries(cxx_shared PUBLIC libcxx-abi-shared)
208endif()
Louis Dionne6e68a792019-04-05 20:29:54209
Louis Dionne43ba97e2024-10-10 17:13:17210# Maybe force some symbols to be weak, not weak or not exported.
211# TODO: This shouldn't depend on the platform, and ideally it should be done in the sources.
212if (APPLE AND LIBCXX_CXX_ABI MATCHES "libcxxabi$"
213 AND NOT LIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY)
214 target_link_libraries(cxx_shared PRIVATE
215 "-Wl,-force_symbols_not_weak_list,${CMAKE_CURRENT_SOURCE_DIR}/../lib/notweak.exp"
216 "-Wl,-force_symbols_weak_list,${CMAKE_CURRENT_SOURCE_DIR}/../lib/weak.exp")
217endif()
Louis Dionne79ee0342022-09-19 20:17:02218
Louis Dionne43ba97e2024-10-10 17:13:17219# Generate a linker script in place of a libc++.so symlink.
220if (LIBCXX_ENABLE_ABI_LINKER_SCRIPT)
221 set(link_libraries)
Haowei Wua3539092022-10-12 19:54:48222
Louis Dionne43ba97e2024-10-10 17:13:17223 set(imported_libname "$<TARGET_PROPERTY:libcxx-abi-shared,IMPORTED_LIBNAME>")
224 set(output_name "$<TARGET_PROPERTY:libcxx-abi-shared,OUTPUT_NAME>")
225 string(APPEND link_libraries "${CMAKE_LINK_LIBRARY_FLAG}$<IF:$<BOOL:${imported_libname}>,${imported_libname},${output_name}>")
Haowei Wua3539092022-10-12 19:54:48226
Louis Dionne43ba97e2024-10-10 17:13:17227 # TODO: Move to the same approach as above for the unwind library
228 if (LIBCXXABI_USE_LLVM_UNWINDER)
229 if (LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY)
230 # libunwind is already included in libc++abi
231 elseif (TARGET unwind_shared OR HAVE_LIBUNWIND)
232 string(APPEND link_libraries " ${CMAKE_LINK_LIBRARY_FLAG}$<TARGET_PROPERTY:unwind_shared,OUTPUT_NAME>")
233 else()
234 string(APPEND link_libraries " ${CMAKE_LINK_LIBRARY_FLAG}unwind")
Haowei Wua3539092022-10-12 19:54:48235 endif()
Haowei Wua3539092022-10-12 19:54:48236 endif()
237
Louis Dionne43ba97e2024-10-10 17:13:17238 set(linker_script "INPUT($<TARGET_SONAME_FILE_NAME:cxx_shared> ${link_libraries})")
239 add_custom_command(TARGET cxx_shared POST_BUILD
240 COMMAND "${CMAKE_COMMAND}" -E remove "$<TARGET_LINKER_FILE:cxx_shared>"
241 COMMAND "${CMAKE_COMMAND}" -E echo "${linker_script}" > "$<TARGET_LINKER_FILE:cxx_shared>"
242 COMMENT "Generating linker script: '${linker_script}' as file $<TARGET_LINKER_FILE:cxx_shared>"
243 VERBATIM
244 )
245endif()
246
Louis Dionne917ada32024-10-10 12:00:01247if (LIBCXX_ENABLE_SHARED)
Petr Hosek4a1e14e2018-07-24 23:27:51248 list(APPEND LIBCXX_BUILD_TARGETS "cxx_shared")
Louis Dionne917ada32024-10-10 12:00:01249endif()
250
Martin Storsjöb87fdd92025-01-14 11:43:10251if(WIN32 AND NOT MINGW AND NOT "${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Windows")
252 # Since we most likely do not have a mt.exe replacement, disable the
253 # manifest bundling. This allows a normal cmake invocation to pass which
254 # will attempt to use the manifest tool to generate the bundled manifest
255 if (${CMAKE_CXX_COMPILER_FRONTEND_VARIANT} STREQUAL "MSVC")
256 set_target_properties(cxx_shared PROPERTIES
257 APPEND_STRING PROPERTY LINK_FLAGS " /MANIFEST:NO")
258 else()
259 set_target_properties(cxx_shared PROPERTIES
260 APPEND_STRING PROPERTY LINK_FLAGS " -Xlinker /MANIFEST:NO")
Haowei Wua3539092022-10-12 19:54:48261 endif()
Martin Storsjöb87fdd92025-01-14 11:43:10262endif()
Petr Hosek9e49a332016-08-08 22:57:25263
Martin Storsjö7a804c02021-03-23 11:23:16264set(CMAKE_STATIC_LIBRARY_PREFIX "lib")
265
Petr Hosek9e49a332016-08-08 22:57:25266# Build the static library.
Louis Dionne43ba97e2024-10-10 17:13:17267add_library(cxx_static STATIC ${LIBCXX_SOURCES} ${LIBCXX_HEADERS})
268target_include_directories(cxx_static PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
269target_link_libraries(cxx_static PUBLIC cxx-headers libcxx-libc-static
270 PRIVATE ${LIBCXX_LIBRARIES}
Michael Jones6c4267f2024-10-21 22:04:06271 PRIVATE libcxx-abi-static
272 PRIVATE llvm-libc-common-utilities)
Louis Dionne43ba97e2024-10-10 17:13:17273set_target_properties(cxx_static
274 PROPERTIES
275 EXCLUDE_FROM_ALL "$<IF:$<BOOL:${LIBCXX_ENABLE_STATIC}>,FALSE,TRUE>"
276 COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}"
277 LINK_FLAGS "${LIBCXX_LINK_FLAGS}"
278 OUTPUT_NAME "${LIBCXX_STATIC_OUTPUT_NAME}"
279)
280cxx_add_common_build_flags(cxx_static)
Haowei Wua3539092022-10-12 19:54:48281
Louis Dionne43ba97e2024-10-10 17:13:17282if (LIBCXX_HERMETIC_STATIC_LIBRARY)
283 # If the hermetic library doesn't define the operator new/delete functions
284 # then its code shouldn't declare them with hidden visibility. They might
285 # actually be provided by a shared library at link time.
286 if (LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS)
287 append_flags_if_supported(CXX_STATIC_LIBRARY_FLAGS -fvisibility-global-new-delete=force-hidden)
288 if (NOT CXX_SUPPORTS_FVISIBILITY_GLOBAL_NEW_DELETE_EQ_FORCE_HIDDEN_FLAG)
289 append_flags_if_supported(CXX_STATIC_LIBRARY_FLAGS -fvisibility-global-new-delete-hidden)
Haowei Wua3539092022-10-12 19:54:48290 endif()
Haowei Wua3539092022-10-12 19:54:48291 endif()
Louis Dionne43ba97e2024-10-10 17:13:17292 target_compile_options(cxx_static PRIVATE ${CXX_STATIC_LIBRARY_FLAGS})
293 # _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS can be defined in __config_site
294 # too. Define it in the same way here, to avoid redefinition conflicts.
295 target_compile_definitions(cxx_static PRIVATE _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS=)
296endif()
Haowei Wua3539092022-10-12 19:54:48297
Louis Dionne43ba97e2024-10-10 17:13:17298if (LIBCXX_ENABLE_STATIC)
299 list(APPEND LIBCXX_BUILD_TARGETS "cxx_static")
300endif()
301# Attempt to merge the libc++.a archive and the ABI library archive into one.
302if (LIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY)
303 target_link_libraries(cxx_static PRIVATE libcxx-abi-static-objects)
304endif()
Petr Hosek9e49a332016-08-08 22:57:25305
Eric Fiselier67ea02b2018-07-27 03:47:46306# Add a meta-target for both libraries.
Louis Dionneefa40eb2020-06-26 20:05:55307add_custom_target(cxx DEPENDS ${LIBCXX_BUILD_TARGETS})
Eric Fiselier67ea02b2018-07-27 03:47:46308
Louis Dionne917ada32024-10-10 12:00:01309# Build the experimental static library
Louis Dionne7300a652022-07-19 14:44:06310set(LIBCXX_EXPERIMENTAL_SOURCES
Louis Dionne12bb2912023-11-27 15:54:35311 experimental/keep.cpp
Eric Fiselier27cb2f12016-05-03 21:30:18312 )
Martin Storsjö0d7de7a2022-07-07 06:49:25313
Louis Dionned423d802024-04-17 17:36:53314if (LIBCXX_PSTL_BACKEND STREQUAL "libdispatch")
Nico Weber7a9b8a82023-07-13 12:35:06315 list(APPEND LIBCXX_EXPERIMENTAL_SOURCES
316 pstl/libdispatch.cpp
317 )
Nikolas Klauser2b2e7f62023-07-12 20:24:57318endif()
319
Mark de Weverf78f93b2022-09-23 16:33:20320if (LIBCXX_ENABLE_LOCALIZATION AND LIBCXX_ENABLE_FILESYSTEM AND LIBCXX_ENABLE_TIME_ZONE_DATABASE)
321 list(APPEND LIBCXX_EXPERIMENTAL_SOURCES
Mark de Wever9d6b68b2024-07-07 09:17:34322 experimental/include/tzdb/time_zone_private.h
323 experimental/include/tzdb/types_private.h
324 experimental/include/tzdb/tzdb_list_private.h
325 experimental/include/tzdb/tzdb_private.h
Mark de Wever77116bd2024-06-09 22:33:39326 # TODO TZDB The exception could be moved in chrono once the TZDB library
327 # is no longer experimental.
Mark de Wever9d6b68b2024-07-07 09:17:34328 experimental/chrono_exception.cpp
329 experimental/time_zone.cpp
330 experimental/tzdb.cpp
331 experimental/tzdb_list.cpp
Mark de Weverf78f93b2022-09-23 16:33:20332 )
333endif()
334
Louis Dionne7300a652022-07-19 14:44:06335add_library(cxx_experimental STATIC ${LIBCXX_EXPERIMENTAL_SOURCES})
336target_link_libraries(cxx_experimental PUBLIC cxx-headers)
337if (LIBCXX_ENABLE_SHARED)
338 target_link_libraries(cxx_experimental PRIVATE cxx_shared)
339else()
340 target_link_libraries(cxx_experimental PRIVATE cxx_static)
Eric Fiselier27cb2f12016-05-03 21:30:18341endif()
Louis Dionnefadc84a2019-10-04 22:50:23342
Louis Dionne7300a652022-07-19 14:44:06343if (LIBCXX_HERMETIC_STATIC_LIBRARY)
344 # _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS can be defined in __config_site
345 # too. Define it in the same way here, to avoid redefinition conflicts.
346 target_compile_definitions(cxx_experimental PRIVATE _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS=)
347endif()
348
349set_target_properties(cxx_experimental
350 PROPERTIES
351 COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}"
352 OUTPUT_NAME "c++experimental"
353)
354cxx_add_common_build_flags(cxx_experimental)
Louis Dionne8711fca2022-06-30 15:57:52355target_compile_options(cxx_experimental PUBLIC -D_LIBCPP_ENABLE_EXPERIMENTAL)
Louis Dionne7300a652022-07-19 14:44:06356
Louis Dionne4bd3d162020-10-09 19:04:12357if (LIBCXX_INSTALL_SHARED_LIBRARY)
358 install(TARGETS cxx_shared
Petr Hosek96d8c6b2021-04-01 00:34:05359 ARCHIVE DESTINATION ${LIBCXX_INSTALL_LIBRARY_DIR} COMPONENT cxx
360 LIBRARY DESTINATION ${LIBCXX_INSTALL_LIBRARY_DIR} COMPONENT cxx
Martin Storsjöc4e8a212021-08-11 10:44:06361 RUNTIME DESTINATION ${LIBCXX_INSTALL_RUNTIME_DIR} COMPONENT cxx)
Eric Fiselierd77135f2015-08-26 20:18:21362endif()
Eric Fiselier7cb813f2015-08-19 17:41:53363
Louis Dionne4bd3d162020-10-09 19:04:12364if (LIBCXX_INSTALL_STATIC_LIBRARY)
365 install(TARGETS cxx_static
Petr Hosek96d8c6b2021-04-01 00:34:05366 ARCHIVE DESTINATION ${LIBCXX_INSTALL_LIBRARY_DIR} COMPONENT cxx
367 LIBRARY DESTINATION ${LIBCXX_INSTALL_LIBRARY_DIR} COMPONENT cxx
Martin Storsjöc4e8a212021-08-11 10:44:06368 RUNTIME DESTINATION ${LIBCXX_INSTALL_RUNTIME_DIR} COMPONENT cxx)
Louis Dionne4bd3d162020-10-09 19:04:12369endif()
370
Louis Dionne7300a652022-07-19 14:44:06371if (LIBCXX_INSTALL_LIBRARY)
Louis Dionne4bd3d162020-10-09 19:04:12372 install(TARGETS cxx_experimental
Petr Hosek96d8c6b2021-04-01 00:34:05373 LIBRARY DESTINATION ${LIBCXX_INSTALL_LIBRARY_DIR} COMPONENT cxx
374 ARCHIVE DESTINATION ${LIBCXX_INSTALL_LIBRARY_DIR} COMPONENT cxx
Martin Storsjöc4e8a212021-08-11 10:44:06375 RUNTIME DESTINATION ${LIBCXX_INSTALL_RUNTIME_DIR} COMPONENT cxx)
Louis Dionne4bd3d162020-10-09 19:04:12376endif()
377
378# NOTE: This install command must go after the cxx install command otherwise
379# it will not be executed after the library symlinks are installed.
380if (LIBCXX_ENABLE_SHARED AND LIBCXX_ENABLE_ABI_LINKER_SCRIPT)
Louis Dionne5034d712021-02-23 23:26:15381 install(FILES "$<TARGET_LINKER_FILE:cxx_shared>"
Petr Hosek96d8c6b2021-04-01 00:34:05382 DESTINATION ${LIBCXX_INSTALL_LIBRARY_DIR}
Louis Dionne4bd3d162020-10-09 19:04:12383 COMPONENT libcxx)
384endif()
385
386if (NOT CMAKE_CONFIGURATION_TYPES)
Chris Bienemana1b79ae2015-12-03 18:52:54387 if(LIBCXX_INSTALL_LIBRARY)
Louis Dionne7300a652022-07-19 14:44:06388 set(lib_install_target "cxx;cxx_experimental")
Eric Fiselier27cb2f12016-05-03 21:30:18389 endif()
Chris Bieneman4497e3a2016-04-29 22:17:15390 if(LIBCXX_INSTALL_HEADERS)
Chris Bienemanf17227a2016-08-24 22:17:06391 set(header_install_target install-cxx-headers)
Chris Bieneman4497e3a2016-04-29 22:17:15392 endif()
Mark de Weverae8d6992024-01-21 11:27:21393 if(LIBCXX_INSTALL_MODULES)
Mark de Wever8b47bb62024-01-21 11:16:22394 set(module_install_target install-cxx-modules)
395 endif()
Chris Bienemanf17227a2016-08-24 22:17:06396 add_custom_target(install-cxx
Eric Fiselier27cb2f12016-05-03 21:30:18397 DEPENDS ${lib_install_target}
Louis Dionne7300a652022-07-19 14:44:06398 cxx_experimental
Eric Fiselier27cb2f12016-05-03 21:30:18399 ${header_install_target}
Mark de Wever8b47bb62024-01-21 11:16:22400 ${module_install_target}
Eric Fiselierd77135f2015-08-26 20:18:21401 COMMAND "${CMAKE_COMMAND}"
Chris Bienemanf17227a2016-08-24 22:17:06402 -DCMAKE_INSTALL_COMPONENT=cxx
Eric Fiselierd77135f2015-08-26 20:18:21403 -P "${LIBCXX_BINARY_DIR}/cmake_install.cmake")
Shoaib Meenaif7c79442017-12-06 21:03:42404 add_custom_target(install-cxx-stripped
405 DEPENDS ${lib_install_target}
Louis Dionne7300a652022-07-19 14:44:06406 cxx_experimental
Shoaib Meenaif7c79442017-12-06 21:03:42407 ${header_install_target}
Mark de Wever8b47bb62024-01-21 11:16:22408 ${module_install_target}
Shoaib Meenaif7c79442017-12-06 21:03:42409 COMMAND "${CMAKE_COMMAND}"
410 -DCMAKE_INSTALL_COMPONENT=cxx
411 -DCMAKE_INSTALL_DO_STRIP=1
412 -P "${LIBCXX_BINARY_DIR}/cmake_install.cmake")
Eric Fiselier7cb813f2015-08-19 17:41:53413endif()