blob: fc9fc0e7bc27d57b2e2461c46c978e503485cd86 [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
Olivier Giroux54fa9ec2020-02-18 14:58:347 atomic.cpp
8 barrier.cpp
Petr Hosekf80c4b62019-05-01 06:40:369 bind.cpp
10 charconv.cpp
11 chrono.cpp
12 condition_variable.cpp
Eric Fiselier8cedf042019-07-07 17:24:0313 condition_variable_destructor.cpp
Petr Hosekf80c4b62019-05-01 06:40:3614 debug.cpp
15 exception.cpp
16 functional.cpp
17 future.cpp
18 hash.cpp
19 include/apple_availability.h
20 include/atomic_support.h
21 include/config_elast.h
22 include/refstring.h
23 ios.cpp
24 iostream.cpp
25 locale.cpp
26 memory.cpp
27 mutex.cpp
Eric Fiselier8baf8382019-07-07 01:20:5428 mutex_destructor.cpp
Petr Hosekf80c4b62019-05-01 06:40:3629 new.cpp
30 optional.cpp
31 random.cpp
Louis Dionnece6153a2020-06-30 16:42:4432 random_shuffle.cpp
Petr Hosekf80c4b62019-05-01 06:40:3633 regex.cpp
34 shared_mutex.cpp
35 stdexcept.cpp
36 string.cpp
37 strstream.cpp
38 support/runtime/exception_fallback.ipp
39 support/runtime/exception_glibcxx.ipp
40 support/runtime/exception_libcxxabi.ipp
41 support/runtime/exception_libcxxrt.ipp
42 support/runtime/exception_msvc.ipp
43 support/runtime/exception_pointer_cxxabi.ipp
44 support/runtime/exception_pointer_glibcxx.ipp
45 support/runtime/exception_pointer_msvc.ipp
46 support/runtime/exception_pointer_unimplemented.ipp
47 support/runtime/new_handler_fallback.ipp
48 support/runtime/stdexcept_default.ipp
49 support/runtime/stdexcept_vcruntime.ipp
50 system_error.cpp
51 thread.cpp
52 typeinfo.cpp
53 utility.cpp
54 valarray.cpp
55 variant.cpp
56 vector.cpp
57 )
58
Howard Hinnant3c78ca02011-09-22 19:10:1859if(WIN32)
Petr Hosekf80c4b62019-05-01 06:40:3660 list(APPEND LIBCXX_SOURCES
61 support/win32/locale_win32.cpp
62 support/win32/support.cpp
63 support/win32/thread_win32.cpp
64 )
Eric Fiselier53deb602014-11-25 21:57:4165elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "SunOS")
Petr Hosekf80c4b62019-05-01 06:40:3666 list(APPEND LIBCXX_SOURCES
67 support/solaris/mbsnrtowcs.inc
68 support/solaris/wcsnrtombs.inc
69 support/solaris/xlocale.cpp
70 )
Howard Hinnant3c78ca02011-09-22 19:10:1871endif()
Michael J. Spencerf5799be2010-12-10 19:47:5472
Eric Fiselierf1d87f82019-03-21 00:04:3173if (LIBCXX_ENABLE_FILESYSTEM)
Petr Hosekf80c4b62019-05-01 06:40:3674 list(APPEND LIBCXX_SOURCES
75 filesystem/filesystem_common.h
76 filesystem/operations.cpp
77 filesystem/directory_iterator.cpp
78 )
Eric Fiselierf1d87f82019-03-21 00:04:3179 # Filesystem uses __int128_t, which requires a definition of __muloi4 when
80 # compiled with UBSAN. This definition is not provided by libgcc_s, but is
81 # provided by compiler-rt. So we need to disable it to avoid having multiple
82 # definitions. See filesystem/int128_builtins.cpp.
83 if (NOT LIBCXX_USE_COMPILER_RT)
Petr Hosekf80c4b62019-05-01 06:40:3684 list(APPEND LIBCXX_SOURCES
85 filesystem/int128_builtins.cpp
86 )
Eric Fiselierf1d87f82019-03-21 00:04:3187 endif()
Louis Dionnecc37af72019-03-19 20:56:1388endif()
89
Michael J. Spencerf5799be2010-12-10 19:47:5490# Add all the headers to the project for IDEs.
Eric Fiselier6627c702015-12-16 23:41:0591if (LIBCXX_CONFIGURE_IDE)
Howard Hinnantb2f52bb2012-03-19 15:40:2392 file(GLOB_RECURSE LIBCXX_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../include/*)
Howard Hinnant3c78ca02011-09-22 19:10:1893 if(WIN32)
Howard Hinnantb2f52bb2012-03-19 15:40:2394 file( GLOB LIBCXX_WIN32_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../include/support/win32/*.h)
95 list(APPEND LIBCXX_HEADERS ${LIBCXX_WIN32_HEADERS})
Howard Hinnant3c78ca02011-09-22 19:10:1896 endif()
Michael J. Spencerf5799be2010-12-10 19:47:5497 # Force them all into the headers dir on MSVC, otherwise they end up at
98 # project scope because they don't have extensions.
99 if (MSVC_IDE)
Howard Hinnantb2f52bb2012-03-19 15:40:23100 source_group("Header Files" FILES ${LIBCXX_HEADERS})
Michael J. Spencerf5799be2010-12-10 19:47:54101 endif()
102endif()
103
Chris Bienemana1b79ae2015-12-03 18:52:54104if(NOT LIBCXX_INSTALL_LIBRARY)
105 set(exclude_from_all EXCLUDE_FROM_ALL)
106endif()
107
Saleem Abdulrasool99c19ad2017-01-04 05:49:55108# If LIBCXX_CXX_ABI_LIBRARY_PATH is defined we want to add it to the search path.
109add_link_flags_if(LIBCXX_CXX_ABI_LIBRARY_PATH
110 "${CMAKE_LIBRARY_PATH_FLAG}${LIBCXX_CXX_ABI_LIBRARY_PATH}")
Eric Fiselier03571712015-03-03 15:59:51111
Eric Fiselier2aeac462017-03-11 03:24:18112
113if (LIBCXX_GENERATE_COVERAGE AND NOT LIBCXX_COVERAGE_LIBRARY)
114 find_compiler_rt_library(profile LIBCXX_COVERAGE_LIBRARY)
115endif()
Eric Fiselier10ed6c32015-07-30 22:30:34116add_library_flags_if(LIBCXX_COVERAGE_LIBRARY "${LIBCXX_COVERAGE_LIBRARY}")
Michael J. Spencerf5799be2010-12-10 19:47:54117
Eric Fiselierd1bac4c2015-07-22 00:33:36118if (APPLE AND LLVM_USE_SANITIZER)
Kuba Brecka50bc34ca312016-09-15 11:04:53119 if (("${LLVM_USE_SANITIZER}" STREQUAL "Address") OR
120 ("${LLVM_USE_SANITIZER}" STREQUAL "Address;Undefined") OR
121 ("${LLVM_USE_SANITIZER}" STREQUAL "Undefined;Address"))
Eric Fiselierd1bac4c2015-07-22 00:33:36122 set(LIBFILE "libclang_rt.asan_osx_dynamic.dylib")
123 elseif("${LLVM_USE_SANITIZER}" STREQUAL "Undefined")
124 set(LIBFILE "libclang_rt.ubsan_osx_dynamic.dylib")
Kuba Breckad634df52016-09-14 14:12:50125 elseif("${LLVM_USE_SANITIZER}" STREQUAL "Thread")
126 set(LIBFILE "libclang_rt.tsan_osx_dynamic.dylib")
Eric Fiselierd1bac4c2015-07-22 00:33:36127 else()
128 message(WARNING "LLVM_USE_SANITIZER=${LLVM_USE_SANITIZER} is not supported on OS X")
129 endif()
130 if (LIBFILE)
Eric Fiselier2aeac462017-03-11 03:24:18131 find_compiler_rt_dir(LIBDIR)
Eric Fiselierd1bac4c2015-07-22 00:33:36132 if (NOT IS_DIRECTORY "${LIBDIR}")
133 message(FATAL_ERROR "Cannot find compiler-rt directory on OS X required for LLVM_USE_SANITIZER")
134 endif()
135 set(LIBCXX_SANITIZER_LIBRARY "${LIBDIR}/${LIBFILE}")
136 set(LIBCXX_SANITIZER_LIBRARY "${LIBCXX_SANITIZER_LIBRARY}" PARENT_SCOPE)
137 message(STATUS "Manually linking compiler-rt library: ${LIBCXX_SANITIZER_LIBRARY}")
Eric Fiselier10ed6c32015-07-30 22:30:34138 add_library_flags("${LIBCXX_SANITIZER_LIBRARY}")
139 add_link_flags("-Wl,-rpath,${LIBDIR}")
Eric Fiselierd1bac4c2015-07-22 00:33:36140 endif()
141endif()
142
Louis Dionne0a06eb92019-08-05 18:29:14143if (LIBCXX_ENABLE_PARALLEL_ALGORITHMS AND NOT TARGET pstl::ParallelSTL)
144 message(FATAL_ERROR "Could not find ParallelSTL")
145endif()
146
Louis Dionne989eca62019-03-14 14:19:08147function(cxx_set_common_defines name)
Petr Hoseka2685cd2019-01-06 06:14:31148 if(LIBCXX_CXX_ABI_HEADER_TARGET)
149 add_dependencies(${name} ${LIBCXX_CXX_ABI_HEADER_TARGET})
150 endif()
Louis Dionne0a06eb92019-08-05 18:29:14151
152 if (LIBCXX_ENABLE_PARALLEL_ALGORITHMS)
153 target_link_libraries(${name} PUBLIC pstl::ParallelSTL)
154 endif()
Louis Dionne989eca62019-03-14 14:19:08155endfunction()
Petr Hoseka2685cd2019-01-06 06:14:31156
Louis Dionne989eca62019-03-14 14:19:08157split_list(LIBCXX_COMPILE_FLAGS)
158split_list(LIBCXX_LINK_FLAGS)
Petr Hosek9e49a332016-08-08 22:57:25159
Petr Hosek9e49a332016-08-08 22:57:25160# Build the shared library.
161if (LIBCXX_ENABLE_SHARED)
Louis Dionne989eca62019-03-14 14:19:08162 add_library(cxx_shared SHARED ${exclude_from_all} ${LIBCXX_SOURCES} ${LIBCXX_HEADERS})
Don Hinton88434fe2018-01-27 18:55:30163 if(COMMAND llvm_setup_rpath)
Don Hintond21aeff2018-01-26 01:34:51164 llvm_setup_rpath(cxx_shared)
165 endif()
Louis Dionneefa40eb2020-06-26 20:05:55166 target_link_libraries(cxx_shared PUBLIC cxx-headers
167 PRIVATE ${LIBCXX_LIBRARIES})
Petr Hosek9e49a332016-08-08 22:57:25168 set_target_properties(cxx_shared
169 PROPERTIES
Louis Dionne989eca62019-03-14 14:19:08170 COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}"
Petr Hosek9e49a332016-08-08 22:57:25171 LINK_FLAGS "${LIBCXX_LINK_FLAGS}"
172 OUTPUT_NAME "c++"
173 VERSION "${LIBCXX_ABI_VERSION}.0"
174 SOVERSION "${LIBCXX_ABI_VERSION}"
Louis Dionne702411f2019-03-14 17:15:47175 DEFINE_SYMBOL ""
Michael J. Spencerf5799be2010-12-10 19:47:54176 )
Louis Dionnefadc84a2019-10-04 22:50:23177 cxx_add_common_build_flags(cxx_shared)
Louis Dionne989eca62019-03-14 14:19:08178 cxx_set_common_defines(cxx_shared)
179
Petr Hosek1788b892019-04-17 21:41:09180 # Link against LLVM libunwind
181 if (LIBCXXABI_USE_LLVM_UNWINDER)
182 if (NOT LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY AND (TARGET unwind_shared OR HAVE_LIBUNWIND))
Louis Dionne68924e62019-04-30 15:44:19183 target_link_libraries(cxx_shared PUBLIC unwind_shared)
Petr Hosek1788b892019-04-17 21:41:09184 elseif (LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY AND (TARGET unwind_static OR HAVE_LIBUNWIND))
185 # libunwind is already included in libc++abi
186 else()
Louis Dionne1ea8bb32019-10-08 21:10:20187 target_link_libraries(cxx_shared PUBLIC unwind)
Petr Hosek1788b892019-04-17 21:41:09188 endif()
189 endif()
190
Louis Dionne6e68a792019-04-05 20:29:54191 # Link against libc++abi
192 if (LIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY)
193 if (APPLE)
Martin Storsjoc90045b2019-04-09 14:31:09194 target_link_libraries(cxx_shared PRIVATE "-Wl,-force_load" "${LIBCXX_CXX_STATIC_ABI_LIBRARY}")
Louis Dionne6e68a792019-04-05 20:29:54195 else()
Martin Storsjoc90045b2019-04-09 14:31:09196 target_link_libraries(cxx_shared PRIVATE "-Wl,--whole-archive,-Bstatic" "${LIBCXX_CXX_STATIC_ABI_LIBRARY}" "-Wl,-Bdynamic,--no-whole-archive")
Louis Dionne6e68a792019-04-05 20:29:54197 endif()
198 else()
Louis Dionne68924e62019-04-30 15:44:19199 target_link_libraries(cxx_shared PUBLIC "${LIBCXX_CXX_SHARED_ABI_LIBRARY}")
Louis Dionne6e68a792019-04-05 20:29:54200 endif()
201
202 # Maybe re-export symbols from libc++abi
203 if (APPLE AND (LIBCXX_CXX_ABI_LIBNAME STREQUAL "libcxxabi" OR
204 LIBCXX_CXX_ABI_LIBNAME STREQUAL "default")
205 AND NOT DEFINED LIBCXX_OSX_REEXPORT_LIBCXXABI_SYMBOLS)
206 set(LIBCXX_OSX_REEXPORT_LIBCXXABI_SYMBOLS ON)
207 endif()
208
209 if (LIBCXX_OSX_REEXPORT_LIBCXXABI_SYMBOLS)
Louis Dionne6e68a792019-04-05 20:29:54210 target_link_libraries(cxx_shared PRIVATE
Petr Hosekf80c4b62019-05-01 06:40:36211 "-Wl,-unexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/../lib/libc++unexp.exp"
Louis Dionneecf313c2020-04-20 09:22:20212 "-Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/../lib/libc++abi.v${LIBCXX_LIBCPPABI_VERSION}.exp"
Petr Hosekf80c4b62019-05-01 06:40:36213 "-Wl,-force_symbols_not_weak_list,${CMAKE_CURRENT_SOURCE_DIR}/../lib/notweak.exp"
214 "-Wl,-force_symbols_weak_list,${CMAKE_CURRENT_SOURCE_DIR}/../lib/weak.exp")
Louis Dionne6e68a792019-04-05 20:29:54215 endif()
216
Louis Dionne1ea8bb32019-10-08 21:10:20217 # Generate a linker script in place of a libc++.so symlink.
Louis Dionne6e68a792019-04-05 20:29:54218 if (LIBCXX_ENABLE_ABI_LINKER_SCRIPT)
Louis Dionne1ea8bb32019-10-08 21:10:20219 include(DefineLinkerScript)
220 define_linker_script(cxx_shared)
Louis Dionne6e68a792019-04-05 20:29:54221 endif()
222
Petr Hosek4a1e14e2018-07-24 23:27:51223 list(APPEND LIBCXX_BUILD_TARGETS "cxx_shared")
Saleem Abdulrasool2d2ed1c2017-01-02 21:09:19224 if(WIN32 AND NOT MINGW AND NOT "${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Windows")
225 # Since we most likely do not have a mt.exe replacement, disable the
226 # manifest bundling. This allows a normal cmake invocation to pass which
227 # will attempt to use the manifest tool to generate the bundled manifest
228 set_target_properties(cxx_shared PROPERTIES
229 APPEND_STRING PROPERTY LINK_FLAGS " /MANIFEST:NO")
230 endif()
Petr Hosek9e49a332016-08-08 22:57:25231endif()
232
233# Build the static library.
234if (LIBCXX_ENABLE_STATIC)
Louis Dionne989eca62019-03-14 14:19:08235 add_library(cxx_static STATIC ${exclude_from_all} ${LIBCXX_SOURCES} ${LIBCXX_HEADERS})
Louis Dionneefa40eb2020-06-26 20:05:55236 target_link_libraries(cxx_static PUBLIC cxx-headers
237 PRIVATE ${LIBCXX_LIBRARIES})
Martell Malone8fd2d372017-05-25 22:37:15238 set(CMAKE_STATIC_LIBRARY_PREFIX "lib")
Petr Hosek9e49a332016-08-08 22:57:25239 set_target_properties(cxx_static
240 PROPERTIES
Louis Dionne989eca62019-03-14 14:19:08241 COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}"
Petr Hosek9e49a332016-08-08 22:57:25242 LINK_FLAGS "${LIBCXX_LINK_FLAGS}"
Martell Malone8fd2d372017-05-25 22:37:15243 OUTPUT_NAME "c++"
Petr Hosek9e49a332016-08-08 22:57:25244 )
Louis Dionnefadc84a2019-10-04 22:50:23245 cxx_add_common_build_flags(cxx_static)
Louis Dionne850a3d32019-03-14 14:52:26246 cxx_set_common_defines(cxx_static)
Louis Dionne989eca62019-03-14 14:19:08247
248 if (LIBCXX_HERMETIC_STATIC_LIBRARY)
Petr Hosek741f52c2019-05-06 01:22:28249 # If the hermetic library doesn't define the operator new/delete functions
250 # then its code shouldn't declare them with hidden visibility. They might
251 # actually be provided by a shared library at link time.
252 if (LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS)
253 append_flags_if_supported(CXX_STATIC_LIBRARY_FLAGS -fvisibility-global-new-delete-hidden)
254 endif()
Louis Dionne989eca62019-03-14 14:19:08255 target_compile_options(cxx_static PRIVATE ${CXX_STATIC_LIBRARY_FLAGS})
256 target_compile_definitions(cxx_static PRIVATE _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS)
257 endif()
258
Petr Hosek4a1e14e2018-07-24 23:27:51259 list(APPEND LIBCXX_BUILD_TARGETS "cxx_static")
Eric Fiselierbf58c8e2016-11-18 19:53:45260 # Attempt to merge the libc++.a archive and the ABI library archive into one.
Petr Hosek058c04c2018-07-24 07:06:17261 if (LIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY)
Eric Fiselierbf58c8e2016-11-18 19:53:45262 set(MERGE_ARCHIVES_SEARCH_PATHS "")
263 if (LIBCXX_CXX_ABI_LIBRARY_PATH)
264 set(MERGE_ARCHIVES_SEARCH_PATHS "-L${LIBCXX_CXX_ABI_LIBRARY_PATH}")
265 endif()
Petr Hosek30d9af12019-04-03 01:33:14266 if (TARGET "${LIBCXX_CXX_STATIC_ABI_LIBRARY}" OR HAVE_LIBCXXABI)
267 set(MERGE_ARCHIVES_ABI_TARGET "$<TARGET_LINKER_FILE:${LIBCXX_CXX_STATIC_ABI_LIBRARY}>")
Eric Fiselierbf58c8e2016-11-18 19:53:45268 else()
Saleem Abdulrasoolf1ae11a2017-01-04 05:49:57269 set(MERGE_ARCHIVES_ABI_TARGET
Petr Hosek30d9af12019-04-03 01:33:14270 "${CMAKE_STATIC_LIBRARY_PREFIX}${LIBCXX_CXX_STATIC_ABI_LIBRARY}${CMAKE_STATIC_LIBRARY_SUFFIX}")
Eric Fiselierbf58c8e2016-11-18 19:53:45271 endif()
Petr Hosek737de4d2019-06-02 01:14:31272 if (APPLE)
273 set(MERGE_ARCHIVES_LIBTOOL "--use-libtool" "--libtool" "${CMAKE_LIBTOOL}")
274 endif()
Eric Fiselierbf58c8e2016-11-18 19:53:45275 add_custom_command(TARGET cxx_static POST_BUILD
276 COMMAND
Saleem Abdulrasool88af3dd2020-04-28 19:50:12277 ${Python3_EXECUTABLE} ${LIBCXX_SOURCE_DIR}/utils/merge_archives.py
Eric Fiselierbf58c8e2016-11-18 19:53:45278 ARGS
279 -o $<TARGET_LINKER_FILE:cxx_static>
Martin Storsjofb8eb6f2017-09-13 06:55:44280 --ar "${CMAKE_AR}"
Petr Hosek737de4d2019-06-02 01:14:31281 ${MERGE_ARCHIVES_LIBTOOL}
Eric Fiselierbf58c8e2016-11-18 19:53:45282 "$<TARGET_LINKER_FILE:cxx_static>"
283 "${MERGE_ARCHIVES_ABI_TARGET}"
284 "${MERGE_ARCHIVES_SEARCH_PATHS}"
285 WORKING_DIRECTORY ${LIBCXX_BUILD_DIR}
286 )
287 endif()
Petr Hosek9e49a332016-08-08 22:57:25288endif()
289
Eric Fiselier67ea02b2018-07-27 03:47:46290# Add a meta-target for both libraries.
Louis Dionneefa40eb2020-06-26 20:05:55291add_custom_target(cxx DEPENDS ${LIBCXX_BUILD_TARGETS})
Eric Fiselier67ea02b2018-07-27 03:47:46292
Eric Fiselier27cb2f12016-05-03 21:30:18293if (LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY)
Petr Hosekf80c4b62019-05-01 06:40:36294 set(LIBCXX_EXPERIMENTAL_SOURCES
295 experimental/memory_resource.cpp
296 )
Eric Fiselier998a5c82018-07-27 03:07:09297 add_library(cxx_experimental STATIC ${LIBCXX_EXPERIMENTAL_SOURCES})
Petr Hosek9e49a332016-08-08 22:57:25298 if (LIBCXX_ENABLE_SHARED)
Louis Dionne32300872019-10-08 16:26:24299 target_link_libraries(cxx_experimental PRIVATE cxx_shared)
Petr Hosek9e49a332016-08-08 22:57:25300 else()
Louis Dionne32300872019-10-08 16:26:24301 target_link_libraries(cxx_experimental PRIVATE cxx_static)
Petr Hosek9e49a332016-08-08 22:57:25302 endif()
Eric Fiseliera5e201f2016-05-10 16:17:43303
Eric Fiselier27cb2f12016-05-03 21:30:18304 set_target_properties(cxx_experimental
305 PROPERTIES
Louis Dionnefadc84a2019-10-04 22:50:23306 COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}"
Eric Fiselier27cb2f12016-05-03 21:30:18307 OUTPUT_NAME "c++experimental"
308 )
Alex Langford9627b262019-10-04 23:08:20309 cxx_add_common_build_flags(cxx_experimental)
Eric Fiselier27cb2f12016-05-03 21:30:18310endif()
Louis Dionnefadc84a2019-10-04 22:50:23311
Eric Fiselier27cb2f12016-05-03 21:30:18312
Eric Fiselier00f6bea2017-01-06 20:05:40313if (LIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY)
David Nicuesa722db5c2020-09-01 11:41:21314 set(LIBCXX_EXTERNAL_THREADING_SUPPORT_SOURCES
315 "${CMAKE_CURRENT_SOURCE_DIR}/../test/support/external_threads.cpp")
Asiri Rathnayake8c2bf452016-09-11 21:46:40316
317 if (LIBCXX_ENABLE_SHARED)
318 add_library(cxx_external_threads SHARED ${LIBCXX_EXTERNAL_THREADING_SUPPORT_SOURCES})
319 else()
320 add_library(cxx_external_threads STATIC ${LIBCXX_EXTERNAL_THREADING_SUPPORT_SOURCES})
321 endif()
322
323 set_target_properties(cxx_external_threads
324 PROPERTIES
325 LINK_FLAGS "${LIBCXX_LINK_FLAGS}"
326 COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}"
327 OUTPUT_NAME "c++external_threads"
328 )
David Nicuesa722db5c2020-09-01 11:41:21329
330 target_link_libraries(cxx_external_threads PRIVATE cxx-headers)
Asiri Rathnayake8c2bf452016-09-11 21:46:40331endif()
332
Eric Fiselierd77135f2015-08-26 20:18:21333if (LIBCXX_INSTALL_LIBRARY)
Saleem Abdulrasool97d6fcc2019-07-09 21:43:01334 if (LIBCXX_INSTALL_SHARED_LIBRARY)
335 install(TARGETS cxx_shared
336 ARCHIVE DESTINATION ${LIBCXX_INSTALL_PREFIX}${LIBCXX_INSTALL_LIBRARY_DIR} COMPONENT cxx
337 LIBRARY DESTINATION ${LIBCXX_INSTALL_PREFIX}${LIBCXX_INSTALL_LIBRARY_DIR} COMPONENT cxx
338 RUNTIME DESTINATION ${LIBCXX_INSTALL_PREFIX}bin COMPONENT cxx)
Eric Fiselier27cb2f12016-05-03 21:30:18339 endif()
Saleem Abdulrasool97d6fcc2019-07-09 21:43:01340
341 if (LIBCXX_INSTALL_STATIC_LIBRARY)
342 install(TARGETS cxx_static
343 ARCHIVE DESTINATION ${LIBCXX_INSTALL_PREFIX}${LIBCXX_INSTALL_LIBRARY_DIR} COMPONENT cxx
344 LIBRARY DESTINATION ${LIBCXX_INSTALL_PREFIX}${LIBCXX_INSTALL_LIBRARY_DIR} COMPONENT cxx
345 RUNTIME DESTINATION ${LIBCXX_INSTALL_PREFIX}bin COMPONENT cxx)
346 endif()
347
348 if(LIBCXX_INSTALL_EXPERIMENTAL_LIBRARY)
Louis Dionnece36c5a2020-03-24 14:06:00349 install(TARGETS cxx_experimental
Saleem Abdulrasool97d6fcc2019-07-09 21:43:01350 LIBRARY DESTINATION ${LIBCXX_INSTALL_PREFIX}${LIBCXX_INSTALL_LIBRARY_DIR} COMPONENT cxx
351 ARCHIVE DESTINATION ${LIBCXX_INSTALL_PREFIX}${LIBCXX_INSTALL_LIBRARY_DIR} COMPONENT cxx
352 RUNTIME DESTINATION ${LIBCXX_INSTALL_PREFIX}bin COMPONENT cxx)
353 endif()
354
Eric Fiselier82414052015-10-14 19:54:03355 # NOTE: This install command must go after the cxx install command otherwise
356 # it will not be executed after the library symlinks are installed.
Petr Hosek9e49a332016-08-08 22:57:25357 if (LIBCXX_ENABLE_SHARED AND LIBCXX_ENABLE_ABI_LINKER_SCRIPT)
Eric Fiseliere2dd2fd2015-10-22 21:24:01358 # Replace the libc++ filename with $<TARGET_LINKER_FILE:cxx>
359 # after we required CMake 3.0.
Eric Fiseliercae21e42015-10-23 07:04:24360 install(FILES "${LIBCXX_LIBRARY_DIR}/libc++${CMAKE_SHARED_LIBRARY_SUFFIX}"
Petr Hosek81f433b2019-05-22 21:08:33361 DESTINATION ${LIBCXX_INSTALL_PREFIX}${LIBCXX_INSTALL_LIBRARY_DIR}
Eric Fiselier82414052015-10-14 19:54:03362 COMPONENT libcxx)
363 endif()
Eric Fiselierd77135f2015-08-26 20:18:21364endif()
Eric Fiselier7cb813f2015-08-19 17:41:53365
Eric Fiselierd77135f2015-08-26 20:18:21366if (NOT CMAKE_CONFIGURATION_TYPES AND (LIBCXX_INSTALL_LIBRARY OR
367 LIBCXX_INSTALL_HEADERS))
Chris Bienemana1b79ae2015-12-03 18:52:54368 if(LIBCXX_INSTALL_LIBRARY)
Eric Fiselier59e97482016-05-03 05:34:38369 set(lib_install_target cxx)
Chris Bienemana1b79ae2015-12-03 18:52:54370 endif()
Eric Fiselier27cb2f12016-05-03 21:30:18371 if (LIBCXX_INSTALL_EXPERIMENTAL_LIBRARY)
372 set(experimental_lib_install_target cxx_experimental)
373 endif()
Chris Bieneman4497e3a2016-04-29 22:17:15374 if(LIBCXX_INSTALL_HEADERS)
Chris Bienemanf17227a2016-08-24 22:17:06375 set(header_install_target install-cxx-headers)
Chris Bieneman4497e3a2016-04-29 22:17:15376 endif()
Louis Dionne512c9032020-07-08 19:00:31377 if (LIBCXX_ENABLE_PARALLEL_ALGORITHMS)
378 set(pstl_install_target install-pstl)
379 endif()
Chris Bienemanf17227a2016-08-24 22:17:06380 add_custom_target(install-cxx
Eric Fiselier27cb2f12016-05-03 21:30:18381 DEPENDS ${lib_install_target}
382 ${experimental_lib_install_target}
383 ${header_install_target}
Louis Dionne512c9032020-07-08 19:00:31384 ${pstl_install_target}
Eric Fiselierd77135f2015-08-26 20:18:21385 COMMAND "${CMAKE_COMMAND}"
Chris Bienemanf17227a2016-08-24 22:17:06386 -DCMAKE_INSTALL_COMPONENT=cxx
Eric Fiselierd77135f2015-08-26 20:18:21387 -P "${LIBCXX_BINARY_DIR}/cmake_install.cmake")
Shoaib Meenaif7c79442017-12-06 21:03:42388 add_custom_target(install-cxx-stripped
389 DEPENDS ${lib_install_target}
390 ${experimental_lib_install_target}
391 ${header_install_target}
Louis Dionne512c9032020-07-08 19:00:31392 ${pstl_install_target}
Shoaib Meenaif7c79442017-12-06 21:03:42393 COMMAND "${CMAKE_COMMAND}"
394 -DCMAKE_INSTALL_COMPONENT=cxx
395 -DCMAKE_INSTALL_DO_STRIP=1
396 -P "${LIBCXX_BINARY_DIR}/cmake_install.cmake")
Eric Fiselier7cb813f2015-08-19 17:41:53397endif()