// Copyright (C) 2009-2026 Apple Inc. 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. #include "BaseTarget.xcconfig" DEFINES_MODULE = YES; ENABLE_MODULE_VERIFIER = $(WK_ENABLE_SLOW_BUILD_VERIFICATION); OTHER_MODULE_VERIFIER_FLAGS = -- $(WK_AVAILABILITY_OVERLAY_FLAGS) -iframework $(BUILT_PRODUCTS_DIR)/SDKAdditions/System/Library/Frameworks -I$(BUILT_PRODUCTS_DIR)$(WK_LIBRARY_HEADERS_FOLDER_PATH) -I$(WK_ADDITIONAL_SDKS)$(WK_LIBRARY_HEADERS_FOLDER_PATH) $(OTHER_MODULE_VERIFIER_FLAGS_$(WK_EMPTY_$(WK_OVERRIDE_FRAMEWORKS_DIR))); OTHER_MODULE_VERIFIER_FLAGS_ = -iframework "$(WK_PRIVATE_SDK_DIR)$(WK_OVERRIDE_FRAMEWORKS_DIR)" -isystem "$(WK_PRIVATE_SDK_DIR)$(WK_ALTERNATE_WEBKIT_SDK_PATH)$(WK_LIBRARY_HEADERS_FOLDER_PATH)"; MODULEMAP_FILE = $(SRCROOT)/JavaScriptCore.modulemap; WK_HAS_VALID_JSC_PRIVATE_MODULE = YES; WK_HAS_VALID_JSC_PRIVATE_MODULE[sdk=macosx26.2*] = ; WK_HAS_VALID_JSC_PRIVATE_MODULE[sdk=macosx26.3*] = ; WK_HAS_VALID_JSC_PRIVATE_MODULE[sdk=iphone*26.2*] = ; WK_HAS_VALID_JSC_PRIVATE_MODULE[sdk=iphone*26.3*] = ; WK_HAS_VALID_JSC_PRIVATE_MODULE[sdk=appletv*26.2*] = ; WK_HAS_VALID_JSC_PRIVATE_MODULE[sdk=appletv*26.3*] = ; WK_HAS_VALID_JSC_PRIVATE_MODULE[sdk=watch*26.2*] = ; WK_HAS_VALID_JSC_PRIVATE_MODULE[sdk=watch*26.3*] = ; WK_HAS_VALID_JSC_PRIVATE_MODULE[sdk=xr*26.2*] = ; WK_HAS_VALID_JSC_PRIVATE_MODULE[sdk=xr*26.3*] = ; WK_HAS_VALID_JSC_PRIVATE_MODULE[sdk=bridgeos*] = ; MODULE_VERIFIER_SUPPORTED_LANGUAGES = $(MODULE_VERIFIER_SUPPORTED_LANGUAGES_$(WK_HAS_VALID_JSC_PRIVATE_MODULE)); MODULE_VERIFIER_SUPPORTED_LANGUAGES_ = objective-c; MODULE_VERIFIER_SUPPORTED_LANGUAGES_NO = objective-c; // FIXME: (rdar://74275135) Re-enable support for automatically verifying Objective-C and C when possible. MODULE_VERIFIER_SUPPORTED_LANGUAGES_YES = objective-c++; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = $(MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS_$(WK_HAS_VALID_JSC_PRIVATE_MODULE)); MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS_YES = c++23; MODULE_VERIFIER_KIND = builtin; MODULEMAP_PRIVATE_FILE = $(MODULEMAP_PRIVATE_FILE_$(WK_HAS_VALID_JSC_PRIVATE_MODULE)); MODULEMAP_PRIVATE_FILE_ = ; MODULEMAP_PRIVATE_FILE_NO = ; MODULEMAP_PRIVATE_FILE_YES = $(SRCROOT)/JavaScriptCore_Private.modulemap; JSC_SUPPORTS_SWIFT = $(JSC_SUPPORTS_SWIFT_VALID_MODULE_CONFIGURATION_$(WK_HAS_VALID_JSC_PRIVATE_MODULE)_$(CONFIGURATION)); JSC_SUPPORTS_SWIFT_VALID_MODULE_CONFIGURATION_YES_Debug = YES; JSC_SUPPORTS_SWIFT_VALID_MODULE_CONFIGURATION_YES_Release = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = $(inherited) $(SWIFT_ACTIVE_COMPILATION_CONDITIONS_$(JSC_SUPPORTS_SWIFT)); SWIFT_ACTIVE_COMPILATION_CONDITIONS_YES = JSC_SUPPORTS_SWIFT; EXCLUDED_SOURCE_FILE_NAMES = $(inherited) $(EXCLUDED_SOURCE_FILE_NAMES_$(JSC_SUPPORTS_SWIFT)); EXCLUDED_SOURCE_FILE_NAMES_YES = ; EXCLUDED_SOURCE_FILE_NAMES_ = JavaScriptCore.swift; EXCLUDED_SOURCE_FILE_NAMES_NO = JavaScriptCore.swift; SWIFT_INSTALL_OBJC_HEADER = NO; BUILD_LIBRARY_FOR_DISTRIBUTION = $(JSC_SUPPORTS_SWIFT); SWIFT_LIBRARY_LEVEL = $(SWIFT_LIBRARY_LEVEL_JSC_SUPPORTS_SWIFT_$(JSC_SUPPORTS_SWIFT)); SWIFT_LIBRARY_LEVEL_JSC_SUPPORTS_SWIFT_YES = api; _SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP = $(JSC_SUPPORTS_SWIFT); SWIFT_OBJC_INTEROP_MODE = $(SWIFT_OBJC_INTEROP_MODE_$(JSC_SUPPORTS_SWIFT)); SWIFT_OBJC_INTEROP_MODE_YES = objcxx; OTHER_SWIFT_FLAGS = $(inherited) $(WK_OTHER_SWIFT_FLAGS_WK_HAS_VALID_JSC_PRIVATE_MODULE_$(JSC_SUPPORTS_SWIFT)) $(WK_SWIFT_PGO_USE_FLAGS) $(WK_SWIFT_PGO_GEN_FLAGS); WK_OTHER_SWIFT_FLAGS_WK_HAS_VALID_JSC_PRIVATE_MODULE_YES = -Xcc -std=c++2b; SWIFT_DEFAULT_ACTOR_ISOLATION = nonisolated; SWIFT_STRICT_CONCURRENCY = complete; HEADERMAP_INCLUDES_FRAMEWORK_ENTRIES_FOR_TARGETS_NOT_BEING_BUILT = NO; HEADERMAP_USES_VFS = YES; SUPPORTS_TEXT_BASED_API = $(WK_ENABLE_SLOW_BUILD_VERIFICATION); // Override to enable SPI checking at desk. Remove once audit-spi works in // production builds (https://bugs.webkit.org/show_bug.cgi?id=299573). SUPPORTS_TEXT_BASED_API[sdk=iphoneos.internal] = YES; TAPI_USE_SRCROOT = YES; TAPI_ENABLE_PROJECT_HEADERS = YES; TAPI_VERIFY_MODE = $(WK_TAPI_VERIFY_MODE_$(WK_ENABLE_SLOW_BUILD_VERIFICATION)); WK_TAPI_VERIFY_MODE_YES = Pedantic; // C++ dialect flags (-fvisibility, others inherited from CommonBase.xcconfig) // are needed because JavaScriptCore / WTF private headers are only safe to use // from other WebKit projects, which build with the same dialect. OTHER_TAPI_FLAGS = $(inherited) -fvisibility=hidden -exclude-private-header **/*SPI.h -extra-project-header $(SRCROOT)/API/ExtraSymbolsForTAPI.h $(OTHER_TAPI_FLAGS_STATICLIBS_$(DEPLOYMENT_LOCATION)) $(OTHER_TAPI_FLAGS_SPI_CHECKING_$(WK_AUDIT_SPI)); // JavaScriptCore exports libWTF.a and libbmalloc.a, so tapi needs to know about headers from those projects. The extra filelists are generated by their respective projects. In install-style builds, there is a postprocessing step done as a JavaScriptCore build phase. OTHER_TAPI_FLAGS_STATICLIBS_NO = -filelist $(BUILT_PRODUCTS_DIR)/usr/local/include/bmalloc/bmalloc.json -filelist $(BUILT_PRODUCTS_DIR)/usr/local/include/wtf/WTF.json OTHER_TAPI_FLAGS_STATICLIBS_YES = -filelist $(DERIVED_FILE_DIR)/bmalloc.json -filelist $(DERIVED_FILE_DIR)/WTF.json OTHER_TAPI_FLAGS_SPI_CHECKING_YES = -sdkdb-output-dir $(BUILT_PRODUCTS_DIR)/SDKDB; WK_AUDIT_SPI_ALLOWLISTS = $(SRCROOT)/Configurations/AllowedSPI.toml $(SRCROOT)/Configurations/AllowedSPI-legacy.toml $(WK_AUDIT_SPI_ALLOWLISTS_$(USE_INTERNAL_SDK)); WK_AUDIT_SPI_ALLOWLISTS_YES = $(WK_WEBKITADDITIONS_HEADERS_FOLDER_PATH)/AllowedSPI/AllowedSPI-JavaScriptCore.toml; WK_ERROR_WHEN_LINKING_WITH_STATIC_INITIALIZERS = -Xlinker -no_inits; WK_NO_STATIC_INITIALIZERS = $(WK_NO_STATIC_INITIALIZERS_$(CONFIGURATION)_$(WK_OR_$(WK_ANY_SANITIZER_ENABLED)_$(ENABLE_FUZZILLI))_$(ENABLE_LLVM_PROFILE_GENERATION)); WK_NO_STATIC_INITIALIZERS_Release__ = $(WK_ERROR_WHEN_LINKING_WITH_STATIC_INITIALIZERS); WK_NO_STATIC_INITIALIZERS_Release_NO_ = $(WK_ERROR_WHEN_LINKING_WITH_STATIC_INITIALIZERS); WK_NO_STATIC_INITIALIZERS_Production__ = $(WK_ERROR_WHEN_LINKING_WITH_STATIC_INITIALIZERS); WK_NO_STATIC_INITIALIZERS_Production_NO_ = $(WK_ERROR_WHEN_LINKING_WITH_STATIC_INITIALIZERS); OTHER_LDFLAGS_BASE = $(OTHER_LDFLAGS_JAVASCRIPTCORE_DEPS) -unexported_symbols_list $(SRCROOT)/unexported-libc++.txt -force_load $(WTF_ARCHIVE) -force_load $(BMALLOC_ARCHIVE) -force_load $(LIBJAVASCRIPTCORE_ARCHIVE) $(SOURCE_VERSION_LDFLAGS) $(WK_NO_STATIC_INITIALIZERS); OTHER_LDFLAGS[sdk=embedded*] = $(inherited) $(OTHER_LDFLAGS_BASE) $(WK_CLANG_PGO_USE_LDFLAGS) $(WK_CLANG_PGO_GEN_FLAGS); OTHER_LDFLAGS[sdk=macosx*] = $(inherited) $(OTHER_LDFLAGS_BASE) -framework CoreServices $(WK_CLANG_PGO_USE_LDFLAGS) $(WK_CLANG_PGO_GEN_FLAGS); // Use order files from WebKitAdditions for internal SDK macOS production builds WK_ORDER_FILE = $(WK_WEBKITADDITIONS_HEADERS_FOLDER_PATH)/OrderFiles/JavaScriptCore.order.txt; WK_ENABLE_ORDER_FILE = $(WK_ENABLE_ORDER_FILE_$(USE_INTERNAL_SDK)_$(CONFIGURATION)_$(WK_PLATFORM_NAME)); WK_ENABLE_ORDER_FILE_YES_Production_macosx = YES; WK_ORDER_FILE_LDFLAGS = $(WK_ORDER_FILE_LDFLAGS_$(WK_ENABLE_ORDER_FILE)); WK_ORDER_FILE_LDFLAGS_YES = -Wl,-order_file,$(WK_ORDER_FILE); SECTORDER_FLAGS = $(WK_ORDER_FILE_LDFLAGS); INFOPLIST_FILE = Info.plist; INSTALL_PATH = $(INSTALL_PATH_PREFIX)$(JAVASCRIPTCORE_FRAMEWORKS_DIR); DYLIB_INSTALL_NAME_BASE = $(DYLIB_INSTALL_NAME_BASE_$(WK_USE_ALTERNATE_FRAMEWORKS_DIR)); DYLIB_INSTALL_NAME_BASE_NO = $(NORMAL_JAVASCRIPTCORE_FRAMEWORKS_DIR) DYLIB_INSTALL_NAME_BASE_YES = $(JAVASCRIPTCORE_FRAMEWORKS_DIR); PRODUCT_BUNDLE_IDENTIFIER = com.apple.$(PRODUCT_NAME:rfc1034identifier); CRYPTEX_SYMLINK_PATH = $(JAVASCRIPTCORE_FRAMEWORKS_DIR); OUTPUT_CRYPTEX_SYMLINK_PATH = $(OUTPUT_CRYPTEX_SYMLINK_PATH_$(USE_SYSTEM_CONTENT_PATH)_$(WK_NOT_$(WK_USE_OVERRIDE_FRAMEWORKS_DIR))); OUTPUT_CRYPTEX_SYMLINK_PATH_YES_YES = $(DSTROOT)$(CRYPTEX_SYMLINK_PATH)/$(FULL_PRODUCT_NAME); INSTALLHDRS_SCRIPT_PHASE = YES; APPLY_RULES_IN_COPY_HEADERS = YES; JSC_FRAMEWORK_HEADER_POSTPROCESSING_DISABLED = YES; JSC_FRAMEWORK_HEADER_POSTPROCESSING_DISABLED[config=Production] = $(WK_USE_OVERRIDE_FRAMEWORKS_DIR);