11#if !defined(PLATFORM_WINDOWS)
12 #define PLATFORM_WINDOWS 0
14#if !defined(PLATFORM_MAC)
15 #define PLATFORM_MAC 0
18 #define PLATFORM_MAC_X86 0
19 #define PLATFORM_MAC_ARM64 0
21#if !defined(PLATFORM_IOS)
22 #define PLATFORM_IOS 0
24#if !defined(UE_PLATFORM_IOS_ONLY)
25 #define UE_PLATFORM_IOS_ONLY 0
27#if !defined(PLATFORM_TVOS)
28 #define PLATFORM_TVOS 0
30#if !defined(PLATFORM_VISIONOS)
31 #define PLATFORM_VISIONOS 0
33#if !defined(PLATFORM_ANDROID)
34 #define PLATFORM_ANDROID 0
36#if !defined(PLATFORM_ANDROID_ARM)
37 #define PLATFORM_ANDROID_ARM 0
39#if !defined(PLATFORM_ANDROID_ARM64)
40 #define PLATFORM_ANDROID_ARM64 0
42#if !defined(PLATFORM_ANDROID_X86)
43 #define PLATFORM_ANDROID_X86 0
45#if !defined(PLATFORM_ANDROID_X64)
46 #define PLATFORM_ANDROID_X64 0
48#if !defined(PLATFORM_APPLE)
49 #define PLATFORM_APPLE 0
51#if !defined(PLATFORM_LINUX)
52 #define PLATFORM_LINUX 0
54#if !defined(PLATFORM_LINUXARM64)
55 #define PLATFORM_LINUXARM64 0
57#if !defined(PLATFORM_SWITCH)
58 #define PLATFORM_SWITCH 0
60#if !defined(PLATFORM_FREEBSD)
61 #define PLATFORM_FREEBSD 0
63#if !defined(PLATFORM_UNIX)
64 #define PLATFORM_UNIX 0
66#if !defined(PLATFORM_MICROSOFT)
67 #define PLATFORM_MICROSOFT 0
72#include COMPILED_PLATFORM_HEADER(PlatformCompilerPreSetup.h)
78#ifndef PLATFORM_CPU_X86_FAMILY
79 #if (defined(_M_IX86) || defined(__i386__) || defined(_M_X64) || defined(__amd64__) || defined(__x86_64__)) && !defined(_M_ARM64EC)
80 #define PLATFORM_CPU_X86_FAMILY 1
82 #define PLATFORM_CPU_X86_FAMILY 0
87#ifndef PLATFORM_CPU_ARM_FAMILY
88 #if (defined(__arm__) || defined(_M_ARM) || defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC))
89 #define PLATFORM_CPU_ARM_FAMILY 1
91 #define PLATFORM_CPU_ARM_FAMILY 0
96#if defined(_M_ARM64EC)
97 #define PLATFORM_WINDOWS_ARM64EC PLATFORM_WINDOWS
99 #define PLATFORM_WINDOWS_ARM64EC 0
111#ifndef PLATFORM_COMPILER_CLANG
112#if defined(__clang__)
113#define PLATFORM_COMPILER_CLANG 1
115#define PLATFORM_COMPILER_CLANG 0
119#ifndef PLATFORM_COMPILER_MSVC
120#if defined(_MSC_VER) && !PLATFORM_COMPILER_CLANG
121#define PLATFORM_COMPILER_MSVC 1
123#define PLATFORM_COMPILER_MSVC 0
130#if PLATFORM_COMPILER_CLANG
132#elif PLATFORM_MICROSOFT
136#ifndef USING_ADDRESS_SANITISER
137 #define USING_ADDRESS_SANITISER 0
140#ifndef USING_HW_ADDRESS_SANITISER
141 #define USING_HW_ADDRESS_SANITISER 0
144#ifndef PLATFORM_HAS_ASAN_INCLUDE
145 #define PLATFORM_HAS_ASAN_INCLUDE __has_include(<sanitizer/asan_interface.h>)
152#include COMPILED_PLATFORM_HEADER(Platform.h)
159#ifndef PLATFORM_DESKTOP
160 #error "PLATFORM_DESKTOP must be defined"
162#ifndef PLATFORM_64BITS
163 #error "PLATFORM_64BITS must be defined"
167#ifndef PLATFORM_LITTLE_ENDIAN
168 #define PLATFORM_LITTLE_ENDIAN 0
170#ifndef PLATFORM_SUPPORTS_UNALIGNED_LOADS
171 #define PLATFORM_SUPPORTS_UNALIGNED_LOADS 0
173#ifndef PLATFORM_EXCEPTIONS_DISABLED
174 #define PLATFORM_EXCEPTIONS_DISABLED !PLATFORM_DESKTOP
176#ifndef PLATFORM_SEH_EXCEPTIONS_DISABLED
177 #define PLATFORM_SEH_EXCEPTIONS_DISABLED 0
179#ifndef PLATFORM_SUPPORTS_PRAGMA_PACK
180 #define PLATFORM_SUPPORTS_PRAGMA_PACK 0
185#ifndef PLATFORM_ENABLE_VECTORINTRINSICS
186 #define PLATFORM_ENABLE_VECTORINTRINSICS 0
191#ifndef PLATFORM_SUPPORTS_VECTOR_CONTROL_REGISTERS
192 #define PLATFORM_SUPPORTS_VECTOR_CONTROL_REGISTERS 1
195#ifndef PLATFORM_USE_SSE2_FOR_THREAD_YIELD
196 #define PLATFORM_USE_SSE2_FOR_THREAD_YIELD PLATFORM_CPU_X86_FAMILY
204#ifndef PLATFORM_MAYBE_HAS_SSE4_1
205 #define PLATFORM_MAYBE_HAS_SSE4_1 PLATFORM_CPU_X86_FAMILY
207#ifndef PLATFORM_ALWAYS_HAS_SSE4_1
208 #define PLATFORM_ALWAYS_HAS_SSE4_1 PLATFORM_CPU_X86_FAMILY
210#ifndef PLATFORM_ALWAYS_HAS_SSE4_2
211 #define PLATFORM_ALWAYS_HAS_SSE4_2 PLATFORM_CPU_X86_FAMILY
214#ifndef PLATFORM_MAYBE_HAS_AVX
215 #define PLATFORM_MAYBE_HAS_AVX 0
217#ifndef PLATFORM_ALWAYS_HAS_AVX
218 #define PLATFORM_ALWAYS_HAS_AVX 0
220#ifndef PLATFORM_ALWAYS_HAS_AVX_2
221 #define PLATFORM_ALWAYS_HAS_AVX_2 0
223#ifndef PLATFORM_ALWAYS_HAS_FMA3
224 #define PLATFORM_ALWAYS_HAS_FMA3 0
226#ifndef PLATFORM_ALWAYS_HAS_AESNI
227 #define PLATFORM_ALWAYS_HAS_AESNI 0
229#ifndef PLATFORM_ALWAYS_HAS_SHA
230 #define PLATFORM_ALWAYS_HAS_SHA 0
234#ifndef PLATFORM_HAS_CPUID
235 #if defined(_M_IX86) || defined(__i386__) || defined(_M_X64) || defined(__x86_64__) || defined (__amd64__)
236 #define PLATFORM_HAS_CPUID 1
238 #define PLATFORM_HAS_CPUID 0
241#ifndef PLATFORM_ENABLE_POPCNT_INTRINSIC
244 #define PLATFORM_ENABLE_POPCNT_INTRINSIC 0
246#ifndef PLATFORM_ENABLE_VECTORINTRINSICS_NEON
247 #define PLATFORM_ENABLE_VECTORINTRINSICS_NEON 0
249#ifndef UE_VALIDATE_FORMAT_STRINGS
250 #define UE_VALIDATE_FORMAT_STRINGS 0
253#ifndef PLATFORM_USE_LS_SPEC_FOR_WIDECHAR
254 #define PLATFORM_USE_LS_SPEC_FOR_WIDECHAR 1
257#ifndef PLATFORM_USE_S_SPEC_FOR_NARROWCHAR_IN_VSPRINTF
258 #define PLATFORM_USE_S_SPEC_FOR_NARROWCHAR_IN_VSPRINTF 0
260#ifndef PLATFORM_USE_SYSTEM_VSWPRINTF
261 #define PLATFORM_USE_SYSTEM_VSWPRINTF 1
263#ifndef PLATFORM_COMPILER_DISTINGUISHES_INT_AND_LONG
264 #define PLATFORM_COMPILER_DISTINGUISHES_INT_AND_LONG 0
266#ifndef PLATFORM_COMPILER_HAS_GENERIC_KEYWORD
267 #define PLATFORM_COMPILER_HAS_GENERIC_KEYWORD 0
269#ifndef PLATFORM_COMPILER_COMMON_LANGUAGE_RUNTIME_COMPILATION
270 #define PLATFORM_COMPILER_COMMON_LANGUAGE_RUNTIME_COMPILATION 0
272#ifndef PLATFORM_COMPILER_HAS_TCHAR_WMAIN
273 #define PLATFORM_COMPILER_HAS_TCHAR_WMAIN 0
275#ifndef PLATFORM_COMPILER_HAS_GENERATED_COMPARISON_OPERATORS
276 #define PLATFORM_COMPILER_HAS_GENERATED_COMPARISON_OPERATORS (__cplusplus >= 202002L)
279#define PLATFORM_COMPILER_SUPPORTS_CONSTEXPR_BUILTIN_FILE_AND_LINE 1 UE_DEPRECATED_MACRO(5.7, "PLATFORM_COMPILER_SUPPORTS_CONSTEXPR_BUILTIN_FILE_AND_LINE has been deprecated and should be replaced with 1.")
280#ifndef PLATFORM_COMPILER_SUPPORTS_BUILTIN_BITCAST
281 #error PLATFORM_COMPILER_SUPPORTS_BUILTIN_BITCAST should have been defined by now
283#ifndef PLATFORM_COMPILER_SUPPORTS_CONSTRAINED_DESTRUCTORS
287 #if defined(__cpp_concepts) && __cpp_concepts >= 202002L && (defined(__clang__) || defined(__GNUC__) || !defined(_MSC_VER) || _MSC_VER >= 1942)
288 #define PLATFORM_COMPILER_SUPPORTS_CONSTRAINED_DESTRUCTORS 1
290 #define PLATFORM_COMPILER_SUPPORTS_CONSTRAINED_DESTRUCTORS 0
293#ifndef PLATFORM_TCHAR_IS_4_BYTES
294 #define PLATFORM_TCHAR_IS_4_BYTES 0
296#ifndef PLATFORM_WCHAR_IS_4_BYTES
297 #define PLATFORM_WCHAR_IS_4_BYTES 0
300#ifndef PLATFORM_TCHAR_IS_CHAR16
301 #define PLATFORM_TCHAR_IS_CHAR16 0
303#define PLATFORM_WIDECHAR_IS_CHAR16 PLATFORM_TCHAR_IS_CHAR16
304#ifndef PLATFORM_TCHAR_IS_UTF8CHAR
305 #define PLATFORM_TCHAR_IS_UTF8CHAR USE_UTF8_TCHARS
307#ifndef PLATFORM_UCS2CHAR_IS_UTF16CHAR
309 #define PLATFORM_UCS2CHAR_IS_UTF16CHAR 1
311#ifndef PLATFORM_HAS_BSD_TIME
312 #define PLATFORM_HAS_BSD_TIME 1
314#ifndef PLATFORM_HAS_BSD_THREAD_CPUTIME
315 #define PLATFORM_HAS_BSD_THREAD_CPUTIME 0
317#ifndef PLATFORM_HAS_BSD_SOCKETS
318 #define PLATFORM_HAS_BSD_SOCKETS 1
320#ifndef PLATFORM_HAS_BSD_IPV6_SOCKETS
321 #define PLATFORM_HAS_BSD_IPV6_SOCKETS 0
323#ifndef PLATFORM_SUPPORTS_UDP_MULTICAST_GROUP
324 #define PLATFORM_SUPPORTS_UDP_MULTICAST_GROUP 1
326#ifndef PLATFORM_USE_PTHREADS
327 #define PLATFORM_USE_PTHREADS 1
329#ifndef PLATFORM_HAS_MULTITHREADED_PREMAIN
334 #define PLATFORM_HAS_MULTITHREADED_PREMAIN 0
336#ifndef PLATFORM_MAX_FILEPATH_LENGTH_DEPRECATED
337 #define PLATFORM_MAX_FILEPATH_LENGTH_DEPRECATED 128
339#ifndef PLATFORM_SUPPORTS_TEXTURE_STREAMING
340 #define PLATFORM_SUPPORTS_TEXTURE_STREAMING 1
342#ifndef PLATFORM_SUPPORTS_VIRTUAL_TEXTURES
343 #define PLATFORM_SUPPORTS_VIRTUAL_TEXTURES 0
345#ifndef PLATFORM_SUPPORTS_VARIABLE_RATE_SHADING
346 #define PLATFORM_SUPPORTS_VARIABLE_RATE_SHADING 0
348#ifndef PLATFORM_REQUIRES_FILESERVER
349 #define PLATFORM_REQUIRES_FILESERVER 0
351#ifndef PLATFORM_SUPPORTS_MULTITHREADED_GC
352 #define PLATFORM_SUPPORTS_MULTITHREADED_GC 1
354#ifndef PLATFORM_HAS_BSD_SOCKET_FEATURE_IOCTL
355 #define PLATFORM_HAS_BSD_SOCKET_FEATURE_IOCTL 1
357#ifndef PLATFORM_HAS_BSD_SOCKET_FEATURE_POLL
358 #define PLATFORM_HAS_BSD_SOCKET_FEATURE_POLL 0
360#ifndef PLATFORM_HAS_BSD_SOCKET_FEATURE_SELECT
361 #define PLATFORM_HAS_BSD_SOCKET_FEATURE_SELECT 1
363#ifndef PLATFORM_HAS_BSD_SOCKET_FEATURE_WINSOCKETS
364 #define PLATFORM_HAS_BSD_SOCKET_FEATURE_WINSOCKETS 0
366#ifndef PLATFORM_HAS_BSD_SOCKET_FEATURE_GETHOSTNAME
367 #define PLATFORM_HAS_BSD_SOCKET_FEATURE_GETHOSTNAME 1
369#ifndef PLATFORM_HAS_BSD_SOCKET_FEATURE_GETADDRINFO
370 #define PLATFORM_HAS_BSD_SOCKET_FEATURE_GETADDRINFO 1
372#ifndef PLATFORM_HAS_BSD_SOCKET_FEATURE_GETNAMEINFO
373 #define PLATFORM_HAS_BSD_SOCKET_FEATURE_GETNAMEINFO 1
375#ifndef PLATFORM_HAS_BSD_SOCKET_FEATURE_CLOSE_ON_EXEC
376 #define PLATFORM_HAS_BSD_SOCKET_FEATURE_CLOSE_ON_EXEC 0
378#ifndef PLATFORM_HAS_BSD_SOCKET_FEATURE_MSG_DONTWAIT
379 #define PLATFORM_HAS_BSD_SOCKET_FEATURE_MSG_DONTWAIT 0
381#ifndef PLATFORM_HAS_BSD_SOCKET_FEATURE_RECVMMSG
382 #define PLATFORM_HAS_BSD_SOCKET_FEATURE_RECVMMSG 0
384#ifndef PLATFORM_HAS_BSD_SOCKET_FEATURE_TIMESTAMP
385 #define PLATFORM_HAS_BSD_SOCKET_FEATURE_TIMESTAMP 0
387#ifndef PLATFORM_HAS_BSD_SOCKET_FEATURE_NODELAY
388 #define PLATFORM_HAS_BSD_SOCKET_FEATURE_NODELAY 1
390#ifndef PLATFORM_HAS_NO_EPROCLIM
391 #define PLATFORM_HAS_NO_EPROCLIM 0
393#ifndef PLATFORM_USES_MICROSOFT_LIBC_FUNCTIONS
394 #define PLATFORM_USES_MICROSOFT_LIBC_FUNCTIONS 0
397#ifndef PLATFORM_USES_GLES
398 #define PLATFORM_USES_GLES 0
401#ifndef PLATFORM_SUPPORTS_GEOMETRY_SHADERS
402 #define PLATFORM_SUPPORTS_GEOMETRY_SHADERS 1
405#ifndef PLATFORM_SUPPORTS_MESH_SHADERS
406 #define PLATFORM_SUPPORTS_MESH_SHADERS 0
409#ifndef PLATFORM_SUPPORTS_WORKGRAPH_SHADERS
410 #define PLATFORM_SUPPORTS_WORKGRAPH_SHADERS 0
413#ifndef PLATFORM_SUPPORTS_BINDLESS_RENDERING
414 #define PLATFORM_SUPPORTS_BINDLESS_RENDERING 0
417#ifndef PLATFORM_BUILTIN_VERTEX_HALF_FLOAT
418 #define PLATFORM_BUILTIN_VERTEX_HALF_FLOAT 1
421#ifndef PLATFORM_SUPPORTS_TBB
422 #define PLATFORM_SUPPORTS_TBB 0
425#ifndef PLATFORM_SUPPORTS_BORDERLESS_WINDOW
426 #define PLATFORM_SUPPORTS_BORDERLESS_WINDOW 0
429#ifndef PLATFORM_MAX_CACHED_SYNC_FILE_HANDLES_PER_GENERIC_ASYNC_FILE_HANDLE
430 #define PLATFORM_MAX_CACHED_SYNC_FILE_HANDLES_PER_GENERIC_ASYNC_FILE_HANDLE 4
433#ifndef PLATFORM_FORCE_SINGLE_SYNC_FILE_HANDLE_PER_GENERIC_ASYNC_FILE_HANDLE
434 #define PLATFORM_FORCE_SINGLE_SYNC_FILE_HANDLE_PER_GENERIC_ASYNC_FILE_HANDLE 0
437#ifndef PLATFORM_SUPPORTS_JEMALLOC
438 #define PLATFORM_SUPPORTS_JEMALLOC 0
441#ifndef PLATFORM_SUPPORTS_MIMALLOC
442 #define PLATFORM_SUPPORTS_MIMALLOC 0
445#ifndef PLATFORM_CAN_SUPPORT_EDITORONLY_DATA
446 #define PLATFORM_CAN_SUPPORT_EDITORONLY_DATA 0
449#ifndef PLATFORM_SUPPORTS_NAMED_PIPES
450 #define PLATFORM_SUPPORTS_NAMED_PIPES 0
453#ifndef PLATFORM_USES_FIXED_RHI_CLASS
454 #define PLATFORM_USES_FIXED_RHI_CLASS 0
457#ifndef PLATFORM_USES_FIXED_GMalloc_CLASS
458 #define PLATFORM_USES_FIXED_GMalloc_CLASS 0
461#ifndef PLATFORM_USES_STACKBASED_MALLOC_CRASH
462 #define PLATFORM_USES_STACKBASED_MALLOC_CRASH 0
465#ifndef PLATFORM_SUPPORTS_MULTIPLE_NATIVE_WINDOWS
466 #define PLATFORM_SUPPORTS_MULTIPLE_NATIVE_WINDOWS 1
469#ifndef PLATFORM_HAS_TOUCH_MAIN_SCREEN
470 #define PLATFORM_HAS_TOUCH_MAIN_SCREEN 0
473#ifndef PLATFORM_SUPPORTS_STACK_SYMBOLS
474 #define PLATFORM_SUPPORTS_STACK_SYMBOLS 0
477#ifndef PLATFORM_HAS_128BIT_ATOMICS
478 #define PLATFORM_HAS_128BIT_ATOMICS 0
481#ifndef PLATFORM_USES_ANSI_STRING_FOR_EXTERNAL_PROFILING
482 #define PLATFORM_USES_ANSI_STRING_FOR_EXTERNAL_PROFILING 1
485#ifndef PLATFORM_IMPLEMENTS_BeginNamedEventStatic
486 #define PLATFORM_IMPLEMENTS_BeginNamedEventStatic 0
489#ifndef PLATFORM_HAS_UMA
490 #define PLATFORM_HAS_UMA 0
493#ifndef PLATFORM_NUM_AUDIODECOMPRESSION_PRECACHE_BUFFERS
494 #define PLATFORM_NUM_AUDIODECOMPRESSION_PRECACHE_BUFFERS 2
497#ifndef PLATFORM_SUPPORTS_EARLY_MOVIE_PLAYBACK
498 #define PLATFORM_SUPPORTS_EARLY_MOVIE_PLAYBACK 0
501#ifndef PLATFORM_UI_HAS_MOBILE_SCROLLBARS
502 #define PLATFORM_UI_HAS_MOBILE_SCROLLBARS 0
505#ifndef PLATFORM_UI_NEEDS_TOOLTIPS
506 #define PLATFORM_UI_NEEDS_TOOLTIPS 1
509#ifndef PLATFORM_UI_NEEDS_FOCUS_OUTLINES
510 #define PLATFORM_UI_NEEDS_FOCUS_OUTLINES 1
513#ifndef PLATFORM_LIMIT_MOBILE_BONE_MATRICES
514 #define PLATFORM_LIMIT_MOBILE_BONE_MATRICES 0
517#ifndef PLATFORM_WEAKLY_CONSISTENT_MEMORY
518 #define PLATFORM_WEAKLY_CONSISTENT_MEMORY PLATFORM_CPU_ARM_FAMILY
521#ifndef PLATFORM_NEEDS_RHIRESOURCELIST
522 #define PLATFORM_NEEDS_RHIRESOURCELIST 1
525#ifndef PLATFORM_USE_FULL_TASK_GRAPH
526 #define PLATFORM_USE_FULL_TASK_GRAPH 1
529#ifndef PLATFORM_USE_ANSI_POSIX_MALLOC
530 #define PLATFORM_USE_ANSI_POSIX_MALLOC 0
533#ifndef PLATFORM_USES__ALIGNED_MALLOC
534 #define PLATFORM_USES__ALIGNED_MALLOC 0
537#ifndef PLATFORM_USE_ANSI_MEMALIGN
538 #define PLATFORM_USE_ANSI_MEMALIGN 0
541#ifndef PLATFORM_IS_ANSI_MALLOC_THREADSAFE
542 #define PLATFORM_IS_ANSI_MALLOC_THREADSAFE 0
545#ifndef PLATFORM_SUPPORTS_ASYMMETRIC_FENCES
546 #define PLATFORM_SUPPORTS_ASYMMETRIC_FENCES 0
549#ifndef PLATFORM_SUPPORTS_OPUS_CODEC
550 #define PLATFORM_SUPPORTS_OPUS_CODEC 1
553#ifndef PLATFORM_SUPPORTS_VORBIS_CODEC
554 #define PLATFORM_SUPPORTS_VORBIS_CODEC 1
557#ifndef PLATFORM_SUPPORTS_VORBIS_ENCODE
558 #define PLATFORM_SUPPORTS_VORBIS_ENCODE PLATFORM_SUPPORTS_VORBIS_CODEC
561#ifndef PLATFORM_USE_MINIMAL_HANG_DETECTION
562 #define PLATFORM_USE_MINIMAL_HANG_DETECTION 0
565#ifndef PLATFORM_USE_GENERIC_STRING_IMPLEMENTATION
566 #define PLATFORM_USE_GENERIC_STRING_IMPLEMENTATION 1
569#ifndef PLATFORM_ALLOW_ALLOCATIONS_IN_FASYNCWRITER_SERIALIZEBUFFERTOARCHIVE
570 #define PLATFORM_ALLOW_ALLOCATIONS_IN_FASYNCWRITER_SERIALIZEBUFFERTOARCHIVE 1
573#ifndef PLATFORM_HAS_FPlatformVirtualMemoryBlock
574 #define PLATFORM_HAS_FPlatformVirtualMemoryBlock 1
577#ifndef PLATFORM_BYPASS_PAK_PRECACHE
578 #define PLATFORM_BYPASS_PAK_PRECACHE 0
581#ifndef PLATFORM_SUPPORTS_FLIP_TRACKING
582 #define PLATFORM_SUPPORTS_FLIP_TRACKING 0
585#ifndef PLATFORM_USE_SHOWFLAGS_ALWAYS_BITFIELD
586 #define PLATFORM_USE_SHOWFLAGS_ALWAYS_BITFIELD 1
589#ifndef PLATFORM_USE_GENERIC_LAUNCH_IMPLEMENTATION
590 #define PLATFORM_USE_GENERIC_LAUNCH_IMPLEMENTATION 0
593#ifndef PLATFORM_USES_FIXED_HDR_SETTING
594 #define PLATFORM_USES_FIXED_HDR_SETTING 0
597#ifndef PLATFORM_MANAGES_HDR_SETTING
598 #define PLATFORM_MANAGES_HDR_SETTING 0
601#ifndef PLATFORM_SUPPORTS_COLORIZED_OUTPUT_DEVICE
602 #define PLATFORM_SUPPORTS_COLORIZED_OUTPUT_DEVICE PLATFORM_DESKTOP
605#ifndef PLATFORM_USE_PLATFORM_FILE_MANAGED_STORAGE_WRAPPER
606 #define PLATFORM_USE_PLATFORM_FILE_MANAGED_STORAGE_WRAPPER 0
609#ifndef PLATFORM_HAS_DIRECT_TEXTURE_MEMORY_ACCESS
610 #define PLATFORM_HAS_DIRECT_TEXTURE_MEMORY_ACCESS 0
613#ifndef PLATFORM_DIRECT_TEXTURE_MEMORY_ACCESS_LOCK_MODE
614 #define PLATFORM_DIRECT_TEXTURE_MEMORY_ACCESS_LOCK_MODE RLM_ReadOnly
617#ifndef PLATFORM_USE_REPORT_ENSURE
618 #define PLATFORM_USE_REPORT_ENSURE PLATFORM_DESKTOP
621#ifndef PLATFORM_USE_FALLBACK_PSO
622 #define PLATFORM_USE_FALLBACK_PSO 0
625#ifndef PLATFORM_SUPPORTS_PSO_PRECACHING
626 #define PLATFORM_SUPPORTS_PSO_PRECACHING (!UE_SERVER)
629#ifndef PLATFORM_SUPPORTS_DYNAMIC_SHADER_PRELOADING
630#define PLATFORM_SUPPORTS_DYNAMIC_SHADER_PRELOADING (!UE_SERVER)
633#ifndef PLATFORM_USES_UNFAIR_LOCKS
634 #define PLATFORM_USES_UNFAIR_LOCKS 0
637#ifndef PLATFORM_HAS_FENV_H
638 #define PLATFORM_HAS_FENV_H 1
641#ifndef PLATFORM_REQUIRES_TYPELESS_RESOURCE_DISCARD_WORKAROUND
642 #define PLATFORM_REQUIRES_TYPELESS_RESOURCE_DISCARD_WORKAROUND 0
645#ifndef PLATFORM_CONSOLE_DYNAMIC_LINK
646 #define PLATFORM_CONSOLE_DYNAMIC_LINK 0
649#ifndef PLATFORM_MAX_UNIFORM_BUFFER_RANGE
650 #define PLATFORM_MAX_UNIFORM_BUFFER_RANGE (16u*1024u)
653#ifndef PLATFORM_IMPLEMENTS_BATCH_FILE_DELETE
654 #define PLATFORM_IMPLEMENTS_BATCH_FILE_DELETE 0
657#ifndef PLATFORM_WRITES_ARE_SLOW
658 #define PLATFORM_WRITES_ARE_SLOW 0
661#ifndef PLATFORM_FORCE_UE_LOCK_USAGE
662 #define PLATFORM_FORCE_UE_LOCK_USAGE 0
665#ifndef PLATFORM_BREAK_IS_EXPRESSION
666 #define PLATFORM_BREAK_IS_EXPRESSION 0
670#define PLATFORM_HAS_THREADSAFE_RHIGetRenderQueryResult #
671#define PLATFORM_SUPPORTS_RHI_THREAD #
672#define PLATFORM_RHI_USES_CONTEXT_OBJECT #
673#define PLATFORM_SUPPORTS_PARALLEL_RHI_EXECUTE #
679#define PLATFORM_CONSOLE (#)
682#define PLATFORM_32BITS (!PLATFORM_64BITS)
684 #error "UE only supports 64-bit platforms"
688#define PLATFORM_VTABLE_AT_END_OF_CLASS 0
703 #define FORCENOINLINE
706 #define RESTRICT __restrict
708#ifndef CALLSITE_FORCEINLINE
709 #define CALLSITE_FORCEINLINE
711#ifndef UE_DEFINE_FORCEINLINE_HINT_TO_INLINE
712 #define UE_DEFINE_FORCEINLINE_HINT_TO_INLINE 0
720#if UE_DEFINE_FORCEINLINE_HINT_TO_INLINE
721 #define UE_FORCEINLINE_HINT inline
723 #define UE_FORCEINLINE_HINT FORCEINLINE
747 #define UE_REWRITE UE_NODEBUG FORCEINLINE
752#if !defined(UE_NODISCARD_CTOR) && defined(__has_cpp_attribute)
753 #if __has_cpp_attribute(nodiscard)
754 #if (defined(_MSC_VER) && _MSC_VER >= 1924) || (defined(__clang__) && __clang_major__ >= 10)
755 #define UE_NODISCARD_CTOR [[nodiscard]]
760#ifndef UE_NODISCARD_CTOR
761 #define UE_NODISCARD_CTOR
767 #define UE_SELECT_ANY __declspec(selectany)
769 #define UE_SELECT_ANY __attribute__((selectany))
774#if defined(__cpp_consteval)
775 #define UE_CONSTEVAL consteval
777 #define UE_CONSTEVAL constexpr
782#if defined(__cpp_if_consteval)
783 #define UE_IF_CONSTEVAL if consteval
784 #define UE_IF_NOT_CONSTEVAL if !consteval
786 #define UE_IF_CONSTEVAL if (__builtin_is_constant_evaluated())
787 #define UE_IF_NOT_CONSTEVAL if (!__builtin_is_constant_evaluated())
791#if !defined(UE_NO_UNIQUE_ADDRESS) && defined(__has_cpp_attribute)
792 #if __has_cpp_attribute(msvc::no_unique_address)
793 #define UE_NO_UNIQUE_ADDRESS [[msvc::no_unique_address]]
794 #elif __has_cpp_attribute(no_unique_address)
795 #define UE_NO_UNIQUE_ADDRESS [[no_unique_address]]
798#ifndef UE_NO_UNIQUE_ADDRESS
799 #define UE_NO_UNIQUE_ADDRESS
803#ifndef FUNCTION_NON_NULL_RETURN_START
804 #define FUNCTION_NON_NULL_RETURN_START
806#ifndef FUNCTION_NON_NULL_RETURN_END
807 #define FUNCTION_NON_NULL_RETURN_END
811#ifndef UE_LIFETIMEBOUND
812 #define UE_LIFETIMEBOUND
822#ifndef UE_ALLOCATION_FUNCTION
823 #define UE_ALLOCATION_FUNCTION(...)
828 #if defined(__clang__)
829 #define UE_ASSUME(x) __builtin_assume(x)
830 #elif defined(_MSC_VER)
831 #define UE_ASSUME(x) __assume(x)
838#ifndef UE_INTRINSIC_CAST
839 #define UE_INTRINSIC_CAST
844 #if ( defined(__clang__) || defined(__GNUC__) )
845 #define LIKELY(x) __builtin_expect(!!(x), 1)
848 #define LIKELY(x) (!!(x))
853 #if ( defined(__clang__) || defined(__GNUC__) )
854 #define UNLIKELY(x) __builtin_expect(!!(x), 0)
857 #define UNLIKELY(x) (!!(x))
862#ifndef PRAGMA_DISABLE_OPTIMIZATION_ACTUAL
863 #define PRAGMA_DISABLE_OPTIMIZATION_ACTUAL
864 #define PRAGMA_ENABLE_OPTIMIZATION_ACTUAL
868#ifndef DISABLE_FUNCTION_OPTIMIZATION
869 #define DISABLE_FUNCTION_OPTIMIZATION
873#define BEGIN_FUNCTION_BUILD_OPTIMIZATION UE_DISABLE_OPTIMIZATION_SHIP
874#define END_FUNCTION_BUILD_OPTIMIZATION UE_ENABLE_OPTIMIZATION_SHIP
876#ifndef FORCEINLINE_DEBUGGABLE_ACTUAL
877 #define FORCEINLINE_DEBUGGABLE_ACTUAL inline
880#ifndef DECLARE_UINT64
881 #define DECLARE_UINT64(x) x##ULL
885#ifndef TYPENAME_OUTSIDE_TEMPLATE
886 #define TYPENAME_OUTSIDE_TEMPLATE typename
901#ifndef LINE_TERMINATOR
902 #define LINE_TERMINATOR TEXT("\n")
904#ifndef LINE_TERMINATOR_ANSI
905 #define LINE_TERMINATOR_ANSI "\n"
921 #define MSVC_PRAGMA(...)
926#ifndef PRAGMA_DISABLE_INLINING
927 #define PRAGMA_DISABLE_INLINING
928 #define PRAGMA_ENABLE_INLINING
932#ifndef FLUSH_CACHE_LINE
933 #define FLUSH_CACHE_LINE(x)
937#ifndef PLATFORM_CACHE_LINE_SIZE
938 #define PLATFORM_CACHE_LINE_SIZE 64
943 #define MSC_FORMAT_DIAGNOSTIC_HELPER_2(x) #x
944 #define MSC_FORMAT_DIAGNOSTIC_HELPER(x) MSC_FORMAT_DIAGNOSTIC_HELPER_2(x)
945 #define COMPILE_ERROR(x) __pragma(message(__FILE__ "(" MSC_FORMAT_DIAGNOSTIC_HELPER(__LINE__) "): error: " x))
946 #if UE_WARNINGS_AS_ERRORS
947 #define COMPILE_WARNING(x) COMPILE_ERROR(x)
949 #define COMPILE_WARNING(x) __pragma(message(__FILE__ "(" MSC_FORMAT_DIAGNOSTIC_HELPER(__LINE__) "): warning: " x))
952 #define GCC_DIAGNOSTIC_HELPER(x) _Pragma(#x)
953 #define COMPILE_ERROR(x) GCC_DIAGNOSTIC_HELPER(GCC error x)
954 #if UE_WARNINGS_AS_ERRORS
955 #define COMPILE_WARNING(x) COMPILE_ERROR(x)
957 #define COMPILE_WARNING(x) GCC_DIAGNOSTIC_HELPER(GCC warning x)
962#ifndef PLATFORM_CODE_SECTION
963 #define PLATFORM_CODE_SECTION(Name)
971 #if defined(_MSC_VER)
972 #define UE_COLD __declspec(noinline)
973 #elif defined(__GNUC__) || defined(__clang__) || defined(__llvm__)
974 #define UE_COLD __attribute__((cold))
982#ifndef OPERATOR_NEW_INLINE
983 #define OPERATOR_NEW_INLINE FORCEINLINE
986#ifndef OPERATOR_NEW_THROW_SPEC
987 #define OPERATOR_NEW_THROW_SPEC
989#ifndef OPERATOR_DELETE_THROW_SPEC
990 #define OPERATOR_DELETE_THROW_SPEC
992#ifndef OPERATOR_NEW_NOTHROW_SPEC
993 #define OPERATOR_NEW_NOTHROW_SPEC throw()
995#ifndef OPERATOR_DELETE_NOTHROW_SPEC
996 #define OPERATOR_DELETE_NOTHROW_SPEC throw()
999#ifndef checkAtCompileTime
1000 #define checkAtCompileTime(expr, msg) \
1001 EMIT_DEPRECATED_WARNING_MESSAGE("checkAtCompileTime is deprecated. Please use static_assert instead.") \
1002 static_assert(expr, #msg)
1012#ifndef BUILD_EMBEDDED_APP
1013 #define BUILD_EMBEDDED_APP 0
1015#ifndef FAST_BOOT_HACKS
1016 #define FAST_BOOT_HACKS 0
1020#if PLATFORM_COMPILER_HAS_TCHAR_WMAIN
1021#define INT32_MAIN_INT32_ARGC_TCHAR_ARGV() int32 wmain(int32 ArgC, TCHAR* ArgV[])
1023#define INT32_MAIN_INT32_ARGC_TCHAR_ARGV() \
1024int32 tchar_main(int32 ArgC, TCHAR* ArgV[]); \
1025int32 main(int32 ArgC, ANSICHAR* Utf8ArgV[]) \
1027 TCHAR** ArgV = new TCHAR*[ArgC]; \
1028 for (int32 a = 0; a < ArgC; a++) \
1030 FUTF8ToTCHAR ConvertFromUtf8(Utf8ArgV[a]); \
1031 ArgV[a] = new TCHAR[ConvertFromUtf8.Length() + 1]; \
1032 FCString::Strncpy(ArgV[a], ConvertFromUtf8.Get(), ConvertFromUtf8.Length() + 1); \
1034 int32 Result = tchar_main(ArgC, ArgV); \
1035 for (int32 a = 0; a < ArgC; a++) \
1042int32 tchar_main(int32 ArgC, TCHAR* ArgV[])
1048#ifndef UE_FORCE_CRASH_AT_OFFSET
1049 #define UE_FORCE_CRASH_AT_OFFSET(x) *(int32 *)x = 123
1052#ifndef UE_FORCE_CRASH
1053 #define UE_FORCE_CRASH() UE_FORCE_CRASH_AT_OFFSET(3)
1056#ifndef UE_WORKAROUND_CLANG_SVE_LTO_BUGS
1057# define UE_WORKAROUND_CLANG_SVE_LTO_BUGS 0
1061#if UE_WORKAROUND_CLANG_SVE_LTO_BUGS
1062# define UE_NO_PROFILE_SVE_BUG UE_NO_PROFILE_ATTRIBUTE
1064# define UE_NO_PROFILE_SVE_BUG
1164 template <
typename A,
typename B>
1167 template <
typename T>
1170#if PLATFORM_TCHAR_IS_4_BYTES
1171 static_assert(
sizeof(
TCHAR) == 4,
"TCHAR size must be 4 bytes.");
1172#elif PLATFORM_TCHAR_IS_UTF8CHAR
1173 static_assert(
sizeof(
TCHAR) == 1,
"TCHAR size must be 1 byte.");
1175 static_assert(
sizeof(
TCHAR) == 2,
"TCHAR size must be 2 bytes.");
1183 static_assert(!
PLATFORM_64BITS ||
sizeof(
void*) == 8,
"Pointer size is 64bit, but pointers are short.");
1184 static_assert(
PLATFORM_64BITS ||
sizeof(
void*) == 4,
"Pointer size is 32bit, but pointers are long.");
1186 static_assert(
char(-1) <
char(0),
"Unsigned char type test failed.");
1190#if !PLATFORM_UCS2CHAR_IS_UTF16CHAR
1202#if PLATFORM_WIDECHAR_IS_CHAR16
1208 static_assert(
sizeof(
uint8) == 1,
"uint8 type size test failed.");
1209 static_assert(
int32(
uint8(-1)) == 0xFF,
"uint8 type sign test failed.");
1211 static_assert(
sizeof(
uint16) == 2,
"uint16 type size test failed.");
1212 static_assert(
int32(
uint16(-1)) == 0xFFFF,
"uint16 type sign test failed.");
1214 static_assert(
sizeof(
uint32) == 4,
"uint32 type size test failed.");
1215 static_assert(
int64(
uint32(-1)) ==
int64(0xFFFFFFFF),
"uint32 type sign test failed.");
1217 static_assert(
sizeof(
uint64) == 8,
"uint64 type size test failed.");
1218 static_assert(
uint64(-1) >
uint64(0),
"uint64 type sign test failed.");
1221 static_assert(
sizeof(
int8) == 1,
"int8 type size test failed.");
1222 static_assert(
int32(
int8(-1)) == -1,
"int8 type sign test failed.");
1224 static_assert(
sizeof(
int16) == 2,
"int16 type size test failed.");
1225 static_assert(
int32(
int16(-1)) == -1,
"int16 type sign test failed.");
1227 static_assert(
sizeof(
int32) == 4,
"int32 type size test failed.");
1228 static_assert(
int64(
int32(-1)) ==
int64(-1),
"int32 type sign test failed.");
1230 static_assert(
sizeof(
int64) == 8,
"int64 type size test failed.");
1231 static_assert(
int64(-1) <
int64(0),
"int64 type sign test failed.");
1233 static_assert(
sizeof(
ANSICHAR) == 1,
"ANSICHAR type size test failed.");
1234 static_assert(
int32(
ANSICHAR(-1)) == -1,
"ANSICHAR type sign test failed.");
1236 static_assert(
sizeof(
WIDECHAR) == 2 ||
sizeof(
WIDECHAR) == 4,
"WIDECHAR type size test failed.");
1238 static_assert(
sizeof(
UTF8CHAR) == 1,
"UTF8CHAR type size test failed.");
1239 static_assert(
sizeof(
UCS2CHAR) == 2,
"UCS2CHAR type size test failed.");
1240 static_assert(
sizeof(
UTF16CHAR) == 2,
"UTF16CHAR type size test failed.");
1241 static_assert(
sizeof(
UTF32CHAR) == 4,
"UTF32CHAR type size test failed.");
1243 static_assert(
sizeof(
PTRINT) ==
sizeof(
void *),
"PTRINT type size test failed.");
1244 static_assert(
PTRINT(-1) <
PTRINT(0),
"PTRINT type sign test failed.");
1246 static_assert(
sizeof(
UPTRINT) ==
sizeof(
void *),
"UPTRINT type size test failed.");
1247 static_assert(
UPTRINT(-1) >
UPTRINT(0),
"UPTRINT type sign test failed.");
1249 static_assert(
sizeof(
SIZE_T) ==
sizeof(
void *),
"SIZE_T type size test failed.");
1250 static_assert(
SIZE_T(-1) >
SIZE_T(0),
"SIZE_T type sign test failed.");
1254#include COMPILED_PLATFORM_HEADER(PlatformCompilerSetup.h)
1257#define UTF8TEXT_PASTE(x) u8 ## x
1258#define UTF16TEXT_PASTE(x) u ## x
1259#if PLATFORM_WIDECHAR_IS_CHAR16
1260 #define WIDETEXT_PASTE(x) UTF16TEXT_PASTE(x)
1262 #define WIDETEXT_PASTE(x) L ## x
1266#if !defined(TEXT) && !UE_BUILD_DOCS
1267 #if PLATFORM_TCHAR_IS_UTF8CHAR
1268 #define TEXT_PASTE(x) UTF8TEXT(x)
1270 #define TEXT_PASTE(x) WIDETEXT(x)
1272 #define TEXT(x) TEXT_PASTE(x)
1275#define UE_UTF8TEXT_IS_CONSTEXPR 1 UE_DEPRECATED_MACRO(5.7, "UE_UTF8TEXT_IS_CONSTEXPR has been deprecated.")
1279 template <
typename CharType>
1282 static_assert(
sizeof(CharType) == 0,
"Unsupported char type passed to CHARTEXT");
1286#define UTF8TEXT(x) UTF8TEXT_PASTE(x)
1287#define UTF16TEXT(x) UTF16TEXT_PASTE(x)
1288#define WIDETEXT(str) WIDETEXT_PASTE(str)
1291#define CHARTEXT(CharType, x) \
1293 []() -> decltype(auto) \
1296 using UnqualifiedCharType = std::remove_cv_t<CharType>; \
1297 if constexpr (std::is_same_v<UnqualifiedCharType, ANSICHAR>) \
1301 else if constexpr (std::is_same_v<UnqualifiedCharType, TCHAR>) \
1305 else if constexpr (std::is_same_v<UnqualifiedCharType, UTF8CHAR>) \
1307 return UTF8TEXT(x); \
1312 UE::Core::Private::CharTextStaticAssert<CharType>(); \
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition Platform.h:1163
constexpr bool TAreTypesEqual_V
Definition Platform.h:1165
constexpr bool TAreTypesEqual_V< T, T >
Definition Platform.h:1168
implementation
Definition PlayInEditorLoadingScope.h:8
void CharTextStaticAssert()
Definition Platform.h:1280
WIDECHAR TCHAR
Definition AndroidPlatform.h:25
char16_t WIDECHAR
Definition AndroidPlatform.h:24