diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt --- a/libcxx/CMakeLists.txt +++ b/libcxx/CMakeLists.txt @@ -285,6 +285,8 @@ option(LIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY "Build libc++ with an externalized threading library. This option may only be set to ON when LIBCXX_ENABLE_THREADS=ON" OFF) +option(LIBCXXX_DISABLE_APPLE_ULOCK_WAIT + "Build libc++ without __ulock_wait on Apple platforms" OFF) # Misc options ---------------------------------------------------------------- # FIXME: Turn -pedantic back ON. It is currently off because it warns @@ -857,6 +859,9 @@ else() config_define(0 _LIBCPP_ENABLE_ASSERTIONS_DEFAULT) endif() +if (APPLE) + config_define_if(LIBCXXX_DISABLE_APPLE_ULOCK_WAIT _LIBCXXX_DISABLE_ULOCK_WAIT) +endif() if (LIBCXX_ABI_DEFINES) set(abi_defines) diff --git a/libcxx/include/__config_site.in b/libcxx/include/__config_site.in --- a/libcxx/include/__config_site.in +++ b/libcxx/include/__config_site.in @@ -32,6 +32,9 @@ #cmakedefine _LIBCPP_HAS_NO_WIDE_CHARACTERS #cmakedefine01 _LIBCPP_ENABLE_ASSERTIONS_DEFAULT #cmakedefine _LIBCPP_ENABLE_DEBUG_MODE +#ifdef __APPLE__ +#cmakedefine _LIBCXXX_DISABLE_ULOCK_WAIT +#endif // __USE_MINGW_ANSI_STDIO gets redefined on MinGW #ifdef __clang__ diff --git a/libcxx/src/atomic.cpp b/libcxx/src/atomic.cpp --- a/libcxx/src/atomic.cpp +++ b/libcxx/src/atomic.cpp @@ -26,6 +26,9 @@ # define SYS_futex SYS_futex_time64 #endif +#elif defined(__APPLE__) +#include "include/apple_availability.h" + #elif defined(__FreeBSD__) #include diff --git a/libcxx/src/include/apple_availability.h b/libcxx/src/include/apple_availability.h --- a/libcxx/src/include/apple_availability.h +++ b/libcxx/src/include/apple_availability.h @@ -29,6 +29,7 @@ #endif #endif // __ENVIRONMENT_.*_VERSION_MIN_REQUIRED__ +#if !defined(_LIBCXXX_DISABLE_ULOCK_WAIT) #if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) #if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 101500 #define _LIBCPP_USE_ULOCK @@ -46,6 +47,7 @@ #define _LIBCPP_USE_ULOCK #endif #endif // __ENVIRONMENT_.*_VERSION_MIN_REQUIRED__ +#endif // _LIBCXXX_DISABLE_ULOCK_WAIT #endif // __APPLE__