| // | |
| // Copyright 2014 The ANGLE Project Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| // | |
| // platform.h: Operating system specific includes and defines. | |
| #ifndef COMMON_PLATFORM_H_ | |
| #define COMMON_PLATFORM_H_ | |
| #if defined(_WIN32) | |
| # define ANGLE_PLATFORM_WINDOWS 1 | |
| #elif defined(__Fuchsia__) | |
| # define ANGLE_PLATFORM_FUCHSIA 1 | |
| # define ANGLE_PLATFORM_POSIX 1 | |
| #elif defined(__APPLE__) | |
| # define ANGLE_PLATFORM_APPLE 1 | |
| # define ANGLE_PLATFORM_POSIX 1 | |
| #elif defined(ANDROID) && !defined(ANGLE_ANDROID_DMA_BUF) | |
| # define ANGLE_PLATFORM_ANDROID 1 | |
| # define ANGLE_PLATFORM_POSIX 1 | |
| #elif defined(__linux__) || defined(EMSCRIPTEN) | |
| # define ANGLE_PLATFORM_LINUX 1 | |
| # define ANGLE_PLATFORM_POSIX 1 | |
| #elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || \ | |
| defined(__DragonFly__) || defined(__sun) || defined(__GLIBC__) || defined(__GNU__) || \ | |
| defined(__QNX__) || defined(__Fuchsia__) || defined(__HAIKU__) | |
| # define ANGLE_PLATFORM_POSIX 1 | |
| #else | |
| # error Unsupported platform. | |
| #endif | |
| #ifdef ANGLE_PLATFORM_WINDOWS | |
| # ifndef STRICT | |
| # define STRICT 1 | |
| # endif | |
| # ifndef WIN32_LEAN_AND_MEAN | |
| # define WIN32_LEAN_AND_MEAN 1 | |
| # endif | |
| # ifndef NOMINMAX | |
| # define NOMINMAX 1 | |
| # endif | |
| # include <intrin.h> | |
| # include <wrl/client.h> | |
| # if defined(WINAPI_FAMILY) && (WINAPI_FAMILY != WINAPI_FAMILY_DESKTOP_APP) | |
| # define ANGLE_ENABLE_WINDOWS_UWP 1 | |
| # endif | |
| // Include D3D11 headers when OpenGL is enabled on Windows for interop extensions. | |
| # if defined(ANGLE_ENABLE_D3D11) || defined(ANGLE_ENABLE_OPENGL) | |
| # include <d3d10_1.h> | |
| # include <d3d11.h> | |
| # include <d3d11_3.h> | |
| # include <d3d11on12.h> | |
| # include <d3d12.h> | |
| # include <d3dcompiler.h> | |
| # include <dxgi.h> | |
| # include <dxgi1_2.h> | |
| # include <dxgi1_4.h> | |
| # endif | |
| # if defined(ANGLE_ENABLE_WINDOWS_UWP) | |
| # include <dxgi1_3.h> | |
| # if defined(_DEBUG) | |
| # include <DXProgrammableCapture.h> | |
| # include <dxgidebug.h> | |
| # endif | |
| # endif | |
| // GCC < 10.4 or 11.0 - 11.3 miscodegen extern thread_local variable accesses. | |
| // This affects MinGW targets only. | |
| // See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104862 | |
| # if defined(__GNUC__) | |
| # if __GNUC__ < 10 || __GNUC__ == 10 && __GNUC_MINOR__ < 4 || \ | |
| __GNUC__ == 11 && __GNUC_MINOR__ < 3 | |
| # define ANGLE_USE_STATIC_THREAD_LOCAL_VARIABLES 1 | |
| # endif | |
| # endif | |
| // Include <windows.h> to ensure files that refer to near/far can be compiled. | |
| # include <windows.h> | |
| // Macros 'near', 'far', 'NEAR' and 'FAR' are defined by 'shared/minwindef.h' in the Windows SDK. | |
| // Macros 'near' and 'far' are empty. They are not used by other Windows headers and are undefined | |
| // here to avoid identifier conflicts. Macros 'NEAR' and 'FAR' contain 'near' and 'far'. They are | |
| // used by other Windows headers and are cleared here to avoid compilation errors. | |
| # undef near | |
| # undef far | |
| # undef NEAR | |
| # undef FAR | |
| # define NEAR | |
| # define FAR | |
| #endif | |
| // Mips and arm devices need to include stddef for size_t. | |
| #if defined(__mips__) || defined(__arm__) || defined(__aarch64__) || defined(__riscv) | |
| # include <stddef.h> | |
| #endif | |
| // Macro for hinting that an expression is likely to be true/false. | |
| #if !defined(ANGLE_LIKELY) || !defined(ANGLE_UNLIKELY) | |
| # if defined(__GNUC__) || defined(__clang__) | |
| # define ANGLE_LIKELY(x) __builtin_expect_with_probability(!!(x), 1, 0.9999) | |
| # define ANGLE_UNLIKELY(x) __builtin_expect_with_probability(!!(x), 0, 0.9999) | |
| # else | |
| # define ANGLE_LIKELY(x) (x) | |
| # define ANGLE_UNLIKELY(x) (x) | |
| # endif // defined(__GNUC__) || defined(__clang__) | |
| #endif // !defined(ANGLE_LIKELY) || !defined(ANGLE_UNLIKELY) | |
| #ifdef ANGLE_PLATFORM_APPLE | |
| # include <AvailabilityMacros.h> | |
| # include <TargetConditionals.h> | |
| # if TARGET_OS_OSX | |
| # if __MAC_OS_X_VERSION_MAX_ALLOWED < 120000 | |
| # error macOS 12 SDK or newer is required. | |
| # endif | |
| # define ANGLE_PLATFORM_MACOS 1 | |
| # elif TARGET_OS_IPHONE | |
| # define ANGLE_PLATFORM_IOS_FAMILY 1 | |
| # if TARGET_OS_SIMULATOR | |
| # define ANGLE_PLATFORM_IOS_FAMILY_SIMULATOR 1 | |
| # endif | |
| # if TARGET_OS_VISION // Must be checked before iOS | |
| # define ANGLE_PLATFORM_VISIONOS 1 | |
| # elif TARGET_OS_IOS | |
| # if __IPHONE_OS_VERSION_MAX_ALLOWED < 170000 | |
| # error iOS 17 SDK or newer is required. | |
| # endif | |
| # define ANGLE_PLATFORM_IOS 1 | |
| # if TARGET_OS_MACCATALYST | |
| # define ANGLE_PLATFORM_MACCATALYST 1 | |
| # endif | |
| # elif TARGET_OS_WATCH | |
| # define ANGLE_PLATFORM_WATCHOS 1 | |
| # elif TARGET_OS_TV | |
| # if __TV_OS_VERSION_MAX_ALLOWED < 170000 | |
| # error tvOS 17 SDK or newer is required. | |
| # endif | |
| # define ANGLE_PLATFORM_APPLETV 1 | |
| # endif | |
| # endif | |
| #endif | |
| // Define ANGLE_WITH_ASAN macro. | |
| #if defined(__has_feature) | |
| # if __has_feature(address_sanitizer) | |
| # define ANGLE_WITH_ASAN 1 | |
| # endif | |
| #endif | |
| // Define ANGLE_WITH_MSAN macro. | |
| #if defined(__has_feature) | |
| # if __has_feature(memory_sanitizer) | |
| # define ANGLE_WITH_MSAN 1 | |
| # endif | |
| #endif | |
| // Define ANGLE_WITH_TSAN macro. | |
| #if defined(__has_feature) | |
| # if __has_feature(thread_sanitizer) | |
| # define ANGLE_WITH_TSAN 1 | |
| # endif | |
| #endif | |
| // Define ANGLE_WITH_UBSAN macro. | |
| #if defined(__has_feature) | |
| # if __has_feature(undefined_behavior_sanitizer) | |
| # define ANGLE_WITH_UBSAN 1 | |
| # endif | |
| #endif | |
| #if defined(ANGLE_WITH_ASAN) || defined(ANGLE_WITH_TSAN) || defined(ANGLE_WITH_UBSAN) | |
| # define ANGLE_WITH_SANITIZER 1 | |
| #endif // defined(ANGLE_WITH_ASAN) || defined(ANGLE_WITH_TSAN) || defined(ANGLE_WITH_UBSAN) | |
| #include <stdint.h> | |
| #if INTPTR_MAX == INT64_MAX | |
| # define ANGLE_IS_64_BIT_CPU 1 | |
| #else | |
| # define ANGLE_IS_32_BIT_CPU 1 | |
| #endif | |
| #endif // COMMON_PLATFORM_H_ |