[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:
Louis Dionne 2023-02-28 18:21:20 -05:00
parent 17d403f664
commit c73c3a078a
5 changed files with 7 additions and 81 deletions

View File

@ -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.

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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