summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt32
-rw-r--r--src/config.h35
-rw-r--r--test/CMakeLists.txt4
-rw-r--r--test/lit.site.cfg.in2
4 files changed, 28 insertions, 45 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 66a0a3f..2aefd79 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -125,6 +125,9 @@ option(LIBCXXABI_HAS_PTHREAD_API "Ignore auto-detection and force use of pthread
option(LIBCXXABI_HAS_EXTERNAL_THREAD_API
"Build libc++abi with an externalized threading API.
This option may only be set to ON when LIBCXXABI_ENABLE_THREADS=ON." OFF)
+option(LIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY
+ "Build libc++abi with an externalized threading library.
+ This option may only be set to ON when LIBCXXABI_ENABLE_THREADS=ON" OFF)
option(LIBCXXABI_BUILD_32_BITS "Build 32 bit libc++abi." ${LLVM_BUILD_32_BITS})
option(LIBCXXABI_INCLUDE_TESTS "Generate build targets for the libc++abi unit tests." ${LLVM_INCLUDE_TESTS})
set(LIBCXXABI_TARGET_TRIPLE "" CACHE STRING "Target triple for cross compiling.")
@@ -367,16 +370,28 @@ if (NOT LIBCXXABI_ENABLE_THREADS)
" be set to ON when LIBCXXABI_ENABLE_THREADS"
" is also set to ON.")
endif()
+ if (LIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY)
+ message(FATAL_ERROR "LIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY can only"
+ " be set to ON when LIBCXXABI_ENABLE_THREADS"
+ " is also set to ON.")
+ endif()
add_definitions(-D_LIBCXXABI_HAS_NO_THREADS)
endif()
-if (LIBCXXABI_HAS_PTHREAD_API AND LIBCXXABI_HAS_EXTERNAL_THREAD_API)
- message(FATAL_ERROR "The options LIBCXXABI_HAS_EXTERNAL_THREAD_API"
- "and LIBCXXABI_HAS_PTHREAD_API cannot be both"
- "set to ON at the same time.")
+if (LIBCXXABI_HAS_EXTERNAL_THREAD_API)
+ if (LIBCXXABI_HAS_PTHREAD_API)
+ message(FATAL_ERROR "The options LIBCXXABI_HAS_EXTERNAL_THREAD_API"
+ " and LIBCXXABI_HAS_PTHREAD_API cannot be both"
+ " set to ON at the same time.")
+ endif()
+ if (LIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY)
+ message(FATAL_ERROR "The options LIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY"
+ " and LIBCXXABI_HAS_EXTERNAL_THREAD_API cannot be both"
+ " set to ON at the same time.")
+ endif()
endif()
-if (LIBCXXABI_HAS_EXTERNAL_THREAD_API AND LIBCXXABI_ENABLE_SHARED)
+if (LIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY AND LIBCXXABI_ENABLE_SHARED)
# Need to allow unresolved symbols if this is to work with shared library builds
if (APPLE)
add_link_flags("-undefined dynamic_lookup")
@@ -388,11 +403,14 @@ endif()
if (LIBCXXABI_HAS_PTHREAD_API)
add_definitions(-D_LIBCPP_HAS_THREAD_API_PTHREAD)
- add_definitions(-D_LIBCXXABI_USE_THREAD_API_PTHREAD)
endif()
if (LIBCXXABI_HAS_EXTERNAL_THREAD_API)
- add_definitions(-D_LIBCXXABI_HAS_THREAD_API_EXTERNAL)
+ add_definitions(-D_LIBCPP_HAS_THREAD_API_EXTERNAL)
+endif()
+
+if (LIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY)
+ add_definitions(-D_LIBCPP_HAS_THREAD_LIBRARY_EXTERNAL)
endif()
if (MSVC)
diff --git a/src/config.h b/src/config.h
index a2ece32..5d38d4d 100644
--- a/src/config.h
+++ b/src/config.h
@@ -16,41 +16,6 @@
#include <unistd.h>
-#ifndef __has_attribute
- #define __has_attribute(x) 0
-#endif
-
-// Configure inline visibility attributes
-#if defined(_WIN32)
- #if defined(_MSC_VER) && !defined(__clang__)
- // Using Microsoft Visual C++ compiler
- #define _LIBCXXABI_INLINE_VISIBILITY __forceinline
- #else
- #if __has_attribute(__internal_linkage__)
- #define _LIBCXXABI_INLINE_VISIBILITY __attribute__ ((__internal_linkage__, __always_inline__))
- #else
- #define _LIBCXXABI_INLINE_VISIBILITY __attribute__ ((__always_inline__))
- #endif
- #endif
-#else
- #if __has_attribute(__internal_linkage__)
- #define _LIBCXXABI_INLINE_VISIBILITY __attribute__ ((__internal_linkage__, __always_inline__))
- #else
- #define _LIBCXXABI_INLINE_VISIBILITY __attribute__ ((__visibility__("hidden"), __always_inline__))
- #endif
-#endif
-
-// Try and deduce a threading api if one has not been explicitly set.
-#if !defined(_LIBCXXABI_HAS_NO_THREADS) && \
- !defined(_LIBCXXABI_HAS_THREAD_API_EXTERNAL) && \
- !defined(_LIBCXXABI_USE_THREAD_API_PTHREAD)
- #if defined(_POSIX_THREADS) && _POSIX_THREADS >= 0
- #define _LIBCXXABI_USE_THREAD_API_PTHREAD
- #else
- #error "No thread API"
- #endif
-#endif
-
// Set this in the CXXFLAGS when you need it, because otherwise we'd have to
// #if !defined(__linux__) && !defined(__APPLE__) && ...
// and so-on for *every* platform.
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 42b93f0..c1819d7 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -17,7 +17,7 @@ pythonize_bool(LIBCXXABI_ENABLE_SHARED)
pythonize_bool(LIBCXXABI_ENABLE_THREADS)
pythonize_bool(LIBCXXABI_ENABLE_EXCEPTIONS)
pythonize_bool(LIBCXXABI_USE_LLVM_UNWINDER)
-pythonize_bool(LIBCXXABI_HAS_EXTERNAL_THREAD_API)
+pythonize_bool(LIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY)
set(LIBCXXABI_TARGET_INFO "libcxx.test.target_info.LocalTI" CACHE STRING
"TargetInfo to use when setting up test environment.")
set(LIBCXXABI_EXECUTOR "None" CACHE STRING
@@ -35,7 +35,7 @@ else()
set(LIBCXXABI_TEST_DEPS cxxabi_static)
endif()
-if (LIBCXXABI_HAS_EXTERNAL_THREAD_API)
+if (LIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY)
list(APPEND LIBCXXABI_TEST_DEPS cxx_external_threads)
endif()
diff --git a/test/lit.site.cfg.in b/test/lit.site.cfg.in
index b2936c7..9c0fdf2 100644
--- a/test/lit.site.cfg.in
+++ b/test/lit.site.cfg.in
@@ -19,7 +19,7 @@ config.enable_exceptions = "@LIBCXXABI_ENABLE_EXCEPTIONS@"
config.host_triple = "@LLVM_HOST_TRIPLE@"
config.target_triple = "@TARGET_TRIPLE@"
config.use_target = len("@LIBCXXABI_TARGET_TRIPLE@") > 0
-config.cxx_ext_threads = "@LIBCXXABI_HAS_EXTERNAL_THREAD_API@"
+config.cxx_ext_threads = "@LIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY@"
# Let the main config do the real work.
lit_config.load_config(config, "@LIBCXXABI_SOURCE_DIR@/test/lit.cfg")