| # FIXME: These should line up with versions in Configurations/Version.xcconfig. |
| # See Source/WebKitLegacy/PlatformWin.cmake for how WebKitVersion.h is generated. |
| set(WEBKIT_MAC_VERSION 615.1.1) |
| set(MACOSX_FRAMEWORK_BUNDLE_VERSION 615.1.1+) |
| |
| WEBKIT_OPTION_BEGIN() |
| # Private options shared with other WebKit ports. Add options here only if |
| # we need a value different from the default defined in WebKitFeatures.cmake. |
| |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_API_TESTS PRIVATE ON) |
| |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_APPLE_PAY PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MINIBROWSER PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_APPLICATION_MANIFEST PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ASYNC_SCROLLING PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ATTACHMENT_ELEMENT PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_AVF_CAPTIONS PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CACHE_PARTITIONING PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CONTENT_EXTENSIONS PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CONTENT_FILTERING PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CURSOR_VISIBILITY PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DARK_MODE_CSS PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DATACUE_VALUE PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DRAG_SUPPORT PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ENCRYPTED_MEDIA PRIVATE ON) |
| # FIXME: CSSPaintingAPI static_assert fires when this is ON. https://bugs.webkit.org/show_bug.cgi?id=312028 |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_EXPERIMENTAL_FEATURES PRIVATE OFF) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_GAMEPAD PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_GPU_PROCESS PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INSPECTOR_ALTERNATE_DISPATCHERS PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INSPECTOR_EXTENSIONS PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INSPECTOR_TELEMETRY PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_LEGACY_ENCRYPTED_MEDIA PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MEDIA_SOURCE PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MEDIA_RECORDER PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MEDIA_STREAM PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MEMORY_SAMPLER PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MOUSE_CURSOR_SCALE PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_PAYMENT_REQUEST PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_PDF_HUD PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_PDF_PLUGIN PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_PDFKIT_PLUGIN PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_UNIFIED_PDF PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_PERIODIC_MEMORY_MONITOR PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_PICTURE_IN_PICTURE_API PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_POINTER_LOCK PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_RESOURCE_USAGE PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SANDBOX_EXTENSIONS PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SERVICE_CONTROLS PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SHAREABLE_RESOURCE PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SPEECH_SYNTHESIS PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_TELEPHONE_NUMBER_DETECTION PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_TEXT_AUTOSIZING PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VARIATION_FONTS PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VIDEO_PRESENTATION_MODE PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEBDRIVER_KEYBOARD_INTERACTIONS PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEBDRIVER_MOUSE_INTERACTIONS PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEBDRIVER_WHEEL_INTERACTIONS PRIVATE ON) |
| # FIXME: WebXR calls wgpuXR* without ENABLE(WEBGPU) guard. https://bugs.webkit.org/show_bug.cgi?id=312032 |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEBXR PRIVATE OFF) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEB_API_STATISTICS PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEB_AUTHN PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEB_CODECS PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEB_RTC PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WIRELESS_PLAYBACK_TARGET PRIVATE ON) |
| |
| # Xcode enables this via FeatureDefines.xcconfig; defaults OFF in WebKitFeatures.cmake. |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ACCESSIBILITY_ISOLATED_TREE PRIVATE ON) |
| |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEBGPU PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(USE_AVIF PRIVATE OFF) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(USE_JPEGXL PRIVATE OFF) |
| # Cocoa uses ColorSync, not Little CMS; CoreText handles WOFF2 natively. |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(USE_LCMS PRIVATE OFF) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(USE_WOFF2 PRIVATE OFF) |
| |
| # FIXME: These derived features are manually mirrored from PlatformEnableCocoa.h because |
| # IDL/CSS generators don't evaluate it. https://bugs.webkit.org/show_bug.cgi?id=312033 |
| # PlatformEnableCocoa.h-derived: MEDIA_SOURCE && GPU_PROCESS |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MEDIA_SOURCE_IN_WORKERS PRIVATE ON) |
| |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_OFFSCREEN_CANVAS PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_OFFSCREEN_CANVAS_IN_WORKERS PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WK_WEB_EXTENSIONS PRIVATE ON) |
| |
| # PlatformEnableCocoa.h-derived: HAVE(PASSKIT_AUTOMATIC_RELOAD_SUMMARY_ITEM) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_APPLE_PAY_AUTOMATIC_RELOAD_LINE_ITEM PRIVATE ON) |
| # PlatformEnableCocoa.h-derived: HAVE(PASSKIT_AUTOMATIC_RELOAD_PAYMENTS) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_APPLE_PAY_AUTOMATIC_RELOAD_PAYMENTS PRIVATE ON) |
| # PlatformEnableCocoa.h-derived: HAVE(PASSKIT_COUPON_CODE) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_APPLE_PAY_COUPON_CODE PRIVATE ON) |
| # PlatformEnableCocoa.h-derived: HAVE(PASSKIT_DEFERRED_SUMMARY_ITEM) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_APPLE_PAY_DEFERRED_LINE_ITEM PRIVATE ON) |
| # PlatformEnableCocoa.h-derived: HAVE(PASSKIT_DEFERRED_PAYMENTS) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_APPLE_PAY_DEFERRED_PAYMENTS PRIVATE ON) |
| # PlatformEnableCocoa.h-derived: HAVE(PASSKIT_DISBURSEMENTS), Mac >= 15.0 |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_APPLE_PAY_DISBURSEMENTS PRIVATE ON) |
| # PlatformEnableCocoa.h-derived: HAVE(PASSKIT_INSTALLMENTS) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_APPLE_PAY_INSTALLMENTS PRIVATE ON) |
| # PlatformEnableCocoa.h-derived: HAVE(PASSKIT_APPLE_PAY_LATER_AVAILABILITY), Mac >= 14.0 |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_APPLE_PAY_LATER_AVAILABILITY PRIVATE ON) |
| # PlatformEnableCocoa.h-derived: HAVE(PASSKIT_MERCHANT_CATEGORY_CODE), Mac >= 15.0 |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_APPLE_PAY_MERCHANT_CATEGORY_CODE PRIVATE ON) |
| # PlatformEnableCocoa.h-derived: HAVE(PASSKIT_MULTI_MERCHANT_PAYMENTS) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_APPLE_PAY_MULTI_MERCHANT_PAYMENTS PRIVATE ON) |
| # PlatformEnableCocoa.h-derived: HAVE(PASSKIT_PAYMENT_ORDER_DETAILS) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_APPLE_PAY_PAYMENT_ORDER_DETAILS PRIVATE ON) |
| # PlatformEnableCocoa.h-derived: HAVE(PASSKIT_RECURRING_SUMMARY_ITEM) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_APPLE_PAY_RECURRING_LINE_ITEM PRIVATE ON) |
| # PlatformEnableCocoa.h-derived: HAVE(PASSKIT_RECURRING_PAYMENTS) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_APPLE_PAY_RECURRING_PAYMENTS PRIVATE ON) |
| # PlatformEnableCocoa.h-derived: HAVE(PASSKIT_DEFAULT_SHIPPING_METHOD) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_APPLE_PAY_SELECTED_SHIPPING_METHOD PRIVATE ON) |
| # PlatformEnableCocoa.h-derived: HAVE(PASSKIT_SHIPPING_CONTACT_EDITING_MODE) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_APPLE_PAY_SHIPPING_CONTACT_EDITING_MODE PRIVATE ON) |
| # PlatformEnableCocoa.h-derived: HAVE(PASSKIT_SHIPPING_METHOD_DATE_COMPONENTS_RANGE) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_APPLE_PAY_SHIPPING_METHOD_DATE_COMPONENTS_RANGE PRIVATE ON) |
| |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MINIBROWSER PUBLIC ON) |
| |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEBDRIVER_KEYBOARD_GRAPHEME_CLUSTERS PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MEDIA_CONTROLS_CONTEXT_MENUS PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MODEL_ELEMENT PRIVATE ON) |
| WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WRITING_TOOLS PRIVATE ON) |
| |
| WEBKIT_OPTION_END() |
| |
| set(SWIFT_REQUIRED ON) |
| |
| # FIXME: AV1 decoding requires dav1d which uses meson and isn't built by CMake yet. |
| SET_AND_EXPOSE_TO_BUILD(ENABLE_AV1 OFF) |
| |
| # Flatten output to match Xcode's layout for run-webkit-tests compatibility. |
| # webkitpy/port/driver.py expects WebKitTestRunner, ImageDiff, and frameworks in the same dir. |
| set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) |
| set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) |
| set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) |
| |
| # Avoid collision between flat-output executables and DerivedSources dirs of the same name. |
| set(WebKitTestRunner_DERIVED_SOURCES_DIR "${CMAKE_BINARY_DIR}/DerivedSources/WebKitTestRunner") |
| set(TestRunnerShared_DERIVED_SOURCES_DIR "${CMAKE_BINARY_DIR}/DerivedSources/TestRunnerShared") |
| set(MiniBrowser_DERIVED_SOURCES_DIR "${CMAKE_BINARY_DIR}/DerivedSources/MiniBrowser") |
| |
| SET_AND_EXPOSE_TO_BUILD(USE_LIBWEBRTC TRUE) |
| |
| # Forward WebGPU headers when Source/WebGPU is not built. |
| if (NOT ENABLE_WEBGPU) |
| set(_webgpu_fwd "${CMAKE_BINARY_DIR}/WebGPU-stub/WebGPU") |
| file(MAKE_DIRECTORY "${_webgpu_fwd}") |
| foreach (_h WebGPU.h WebGPUExt.h) |
| if (NOT EXISTS "${_webgpu_fwd}/${_h}") |
| file(CREATE_LINK "${CMAKE_SOURCE_DIR}/Source/WebGPU/WebGPU/${_h}" "${_webgpu_fwd}/${_h}" SYMBOLIC) |
| endif () |
| endforeach () |
| include_directories(SYSTEM "${CMAKE_BINARY_DIR}/WebGPU-stub") |
| unset(_webgpu_fwd) |
| unset(_h) |
| else () |
| # WebGPU framework copies headers here; WebCore needs <WebGPU/WebGPU.h>. |
| include_directories(SYSTEM "${CMAKE_BINARY_DIR}/WebGPU/Headers") |
| endif () |
| |
| set(ENABLE_WEBKIT_LEGACY ON) |
| set(ENABLE_WEBKIT ON) |
| |
| set(bmalloc_LIBRARY_TYPE OBJECT) |
| # WTF must be SHARED on Mac because the Mac port builds multiple frameworks |
| # (JSC, WebCore, WebKit, WebGPU) that all need WTF. OBJECT would duplicate |
| # WTF's static state in each framework, causing crashes. Other ports (GTK/WPE) |
| # use OBJECT because they produce a single libwebkit.so. |
| # PAL must be STATIC (not OBJECT) because it has Swift CryptoKit sources and |
| # OBJECT libraries don't produce .swiftmodule files. |
| set(WTF_LIBRARY_TYPE SHARED) |
| set(JavaScriptCore_LIBRARY_TYPE SHARED) |
| set(PAL_LIBRARY_TYPE STATIC) |
| set(WebCore_LIBRARY_TYPE SHARED) |
| |
| set(USE_ANGLE_EGL ON) |
| |
| find_package(ICU 70.1 REQUIRED COMPONENTS data i18n uc) |
| find_package(LibXml2 2.8.0 REQUIRED) |
| find_package(LibXslt 1.1.13 REQUIRED) |
| find_package(Threads REQUIRED) |
| |
| # ----------------------------------------------------------------------------- |
| # SDK resolution |
| # ----------------------------------------------------------------------------- |
| # Ask xcrun directly; CMake's default sysroot discovery can lag Xcode versions. |
| if (NOT CMAKE_OSX_SYSROOT) |
| execute_process(COMMAND xcrun --show-sdk-path |
| OUTPUT_VARIABLE CMAKE_OSX_SYSROOT |
| OUTPUT_STRIP_TRAILING_WHITESPACE |
| ERROR_QUIET) |
| endif () |
| |
| # Deployment target must match SDK version -- PlatformHave.h SPI guards depend on |
| # __MAC_OS_X_VERSION_MIN_REQUIRED. Auto-bump if the preset floor is below the SDK. |
| execute_process(COMMAND xcrun --show-sdk-version |
| OUTPUT_VARIABLE _sdk_version |
| OUTPUT_STRIP_TRAILING_WHITESPACE |
| ERROR_QUIET) |
| if (_sdk_version) |
| string(REGEX MATCH "^[0-9]+\\.[0-9]+" _sdk_major_minor "${_sdk_version}") |
| if (_sdk_major_minor AND (NOT CMAKE_OSX_DEPLOYMENT_TARGET OR CMAKE_OSX_DEPLOYMENT_TARGET VERSION_LESS _sdk_major_minor)) |
| set(CMAKE_OSX_DEPLOYMENT_TARGET "${_sdk_major_minor}" CACHE STRING "Minimum macOS version" FORCE) |
| message(WARNING "Deployment target auto-set to SDK version: ${CMAKE_OSX_DEPLOYMENT_TARGET} (SPI header guards require this)") |
| endif () |
| endif () |
| |
| # ----------------------------------------------------------------------------- |
| # SDK additions overlay (AvailabilityProhibitedInternal.h) |
| # ----------------------------------------------------------------------------- |
| # SDK additions overlay: puts AvailabilityProhibitedInternal.h on the include path so |
| # API_UNAVAILABLE soft-linked classes compile. Xcode uses ADDITIONAL_SDKS for this. |
| # Look for <major>.0 first, then fall back to the highest available version. |
| string(REGEX MATCH "^[0-9]+" _sdk_major "${_sdk_version}") |
| set(_additions_candidates |
| "${CMAKE_SOURCE_DIR}/WebKitLibraries/SDKs/macosx${_sdk_major}.0-additions.sdk/usr/local/include" |
| "${CMAKE_SOURCE_DIR}/WebKitLibraries/SDKs/macosx${_sdk_major_minor}-additions.sdk/usr/local/include" |
| ) |
| set(_additions_found FALSE) |
| foreach (_additions IN LISTS _additions_candidates) |
| if (EXISTS "${_additions}/AvailabilityProhibitedInternal.h") |
| # -isystem so SDK-addition headers are treated like real SDK headers. |
| add_compile_options("$<$<NOT:$<COMPILE_LANGUAGE:Swift>>:-isystem${_additions}>") |
| message(STATUS "SDK additions overlay: ${_additions} (disables API_UNAVAILABLE for SPI code)") |
| set(_additions_found TRUE) |
| break () |
| endif () |
| endforeach () |
| # Fallback: scan for highest available macosx*-additions.sdk |
| if (NOT _additions_found) |
| file(GLOB _all_additions "${CMAKE_SOURCE_DIR}/WebKitLibraries/SDKs/macosx*-additions.sdk") |
| list(SORT _all_additions) |
| list(REVERSE _all_additions) |
| foreach (_additions_sdk IN LISTS _all_additions) |
| set(_additions "${_additions_sdk}/usr/local/include") |
| if (EXISTS "${_additions}/AvailabilityProhibitedInternal.h") |
| add_compile_options("$<$<NOT:$<COMPILE_LANGUAGE:Swift>>:-isystem${_additions}>") |
| message(STATUS "SDK additions overlay (fallback): ${_additions}") |
| set(_additions_found TRUE) |
| break () |
| endif () |
| endforeach () |
| unset(_all_additions) |
| endif () |
| if (NOT _additions_found) |
| message(WARNING "No SDK additions overlay found -- API_UNAVAILABLE classes (AVAudioSession etc.) will fail to compile") |
| endif () |
| unset(_sdk_version) |
| unset(_sdk_major) |
| unset(_sdk_major_minor) |
| unset(_additions_candidates) |
| unset(_additions) |
| |
| # Stub AppleFeatures.h when WebKitAdditions is present but the full Internal SDK is not. |
| if (EXISTS "/usr/local/include/WebKitAdditions" AND NOT EXISTS "/usr/local/include/AppleFeatures/AppleFeatures.h") |
| set(_apple_features_stub "${CMAKE_BINARY_DIR}/generated-stubs/AppleFeatures") |
| file(MAKE_DIRECTORY "${_apple_features_stub}") |
| file(WRITE "${_apple_features_stub}/AppleFeatures.h" |
| "/* Auto-generated stub -- AppleFeatures not available in this SDK. */\n") |
| add_compile_options("$<$<NOT:$<COMPILE_LANGUAGE:Swift>>:-isystem${CMAKE_BINARY_DIR}/generated-stubs>") |
| message(STATUS "AppleFeatures stub generated (WebKitAdditions present, AppleFeatures SDK absent)") |
| unset(_apple_features_stub) |
| endif () |
| # Add PrivateFrameworks to framework search path (mirrors Base.xcconfig). |
| if (CMAKE_OSX_SYSROOT) |
| add_compile_options("$<$<NOT:$<COMPILE_LANGUAGE:Swift>>:-iframework${CMAKE_OSX_SYSROOT}/System/Library/PrivateFrameworks>") |
| endif () |
| |
| # FIXME: Audit and reduce these suppressions. https://bugs.webkit.org/show_bug.cgi?id=312034 |
| # WebKitCompilerFlags.cmake enables -Wextra; Xcode doesn't. These match Xcode's defaults. |
| # Guard with NOT Swift -- swiftc doesn't understand Clang -W flags. |
| add_compile_options( |
| "$<$<NOT:$<COMPILE_LANGUAGE:Swift>>:-Wno-shadow-ivar>" |
| "$<$<NOT:$<COMPILE_LANGUAGE:Swift>>:-Wno-objc-property-synthesis>" |
| "$<$<NOT:$<COMPILE_LANGUAGE:Swift>>:-Wno-objc-missing-super-calls>" |
| "$<$<NOT:$<COMPILE_LANGUAGE:Swift>>:-Wno-objc-duplicate-category-definition>" |
| ) |
| add_compile_options("$<$<NOT:$<COMPILE_LANGUAGE:Swift>>:-Wno-cast-align>") |
| add_compile_options("$<$<NOT:$<COMPILE_LANGUAGE:Swift>>:-Wno-undefined-inline>") |
| add_compile_options("$<$<NOT:$<COMPILE_LANGUAGE:Swift>>:-Wno-nonportable-include-path>") |
| add_compile_options("$<$<NOT:$<COMPILE_LANGUAGE:Swift>>:-Wno-unused-parameter>") |
| add_compile_options("$<$<NOT:$<COMPILE_LANGUAGE:Swift>>:-Wno-missing-field-initializers>") |
| add_compile_options("$<$<NOT:$<COMPILE_LANGUAGE:Swift>>:-Wno-null-conversion>") |
| add_compile_options("$<$<NOT:$<COMPILE_LANGUAGE:Swift>>:-fobjc-weak>") |
| |
| # Strip absolute paths from .o files so ccache hits are path-independent. |
| # Safe for debugging: use `lldb settings set target.source-map` to restore. |
| if (CMAKE_CXX_COMPILER_LAUNCHER OR CMAKE_C_COMPILER_LAUNCHER) |
| add_compile_options( |
| "$<$<NOT:$<COMPILE_LANGUAGE:Swift>>:-fdebug-prefix-map=${CMAKE_SOURCE_DIR}=.>" |
| "$<$<NOT:$<COMPILE_LANGUAGE:Swift>>:-fdebug-prefix-map=${CMAKE_BINARY_DIR}=build>" |
| "$<$<NOT:$<COMPILE_LANGUAGE:Swift>>:-ffile-prefix-map=${CMAKE_SOURCE_DIR}=.>" |
| ) |
| # -frecord-command-line embeds absolute paths; use CMAKE_*_FLAGS for all languages. |
| string(APPEND CMAKE_C_FLAGS " -fno-record-command-line") |
| string(APPEND CMAKE_CXX_FLAGS " -fno-record-command-line") |
| endif () |
| |
| # Dead-strip unused symbols and dylibs. |
| add_link_options(-Wl,-dead_strip) |
| add_link_options(-Wl,-dead_strip_dylibs) |
| |
| # Thin archives (ar crsT): store paths to .o files instead of copying contents. |
| # Apple's ar supports T but OptionsCommon.cmake only auto-detects GNU ar. |
| if (CMAKE_GENERATOR STREQUAL "Ninja") |
| set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> crsT <TARGET> <OBJECTS>") |
| set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> crsT <TARGET> <OBJECTS>") |
| set(CMAKE_CXX_ARCHIVE_APPEND "<CMAKE_AR> rsT <TARGET> <OBJECTS>") |
| set(CMAKE_C_ARCHIVE_APPEND "<CMAKE_AR> rsT <TARGET> <OBJECTS>") |
| # Thin archives can't be ranlib'd (they have no symbol table to update); make it a no-op. |
| set(CMAKE_CXX_ARCHIVE_FINISH true) |
| set(CMAKE_C_ARCHIVE_FINISH true) |
| endif () |
| |
| # Apple Silicon handles more concurrent links than the default pool size. |
| if (CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "arm64" AND NOT DEFINED ENV{WEBKIT_NINJA_LINK_MAX}) |
| set(ENV{WEBKIT_NINJA_LINK_MAX} 6) |
| endif () |
| |
| # Symlink compile_commands.json to source root for clangd. |
| if (CMAKE_EXPORT_COMPILE_COMMANDS AND NOT EXISTS ${CMAKE_SOURCE_DIR}/compile_commands.json) |
| file(CREATE_LINK |
| ${CMAKE_BINARY_DIR}/compile_commands.json |
| ${CMAKE_SOURCE_DIR}/compile_commands.json |
| SYMBOLIC) |
| endif () |