xref: /aosp_15_r20/external/angle/src/common/platform.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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