[libc++] Clean up old macOS back-deployment workarounds
This patch bumps the minimum macOS version for building the dylib or back-deploying a statically-linked libc++ from macOS 10.11 to macOS 10.13. AFAICT, Chrome was the last one to require macOS 10.11, but since then they have bumped their minimal supported version to macOS 10.13. Differential Revision: https://reviews.llvm.org/D145012
This commit is contained in:
parent
17d403f664
commit
c73c3a078a
|
@ -91,3 +91,7 @@ ABI Affecting Changes
|
|||
|
||||
Build System Changes
|
||||
--------------------
|
||||
|
||||
- Building libc++ and libc++abi for Apple platforms now requires targeting macOS 10.13 and later.
|
||||
This is relevant for vendors building the libc++ shared library and for folks statically linking
|
||||
libc++ into an application that has back-deployment requirements on Apple platforms.
|
||||
|
|
|
@ -116,7 +116,7 @@ Libc++ also supports common platforms and architectures:
|
|||
=============== ========================= ============================
|
||||
Target platform Target architecture Notes
|
||||
=============== ========================= ============================
|
||||
macOS 10.9+ i386, x86_64, arm64 Building the shared library itself requires targetting macOS 10.11+
|
||||
macOS 10.9+ i386, x86_64, arm64 Building the shared library itself requires targetting macOS 10.13+
|
||||
FreeBSD 12+ i386, x86_64, arm
|
||||
Linux i386, x86_64, arm, arm64 Only glibc-2.24 and later and no other libc is officially supported
|
||||
Windows i386, x86_64 Both MSVC and MinGW style environments
|
||||
|
|
|
@ -167,59 +167,6 @@ system_clock::from_time_t(time_t t) noexcept
|
|||
|
||||
#if defined(__APPLE__)
|
||||
|
||||
// TODO(ldionne):
|
||||
// This old implementation of steady_clock is retained until Chrome drops supports
|
||||
// for macOS < 10.12. The issue is that they link libc++ statically into their
|
||||
// application, which means that libc++ must support being built for such deployment
|
||||
// targets. See https://llvm.org/D74489 for details.
|
||||
#if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 101200) || \
|
||||
(defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 100000) || \
|
||||
(defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 100000) || \
|
||||
(defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 30000)
|
||||
# define _LIBCPP_USE_OLD_MACH_ABSOLUTE_TIME
|
||||
#endif
|
||||
|
||||
#if defined(_LIBCPP_USE_OLD_MACH_ABSOLUTE_TIME)
|
||||
|
||||
// mach_absolute_time() * MachInfo.numer / MachInfo.denom is the number of
|
||||
// nanoseconds since the computer booted up. MachInfo.numer and MachInfo.denom
|
||||
// are run time constants supplied by the OS. This clock has no relationship
|
||||
// to the Gregorian calendar. It's main use is as a high resolution timer.
|
||||
|
||||
// MachInfo.numer / MachInfo.denom is often 1 on the latest equipment. Specialize
|
||||
// for that case as an optimization.
|
||||
|
||||
static steady_clock::rep steady_simplified() {
|
||||
return static_cast<steady_clock::rep>(mach_absolute_time());
|
||||
}
|
||||
static double compute_steady_factor() {
|
||||
mach_timebase_info_data_t MachInfo;
|
||||
mach_timebase_info(&MachInfo);
|
||||
return static_cast<double>(MachInfo.numer) / MachInfo.denom;
|
||||
}
|
||||
|
||||
static steady_clock::rep steady_full() {
|
||||
static const double factor = compute_steady_factor();
|
||||
return static_cast<steady_clock::rep>(mach_absolute_time() * factor);
|
||||
}
|
||||
|
||||
typedef steady_clock::rep (*FP)();
|
||||
|
||||
static FP init_steady_clock() {
|
||||
mach_timebase_info_data_t MachInfo;
|
||||
mach_timebase_info(&MachInfo);
|
||||
if (MachInfo.numer == MachInfo.denom)
|
||||
return &steady_simplified;
|
||||
return &steady_full;
|
||||
}
|
||||
|
||||
static steady_clock::time_point __libcpp_steady_clock_now() {
|
||||
static FP fp = init_steady_clock();
|
||||
return steady_clock::time_point(steady_clock::duration(fp()));
|
||||
}
|
||||
|
||||
#else // vvvvv default behavior for Apple platforms vvvvv
|
||||
|
||||
// On Apple platforms, only CLOCK_UPTIME_RAW, CLOCK_MONOTONIC_RAW or
|
||||
// mach_absolute_time are able to time functions in the nanosecond range.
|
||||
// Furthermore, only CLOCK_MONOTONIC_RAW is truly monotonic, because it
|
||||
|
@ -232,8 +179,6 @@ static steady_clock::time_point __libcpp_steady_clock_now() {
|
|||
return steady_clock::time_point(seconds(tp.tv_sec) + nanoseconds(tp.tv_nsec));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#elif defined(_LIBCPP_WIN32API)
|
||||
|
||||
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms644905(v=vs.85).aspx says:
|
||||
|
|
|
@ -34,14 +34,9 @@
|
|||
# include <unistd.h>
|
||||
#endif // defined(_LIBCPP_WIN32API)
|
||||
|
||||
#include "../include/apple_availability.h"
|
||||
|
||||
#if !defined(__APPLE__)
|
||||
// We can use the presence of UTIME_OMIT to detect platforms that provide
|
||||
// utimensat.
|
||||
// We can use the presence of UTIME_OMIT to detect platforms that provide utimensat.
|
||||
#if defined(UTIME_OMIT)
|
||||
#define _LIBCPP_USE_UTIMENSAT
|
||||
#endif
|
||||
# define _LIBCPP_USE_UTIMENSAT
|
||||
#endif
|
||||
|
||||
// TODO: Check whether these functions actually need internal linkage, or if they can be made normal header functions
|
||||
|
|
|
@ -11,24 +11,6 @@
|
|||
|
||||
#if defined(__APPLE__)
|
||||
|
||||
#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__)
|
||||
#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 101300
|
||||
#define _LIBCPP_USE_UTIMENSAT
|
||||
#endif
|
||||
#elif defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__)
|
||||
#if __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 110000
|
||||
#define _LIBCPP_USE_UTIMENSAT
|
||||
#endif
|
||||
#elif defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__)
|
||||
#if __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ >= 110000
|
||||
#define _LIBCPP_USE_UTIMENSAT
|
||||
#endif
|
||||
#elif defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__)
|
||||
#if __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ >= 40000
|
||||
#define _LIBCPP_USE_UTIMENSAT
|
||||
#endif
|
||||
#endif // __ENVIRONMENT_.*_VERSION_MIN_REQUIRED__
|
||||
|
||||
#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__)
|
||||
#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 101500
|
||||
#define _LIBCPP_USE_ULOCK
|
||||
|
|
Loading…
Reference in New Issue
Block a user