[libc++] Integrate the PSTL into libc++
Summary:
This commit allows specifying LIBCXX_ENABLE_PARALLEL_ALGORITHMS when
configuring libc++ in CMake. When that option is enabled, libc++ will
assume that the PSTL can be found somewhere on the CMake module path,
and it will provide the C++17 parallel algorithms based on the PSTL
(that is assumed to be available).
The commit also adds support for running the PSTL tests as part of
the libc++ test suite.
Reviewers: rodgert, EricWF
Subscribers: mgorny, christof, jkorous, dexonsmith, libcxx-commits, mclow.lists, EricWF
Tags: #libc
Differential Revision: https://reviews.llvm.org/D60480
git-svn-id: https://llvm.org/svn/llvm-project/libcxxabi/trunk@366593 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 45d4d02..2eea6c7 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -147,6 +147,11 @@
string(REPLACE "-Wl,-z,defs" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
endif()
+find_package(ParallelSTL QUIET)
+if (NOT TARGET pstl::ParallelSTL)
+ message(STATUS "Could not find ParallelSTL, libc++abi will not attempt to use it but the build may fail if the libc++ in use needs it to be available.")
+endif()
+
if ("${CMAKE_OSX_ARCHITECTURES}" MATCHES "^(armv6|armv7|armv7s)$")
set(LIBCXXABI_USE_SJLJ_EXCEPTIONS ON)
else()
@@ -160,6 +165,9 @@
llvm_setup_rpath(cxxabi_shared)
endif()
target_link_libraries(cxxabi_shared PRIVATE ${LIBCXXABI_SHARED_LIBRARIES} ${LIBCXXABI_LIBRARIES})
+ if (TARGET pstl::ParallelSTL)
+ target_link_libraries(cxxabi_shared PUBLIC pstl::ParallelSTL)
+ endif()
set_target_properties(cxxabi_shared
PROPERTIES
CXX_EXTENSIONS
@@ -208,6 +216,9 @@
if (LIBCXXABI_ENABLE_STATIC)
add_library(cxxabi_static STATIC ${LIBCXXABI_SOURCES} ${LIBCXXABI_HEADERS})
target_link_libraries(cxxabi_static PRIVATE ${LIBCXXABI_STATIC_LIBRARIES} ${LIBCXXABI_LIBRARIES})
+ if (TARGET pstl::ParallelSTL)
+ target_link_libraries(cxxabi_static PUBLIC pstl::ParallelSTL)
+ endif()
set_target_properties(cxxabi_static
PROPERTIES
CXX_EXTENSIONS