platform.h (6705B)
1 // 2 // Copyright 2014 The ANGLE Project Authors. All rights reserved. 3 // Use of this source code is governed by a BSD-style license that can be 4 // found in the LICENSE file. 5 // 6 7 // platform.h: Operating system specific includes and defines. 8 9 #ifndef COMMON_PLATFORM_H_ 10 #define COMMON_PLATFORM_H_ 11 12 #if defined(_WIN32) 13 # define ANGLE_PLATFORM_WINDOWS 1 14 #elif defined(__Fuchsia__) 15 # define ANGLE_PLATFORM_FUCHSIA 1 16 # define ANGLE_PLATFORM_POSIX 1 17 #elif defined(__APPLE__) 18 # define ANGLE_PLATFORM_APPLE 1 19 # define ANGLE_PLATFORM_POSIX 1 20 #elif defined(ANDROID) 21 # define ANGLE_PLATFORM_ANDROID 1 22 # define ANGLE_PLATFORM_POSIX 1 23 #elif defined(__ggp__) 24 # define ANGLE_PLATFORM_GGP 1 25 # define ANGLE_PLATFORM_POSIX 1 26 #elif defined(__linux__) || defined(EMSCRIPTEN) 27 # define ANGLE_PLATFORM_LINUX 1 28 # define ANGLE_PLATFORM_POSIX 1 29 #elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || \ 30 defined(__DragonFly__) || defined(__sun) || defined(__GLIBC__) || defined(__GNU__) || \ 31 defined(__QNX__) || defined(__Fuchsia__) || defined(__HAIKU__) 32 # define ANGLE_PLATFORM_POSIX 1 33 #else 34 # error Unsupported platform. 35 #endif 36 37 #ifdef ANGLE_PLATFORM_WINDOWS 38 # ifndef STRICT 39 # define STRICT 1 40 # endif 41 # ifndef WIN32_LEAN_AND_MEAN 42 # define WIN32_LEAN_AND_MEAN 1 43 # endif 44 # ifndef NOMINMAX 45 # define NOMINMAX 1 46 # endif 47 48 # include <intrin.h> 49 50 # if defined(WINAPI_FAMILY) && (WINAPI_FAMILY != WINAPI_FAMILY_DESKTOP_APP) 51 # define ANGLE_ENABLE_WINDOWS_UWP 1 52 # endif 53 54 # if defined(ANGLE_ENABLE_D3D9) 55 # include <d3d9.h> 56 # include <d3dcompiler.h> 57 # endif 58 59 // Include D3D11 headers when OpenGL is enabled on Windows for interop extensions. 60 # if defined(ANGLE_ENABLE_D3D11) || defined(ANGLE_ENABLE_OPENGL) 61 # include <d3d10_1.h> 62 # include <d3d11.h> 63 # include <d3d11_3.h> 64 # include <d3d11on12.h> 65 # include <d3d12.h> 66 # include <d3dcompiler.h> 67 # include <dxgi.h> 68 # include <dxgi1_2.h> 69 # include <dxgi1_4.h> 70 # endif 71 72 # if defined(ANGLE_ENABLE_D3D9) || defined(ANGLE_ENABLE_D3D11) 73 # include <wrl.h> 74 # endif 75 76 # if defined(ANGLE_ENABLE_WINDOWS_UWP) 77 # include <dxgi1_3.h> 78 # if defined(_DEBUG) 79 # include <DXProgrammableCapture.h> 80 # include <dxgidebug.h> 81 # endif 82 # endif 83 84 // Include <windows.h> to ensure tests related files can be built when building 85 // vulkan only backend ANGLE on windows. 86 # if defined(ANGLE_ENABLE_VULKAN) 87 # include <windows.h> 88 # endif 89 90 // Macros 'near', 'far', 'NEAR' and 'FAR' are defined by 'shared/minwindef.h' in the Windows SDK. 91 // Macros 'near' and 'far' are empty. They are not used by other Windows headers and are undefined 92 // here to avoid identifier conflicts. Macros 'NEAR' and 'FAR' contain 'near' and 'far'. They are 93 // used by other Windows headers and are cleared here to avoid compilation errors. 94 # undef near 95 # undef far 96 # undef NEAR 97 # undef FAR 98 # define NEAR 99 # define FAR 100 #endif 101 102 #if defined(_MSC_VER) && !defined(_M_ARM) && !defined(_M_ARM64) 103 # include <intrin.h> 104 # define ANGLE_USE_SSE 105 #elif defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__)) 106 # include <x86intrin.h> 107 # define ANGLE_USE_SSE 108 #endif 109 110 // Mips and arm devices need to include stddef for size_t. 111 #if defined(__mips__) || defined(__arm__) || defined(__aarch64__) 112 # include <stddef.h> 113 #endif 114 115 // The MemoryBarrier function name collides with a macro under Windows 116 // We will undef the macro so that the function name does not get replaced 117 #undef MemoryBarrier 118 119 // Macro for hinting that an expression is likely to be true/false. 120 #if !defined(ANGLE_LIKELY) || !defined(ANGLE_UNLIKELY) 121 # if defined(__GNUC__) || defined(__clang__) 122 # define ANGLE_LIKELY(x) __builtin_expect(!!(x), 1) 123 # define ANGLE_UNLIKELY(x) __builtin_expect(!!(x), 0) 124 # else 125 # define ANGLE_LIKELY(x) (x) 126 # define ANGLE_UNLIKELY(x) (x) 127 # endif // defined(__GNUC__) || defined(__clang__) 128 #endif // !defined(ANGLE_LIKELY) || !defined(ANGLE_UNLIKELY) 129 130 #ifdef ANGLE_PLATFORM_APPLE 131 # include <TargetConditionals.h> 132 # if TARGET_OS_OSX 133 # define ANGLE_PLATFORM_MACOS 1 134 # elif TARGET_OS_IPHONE 135 # define ANGLE_PLATFORM_IOS 1 136 # if TARGET_OS_SIMULATOR 137 # define ANGLE_PLATFORM_IOS_SIMULATOR 1 138 # endif 139 # if TARGET_OS_MACCATALYST 140 # define ANGLE_PLATFORM_MACCATALYST 1 141 # endif 142 # elif TARGET_OS_WATCH 143 # define ANGLE_PLATFORM_WATCHOS 1 144 # if TARGET_OS_SIMULATOR 145 # define ANGLE_PLATFORM_IOS_SIMULATOR 1 146 # endif 147 # elif TARGET_OS_TV 148 # define ANGLE_PLATFORM_APPLETV 1 149 # if TARGET_OS_SIMULATOR 150 # define ANGLE_PLATFORM_IOS_SIMULATOR 1 151 # endif 152 # endif 153 # // This might be useful globally. At the moment it is used 154 # // to differentiate MacCatalyst on Intel and Apple Silicon. 155 # if defined(__arm64__) || defined(__aarch64__) 156 # define ANGLE_CPU_ARM64 1 157 # endif 158 # // EAGL should be enabled on iOS, but not Mac Catalyst unless it is running on Apple Silicon. 159 # if (defined(ANGLE_PLATFORM_IOS) && !defined(ANGLE_PLATFORM_MACCATALYST)) || \ 160 (defined(ANGLE_PLATFORM_MACCATALYST) && defined(ANGLE_CPU_ARM64)) 161 # define ANGLE_ENABLE_EAGL 162 # endif 163 # // Identify Metal API >= what shipped on macOS Catalina. 164 # if (defined(ANGLE_PLATFORM_MACOS) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 101500) || \ 165 (defined(ANGLE_PLATFORM_IOS) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000) 166 # define ANGLE_WITH_MODERN_METAL_API 1 167 # endif 168 #endif 169 170 // Define ANGLE_WITH_ASAN macro. 171 #if defined(__has_feature) 172 # if __has_feature(address_sanitizer) 173 # define ANGLE_WITH_ASAN 1 174 # endif 175 #endif 176 177 // Define ANGLE_WITH_MSAN macro. 178 #if defined(__has_feature) 179 # if __has_feature(memory_sanitizer) 180 # define ANGLE_WITH_MSAN 1 181 # endif 182 #endif 183 184 // Define ANGLE_WITH_TSAN macro. 185 #if defined(__has_feature) 186 # if __has_feature(thread_sanitizer) 187 # define ANGLE_WITH_TSAN 1 188 # endif 189 #endif 190 191 // Define ANGLE_WITH_UBSAN macro. 192 #if defined(__has_feature) 193 # if __has_feature(undefined_behavior_sanitizer) 194 # define ANGLE_WITH_UBSAN 1 195 # endif 196 #endif 197 198 #if defined(ANGLE_WITH_ASAN) || defined(ANGLE_WITH_TSAN) || defined(ANGLE_WITH_UBSAN) 199 # define ANGLE_WITH_SANITIZER 1 200 #endif // defined(ANGLE_WITH_ASAN) || defined(ANGLE_WITH_TSAN) || defined(ANGLE_WITH_UBSAN) 201 202 #include <cstdint> 203 #if INTPTR_MAX == INT64_MAX 204 # define ANGLE_IS_64_BIT_CPU 1 205 #else 206 # define ANGLE_IS_32_BIT_CPU 1 207 #endif 208 209 #endif // COMMON_PLATFORM_H_