1*8975f5c5SAndroid Build Coastguard Worker // 2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2014 The ANGLE Project Authors. All rights reserved. 3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file. 5*8975f5c5SAndroid Build Coastguard Worker // 6*8975f5c5SAndroid Build Coastguard Worker 7*8975f5c5SAndroid Build Coastguard Worker // platform.h: Operating system specific includes and defines. 8*8975f5c5SAndroid Build Coastguard Worker 9*8975f5c5SAndroid Build Coastguard Worker #ifndef COMMON_PLATFORM_H_ 10*8975f5c5SAndroid Build Coastguard Worker #define COMMON_PLATFORM_H_ 11*8975f5c5SAndroid Build Coastguard Worker 12*8975f5c5SAndroid Build Coastguard Worker #if defined(_WIN32) 13*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_PLATFORM_WINDOWS 1 14*8975f5c5SAndroid Build Coastguard Worker #elif defined(__Fuchsia__) 15*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_PLATFORM_FUCHSIA 1 16*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_PLATFORM_POSIX 1 17*8975f5c5SAndroid Build Coastguard Worker #elif defined(__APPLE__) 18*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_PLATFORM_APPLE 1 19*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_PLATFORM_POSIX 1 20*8975f5c5SAndroid Build Coastguard Worker #elif defined(ANDROID) && !defined(ANGLE_ANDROID_DMA_BUF) 21*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_PLATFORM_ANDROID 1 22*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_PLATFORM_POSIX 1 23*8975f5c5SAndroid Build Coastguard Worker #elif defined(__ggp__) 24*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_PLATFORM_GGP 1 25*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_PLATFORM_POSIX 1 26*8975f5c5SAndroid Build Coastguard Worker #elif defined(__linux__) || defined(EMSCRIPTEN) 27*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_PLATFORM_LINUX 1 28*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_PLATFORM_POSIX 1 29*8975f5c5SAndroid Build Coastguard Worker #elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || \ 30*8975f5c5SAndroid Build Coastguard Worker defined(__DragonFly__) || defined(__sun) || defined(__GLIBC__) || defined(__GNU__) || \ 31*8975f5c5SAndroid Build Coastguard Worker defined(__QNX__) || defined(__Fuchsia__) || defined(__HAIKU__) 32*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_PLATFORM_POSIX 1 33*8975f5c5SAndroid Build Coastguard Worker #else 34*8975f5c5SAndroid Build Coastguard Worker # error Unsupported platform. 35*8975f5c5SAndroid Build Coastguard Worker #endif 36*8975f5c5SAndroid Build Coastguard Worker 37*8975f5c5SAndroid Build Coastguard Worker #ifdef ANGLE_PLATFORM_WINDOWS 38*8975f5c5SAndroid Build Coastguard Worker # ifndef STRICT 39*8975f5c5SAndroid Build Coastguard Worker # define STRICT 1 40*8975f5c5SAndroid Build Coastguard Worker # endif 41*8975f5c5SAndroid Build Coastguard Worker # ifndef WIN32_LEAN_AND_MEAN 42*8975f5c5SAndroid Build Coastguard Worker # define WIN32_LEAN_AND_MEAN 1 43*8975f5c5SAndroid Build Coastguard Worker # endif 44*8975f5c5SAndroid Build Coastguard Worker # ifndef NOMINMAX 45*8975f5c5SAndroid Build Coastguard Worker # define NOMINMAX 1 46*8975f5c5SAndroid Build Coastguard Worker # endif 47*8975f5c5SAndroid Build Coastguard Worker 48*8975f5c5SAndroid Build Coastguard Worker # include <intrin.h> 49*8975f5c5SAndroid Build Coastguard Worker 50*8975f5c5SAndroid Build Coastguard Worker # if defined(WINAPI_FAMILY) && (WINAPI_FAMILY != WINAPI_FAMILY_DESKTOP_APP) 51*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_ENABLE_WINDOWS_UWP 1 52*8975f5c5SAndroid Build Coastguard Worker # endif 53*8975f5c5SAndroid Build Coastguard Worker 54*8975f5c5SAndroid Build Coastguard Worker # if defined(ANGLE_ENABLE_D3D9) 55*8975f5c5SAndroid Build Coastguard Worker # include <d3d9.h> 56*8975f5c5SAndroid Build Coastguard Worker # include <d3dcompiler.h> 57*8975f5c5SAndroid Build Coastguard Worker # endif 58*8975f5c5SAndroid Build Coastguard Worker 59*8975f5c5SAndroid Build Coastguard Worker // Include D3D11 headers when OpenGL is enabled on Windows for interop extensions. 60*8975f5c5SAndroid Build Coastguard Worker # if defined(ANGLE_ENABLE_D3D11) || defined(ANGLE_ENABLE_OPENGL) 61*8975f5c5SAndroid Build Coastguard Worker # include <d3d10_1.h> 62*8975f5c5SAndroid Build Coastguard Worker # include <d3d11.h> 63*8975f5c5SAndroid Build Coastguard Worker # include <d3d11_3.h> 64*8975f5c5SAndroid Build Coastguard Worker # include <d3d11on12.h> 65*8975f5c5SAndroid Build Coastguard Worker # include <d3d12.h> 66*8975f5c5SAndroid Build Coastguard Worker # include <d3dcompiler.h> 67*8975f5c5SAndroid Build Coastguard Worker # include <dxgi.h> 68*8975f5c5SAndroid Build Coastguard Worker # include <dxgi1_2.h> 69*8975f5c5SAndroid Build Coastguard Worker # include <dxgi1_4.h> 70*8975f5c5SAndroid Build Coastguard Worker # endif 71*8975f5c5SAndroid Build Coastguard Worker 72*8975f5c5SAndroid Build Coastguard Worker # if defined(ANGLE_ENABLE_D3D9) || defined(ANGLE_ENABLE_D3D11) 73*8975f5c5SAndroid Build Coastguard Worker # include <wrl.h> 74*8975f5c5SAndroid Build Coastguard Worker # endif 75*8975f5c5SAndroid Build Coastguard Worker 76*8975f5c5SAndroid Build Coastguard Worker # if defined(ANGLE_ENABLE_WINDOWS_UWP) 77*8975f5c5SAndroid Build Coastguard Worker # include <dxgi1_3.h> 78*8975f5c5SAndroid Build Coastguard Worker # if defined(_DEBUG) 79*8975f5c5SAndroid Build Coastguard Worker # include <DXProgrammableCapture.h> 80*8975f5c5SAndroid Build Coastguard Worker # include <dxgidebug.h> 81*8975f5c5SAndroid Build Coastguard Worker # endif 82*8975f5c5SAndroid Build Coastguard Worker # endif 83*8975f5c5SAndroid Build Coastguard Worker 84*8975f5c5SAndroid Build Coastguard Worker // GCC < 10.4 or 11.0 - 11.3 miscodegen extern thread_local variable accesses. 85*8975f5c5SAndroid Build Coastguard Worker // This affects MinGW targets only. 86*8975f5c5SAndroid Build Coastguard Worker // See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104862 87*8975f5c5SAndroid Build Coastguard Worker # if defined(__GNUC__) 88*8975f5c5SAndroid Build Coastguard Worker # if __GNUC__ < 10 || __GNUC__ == 10 && __GNUC_MINOR__ < 4 || \ 89*8975f5c5SAndroid Build Coastguard Worker __GNUC__ == 11 && __GNUC_MINOR__ < 3 90*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_USE_STATIC_THREAD_LOCAL_VARIABLES 1 91*8975f5c5SAndroid Build Coastguard Worker # endif 92*8975f5c5SAndroid Build Coastguard Worker # endif 93*8975f5c5SAndroid Build Coastguard Worker 94*8975f5c5SAndroid Build Coastguard Worker // Include <windows.h> to ensure files that refer to near/far can be compiled. 95*8975f5c5SAndroid Build Coastguard Worker # include <windows.h> 96*8975f5c5SAndroid Build Coastguard Worker 97*8975f5c5SAndroid Build Coastguard Worker // Macros 'near', 'far', 'NEAR' and 'FAR' are defined by 'shared/minwindef.h' in the Windows SDK. 98*8975f5c5SAndroid Build Coastguard Worker // Macros 'near' and 'far' are empty. They are not used by other Windows headers and are undefined 99*8975f5c5SAndroid Build Coastguard Worker // here to avoid identifier conflicts. Macros 'NEAR' and 'FAR' contain 'near' and 'far'. They are 100*8975f5c5SAndroid Build Coastguard Worker // used by other Windows headers and are cleared here to avoid compilation errors. 101*8975f5c5SAndroid Build Coastguard Worker # undef near 102*8975f5c5SAndroid Build Coastguard Worker # undef far 103*8975f5c5SAndroid Build Coastguard Worker # undef NEAR 104*8975f5c5SAndroid Build Coastguard Worker # undef FAR 105*8975f5c5SAndroid Build Coastguard Worker # define NEAR 106*8975f5c5SAndroid Build Coastguard Worker # define FAR 107*8975f5c5SAndroid Build Coastguard Worker #endif 108*8975f5c5SAndroid Build Coastguard Worker 109*8975f5c5SAndroid Build Coastguard Worker // Mips and arm devices need to include stddef for size_t. 110*8975f5c5SAndroid Build Coastguard Worker #if defined(__mips__) || defined(__arm__) || defined(__aarch64__) || defined(__riscv) 111*8975f5c5SAndroid Build Coastguard Worker # include <stddef.h> 112*8975f5c5SAndroid Build Coastguard Worker #endif 113*8975f5c5SAndroid Build Coastguard Worker 114*8975f5c5SAndroid Build Coastguard Worker // Macro for hinting that an expression is likely to be true/false. 115*8975f5c5SAndroid Build Coastguard Worker #if !defined(ANGLE_LIKELY) || !defined(ANGLE_UNLIKELY) 116*8975f5c5SAndroid Build Coastguard Worker # if defined(__GNUC__) || defined(__clang__) 117*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_LIKELY(x) __builtin_expect(!!(x), 1) 118*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_UNLIKELY(x) __builtin_expect(!!(x), 0) 119*8975f5c5SAndroid Build Coastguard Worker # else 120*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_LIKELY(x) (x) 121*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_UNLIKELY(x) (x) 122*8975f5c5SAndroid Build Coastguard Worker # endif // defined(__GNUC__) || defined(__clang__) 123*8975f5c5SAndroid Build Coastguard Worker #endif // !defined(ANGLE_LIKELY) || !defined(ANGLE_UNLIKELY) 124*8975f5c5SAndroid Build Coastguard Worker 125*8975f5c5SAndroid Build Coastguard Worker #ifdef ANGLE_PLATFORM_APPLE 126*8975f5c5SAndroid Build Coastguard Worker # include <AvailabilityMacros.h> 127*8975f5c5SAndroid Build Coastguard Worker # include <TargetConditionals.h> 128*8975f5c5SAndroid Build Coastguard Worker # if TARGET_OS_OSX 129*8975f5c5SAndroid Build Coastguard Worker # if __MAC_OS_X_VERSION_MAX_ALLOWED < 120000 130*8975f5c5SAndroid Build Coastguard Worker # error macOS 12 SDK or newer is required. 131*8975f5c5SAndroid Build Coastguard Worker # endif 132*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_PLATFORM_MACOS 1 133*8975f5c5SAndroid Build Coastguard Worker # elif TARGET_OS_IPHONE 134*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_PLATFORM_IOS_FAMILY 1 135*8975f5c5SAndroid Build Coastguard Worker # if TARGET_OS_SIMULATOR 136*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_PLATFORM_IOS_FAMILY_SIMULATOR 1 137*8975f5c5SAndroid Build Coastguard Worker # endif 138*8975f5c5SAndroid Build Coastguard Worker # if TARGET_OS_VISION // Must be checked before iOS 139*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_PLATFORM_VISIONOS 1 140*8975f5c5SAndroid Build Coastguard Worker # elif TARGET_OS_IOS 141*8975f5c5SAndroid Build Coastguard Worker # if __IPHONE_OS_VERSION_MAX_ALLOWED < 170000 142*8975f5c5SAndroid Build Coastguard Worker # error iOS 17 SDK or newer is required. 143*8975f5c5SAndroid Build Coastguard Worker # endif 144*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_PLATFORM_IOS 1 145*8975f5c5SAndroid Build Coastguard Worker # if TARGET_OS_MACCATALYST 146*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_PLATFORM_MACCATALYST 1 147*8975f5c5SAndroid Build Coastguard Worker # endif 148*8975f5c5SAndroid Build Coastguard Worker # elif TARGET_OS_WATCH 149*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_PLATFORM_WATCHOS 1 150*8975f5c5SAndroid Build Coastguard Worker # elif TARGET_OS_TV 151*8975f5c5SAndroid Build Coastguard Worker # if __TV_OS_VERSION_MAX_ALLOWED < 170000 152*8975f5c5SAndroid Build Coastguard Worker # error tvOS 17 SDK or newer is required. 153*8975f5c5SAndroid Build Coastguard Worker # endif 154*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_PLATFORM_APPLETV 1 155*8975f5c5SAndroid Build Coastguard Worker # endif 156*8975f5c5SAndroid Build Coastguard Worker # endif 157*8975f5c5SAndroid Build Coastguard Worker #endif 158*8975f5c5SAndroid Build Coastguard Worker 159*8975f5c5SAndroid Build Coastguard Worker // Define ANGLE_WITH_ASAN macro. 160*8975f5c5SAndroid Build Coastguard Worker #if defined(__has_feature) 161*8975f5c5SAndroid Build Coastguard Worker # if __has_feature(address_sanitizer) 162*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_WITH_ASAN 1 163*8975f5c5SAndroid Build Coastguard Worker # endif 164*8975f5c5SAndroid Build Coastguard Worker #endif 165*8975f5c5SAndroid Build Coastguard Worker 166*8975f5c5SAndroid Build Coastguard Worker // Define ANGLE_WITH_MSAN macro. 167*8975f5c5SAndroid Build Coastguard Worker #if defined(__has_feature) 168*8975f5c5SAndroid Build Coastguard Worker # if __has_feature(memory_sanitizer) 169*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_WITH_MSAN 1 170*8975f5c5SAndroid Build Coastguard Worker # endif 171*8975f5c5SAndroid Build Coastguard Worker #endif 172*8975f5c5SAndroid Build Coastguard Worker 173*8975f5c5SAndroid Build Coastguard Worker // Define ANGLE_WITH_TSAN macro. 174*8975f5c5SAndroid Build Coastguard Worker #if defined(__has_feature) 175*8975f5c5SAndroid Build Coastguard Worker # if __has_feature(thread_sanitizer) 176*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_WITH_TSAN 1 177*8975f5c5SAndroid Build Coastguard Worker # endif 178*8975f5c5SAndroid Build Coastguard Worker #endif 179*8975f5c5SAndroid Build Coastguard Worker 180*8975f5c5SAndroid Build Coastguard Worker // Define ANGLE_WITH_UBSAN macro. 181*8975f5c5SAndroid Build Coastguard Worker #if defined(__has_feature) 182*8975f5c5SAndroid Build Coastguard Worker # if __has_feature(undefined_behavior_sanitizer) 183*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_WITH_UBSAN 1 184*8975f5c5SAndroid Build Coastguard Worker # endif 185*8975f5c5SAndroid Build Coastguard Worker #endif 186*8975f5c5SAndroid Build Coastguard Worker 187*8975f5c5SAndroid Build Coastguard Worker #if defined(ANGLE_WITH_ASAN) || defined(ANGLE_WITH_TSAN) || defined(ANGLE_WITH_UBSAN) 188*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_WITH_SANITIZER 1 189*8975f5c5SAndroid Build Coastguard Worker #endif // defined(ANGLE_WITH_ASAN) || defined(ANGLE_WITH_TSAN) || defined(ANGLE_WITH_UBSAN) 190*8975f5c5SAndroid Build Coastguard Worker 191*8975f5c5SAndroid Build Coastguard Worker #include <stdint.h> 192*8975f5c5SAndroid Build Coastguard Worker #if INTPTR_MAX == INT64_MAX 193*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_IS_64_BIT_CPU 1 194*8975f5c5SAndroid Build Coastguard Worker #else 195*8975f5c5SAndroid Build Coastguard Worker # define ANGLE_IS_32_BIT_CPU 1 196*8975f5c5SAndroid Build Coastguard Worker #endif 197*8975f5c5SAndroid Build Coastguard Worker 198*8975f5c5SAndroid Build Coastguard Worker #endif // COMMON_PLATFORM_H_ 199