| /* |
| * Copyright (C) 2006-2025 Apple Inc. All rights reserved. |
| * Copyright (C) 2007-2009 Torch Mobile, Inc. |
| * Copyright (C) 2010, 2011 Research In Motion Limited. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * |
| * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY |
| * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR |
| * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
| * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
| * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
| * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| #pragma once |
| |
| #ifndef WTF_PLATFORM_GUARD_AGAINST_INDIRECT_INCLUSION |
| #error "Please #include <wtf/Platform.h> instead of this file directly." |
| #endif |
| |
| |
| /* USE() - use a particular third-party library or optional OS service */ |
| #define USE(WTF_FEATURE) (defined USE_##WTF_FEATURE && USE_##WTF_FEATURE) |
| |
| |
| #if PLATFORM(COCOA) |
| #if defined __has_include && __has_include(<CoreFoundation/CFPriv.h>) |
| #define USE_APPLE_INTERNAL_SDK 1 |
| #endif |
| #endif |
| |
| /* Export macro support. Detects the attributes available for shared library symbol export |
| decorations. */ |
| #if OS(WINDOWS) || (COMPILER_HAS_CLANG_DECLSPEC(dllimport) && COMPILER_HAS_CLANG_DECLSPEC(dllexport)) |
| #define USE_DECLSPEC_ATTRIBUTE 1 |
| #elif defined(__GNUC__) |
| #define USE_VISIBILITY_ATTRIBUTE 1 |
| #endif |
| |
| #if PLATFORM(COCOA) |
| #define USE_CG 1 |
| #endif |
| |
| #if PLATFORM(COCOA) |
| #define USE_CORE_TEXT 1 |
| #endif |
| |
| #if PLATFORM(COCOA) |
| #define USE_CA 1 |
| #endif |
| |
| #if PLATFORM(COCOA) |
| #define USE_CORE_IMAGE 1 |
| #endif |
| |
| #if PLATFORM(GTK) || PLATFORM(WPE) |
| #define USE_GLIB 1 |
| #endif |
| |
| #if ((PLATFORM(GTK) || PLATFORM(WPE)) && !USE(SKIA)) |
| #define USE_FREETYPE 1 |
| #endif |
| |
| #if PLATFORM(GTK) || PLATFORM(WPE) |
| #define USE_HARFBUZZ 1 |
| #define USE_FONT_VARIANT_VIA_FEATURES 1 |
| #endif |
| |
| #if PLATFORM(GTK) || PLATFORM(WPE) |
| #define USE_SOUP 1 |
| #endif |
| |
| #if USE(COORDINATED_GRAPHICS) && USE(THEME_ADWAITA) |
| #define USE_COORDINATED_GRAPHICS_ASYNC_SCROLLBAR 1 |
| #endif |
| |
| #if PLATFORM(COCOA) |
| #define USE_CF 1 |
| #endif |
| |
| #if PLATFORM(COCOA) || (PLATFORM(GTK) || PLATFORM(WPE)) |
| #define USE_FILE_LOCK 1 |
| #endif |
| |
| #if PLATFORM(COCOA) |
| #define USE_FOUNDATION 1 |
| #endif |
| |
| #if PLATFORM(MAC) |
| #define USE_APPKIT 1 |
| #endif |
| |
| #if PLATFORM(MAC) || PLATFORM(IOS) || PLATFORM(VISION) |
| #define USE_PASSKIT 1 |
| #endif |
| |
| #if PLATFORM(MAC) |
| #define USE_PLUGIN_HOST_PROCESS 1 |
| #endif |
| |
| #if PLATFORM(IOS_FAMILY) |
| #define USE_UIKIT_EDITING 1 |
| #endif |
| |
| #if PLATFORM(IOS_FAMILY) |
| #define USE_WEB_THREAD 1 |
| #endif |
| |
| #if OS(UNIX) |
| #define USE_PTHREADS 1 |
| #endif |
| |
| #if OS(DARWIN) && !PLATFORM(GTK) |
| #define USE_ACCELERATE 1 |
| #endif |
| |
| #if CPU(REGISTER64) |
| #define USE_JSVALUE64 1 |
| #else |
| #define USE_JSVALUE32_64 1 |
| #endif |
| |
| // FIXME: this should instead be based on SIZE_MAX == UINT64_MAX |
| // But this requires including <cstdint> and Platform.h is included in all kind of weird places, including non-cpp files |
| // And in practice CPU(ADDRESS64) is equivalent on all platforms we support (verified by static_asserts in ArrayBuffer.h) |
| #if CPU(ADDRESS64) |
| #define USE_LARGE_TYPED_ARRAYS 1 |
| #else |
| #define USE_LARGE_TYPED_ARRAYS 0 |
| #endif |
| |
| #if USE(JSVALUE64) |
| /* FIXME: Enable BIGINT32 optimization again after we ensure Speedometer2 and JetStream2 regressions are fixed. */ |
| /* https://bugs.webkit.org/show_bug.cgi?id=214777 */ |
| #define USE_BIGINT32 0 |
| #endif |
| |
| /* FIXME: This name should be more specific if it is only for use with CallFrame* */ |
| /* Use __builtin_frame_address(1) to get CallFrame* */ |
| #if CPU(ARM64) || CPU(X86_64) |
| #define USE_BUILTIN_FRAME_ADDRESS 1 |
| #endif |
| |
| #if OS(DARWIN) && CPU(ARM64) && HAVE(REMAP_JIT) |
| #define USE_EXECUTE_ONLY_JIT_WRITE_FUNCTION 1 |
| #endif |
| |
| #if PLATFORM(IOS) || PLATFORM(VISION) |
| #define USE_QUICK_LOOK 1 |
| #endif |
| |
| #if PLATFORM(IOS) || PLATFORM(VISION) |
| #define USE_SYSTEM_PREVIEW 1 |
| #endif |
| |
| #if PLATFORM(COCOA) |
| #define USE_AVFOUNDATION 1 |
| #endif |
| |
| #if PLATFORM(COCOA) |
| #define USE_PROTECTION_SPACE_AUTH_CALLBACK 1 |
| #endif |
| |
| #if PLATFORM(COCOA) |
| #define USE_METAL 1 |
| #endif |
| |
| #if PLATFORM(GTK) || PLATFORM(WPE) |
| #define USE_UNIX_DOMAIN_SOCKETS 1 |
| #endif |
| |
| #if !defined(USE_IMLANG_FONT_LINK2) |
| #define USE_IMLANG_FONT_LINK2 1 |
| #endif |
| |
| #if PLATFORM(COCOA) || PLATFORM(GTK) |
| #define USE_UNIFIED_TEXT_CHECKING 1 |
| #endif |
| |
| #if PLATFORM(MAC) |
| #define USE_AUTOMATIC_TEXT_REPLACEMENT 1 |
| #endif |
| |
| #if PLATFORM(MAC) |
| /* Some platforms provide UI for suggesting autocorrection. */ |
| #define USE_AUTOCORRECTION_PANEL 1 |
| #endif |
| |
| #if PLATFORM(COCOA) |
| /* Some platforms use spelling and autocorrection markers to provide visual cue. On such platform, if word with marker is edited, we need to remove the marker. */ |
| #define USE_MARKER_REMOVAL_UPON_EDITING 1 |
| #endif |
| |
| #if PLATFORM(MAC) |
| #define USE_INSERTION_UNDO_GROUPING 1 |
| #endif |
| |
| #if PLATFORM(COCOA) |
| #define USE_AUDIO_SESSION 1 |
| #endif |
| |
| #if PLATFORM(COCOA) |
| #define USE_MEDIATOOLBOX 1 |
| #endif |
| |
| #if PLATFORM(COCOA) |
| #define USE_OS_LOG 1 |
| #endif |
| |
| #if PLATFORM(COCOA) |
| #define USE_OS_STATE 1 |
| #endif |
| |
| #if !defined(WTF_DEFAULT_EVENT_LOOP) |
| #define WTF_DEFAULT_EVENT_LOOP 1 |
| #endif |
| |
| #if WTF_DEFAULT_EVENT_LOOP |
| #if USE(GLIB) |
| /* Use GLib's event loop abstraction. Primarily GTK port uses it. */ |
| #define USE_GLIB_EVENT_LOOP 1 |
| #elif OS(WINDOWS) |
| /* Use Windows message pump abstraction. */ |
| #define USE_WINDOWS_EVENT_LOOP 1 |
| #elif PLATFORM(COCOA) |
| /* OS X and IOS. Use CoreFoundation & GCD abstraction. */ |
| #define USE_COCOA_EVENT_LOOP 1 |
| #else |
| #define USE_GENERIC_EVENT_LOOP 1 |
| #endif |
| #endif |
| |
| #if PLATFORM(COCOA) |
| #define USE_DICTATION_ALTERNATIVES 1 |
| #endif |
| |
| #if (PLATFORM(MAC) && USE(APPLE_INTERNAL_SDK)) || PLATFORM(IOS_FAMILY) |
| #define USE_SOURCE_APPLICATION_AUDIT_DATA 1 |
| #endif |
| |
| /* The override isn't needed on iOS family, as the default behavior is to not sniff. */ |
| #if PLATFORM(MAC) |
| #define USE_CFNETWORK_CONTENT_ENCODING_SNIFFING_OVERRIDE 1 |
| #endif |
| |
| #if PLATFORM(IOS) || PLATFORM(MACCATALYST) || PLATFORM(VISION) || PLATFORM(APPLETV) |
| #define USE_UICONTEXTMENU 1 |
| #endif |
| |
| #if PLATFORM(IOS_FAMILY) || (!USE(SYSTEM_MALLOC) && (OS(LINUX) && (PLATFORM(GTK) || PLATFORM(WPE)))) |
| #define USE_BMALLOC_MEMORY_FOOTPRINT_API 1 |
| #endif |
| |
| #if !defined(USE_PLATFORM_REGISTERS_WITH_PROFILE) && OS(DARWIN) && CPU(ARM64) && defined(__LP64__) |
| #define USE_PLATFORM_REGISTERS_WITH_PROFILE 1 |
| #endif |
| |
| #if OS(DARWIN) && !USE(PLATFORM_REGISTERS_WITH_PROFILE) && CPU(ARM64) |
| #define USE_DARWIN_REGISTER_MACROS 1 |
| #endif |
| |
| // Use OS(MACOS) to pick up JSCOnly ports on Mac. |
| #if OS(MACOS) || PLATFORM(MACCATALYST) || (PLATFORM(IOS_FAMILY) && TARGET_OS_SIMULATOR) |
| #if USE(APPLE_INTERNAL_SDK) |
| /* Always use the macro on internal builds */ |
| #define USE_PTHREAD_JIT_PERMISSIONS_API 0 |
| #else |
| #define USE_PTHREAD_JIT_PERMISSIONS_API 1 |
| #endif |
| #endif |
| |
| #if PLATFORM(COCOA) |
| #define USE_FONT_VARIANT_VIA_FEATURES 1 |
| #define USE_OPENXR 0 |
| #if !defined(HAVE_WEBXR_INTERNALS) && !HAVE(WEBXR_INTERNALS) |
| #if PLATFORM(IOS) && HAVE(ARKIT) |
| #define USE_ARKITXR_IOS 1 |
| #else |
| #define USE_EMPTYXR 1 |
| #endif |
| #endif |
| #else |
| #if !defined(HAVE_WEBXR_INTERNALS) && !HAVE(WEBXR_INTERNALS) |
| #if !USE(OPENXR) |
| #define USE_EMPTYXR 1 |
| #endif |
| #endif |
| #endif |
| |
| #if PLATFORM(IOS_FAMILY) |
| #define USE_SANDBOX_EXTENSIONS_FOR_CACHE_AND_TEMP_DIRECTORY_ACCESS 1 |
| #endif |
| |
| #if !defined(USE_TZONE_MALLOC) |
| #if (CPU(ARM64) || CPU(X86_64)) && OS(DARWIN) && (__SIZEOF_POINTER__ == 8) |
| #define USE_TZONE_MALLOC 1 |
| #else |
| #define USE_TZONE_MALLOC 0 |
| #endif |
| #endif |
| |
| #if !defined(USE_PROTECTED_JIT) |
| #if CPU(ADDRESS64) && OS(DARWIN) && USE(APPLE_INTERNAL_SDK) |
| #define USE_PROTECTED_JIT 0 |
| #else |
| #define USE_PROTECTED_JIT 0 |
| #endif |
| #endif |
| |
| #if PLATFORM(IOS_FAMILY) || (USE(APPLE_INTERNAL_SDK) && PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 130300) |
| #define USE_RUNNINGBOARD 1 |
| #endif |
| |
| #if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 140000) |
| #define USE_NSPRESENTATIONSTATE 1 |
| #endif |
| |
| #if !defined(USE_MEDIAPARSERD) && (PLATFORM(IOS) || PLATFORM(VISION)) |
| #define USE_MEDIAPARSERD 1 |
| #endif |
| |
| #if !defined(USE_AVIF) |
| #define USE_AVIF 0 |
| #endif |
| |
| #if PLATFORM(COCOA) |
| #define USE_GRAPHICS_CONTEXT_FILTERS 1 |
| #endif |
| |
| #if PLATFORM(COCOA) || USE(GSTREAMER) |
| #define USE_CONCATENATED_IMPULSE_RESPONSES 1 |
| #endif |
| |
| #if PLATFORM(IOS_FAMILY) && !PLATFORM(APPLETV) |
| #define USE_POPOVER_PRESENTATION_FOR_DATE_PICKER 1 |
| #define USE_UITOOLBAR_FOR_DATE_PICKER_ACCESSORY_VIEW 1 |
| #endif |
| |
| #if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED < 150000) \ |
| || ((PLATFORM(IOS) || PLATFORM(MACCATALYST)) && __IPHONE_OS_VERSION_MIN_REQUIRED < 180000) \ |
| || (PLATFORM(APPLETV) && __TV_OS_VERSION_MIN_REQUIRED < 180000) \ |
| || (PLATFORM(WATCHOS) && __WATCH_OS_VERSION_MIN_REQUIRED < 110000) |
| // We can delete this when rdar://problem/104370451 is fixed. |
| #define USE_CORE_TEXT_OPTICAL_SIZING_WORKAROUND 1 |
| #endif |
| |
| #if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED < 140000) \ |
| || ((PLATFORM(IOS) || PLATFORM(MACCATALYST)) && __IPHONE_OS_VERSION_MIN_REQUIRED < 170000) \ |
| || (PLATFORM(APPLETV) && __TV_OS_VERSION_MIN_REQUIRED < 170000) \ |
| || (PLATFORM(WATCHOS) && __WATCH_OS_VERSION_MIN_REQUIRED < 100000) |
| #define USE_METAL_ARGUMENT_ACCESS_ENUMS 1 |
| #endif |
| |
| #if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED < 150000) \ |
| || ((PLATFORM(IOS) || PLATFORM(MACCATALYST)) && __IPHONE_OS_VERSION_MIN_REQUIRED < 180000) \ |
| || (PLATFORM(APPLETV) && __TV_OS_VERSION_MIN_REQUIRED < 180000) \ |
| || (PLATFORM(WATCHOS) && __WATCH_OS_VERSION_MIN_REQUIRED < 110000) |
| #define USE_PKSHIPPINGCONTACTEDITINGMODEENABLED 1 |
| #endif |
| |
| #if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED < 140000) \ |
| || ((PLATFORM(IOS) || PLATFORM(MACCATALYST)) && __IPHONE_OS_VERSION_MIN_REQUIRED < 170000) \ |
| || (PLATFORM(APPLETV) && __TV_OS_VERSION_MIN_REQUIRED < 170000) \ |
| || (PLATFORM(WATCHOS) && __WATCH_OS_VERSION_MIN_REQUIRED < 100000) |
| #define USE_VISION_CPU_ONLY_PROPERTY 1 |
| #endif |
| |
| #if !defined(USE_NSSPELLCHECKER_GRAMMAR_CHECKING_POLICY) \ |
| && (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 140000) |
| #define USE_NSSPELLCHECKER_GRAMMAR_CHECKING_POLICY 1 |
| #endif |
| |
| #if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED < 140000) \ |
| || ((PLATFORM(IOS) || PLATFORM(MACCATALYST)) && __IPHONE_OS_VERSION_MIN_REQUIRED < 170000) \ |
| || (PLATFORM(APPLETV) && __TV_OS_VERSION_MIN_REQUIRED < 170000) \ |
| || (PLATFORM(WATCHOS) && __WATCH_OS_VERSION_MIN_REQUIRED < 100000) |
| #define USE_CORE_TEXT_VARIATIONS_CLAMPING_WORKAROUND 1 |
| #endif |
| |
| #if PLATFORM(IOS) && !PLATFORM(IOS_FAMILY_SIMULATOR) \ |
| && __IPHONE_OS_VERSION_MIN_REQUIRED >= 170400 |
| #if CPU(ARM64) |
| #define USE_INLINE_JIT_PERMISSIONS_API 1 |
| #endif |
| #endif |
| |
| #if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 140000) \ |
| || PLATFORM(IOS) || PLATFORM(MACCATALYST) \ |
| || PLATFORM(WATCHOS) \ |
| || PLATFORM(APPLETV) \ |
| || PLATFORM(VISION) |
| #define USE_SANDBOX_VERSION_3 1 |
| #endif |
| |
| #if !defined(USE_EXTENSIONKIT) && PLATFORM(IOS) |
| #define USE_EXTENSIONKIT 1 |
| #endif |
| |
| #if !defined(USE_BROWSERENGINEKIT) && PLATFORM(IOS) && __has_include(<BrowserEngineKit/BETextInput.h>) |
| #define USE_BROWSERENGINEKIT 1 |
| #endif |
| |
| #if !USE(EXTENSIONKIT_PROCESS_TERMINATION) && PLATFORM(IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 180000 |
| #define USE_EXTENSIONKIT_PROCESS_TERMINATION 1 |
| #endif |
| |
| #if !USE(EXIT_XPC_MESSAGE_WORKAROUND) && (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED < 150000) |
| #define USE_EXIT_XPC_MESSAGE_WORKAROUND 1 |
| #endif |
| |
| #if !defined(USE_MODERN_AVCONTENTKEYSESSION_WITH_VTDECOMPRESSIONSESSION) \ |
| && ((PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 150000) \ |
| || (PLATFORM(IOS_FAMILY) && !PLATFORM(IOS_FAMILY_SIMULATOR))) |
| #define USE_MODERN_AVCONTENTKEYSESSION_WITH_VTDECOMPRESSIONSESSION 1 |
| #endif |
| |
| #if ((PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED < 150400) \ |
| || ((PLATFORM(IOS) || PLATFORM(MACCATALYST)) && __IPHONE_OS_VERSION_MIN_REQUIRED < 180400) \ |
| || (PLATFORM(VISION) && __VISION_OS_VERSION_MIN_REQUIRED < 20400) \ |
| || (PLATFORM(WATCHOS) && __WATCH_OS_VERSION_MIN_REQUIRED < 110400) \ |
| || (PLATFORM(APPLETV) && __TV_OS_VERSION_MIN_REQUIRED < 180400)) |
| #define USE_NSURL_ERROR_FAILING_URL_STRING_KEY 1 |
| #endif |
| |
| #if !defined(USE_COMPRESSED_HEAP) |
| /* Change run-jsc-stress-tests too. */ |
| #define USE_COMPRESSED_HEAP 0 |
| #endif |
| |
| #if defined(__cplusplus) |
| constexpr bool useCompressedHeap = USE_COMPRESSED_HEAP; |
| #endif |