1414#ifdef __APPLE__
1515
1616#include <TargetConditionals.h>
17+ #include <assert.h>
1718#include <dispatch/dispatch.h>
1819#include <dlfcn.h>
1920#include <stdint.h>
@@ -270,6 +271,8 @@ static inline uint32_t ConstructVersion(uint32_t Major, uint32_t Minor,
270271 return ((Major & 0xffff ) << 16 ) | ((Minor & 0xff ) << 8 ) | (Subminor & 0xff );
271272}
272273
274+ #define PLATFORM_MACOS 1
275+
273276int32_t __isPlatformVersionAtLeast (uint32_t Platform , uint32_t Major ,
274277 uint32_t Minor , uint32_t Subminor ) {
275278 dispatch_once_f (& DispatchOnceCounter , NULL , initializeAvailabilityCheck );
@@ -282,6 +285,29 @@ int32_t __isPlatformVersionAtLeast(uint32_t Platform, uint32_t Major,
282285 return AvailabilityVersionCheck (1 , Versions );
283286}
284287
288+ #if TARGET_OS_OSX
289+
290+ int32_t __isPlatformOrVariantPlatformVersionAtLeast (
291+ uint32_t Platform , uint32_t Major , uint32_t Minor , uint32_t Subminor ,
292+ uint32_t Platform2 , uint32_t Major2 , uint32_t Minor2 , uint32_t Subminor2 ) {
293+ dispatch_once_f (& DispatchOnceCounter , NULL , initializeAvailabilityCheck );
294+
295+ if (!AvailabilityVersionCheck ) {
296+ // Handle case of back-deployment for older macOS.
297+ if (Platform == PLATFORM_MACOS ) {
298+ return __isOSVersionAtLeast (Major , Minor , Subminor );
299+ }
300+ assert (Platform2 == PLATFORM_MACOS && "unexpected platform" );
301+ return __isOSVersionAtLeast (Major2 , Minor2 , Subminor2 );
302+ }
303+ dyld_build_version_t Versions [] = {
304+ {Platform , ConstructVersion (Major , Minor , Subminor )},
305+ {Platform2 , ConstructVersion (Major2 , Minor2 , Subminor2 )}};
306+ return AvailabilityVersionCheck (2 , Versions );
307+ }
308+
309+ #endif
310+
285311#elif __ANDROID__
286312
287313#include <pthread.h>
0 commit comments