blob: 9c2db48b66b7f728ef2550c43ed1935816053e74 [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()
Petr Hosek8e789152019-01-30 23:18:05166 target_link_libraries(cxx_shared PRIVATE ${LIBCXX_LIBRARIES})
Petr Hosek9e49a332016-08-08 22:57:25167 set_target_properties(cxx_shared
168 PROPERTIES
Louis Dionne989eca62019-03-14 14:19:08169 COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}"
Petr Hosek9e49a332016-08-08 22:57:25170 LINK_FLAGS "${LIBCXX_LINK_FLAGS}"
171 OUTPUT_NAME "c++"
172 VERSION "${LIBCXX_ABI_VERSION}.0"
173 SOVERSION "${LIBCXX_ABI_VERSION}"
Louis Dionne702411f2019-03-14 17:15:47174 DEFINE_SYMBOL ""
Michael J. Spencerf5799be2010-12-10 19:47:54175 )
Louis Dionnefadc84a2019-10-04 22:50:23176 cxx_add_common_build_flags(cxx_shared)
Louis Dionne989eca62019-03-14 14:19:08177 cxx_set_common_defines(cxx_shared)
178
Petr Hosek1788b892019-04-17 21:41:09179 # Link against LLVM libunwind
180 if (LIBCXXABI_USE_LLVM_UNWINDER)
181 if (NOT LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY AND (TARGET unwind_shared OR HAVE_LIBUNWIND))
Louis Dionne68924e62019-04-30 15:44:19182 target_link_libraries(cxx_shared PUBLIC unwind_shared)
Petr Hosek1788b892019-04-17 21:41:09183 elseif (LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY AND (TARGET unwind_static OR HAVE_LIBUNWIND))
184 # libunwind is already included in libc++abi
185 else()
Louis Dionne1ea8bb32019-10-08 21:10:20186 target_link_libraries(cxx_shared PUBLIC unwind)
Petr Hosek1788b892019-04-17 21:41:09187 endif()
188 endif()
189
Louis Dionne6e68a792019-04-05 20:29:54190 # Link against libc++abi
191 if (LIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY)
192 if (APPLE)
Martin Storsjoc90045b2019-04-09 14:31:09193 target_link_libraries(cxx_shared PRIVATE "-Wl,-force_load" "${LIBCXX_CXX_STATIC_ABI_LIBRARY}")
Louis Dionne6e68a792019-04-05 20:29:54194 else()
Martin Storsjoc90045b2019-04-09 14:31:09195 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:54196 endif()
197 else()
Louis Dionne68924e62019-04-30 15:44:19198 target_link_libraries(cxx_shared PUBLIC "${LIBCXX_CXX_SHARED_ABI_LIBRARY}")
Louis Dionne6e68a792019-04-05 20:29:54199 endif()
200
201 # Maybe re-export symbols from libc++abi
202 if (APPLE AND (LIBCXX_CXX_ABI_LIBNAME STREQUAL "libcxxabi" OR
203 LIBCXX_CXX_ABI_LIBNAME STREQUAL "default")
204 AND NOT DEFINED LIBCXX_OSX_REEXPORT_LIBCXXABI_SYMBOLS)
205 set(LIBCXX_OSX_REEXPORT_LIBCXXABI_SYMBOLS ON)
206 endif()
207
208 if (LIBCXX_OSX_REEXPORT_LIBCXXABI_SYMBOLS)
Louis Dionne6e68a792019-04-05 20:29:54209 target_link_libraries(cxx_shared PRIVATE
Petr Hosekf80c4b62019-05-01 06:40:36210 "-Wl,-unexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/../lib/libc++unexp.exp"
Louis Dionneecf313c2020-04-20 09:22:20211 "-Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/../lib/libc++abi.v${LIBCXX_LIBCPPABI_VERSION}.exp"
Petr Hosekf80c4b62019-05-01 06:40:36212 "-Wl,-force_symbols_not_weak_list,${CMAKE_CURRENT_SOURCE_DIR}/../lib/notweak.exp"
213 "-Wl,-force_symbols_weak_list,${CMAKE_CURRENT_SOURCE_DIR}/../lib/weak.exp")
Louis Dionne6e68a792019-04-05 20:29:54214
Louis Dionneecf313c2020-04-20 09:22:20215 if (LIBCXX_ENABLE_EXCEPTIONS)
216 if ("${CMAKE_OSX_ARCHITECTURES}" MATCHES "^(armv6|armv7|armv7s)$")
217 target_link_libraries(cxx_shared PRIVATE "-Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/../lib/libc++abi-exceptions.sjlj.exp")
218 else()
219 target_link_libraries(cxx_shared PRIVATE "-Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/../lib/libc++abi-exceptions.exp")
220 endif()
221 endif()
222
Louis Dionne6e68a792019-04-05 20:29:54223 if (NOT LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS)
Petr Hosekf80c4b62019-05-01 06:40:36224 target_link_libraries(cxx_shared PRIVATE "-Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/../lib/libc++abi-new-delete.exp")
Louis Dionne6e68a792019-04-05 20:29:54225 endif()
226 endif()
227
Louis Dionne1ea8bb32019-10-08 21:10:20228 # Generate a linker script in place of a libc++.so symlink.
Louis Dionne6e68a792019-04-05 20:29:54229 if (LIBCXX_ENABLE_ABI_LINKER_SCRIPT)
Louis Dionne1ea8bb32019-10-08 21:10:20230 include(DefineLinkerScript)
231 define_linker_script(cxx_shared)
Louis Dionne6e68a792019-04-05 20:29:54232 endif()
233
Petr Hosek4a1e14e2018-07-24 23:27:51234 list(APPEND LIBCXX_BUILD_TARGETS "cxx_shared")
Saleem Abdulrasool2d2ed1c2017-01-02 21:09:19235 if(WIN32 AND NOT MINGW AND NOT "${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Windows")
236 # Since we most likely do not have a mt.exe replacement, disable the
237 # manifest bundling. This allows a normal cmake invocation to pass which
238 # will attempt to use the manifest tool to generate the bundled manifest
239 set_target_properties(cxx_shared PROPERTIES
240 APPEND_STRING PROPERTY LINK_FLAGS " /MANIFEST:NO")
241 endif()
Petr Hosek9e49a332016-08-08 22:57:25242endif()
243
244# Build the static library.
245if (LIBCXX_ENABLE_STATIC)
Louis Dionne989eca62019-03-14 14:19:08246 add_library(cxx_static STATIC ${exclude_from_all} ${LIBCXX_SOURCES} ${LIBCXX_HEADERS})
Petr Hosek8e789152019-01-30 23:18:05247 target_link_libraries(cxx_static PRIVATE ${LIBCXX_LIBRARIES})
Martell Malone8fd2d372017-05-25 22:37:15248 set(CMAKE_STATIC_LIBRARY_PREFIX "lib")
Petr Hosek9e49a332016-08-08 22:57:25249 set_target_properties(cxx_static
250 PROPERTIES
Louis Dionne989eca62019-03-14 14:19:08251 COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}"
Petr Hosek9e49a332016-08-08 22:57:25252 LINK_FLAGS "${LIBCXX_LINK_FLAGS}"
Martell Malone8fd2d372017-05-25 22:37:15253 OUTPUT_NAME "c++"
Petr Hosek9e49a332016-08-08 22:57:25254 )
Louis Dionnefadc84a2019-10-04 22:50:23255 cxx_add_common_build_flags(cxx_static)
Louis Dionne850a3d32019-03-14 14:52:26256 cxx_set_common_defines(cxx_static)
Louis Dionne989eca62019-03-14 14:19:08257
258 if (LIBCXX_HERMETIC_STATIC_LIBRARY)
Petr Hosek741f52c2019-05-06 01:22:28259 # If the hermetic library doesn't define the operator new/delete functions
260 # then its code shouldn't declare them with hidden visibility. They might
261 # actually be provided by a shared library at link time.
262 if (LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS)
263 append_flags_if_supported(CXX_STATIC_LIBRARY_FLAGS -fvisibility-global-new-delete-hidden)
264 endif()
Louis Dionne989eca62019-03-14 14:19:08265 target_compile_options(cxx_static PRIVATE ${CXX_STATIC_LIBRARY_FLAGS})
266 target_compile_definitions(cxx_static PRIVATE _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS)
267 endif()
268
Petr Hosek4a1e14e2018-07-24 23:27:51269 list(APPEND LIBCXX_BUILD_TARGETS "cxx_static")
Eric Fiselierbf58c8e2016-11-18 19:53:45270 # Attempt to merge the libc++.a archive and the ABI library archive into one.
Petr Hosek058c04c2018-07-24 07:06:17271 if (LIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY)
Eric Fiselierbf58c8e2016-11-18 19:53:45272 set(MERGE_ARCHIVES_SEARCH_PATHS "")
273 if (LIBCXX_CXX_ABI_LIBRARY_PATH)
274 set(MERGE_ARCHIVES_SEARCH_PATHS "-L${LIBCXX_CXX_ABI_LIBRARY_PATH}")
275 endif()
Petr Hosek30d9af12019-04-03 01:33:14276 if (TARGET "${LIBCXX_CXX_STATIC_ABI_LIBRARY}" OR HAVE_LIBCXXABI)
277 set(MERGE_ARCHIVES_ABI_TARGET "$<TARGET_LINKER_FILE:${LIBCXX_CXX_STATIC_ABI_LIBRARY}>")
Eric Fiselierbf58c8e2016-11-18 19:53:45278 else()
Saleem Abdulrasoolf1ae11a2017-01-04 05:49:57279 set(MERGE_ARCHIVES_ABI_TARGET
Petr Hosek30d9af12019-04-03 01:33:14280 "${CMAKE_STATIC_LIBRARY_PREFIX}${LIBCXX_CXX_STATIC_ABI_LIBRARY}${CMAKE_STATIC_LIBRARY_SUFFIX}")
Eric Fiselierbf58c8e2016-11-18 19:53:45281 endif()
Petr Hosek737de4d2019-06-02 01:14:31282 if (APPLE)
283 set(MERGE_ARCHIVES_LIBTOOL "--use-libtool" "--libtool" "${CMAKE_LIBTOOL}")
284 endif()
Eric Fiselierbf58c8e2016-11-18 19:53:45285 add_custom_command(TARGET cxx_static POST_BUILD
286 COMMAND
Saleem Abdulrasool88af3dd2020-04-28 19:50:12287 ${Python3_EXECUTABLE} ${LIBCXX_SOURCE_DIR}/utils/merge_archives.py
Eric Fiselierbf58c8e2016-11-18 19:53:45288 ARGS
289 -o $<TARGET_LINKER_FILE:cxx_static>
Martin Storsjofb8eb6f2017-09-13 06:55:44290 --ar "${CMAKE_AR}"
Petr Hosek737de4d2019-06-02 01:14:31291 ${MERGE_ARCHIVES_LIBTOOL}
Eric Fiselierbf58c8e2016-11-18 19:53:45292 "$<TARGET_LINKER_FILE:cxx_static>"
293 "${MERGE_ARCHIVES_ABI_TARGET}"
294 "${MERGE_ARCHIVES_SEARCH_PATHS}"
295 WORKING_DIRECTORY ${LIBCXX_BUILD_DIR}
296 )
297 endif()
Petr Hosek9e49a332016-08-08 22:57:25298endif()
299
Eric Fiselier67ea02b2018-07-27 03:47:46300# Add a meta-target for both libraries.
301add_custom_target(cxx DEPENDS cxx-headers ${LIBCXX_BUILD_TARGETS})
302
Eric Fiselier27cb2f12016-05-03 21:30:18303if (LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY)
Petr Hosekf80c4b62019-05-01 06:40:36304 set(LIBCXX_EXPERIMENTAL_SOURCES
305 experimental/memory_resource.cpp
306 )
Eric Fiselier998a5c82018-07-27 03:07:09307 add_library(cxx_experimental STATIC ${LIBCXX_EXPERIMENTAL_SOURCES})
Petr Hosek9e49a332016-08-08 22:57:25308 if (LIBCXX_ENABLE_SHARED)
Louis Dionne32300872019-10-08 16:26:24309 target_link_libraries(cxx_experimental PRIVATE cxx_shared)
Petr Hosek9e49a332016-08-08 22:57:25310 else()
Louis Dionne32300872019-10-08 16:26:24311 target_link_libraries(cxx_experimental PRIVATE cxx_static)
Petr Hosek9e49a332016-08-08 22:57:25312 endif()
Eric Fiseliera5e201f2016-05-10 16:17:43313
Eric Fiselier27cb2f12016-05-03 21:30:18314 set_target_properties(cxx_experimental
315 PROPERTIES
Louis Dionnefadc84a2019-10-04 22:50:23316 COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}"
Eric Fiselier27cb2f12016-05-03 21:30:18317 OUTPUT_NAME "c++experimental"
318 )
Alex Langford9627b262019-10-04 23:08:20319 cxx_add_common_build_flags(cxx_experimental)
Eric Fiselier27cb2f12016-05-03 21:30:18320endif()
Louis Dionnefadc84a2019-10-04 22:50:23321
Eric Fiselier27cb2f12016-05-03 21:30:18322
Eric Fiselier00f6bea2017-01-06 20:05:40323if (LIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY)
Asiri Rathnayake8c2bf452016-09-11 21:46:40324 file(GLOB LIBCXX_EXTERNAL_THREADING_SUPPORT_SOURCES ../test/support/external_threads.cpp)
325
326 if (LIBCXX_ENABLE_SHARED)
327 add_library(cxx_external_threads SHARED ${LIBCXX_EXTERNAL_THREADING_SUPPORT_SOURCES})
328 else()
329 add_library(cxx_external_threads STATIC ${LIBCXX_EXTERNAL_THREADING_SUPPORT_SOURCES})
330 endif()
331
332 set_target_properties(cxx_external_threads
333 PROPERTIES
334 LINK_FLAGS "${LIBCXX_LINK_FLAGS}"
335 COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}"
336 OUTPUT_NAME "c++external_threads"
337 )
338endif()
339
Eric Fiselierd77135f2015-08-26 20:18:21340if (LIBCXX_INSTALL_LIBRARY)
Saleem Abdulrasool97d6fcc2019-07-09 21:43:01341 if (LIBCXX_INSTALL_SHARED_LIBRARY)
342 install(TARGETS cxx_shared
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)
Eric Fiselier27cb2f12016-05-03 21:30:18346 endif()
Saleem Abdulrasool97d6fcc2019-07-09 21:43:01347
348 if (LIBCXX_INSTALL_STATIC_LIBRARY)
349 install(TARGETS cxx_static
350 ARCHIVE DESTINATION ${LIBCXX_INSTALL_PREFIX}${LIBCXX_INSTALL_LIBRARY_DIR} COMPONENT cxx
351 LIBRARY DESTINATION ${LIBCXX_INSTALL_PREFIX}${LIBCXX_INSTALL_LIBRARY_DIR} COMPONENT cxx
352 RUNTIME DESTINATION ${LIBCXX_INSTALL_PREFIX}bin COMPONENT cxx)
353 endif()
354
355 if(LIBCXX_INSTALL_EXPERIMENTAL_LIBRARY)
Louis Dionnece36c5a2020-03-24 14:06:00356 install(TARGETS cxx_experimental
Saleem Abdulrasool97d6fcc2019-07-09 21:43:01357 LIBRARY DESTINATION ${LIBCXX_INSTALL_PREFIX}${LIBCXX_INSTALL_LIBRARY_DIR} COMPONENT cxx
358 ARCHIVE DESTINATION ${LIBCXX_INSTALL_PREFIX}${LIBCXX_INSTALL_LIBRARY_DIR} COMPONENT cxx
359 RUNTIME DESTINATION ${LIBCXX_INSTALL_PREFIX}bin COMPONENT cxx)
360 endif()
361
Eric Fiselier82414052015-10-14 19:54:03362 # NOTE: This install command must go after the cxx install command otherwise
363 # it will not be executed after the library symlinks are installed.
Petr Hosek9e49a332016-08-08 22:57:25364 if (LIBCXX_ENABLE_SHARED AND LIBCXX_ENABLE_ABI_LINKER_SCRIPT)
Eric Fiseliere2dd2fd2015-10-22 21:24:01365 # Replace the libc++ filename with $<TARGET_LINKER_FILE:cxx>
366 # after we required CMake 3.0.
Eric Fiseliercae21e42015-10-23 07:04:24367 install(FILES "${LIBCXX_LIBRARY_DIR}/libc++${CMAKE_SHARED_LIBRARY_SUFFIX}"
Petr Hosek81f433b2019-05-22 21:08:33368 DESTINATION ${LIBCXX_INSTALL_PREFIX}${LIBCXX_INSTALL_LIBRARY_DIR}
Eric Fiselier82414052015-10-14 19:54:03369 COMPONENT libcxx)
370 endif()
Eric Fiselierd77135f2015-08-26 20:18:21371endif()
Eric Fiselier7cb813f2015-08-19 17:41:53372
Eric Fiselierd77135f2015-08-26 20:18:21373if (NOT CMAKE_CONFIGURATION_TYPES AND (LIBCXX_INSTALL_LIBRARY OR
374 LIBCXX_INSTALL_HEADERS))
Chris Bienemana1b79ae2015-12-03 18:52:54375 if(LIBCXX_INSTALL_LIBRARY)
Eric Fiselier59e97482016-05-03 05:34:38376 set(lib_install_target cxx)
Chris Bienemana1b79ae2015-12-03 18:52:54377 endif()
Eric Fiselier27cb2f12016-05-03 21:30:18378 if (LIBCXX_INSTALL_EXPERIMENTAL_LIBRARY)
379 set(experimental_lib_install_target cxx_experimental)
380 endif()
Chris Bieneman4497e3a2016-04-29 22:17:15381 if(LIBCXX_INSTALL_HEADERS)
Chris Bienemanf17227a2016-08-24 22:17:06382 set(header_install_target install-cxx-headers)
Chris Bieneman4497e3a2016-04-29 22:17:15383 endif()
Louis Dionne512c9032020-07-08 19:00:31384 if (LIBCXX_ENABLE_PARALLEL_ALGORITHMS)
385 set(pstl_install_target install-pstl)
386 endif()
Chris Bienemanf17227a2016-08-24 22:17:06387 add_custom_target(install-cxx
Eric Fiselier27cb2f12016-05-03 21:30:18388 DEPENDS ${lib_install_target}
389 ${experimental_lib_install_target}
390 ${header_install_target}
Louis Dionne512c9032020-07-08 19:00:31391 ${pstl_install_target}
Eric Fiselierd77135f2015-08-26 20:18:21392 COMMAND "${CMAKE_COMMAND}"
Chris Bienemanf17227a2016-08-24 22:17:06393 -DCMAKE_INSTALL_COMPONENT=cxx
Eric Fiselierd77135f2015-08-26 20:18:21394 -P "${LIBCXX_BINARY_DIR}/cmake_install.cmake")
Shoaib Meenaif7c79442017-12-06 21:03:42395 add_custom_target(install-cxx-stripped
396 DEPENDS ${lib_install_target}
397 ${experimental_lib_install_target}
398 ${header_install_target}
Louis Dionne512c9032020-07-08 19:00:31399 ${pstl_install_target}
Shoaib Meenaif7c79442017-12-06 21:03:42400 COMMAND "${CMAKE_COMMAND}"
401 -DCMAKE_INSTALL_COMPONENT=cxx
402 -DCMAKE_INSTALL_DO_STRIP=1
403 -P "${LIBCXX_BINARY_DIR}/cmake_install.cmake")
Eric Fiselier7cb813f2015-08-19 17:41:53404endif()