Author: Nikolas Klauser Date: 2026-07-02T09:35:59+02:00 New Revision: c05dc7a341c41be7821d5124e0b6f5c7dd73bc4f
URL: https://github.com/llvm/llvm-project/commit/c05dc7a341c41be7821d5124e0b6f5c7dd73bc4f DIFF: https://github.com/llvm/llvm-project/commit/c05dc7a341c41be7821d5124e0b6f5c7dd73bc4f.diff LOG: Revert "[libc++] Move threading and random device config into <__configuratio…" This reverts commit 32f14d7cd9991c0431e0c2721313614a4b05fd2d. Added: Modified: libcxx/include/__config libcxx/include/__configuration/platform.h Removed: ################################################################################ diff --git a/libcxx/include/__config b/libcxx/include/__config index edafe59278821..3f271ff504767 100644 --- a/libcxx/include/__config +++ b/libcxx/include/__config @@ -62,6 +62,50 @@ # define _LIBCPP_SHORT_WCHAR 1 # endif +// Libc++ supports various implementations of std::random_device. +// +// _LIBCPP_USING_DEV_RANDOM +// Read entropy from the given file, by default `/dev/urandom`. +// If a token is provided, it is assumed to be the path to a file +// to read entropy from. This is the default behavior if nothing +// else is specified. This implementation requires storing state +// inside `std::random_device`. +// +// _LIBCPP_USING_ARC4_RANDOM +// Use arc4random(). This allows obtaining random data even when +// using sandboxing mechanisms. On some platforms like Apple, this +// is the recommended source of entropy for user-space programs. +// When this option is used, the token passed to `std::random_device`'s +// constructor *must* be "/dev/urandom" -- anything else is an error. +// +// _LIBCPP_USING_GETENTROPY +// Use getentropy(). +// When this option is used, the token passed to `std::random_device`'s +// constructor *must* be "/dev/urandom" -- anything else is an error. +// +// _LIBCPP_USING_FUCHSIA_CPRNG +// Use Fuchsia's zx_cprng_draw() system call, which is specified to +// deliver high-quality entropy and cannot fail. +// When this option is used, the token passed to `std::random_device`'s +// constructor *must* be "/dev/urandom" -- anything else is an error. +// +// _LIBCPP_USING_WIN32_RANDOM +// Use rand_s(), for use on Windows. +// When this option is used, the token passed to `std::random_device`'s +// constructor *must* be "/dev/urandom" -- anything else is an error. +# if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || \ + defined(__DragonFly__) +# define _LIBCPP_USING_ARC4_RANDOM +# elif defined(__wasi__) || defined(__EMSCRIPTEN__) +# define _LIBCPP_USING_GETENTROPY +# elif defined(__Fuchsia__) +# define _LIBCPP_USING_FUCHSIA_CPRNG +# elif defined(_LIBCPP_WIN32API) +# define _LIBCPP_USING_WIN32_RANDOM +# else +# define _LIBCPP_USING_DEV_RANDOM +# endif + # ifndef _LIBCPP_CXX03_LANG # define _LIBCPP_ALIGNOF(...) alignof(__VA_ARGS__) @@ -157,6 +201,107 @@ typedef __char32_t char32_t; # define _LIBCPP_DIAGNOSE_DEPRECATED_HEADERS 0 # endif +// Thread API +// clang-format off +# if _LIBCPP_HAS_THREADS && \ + !_LIBCPP_HAS_THREAD_API_PTHREAD && \ + !_LIBCPP_HAS_THREAD_API_WIN32 && \ + !_LIBCPP_HAS_THREAD_API_EXTERNAL && \ + !_LIBCPP_HAS_THREAD_API_C11 + +# if defined(__FreeBSD__) || \ + defined(__wasi__) || \ + defined(__NetBSD__) || \ + defined(__OpenBSD__) || \ + defined(__NuttX__) || \ + defined(__linux__) || \ + defined(__GNU__) || \ + defined(__APPLE__) || \ + defined(__MVS__) || \ + defined(_AIX) || \ + defined(__EMSCRIPTEN__) +// clang-format on +# undef _LIBCPP_HAS_THREAD_API_PTHREAD +# define _LIBCPP_HAS_THREAD_API_PTHREAD 1 +# elif defined(__Fuchsia__) +// TODO(44575): Switch to C11 thread API when possible. +# undef _LIBCPP_HAS_THREAD_API_PTHREAD +# define _LIBCPP_HAS_THREAD_API_PTHREAD 1 +# elif defined(_LIBCPP_WIN32API) +# undef _LIBCPP_HAS_THREAD_API_WIN32 +# define _LIBCPP_HAS_THREAD_API_WIN32 1 +# else +# error "No thread API" +# endif // _LIBCPP_HAS_THREAD_API +# endif // _LIBCPP_HAS_THREADS + +# if !_LIBCPP_HAS_THREAD_API_PTHREAD +# define _LIBCPP_HAS_COND_CLOCKWAIT 0 +# elif (defined(__ANDROID__) && __ANDROID_API__ >= 30) || _LIBCPP_GLIBC_PREREQ(2, 30) +# define _LIBCPP_HAS_COND_CLOCKWAIT 1 +# else +# define _LIBCPP_HAS_COND_CLOCKWAIT 0 +# endif + +# if !_LIBCPP_HAS_THREADS && _LIBCPP_HAS_THREAD_API_PTHREAD +# error _LIBCPP_HAS_THREAD_API_PTHREAD may only be true when _LIBCPP_HAS_THREADS is true. +# endif + +# if !_LIBCPP_HAS_THREADS && _LIBCPP_HAS_THREAD_API_EXTERNAL +# error _LIBCPP_HAS_THREAD_API_EXTERNAL may only be true when _LIBCPP_HAS_THREADS is true. +# endif + +# if !_LIBCPP_HAS_THREADS && _LIBCPP_HAS_THREAD_API_C11 +# error _LIBCPP_HAS_THREAD_API_C11 may only be true when _LIBCPP_HAS_THREADS is true. +# endif + +# if !_LIBCPP_HAS_MONOTONIC_CLOCK && _LIBCPP_HAS_THREADS +# error _LIBCPP_HAS_MONOTONIC_CLOCK may only be false when _LIBCPP_HAS_THREADS is false. +# endif + +# if _LIBCPP_HAS_THREADS && !defined(__STDCPP_THREADS__) +# define __STDCPP_THREADS__ 1 +# endif + +// The glibc and Bionic implementation of pthreads implements +// pthread_mutex_destroy as nop for regular mutexes. Additionally, Win32 +// mutexes have no destroy mechanism. +// +// This optimization can't be performed on Apple platforms, where +// pthread_mutex_destroy can allow the kernel to release resources. +// See https://llvm.org/D64298 for details. +// +// TODO(EricWF): Enable this optimization on Bionic after speaking to their +// respective stakeholders. +// clang-format off +# if (_LIBCPP_HAS_THREAD_API_PTHREAD && defined(__GLIBC__)) || \ + (_LIBCPP_HAS_THREAD_API_C11 && defined(__Fuchsia__)) || \ + _LIBCPP_HAS_THREAD_API_WIN32 +// clang-format on +# define _LIBCPP_HAS_TRIVIAL_MUTEX_DESTRUCTION 1 +# else +# define _LIBCPP_HAS_TRIVIAL_MUTEX_DESTRUCTION 0 +# endif + +// Destroying a condvar is a nop on Windows. +// +// This optimization can't be performed on Apple platforms, where +// pthread_cond_destroy can allow the kernel to release resources. +// See https://llvm.org/D64298 for details. +// +// TODO(EricWF): This is potentially true for some pthread implementations +// as well. +# if (_LIBCPP_HAS_THREAD_API_C11 && defined(__Fuchsia__)) || _LIBCPP_HAS_THREAD_API_WIN32 +# define _LIBCPP_HAS_TRIVIAL_CONDVAR_DESTRUCTION 1 +# else +# define _LIBCPP_HAS_TRIVIAL_CONDVAR_DESTRUCTION 0 +# endif + +# if defined(__BIONIC__) || defined(__NuttX__) || defined(__Fuchsia__) || defined(__wasi__) || \ + _LIBCPP_HAS_MUSL_LIBC || defined(__OpenBSD__) || _LIBCPP_LIBC_LLVM_LIBC +# define _LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE +# endif + // We often repeat things just for handling wide characters in the library. // When wide characters are disabled, it can be useful to have a quick way of // disabling it without having to resort to #if-#endif, which has a larger diff --git a/libcxx/include/__configuration/platform.h b/libcxx/include/__configuration/platform.h index 5b3bcfa4a8989..ebd638e663215 100644 --- a/libcxx/include/__configuration/platform.h +++ b/libcxx/include/__configuration/platform.h @@ -57,148 +57,4 @@ # define _LIBCPP_BIG_ENDIAN #endif // __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ -// Libc++ supports various implementations of std::random_device. -// -// _LIBCPP_USING_DEV_RANDOM -// Read entropy from the given file, by default `/dev/urandom`. -// If a token is provided, it is assumed to be the path to a file -// to read entropy from. This is the default behavior if nothing -// else is specified. This implementation requires storing state -// inside `std::random_device`. -// -// _LIBCPP_USING_ARC4_RANDOM -// Use arc4random(). This allows obtaining random data even when -// using sandboxing mechanisms. On some platforms like Apple, this -// is the recommended source of entropy for user-space programs. -// When this option is used, the token passed to `std::random_device`'s -// constructor *must* be "/dev/urandom" -- anything else is an error. -// -// _LIBCPP_USING_GETENTROPY -// Use getentropy(). -// When this option is used, the token passed to `std::random_device`'s -// constructor *must* be "/dev/urandom" -- anything else is an error. -// -// _LIBCPP_USING_FUCHSIA_CPRNG -// Use Fuchsia's zx_cprng_draw() system call, which is specified to -// deliver high-quality entropy and cannot fail. -// When this option is used, the token passed to `std::random_device`'s -// constructor *must* be "/dev/urandom" -- anything else is an error. -// -// _LIBCPP_USING_WIN32_RANDOM -// Use rand_s(), for use on Windows. -// When this option is used, the token passed to `std::random_device`'s -// constructor *must* be "/dev/urandom" -- anything else is an error. -#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) -# define _LIBCPP_USING_ARC4_RANDOM -#elif defined(__wasi__) || defined(__EMSCRIPTEN__) -# define _LIBCPP_USING_GETENTROPY -#elif defined(__Fuchsia__) -# define _LIBCPP_USING_FUCHSIA_CPRNG -#elif defined(_LIBCPP_WIN32API) -# define _LIBCPP_USING_WIN32_RANDOM -#else -# define _LIBCPP_USING_DEV_RANDOM -#endif - -// Thread API -// clang-format off -#if _LIBCPP_HAS_THREADS && \ - !_LIBCPP_HAS_THREAD_API_PTHREAD && \ - !_LIBCPP_HAS_THREAD_API_WIN32 && \ - !_LIBCPP_HAS_THREAD_API_EXTERNAL && \ - !_LIBCPP_HAS_THREAD_API_C11 - -# if defined(__FreeBSD__) || \ - defined(__wasi__) || \ - defined(__NetBSD__) || \ - defined(__OpenBSD__) || \ - defined(__NuttX__) || \ - defined(__linux__) || \ - defined(__GNU__) || \ - defined(__APPLE__) || \ - defined(__MVS__) || \ - defined(_AIX) || \ - defined(__EMSCRIPTEN__) -// clang-format on -# undef _LIBCPP_HAS_THREAD_API_PTHREAD -# define _LIBCPP_HAS_THREAD_API_PTHREAD 1 -# elif defined(__Fuchsia__) -// TODO(44575): Switch to C11 thread API when possible. -# undef _LIBCPP_HAS_THREAD_API_PTHREAD -# define _LIBCPP_HAS_THREAD_API_PTHREAD 1 -# elif defined(_LIBCPP_WIN32API) -# undef _LIBCPP_HAS_THREAD_API_WIN32 -# define _LIBCPP_HAS_THREAD_API_WIN32 1 -# else -# error "No thread API" -# endif // _LIBCPP_HAS_THREAD_API -#endif // _LIBCPP_HAS_THREADS - -#if !_LIBCPP_HAS_THREAD_API_PTHREAD -# define _LIBCPP_HAS_COND_CLOCKWAIT 0 -#elif (defined(__ANDROID__) && __ANDROID_API__ >= 30) || _LIBCPP_GLIBC_PREREQ(2, 30) -# define _LIBCPP_HAS_COND_CLOCKWAIT 1 -#else -# define _LIBCPP_HAS_COND_CLOCKWAIT 0 -#endif - -#if !_LIBCPP_HAS_THREADS && _LIBCPP_HAS_THREAD_API_PTHREAD -# error _LIBCPP_HAS_THREAD_API_PTHREAD may only be true when _LIBCPP_HAS_THREADS is true. -#endif - -#if !_LIBCPP_HAS_THREADS && _LIBCPP_HAS_THREAD_API_EXTERNAL -# error _LIBCPP_HAS_THREAD_API_EXTERNAL may only be true when _LIBCPP_HAS_THREADS is true. -#endif - -#if !_LIBCPP_HAS_THREADS && _LIBCPP_HAS_THREAD_API_C11 -# error _LIBCPP_HAS_THREAD_API_C11 may only be true when _LIBCPP_HAS_THREADS is true. -#endif - -#if !_LIBCPP_HAS_MONOTONIC_CLOCK && _LIBCPP_HAS_THREADS -# error _LIBCPP_HAS_MONOTONIC_CLOCK may only be false when _LIBCPP_HAS_THREADS is false. -#endif - -#if _LIBCPP_HAS_THREADS && !defined(__STDCPP_THREADS__) -# define __STDCPP_THREADS__ 1 -#endif - -// The glibc and Bionic implementation of pthreads implements -// pthread_mutex_destroy as nop for regular mutexes. Additionally, Win32 -// mutexes have no destroy mechanism. -// -// This optimization can't be performed on Apple platforms, where -// pthread_mutex_destroy can allow the kernel to release resources. -// See https://llvm.org/D64298 for details. -// -// TODO(EricWF): Enable this optimization on Bionic after speaking to their -// respective stakeholders. -// clang-format off -# if (_LIBCPP_HAS_THREAD_API_PTHREAD && defined(__GLIBC__)) || \ - (_LIBCPP_HAS_THREAD_API_C11 && defined(__Fuchsia__)) || \ - _LIBCPP_HAS_THREAD_API_WIN32 -// clang-format on -# define _LIBCPP_HAS_TRIVIAL_MUTEX_DESTRUCTION 1 -#else -# define _LIBCPP_HAS_TRIVIAL_MUTEX_DESTRUCTION 0 -#endif - -// Destroying a condvar is a nop on Windows. -// -// This optimization can't be performed on Apple platforms, where -// pthread_cond_destroy can allow the kernel to release resources. -// See https://llvm.org/D64298 for details. -// -// TODO(EricWF): This is potentially true for some pthread implementations -// as well. -#if (_LIBCPP_HAS_THREAD_API_C11 && defined(__Fuchsia__)) || _LIBCPP_HAS_THREAD_API_WIN32 -# define _LIBCPP_HAS_TRIVIAL_CONDVAR_DESTRUCTION 1 -#else -# define _LIBCPP_HAS_TRIVIAL_CONDVAR_DESTRUCTION 0 -#endif - -#if defined(__BIONIC__) || defined(__NuttX__) || defined(__Fuchsia__) || defined(__wasi__) || _LIBCPP_HAS_MUSL_LIBC || \ - defined(__OpenBSD__) || _LIBCPP_LIBC_LLVM_LIBC -# define _LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE -#endif - #endif // _LIBCPP___CONFIGURATION_PLATFORM_H _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
