blob: 156dbe8a4c2f92e4bf172393c48ce94bb427c14a [file] [log] [blame]
Eric Fiselier78fdf2d2015-03-31 04:15:451set(LIBCXX_LIB_CMAKEFILES_DIR "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}" PARENT_SCOPE)
2
Michael J. Spencerf5799be2010-12-10 19:47:543# Get sources
Petr Hosekf80c4b62019-05-01 06:40:364set(LIBCXX_SOURCES
5 algorithm.cpp
6 any.cpp
Petr Hosekf80c4b62019-05-01 06:40:367 bind.cpp
Louis Dionnecf7d4f52023-11-06 00:08:248 call_once.cpp
Petr Hosekf80c4b62019-05-01 06:40:369 charconv.cpp
10 chrono.cpp
Chris Bowlerfbdf6842022-06-10 14:04:0711 error_category.cpp
Petr Hosekf80c4b62019-05-01 06:40:3612 exception.cpp
Louis Dionnec352fa72023-06-05 19:53:4213 filesystem/filesystem_clock.cpp
14 filesystem/filesystem_error.cpp
15 filesystem/path_parser.h
16 filesystem/path.cpp
Petr Hosekf80c4b62019-05-01 06:40:3617 functional.cpp
Petr Hosekf80c4b62019-05-01 06:40:3618 hash.cpp
19 include/apple_availability.h
20 include/atomic_support.h
21 include/config_elast.h
22 include/refstring.h
Mark de Weverabb5dd6e2021-02-09 16:52:4123 include/ryu/common.h
24 include/ryu/d2fixed.h
25 include/ryu/d2fixed_full_table.h
26 include/ryu/d2s.h
27 include/ryu/d2s_full_table.h
28 include/ryu/d2s_intrinsics.h
29 include/ryu/digit_table.h
30 include/ryu/f2s.h
31 include/ryu/ryu.h
32 include/to_chars_floating_point.h
Nikolas Klauserb57c22a2021-11-11 17:57:2533 legacy_pointer_safety.cpp
Petr Hosekf80c4b62019-05-01 06:40:3634 memory.cpp
Arthur O'Dwyer243da902022-10-06 20:53:3035 memory_resource.cpp
Louis Dionne80e4cca2023-06-14 20:37:5736 new_handler.cpp
Louis Dionne3956a342023-06-14 22:36:3737 new_helpers.cpp
Petr Hosekf80c4b62019-05-01 06:40:3638 optional.cpp
Mark de Wever3f65f7182023-04-21 06:09:0639 print.cpp
Louis Dionnece6153a2020-06-30 16:42:4440 random_shuffle.cpp
Mark de Weverabb5dd6e2021-02-09 16:52:4141 ryu/d2fixed.cpp
42 ryu/d2s.cpp
43 ryu/f2s.cpp
Petr Hosekf80c4b62019-05-01 06:40:3644 stdexcept.cpp
45 string.cpp
Petr Hosekf80c4b62019-05-01 06:40:3646 support/runtime/exception_fallback.ipp
47 support/runtime/exception_glibcxx.ipp
48 support/runtime/exception_libcxxabi.ipp
49 support/runtime/exception_libcxxrt.ipp
50 support/runtime/exception_msvc.ipp
51 support/runtime/exception_pointer_cxxabi.ipp
52 support/runtime/exception_pointer_glibcxx.ipp
53 support/runtime/exception_pointer_msvc.ipp
54 support/runtime/exception_pointer_unimplemented.ipp
Petr Hosekf80c4b62019-05-01 06:40:3655 support/runtime/stdexcept_default.ipp
56 support/runtime/stdexcept_vcruntime.ipp
57 system_error.cpp
Petr Hosekf80c4b62019-05-01 06:40:3658 typeinfo.cpp
Petr Hosekf80c4b62019-05-01 06:40:3659 valarray.cpp
60 variant.cpp
61 vector.cpp
Louis Dionne507125a2022-07-25 17:43:4762 verbose_abort.cpp
Petr Hosekf80c4b62019-05-01 06:40:3663 )
64
Louis Dionnecf7d4f52023-11-06 00:08:2465if (LIBCXX_ENABLE_THREADS)
66 list(APPEND LIBCXX_SOURCES
67 atomic.cpp
68 barrier.cpp
69 condition_variable_destructor.cpp
70 condition_variable.cpp
71 future.cpp
72 mutex_destructor.cpp
73 mutex.cpp
74 shared_mutex.cpp
75 thread.cpp
76 )
77endif()
78
Louis Dionnee0d01292020-10-15 14:32:0979if (LIBCXX_ENABLE_RANDOM_DEVICE)
80 list(APPEND LIBCXX_SOURCES
81 random.cpp
82 )
83endif()
84
Louis Dionne88ffc722020-10-09 19:31:0585if (LIBCXX_ENABLE_LOCALIZATION)
86 list(APPEND LIBCXX_SOURCES
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
92 regex.cpp
93 strstream.cpp
94 )
95endif()
96
Howard Hinnant3c78ca02011-09-22 19:10:1897if(WIN32)
Petr Hosekf80c4b62019-05-01 06:40:3698 list(APPEND LIBCXX_SOURCES
99 support/win32/locale_win32.cpp
100 support/win32/support.cpp
Petr Hosekf80c4b62019-05-01 06:40:36101 )
Colin Finck0f5020a2021-02-16 15:03:04102
103 if (NOT LIBCXX_HAS_PTHREAD_API)
104 list(APPEND LIBCXX_SOURCES
105 support/win32/thread_win32.cpp
106 )
107 endif()
Muiez Ahmedebe61612021-03-08 19:20:22108elseif(ZOS)
109 list(APPEND LIBCXX_SOURCES
Muiez Ahmed42473812021-09-13 13:43:21110 support/ibm/mbsnrtowcs.cpp
111 support/ibm/wcsnrtombs.cpp
Muiez Ahmedebe61612021-03-08 19:20:22112 support/ibm/xlocale_zos.cpp
113 )
Howard Hinnant3c78ca02011-09-22 19:10:18114endif()
Michael J. Spencerf5799be2010-12-10 19:47:54115
Eric Fiselierf1d87f82019-03-21 00:04:31116if (LIBCXX_ENABLE_FILESYSTEM)
Petr Hosekf80c4b62019-05-01 06:40:36117 list(APPEND LIBCXX_SOURCES
Louis Dionnec7d3c842023-06-12 17:43:55118 filesystem/directory_entry.cpp
Petr Hosekf80c4b62019-05-01 06:40:36119 filesystem/directory_iterator.cpp
Louis Dionnec7d3c842023-06-12 17:43:55120 filesystem/file_descriptor.h
Louis Dionnec7d3c842023-06-12 17:43:55121 filesystem/operations.cpp
Martin Storsjö2ff86622020-11-04 14:59:07122 filesystem/posix_compat.h
Louis Dionnec7d3c842023-06-12 17:43:55123 filesystem/time_utils.h
Petr Hosekf80c4b62019-05-01 06:40:36124 )
Eric Fiselierf1d87f82019-03-21 00:04:31125 # Filesystem uses __int128_t, which requires a definition of __muloi4 when
126 # compiled with UBSAN. This definition is not provided by libgcc_s, but is
127 # provided by compiler-rt. So we need to disable it to avoid having multiple
128 # definitions. See filesystem/int128_builtins.cpp.
129 if (NOT LIBCXX_USE_COMPILER_RT)
Petr Hosekf80c4b62019-05-01 06:40:36130 list(APPEND LIBCXX_SOURCES
131 filesystem/int128_builtins.cpp
132 )
Eric Fiselierf1d87f82019-03-21 00:04:31133 endif()
Louis Dionnecc37af72019-03-19 20:56:13134endif()
135
Louis Dionneafc5cca2023-06-14 22:31:20136if (LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS)
137 list(APPEND LIBCXX_SOURCES
138 new.cpp
139 )
140endif()
141
Michael J. Spencerf5799be2010-12-10 19:47:54142# Add all the headers to the project for IDEs.
Eric Fiselier6627c702015-12-16 23:41:05143if (LIBCXX_CONFIGURE_IDE)
Howard Hinnantb2f52bb2012-03-19 15:40:23144 file(GLOB_RECURSE LIBCXX_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../include/*)
Howard Hinnant3c78ca02011-09-22 19:10:18145 if(WIN32)
Louis Dionneb5175682021-02-02 21:58:38146 file( GLOB LIBCXX_WIN32_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../include/__support/win32/*.h)
Howard Hinnantb2f52bb2012-03-19 15:40:23147 list(APPEND LIBCXX_HEADERS ${LIBCXX_WIN32_HEADERS})
Howard Hinnant3c78ca02011-09-22 19:10:18148 endif()
Michael J. Spencerf5799be2010-12-10 19:47:54149 # Force them all into the headers dir on MSVC, otherwise they end up at
150 # project scope because they don't have extensions.
151 if (MSVC_IDE)
Howard Hinnantb2f52bb2012-03-19 15:40:23152 source_group("Header Files" FILES ${LIBCXX_HEADERS})
Michael J. Spencerf5799be2010-12-10 19:47:54153 endif()
154endif()
155
Haowei Wua3539092022-10-12 19:54:48156if(NOT LIBCXX_INSTALL_LIBRARY)
157 set(exclude_from_all EXCLUDE_FROM_ALL)
158endif()
159
Eric Fiselier2aeac462017-03-11 03:24:18160if (LIBCXX_GENERATE_COVERAGE AND NOT LIBCXX_COVERAGE_LIBRARY)
161 find_compiler_rt_library(profile LIBCXX_COVERAGE_LIBRARY)
162endif()
Eric Fiselier10ed6c32015-07-30 22:30:34163add_library_flags_if(LIBCXX_COVERAGE_LIBRARY "${LIBCXX_COVERAGE_LIBRARY}")
Michael J. Spencerf5799be2010-12-10 19:47:54164
Eric Fiselierd1bac4c2015-07-22 00:33:36165if (APPLE AND LLVM_USE_SANITIZER)
Kuba Brecka50bc34ca312016-09-15 11:04:53166 if (("${LLVM_USE_SANITIZER}" STREQUAL "Address") OR
167 ("${LLVM_USE_SANITIZER}" STREQUAL "Address;Undefined") OR
168 ("${LLVM_USE_SANITIZER}" STREQUAL "Undefined;Address"))
Eric Fiselierd1bac4c2015-07-22 00:33:36169 set(LIBFILE "libclang_rt.asan_osx_dynamic.dylib")
170 elseif("${LLVM_USE_SANITIZER}" STREQUAL "Undefined")
171 set(LIBFILE "libclang_rt.ubsan_osx_dynamic.dylib")
Kuba Breckad634df52016-09-14 14:12:50172 elseif("${LLVM_USE_SANITIZER}" STREQUAL "Thread")
173 set(LIBFILE "libclang_rt.tsan_osx_dynamic.dylib")
Eric Fiselierd1bac4c2015-07-22 00:33:36174 else()
175 message(WARNING "LLVM_USE_SANITIZER=${LLVM_USE_SANITIZER} is not supported on OS X")
176 endif()
177 if (LIBFILE)
Petr Hosek22acda42020-09-29 00:37:20178 find_compiler_rt_library(builtins LIBCXX_BUILTINS_LIBRARY)
179 get_filename_component(LIBDIR "${LIBCXX_BUILTINS_LIBRARY}" DIRECTORY)
Eric Fiselierd1bac4c2015-07-22 00:33:36180 if (NOT IS_DIRECTORY "${LIBDIR}")
181 message(FATAL_ERROR "Cannot find compiler-rt directory on OS X required for LLVM_USE_SANITIZER")
182 endif()
183 set(LIBCXX_SANITIZER_LIBRARY "${LIBDIR}/${LIBFILE}")
184 set(LIBCXX_SANITIZER_LIBRARY "${LIBCXX_SANITIZER_LIBRARY}" PARENT_SCOPE)
185 message(STATUS "Manually linking compiler-rt library: ${LIBCXX_SANITIZER_LIBRARY}")
Eric Fiselier10ed6c32015-07-30 22:30:34186 add_library_flags("${LIBCXX_SANITIZER_LIBRARY}")
187 add_link_flags("-Wl,-rpath,${LIBDIR}")
Eric Fiselierd1bac4c2015-07-22 00:33:36188 endif()
189endif()
190
Louis Dionne989eca62019-03-14 14:19:08191split_list(LIBCXX_COMPILE_FLAGS)
192split_list(LIBCXX_LINK_FLAGS)
Petr Hosek9e49a332016-08-08 22:57:25193
Petr Hosek9e49a332016-08-08 22:57:25194# Build the shared library.
Haowei Wua3539092022-10-12 19:54:48195if (LIBCXX_ENABLE_SHARED)
196 add_library(cxx_shared SHARED ${exclude_from_all} ${LIBCXX_SOURCES} ${LIBCXX_HEADERS})
197 target_include_directories(cxx_shared PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
198 target_link_libraries(cxx_shared PUBLIC cxx-headers
199 PRIVATE ${LIBCXX_LIBRARIES})
200 set_target_properties(cxx_shared
201 PROPERTIES
202 COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}"
203 LINK_FLAGS "${LIBCXX_LINK_FLAGS}"
204 OUTPUT_NAME "${LIBCXX_SHARED_OUTPUT_NAME}"
205 VERSION "${LIBCXX_LIBRARY_VERSION}"
206 SOVERSION "${LIBCXX_ABI_VERSION}"
207 DEFINE_SYMBOL ""
Michael J. Spencerf5799be2010-12-10 19:47:54208 )
Haowei Wua3539092022-10-12 19:54:48209 cxx_add_common_build_flags(cxx_shared)
Louis Dionne989eca62019-03-14 14:19:08210
Haowei Wua3539092022-10-12 19:54:48211 if(ZOS)
212 add_custom_command(TARGET cxx_shared POST_BUILD
213 COMMAND
214 ${LIBCXX_SOURCE_DIR}/utils/zos_rename_dll_side_deck.sh
215 $<TARGET_LINKER_FILE_NAME:cxx_shared> $<TARGET_FILE_NAME:cxx_shared> "${LIBCXX_DLL_NAME}"
216 COMMENT "Rename dll name inside the side deck file"
217 WORKING_DIRECTORY $<TARGET_FILE_DIR:cxx_shared>
218 )
Louis Dionne6e68a792019-04-05 20:29:54219 endif()
220
Haowei Wua3539092022-10-12 19:54:48221 # Link against libc++abi
222 if (LIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY)
223 target_link_libraries(cxx_shared PRIVATE libcxx-abi-shared-objects)
224 else()
225 target_link_libraries(cxx_shared PUBLIC libcxx-abi-shared)
226 endif()
Louis Dionne79ee0342022-09-19 20:17:02227
Haowei Wua3539092022-10-12 19:54:48228 # Maybe re-export symbols from libc++abi
229 # In particular, we don't re-export the symbols if libc++abi is merged statically
230 # into libc++ because in that case there's no dylib to re-export from.
231 if (APPLE AND LIBCXX_CXX_ABI STREQUAL "libcxxabi"
232 AND NOT DEFINED LIBCXX_OSX_REEXPORT_LIBCXXABI_SYMBOLS
233 AND NOT LIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY)
234 set(LIBCXX_OSX_REEXPORT_LIBCXXABI_SYMBOLS ON)
235 endif()
236
237 if (LIBCXX_OSX_REEXPORT_LIBCXXABI_SYMBOLS)
238 target_link_libraries(cxx_shared PRIVATE
239 "-Wl,-unexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/../lib/libc++unexp.exp"
240 "-Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/../lib/libc++abi.exp"
241 "-Wl,-force_symbols_not_weak_list,${CMAKE_CURRENT_SOURCE_DIR}/../lib/notweak.exp"
242 "-Wl,-force_symbols_weak_list,${CMAKE_CURRENT_SOURCE_DIR}/../lib/weak.exp")
243
244 target_link_libraries(cxx_shared PRIVATE $<TARGET_NAME_IF_EXISTS:cxxabi-reexports>)
245 endif()
246
247 # Generate a linker script in place of a libc++.so symlink.
248 if (LIBCXX_ENABLE_ABI_LINKER_SCRIPT)
249 set(link_libraries)
250
251 set(imported_libname "$<TARGET_PROPERTY:libcxx-abi-shared,IMPORTED_LIBNAME>")
252 set(output_name "$<TARGET_PROPERTY:libcxx-abi-shared,OUTPUT_NAME>")
253 string(APPEND link_libraries "${CMAKE_LINK_LIBRARY_FLAG}$<IF:$<BOOL:${imported_libname}>,${imported_libname},${output_name}>")
254
255 # TODO: Move to the same approach as above for the unwind library
256 if (LIBCXXABI_USE_LLVM_UNWINDER)
257 if (LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY)
258 # libunwind is already included in libc++abi
259 elseif (TARGET unwind_shared OR HAVE_LIBUNWIND)
260 string(APPEND link_libraries " ${CMAKE_LINK_LIBRARY_FLAG}$<TARGET_PROPERTY:unwind_shared,OUTPUT_NAME>")
261 else()
262 string(APPEND link_libraries " ${CMAKE_LINK_LIBRARY_FLAG}unwind")
263 endif()
264 endif()
265
266 set(linker_script "INPUT($<TARGET_SONAME_FILE_NAME:cxx_shared> ${link_libraries})")
267 add_custom_command(TARGET cxx_shared POST_BUILD
268 COMMAND "${CMAKE_COMMAND}" -E remove "$<TARGET_LINKER_FILE:cxx_shared>"
269 COMMAND "${CMAKE_COMMAND}" -E echo "${linker_script}" > "$<TARGET_LINKER_FILE:cxx_shared>"
270 COMMENT "Generating linker script: '${linker_script}' as file $<TARGET_LINKER_FILE:cxx_shared>"
271 VERBATIM
272 )
273 endif()
274
Petr Hosek4a1e14e2018-07-24 23:27:51275 list(APPEND LIBCXX_BUILD_TARGETS "cxx_shared")
Haowei Wua3539092022-10-12 19:54:48276 if(WIN32 AND NOT MINGW AND NOT "${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Windows")
277 # Since we most likely do not have a mt.exe replacement, disable the
278 # manifest bundling. This allows a normal cmake invocation to pass which
279 # will attempt to use the manifest tool to generate the bundled manifest
280 set_target_properties(cxx_shared PROPERTIES
281 APPEND_STRING PROPERTY LINK_FLAGS " /MANIFEST:NO")
282 endif()
Petr Hosek9e49a332016-08-08 22:57:25283endif()
284
Martin Storsjö7a804c02021-03-23 11:23:16285set(CMAKE_STATIC_LIBRARY_PREFIX "lib")
286
Petr Hosek9e49a332016-08-08 22:57:25287# Build the static library.
288if (LIBCXX_ENABLE_STATIC)
Haowei Wua3539092022-10-12 19:54:48289 add_library(cxx_static STATIC ${exclude_from_all} ${LIBCXX_SOURCES} ${LIBCXX_HEADERS})
290 target_include_directories(cxx_static PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
291 target_link_libraries(cxx_static PUBLIC cxx-headers
292 PRIVATE ${LIBCXX_LIBRARIES}
293 PRIVATE libcxx-abi-static)
294 set_target_properties(cxx_static
295 PROPERTIES
296 COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}"
297 LINK_FLAGS "${LIBCXX_LINK_FLAGS}"
298 OUTPUT_NAME "${LIBCXX_STATIC_OUTPUT_NAME}"
299 )
300 cxx_add_common_build_flags(cxx_static)
Haowei Wua3539092022-10-12 19:54:48301
302 if (LIBCXX_HERMETIC_STATIC_LIBRARY)
303 # If the hermetic library doesn't define the operator new/delete functions
304 # then its code shouldn't declare them with hidden visibility. They might
305 # actually be provided by a shared library at link time.
306 if (LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS)
307 append_flags_if_supported(CXX_STATIC_LIBRARY_FLAGS -fvisibility-global-new-delete-hidden)
308 endif()
309 target_compile_options(cxx_static PRIVATE ${CXX_STATIC_LIBRARY_FLAGS})
310 # _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS can be defined in __config_site
311 # too. Define it in the same way here, to avoid redefinition conflicts.
312 target_compile_definitions(cxx_static PRIVATE _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS=)
313 endif()
314
Petr Hosek4a1e14e2018-07-24 23:27:51315 list(APPEND LIBCXX_BUILD_TARGETS "cxx_static")
Haowei Wua3539092022-10-12 19:54:48316 # Attempt to merge the libc++.a archive and the ABI library archive into one.
317 if (LIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY)
318 target_link_libraries(cxx_static PRIVATE libcxx-abi-static-objects)
319 endif()
Petr Hosek9e49a332016-08-08 22:57:25320endif()
321
Eric Fiselier67ea02b2018-07-27 03:47:46322# Add a meta-target for both libraries.
Louis Dionneefa40eb2020-06-26 20:05:55323add_custom_target(cxx DEPENDS ${LIBCXX_BUILD_TARGETS})
Eric Fiselier67ea02b2018-07-27 03:47:46324
Louis Dionne7300a652022-07-19 14:44:06325set(LIBCXX_EXPERIMENTAL_SOURCES
326 experimental/memory_resource.cpp
Eric Fiselier27cb2f12016-05-03 21:30:18327 )
Martin Storsjö0d7de7a2022-07-07 06:49:25328
Nikolas Klauser2b2e7f62023-07-12 20:24:57329if (LIBCXX_PSTL_CPU_BACKEND STREQUAL "libdispatch")
Nico Weber7a9b8a82023-07-13 12:35:06330 list(APPEND LIBCXX_EXPERIMENTAL_SOURCES
331 pstl/libdispatch.cpp
332 )
Nikolas Klauser2b2e7f62023-07-12 20:24:57333endif()
334
Mark de Weverf78f93b2022-09-23 16:33:20335if (LIBCXX_ENABLE_LOCALIZATION AND LIBCXX_ENABLE_FILESYSTEM AND LIBCXX_ENABLE_TIME_ZONE_DATABASE)
336 list(APPEND LIBCXX_EXPERIMENTAL_SOURCES
337 tz.cpp
338 tzdb_list.cpp
339 )
340endif()
341
Louis Dionne7300a652022-07-19 14:44:06342add_library(cxx_experimental STATIC ${LIBCXX_EXPERIMENTAL_SOURCES})
343target_link_libraries(cxx_experimental PUBLIC cxx-headers)
344if (LIBCXX_ENABLE_SHARED)
345 target_link_libraries(cxx_experimental PRIVATE cxx_shared)
346else()
347 target_link_libraries(cxx_experimental PRIVATE cxx_static)
Eric Fiselier27cb2f12016-05-03 21:30:18348endif()
Louis Dionnefadc84a2019-10-04 22:50:23349
Louis Dionne7300a652022-07-19 14:44:06350if (LIBCXX_HERMETIC_STATIC_LIBRARY)
351 # _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS can be defined in __config_site
352 # too. Define it in the same way here, to avoid redefinition conflicts.
353 target_compile_definitions(cxx_experimental PRIVATE _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS=)
354endif()
355
356set_target_properties(cxx_experimental
357 PROPERTIES
358 COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}"
359 OUTPUT_NAME "c++experimental"
360)
361cxx_add_common_build_flags(cxx_experimental)
Louis Dionne8711fca2022-06-30 15:57:52362target_compile_options(cxx_experimental PUBLIC -D_LIBCPP_ENABLE_EXPERIMENTAL)
Louis Dionne7300a652022-07-19 14:44:06363
Louis Dionne4bd3d162020-10-09 19:04:12364if (LIBCXX_INSTALL_SHARED_LIBRARY)
365 install(TARGETS cxx_shared
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)
Eric Fiselierd77135f2015-08-26 20:18:21369endif()
Eric Fiselier7cb813f2015-08-19 17:41:53370
Louis Dionne4bd3d162020-10-09 19:04:12371if (LIBCXX_INSTALL_STATIC_LIBRARY)
372 install(TARGETS cxx_static
Petr Hosek96d8c6b2021-04-01 00:34:05373 ARCHIVE DESTINATION ${LIBCXX_INSTALL_LIBRARY_DIR} COMPONENT cxx
374 LIBRARY 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
Louis Dionne7300a652022-07-19 14:44:06378if (LIBCXX_INSTALL_LIBRARY)
Louis Dionne4bd3d162020-10-09 19:04:12379 install(TARGETS cxx_experimental
Petr Hosek96d8c6b2021-04-01 00:34:05380 LIBRARY DESTINATION ${LIBCXX_INSTALL_LIBRARY_DIR} COMPONENT cxx
381 ARCHIVE DESTINATION ${LIBCXX_INSTALL_LIBRARY_DIR} COMPONENT cxx
Martin Storsjöc4e8a212021-08-11 10:44:06382 RUNTIME DESTINATION ${LIBCXX_INSTALL_RUNTIME_DIR} COMPONENT cxx)
Louis Dionne4bd3d162020-10-09 19:04:12383endif()
384
385# NOTE: This install command must go after the cxx install command otherwise
386# it will not be executed after the library symlinks are installed.
387if (LIBCXX_ENABLE_SHARED AND LIBCXX_ENABLE_ABI_LINKER_SCRIPT)
Louis Dionne5034d712021-02-23 23:26:15388 install(FILES "$<TARGET_LINKER_FILE:cxx_shared>"
Petr Hosek96d8c6b2021-04-01 00:34:05389 DESTINATION ${LIBCXX_INSTALL_LIBRARY_DIR}
Louis Dionne4bd3d162020-10-09 19:04:12390 COMPONENT libcxx)
391endif()
392
393if (NOT CMAKE_CONFIGURATION_TYPES)
Chris Bienemana1b79ae2015-12-03 18:52:54394 if(LIBCXX_INSTALL_LIBRARY)
Louis Dionne7300a652022-07-19 14:44:06395 set(lib_install_target "cxx;cxx_experimental")
Eric Fiselier27cb2f12016-05-03 21:30:18396 endif()
Chris Bieneman4497e3a2016-04-29 22:17:15397 if(LIBCXX_INSTALL_HEADERS)
Chris Bienemanf17227a2016-08-24 22:17:06398 set(header_install_target install-cxx-headers)
Chris Bieneman4497e3a2016-04-29 22:17:15399 endif()
Chris Bienemanf17227a2016-08-24 22:17:06400 add_custom_target(install-cxx
Eric Fiselier27cb2f12016-05-03 21:30:18401 DEPENDS ${lib_install_target}
Louis Dionne7300a652022-07-19 14:44:06402 cxx_experimental
Eric Fiselier27cb2f12016-05-03 21:30:18403 ${header_install_target}
Eric Fiselierd77135f2015-08-26 20:18:21404 COMMAND "${CMAKE_COMMAND}"
Chris Bienemanf17227a2016-08-24 22:17:06405 -DCMAKE_INSTALL_COMPONENT=cxx
Eric Fiselierd77135f2015-08-26 20:18:21406 -P "${LIBCXX_BINARY_DIR}/cmake_install.cmake")
Shoaib Meenaif7c79442017-12-06 21:03:42407 add_custom_target(install-cxx-stripped
408 DEPENDS ${lib_install_target}
Louis Dionne7300a652022-07-19 14:44:06409 cxx_experimental
Shoaib Meenaif7c79442017-12-06 21:03:42410 ${header_install_target}
Shoaib Meenaif7c79442017-12-06 21:03:42411 COMMAND "${CMAKE_COMMAND}"
412 -DCMAKE_INSTALL_COMPONENT=cxx
413 -DCMAKE_INSTALL_DO_STRIP=1
414 -P "${LIBCXX_BINARY_DIR}/cmake_install.cmake")
Eric Fiselier7cb813f2015-08-19 17:41:53415endif()