| // Copyright (C) 2014 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. | |
| EXECUTABLE_PREFIX = lib; | |
| INSTALL_PATH = $(BMALLOC_INSTALL_PATH_PREFIX)$(WK_LIBRARY_INSTALL_PATH); | |
| INSTALLHDRS_SCRIPT_PHASE = YES; | |
| APPLY_RULES_IN_COPY_HEADERS = YES; | |
| PRIVATE_HEADERS_FOLDER_PATH = $(BMALLOC_INSTALL_PATH_PREFIX)$(WK_LIBRARY_HEADERS_FOLDER_PATH)/bmalloc; | |
| PRODUCT_NAME = bmalloc; | |
| // bmalloc (including libpas) is statically linked into JavaScriptCore.framework, | |
| // so its instrumented counters land in JavaScriptCore's profiling data. Tell | |
| // the copy-profiling-data.py phase where to find the source profile, while | |
| // still writing into our own per-project DerivedSources/bmalloc/Profiling | |
| // output. | |
| WK_CLANG_PGO_SOURCE_PROJECT_NAME = JavaScriptCore; | |
| WK_OPTIMIZATION_PROFILE_FILE = $(BUILT_PRODUCTS_DIR)/DerivedSources/bmalloc/Profiling/$(arch).profdata; | |
| WK_COMPRESSED_OPTIMIZATION_PROFILE_FOLDER = $(WK_COMPRESSED_OPTIMIZATION_PROFILE_FOLDER_$(USE_INTERNAL_SDK)); | |
| WK_COMPRESSED_OPTIMIZATION_PROFILE_FOLDER_YES = $(WK_WEBKITADDITIONS_HEADERS_FOLDER_PATH)/Profiling; | |
| WK_ENABLE_CLANG_PGO_USE = $(WK_ENABLE_CLANG_PGO_USE_$(WK_NOT_$(ENABLE_LLVM_PROFILE_GENERATION))_$(USE_INTERNAL_SDK)_$(CONFIGURATION)_$(WK_PLATFORM_NAME)); | |
| WK_ENABLE_CLANG_PGO_USE_YES_YES_Release_macosx = YES; | |
| WK_ENABLE_CLANG_PGO_USE_YES_YES_Release_iphoneos = YES; | |
| WK_ENABLE_CLANG_PGO_USE_YES_YES_Release_xros = YES; | |
| WK_ENABLE_CLANG_PGO_USE_YES_YES_Production_macosx = YES; | |
| WK_ENABLE_CLANG_PGO_USE_YES_YES_Production_iphoneos = YES; | |
| WK_ENABLE_CLANG_PGO_USE_YES_YES_Production_xros = YES; | |
| WK_CLANG_PGO_USE_CFLAGS = $(WK_CLANG_PGO_USE_CFLAGS_$(WK_ENABLE_CLANG_PGO_USE)); | |
| WK_CLANG_PGO_USE_CFLAGS_YES = -fprofile-use=$(WK_OPTIMIZATION_PROFILE_FILE) -Wno-error=backend-plugin -Wno-error=profile-instr-unprofiled -Wno-error=profile-instr-missing -Wno-error=profile-instr-out-of-date; | |
| WK_CLANG_PGO_USE_LDFLAGS = $(WK_CLANG_PGO_USE_LDFLAGS_$(WK_ENABLE_CLANG_PGO_USE)); | |
| WK_CLANG_PGO_USE_LDFLAGS_YES = -fprofile-use=$(WK_OPTIMIZATION_PROFILE_FILE) -Wno-error=backend-plugin -Wno-error=profile-instr-unprofiled -Wno-error=profile-instr-missing -Wno-error=profile-instr-out-of-date; | |
| // Swift's IR-PGO consumer only accepts profiles produced by clang's own IR PGO | |
| // instrumentation, so only ever enable it in lockstep with WK_ENABLE_CLANG_PGO_USE | |
| // rather than tracking it separately. Swift PGO is supported only starting from | |
| // macOS 26, because earlier deployment targets generate a Frontend profile | |
| // instead of an IR one. | |
| WK_SWIFT_IR_PGO_SUPPORTED = YES; | |
| WK_SWIFT_IR_PGO_SUPPORTED[sdk=macosx*] = $(WK_SWIFT_IR_PGO_SUPPORTED$(WK_MACOS_1500_2600)); | |
| WK_SWIFT_IR_PGO_SUPPORTED_MACOS_BEFORE_2600 = NO; | |
| WK_SWIFT_IR_PGO_SUPPORTED_MACOS_SINCE_2600 = YES; | |
| WK_SWIFT_PGO_USE_FLAGS = $(WK_SWIFT_PGO_USE_FLAGS_$(WK_AND_$(WK_ENABLE_CLANG_PGO_USE)_$(WK_SWIFT_IR_PGO_SUPPORTED))); | |
| WK_SWIFT_PGO_USE_FLAGS_YES = -Xfrontend -ir-profile-use=$(WK_OPTIMIZATION_PROFILE_FILE); | |
| WK_CLANG_PGO_GEN_FLAGS = $(WK_CLANG_PGO_GEN_FLAGS_$(ENABLE_LLVM_PROFILE_GENERATION)); | |
| WK_CLANG_PGO_GEN_FLAGS_YES = -fprofile-generate; | |
| WK_SWIFT_PGO_GEN_FLAGS = $(WK_SWIFT_PGO_GEN_FLAGS_$(ENABLE_LLVM_PROFILE_GENERATION)); | |
| WK_SWIFT_PGO_GEN_FLAGS_YES = -Xfrontend -ir-profile-generate; | |
| // Remove below workaround once fix from rdar://146134116 is universally available in all supported configurations. | |
| LLVM_PROFILE_GENERATION_OTHER_LD_FLAGS = $(LLVM_PROFILE_GENERATION_OTHER_LD_FLAGS_$(ENABLE_LLVM_PROFILE_GENERATION)); | |
| LLVM_PROFILE_GENERATION_OTHER_LD_FLAGS_YES = -Wl,-dirty_data_list,/dev/null; | |
| ENABLE_LLVM_PROFILE_GENERATION_DEFINES = $(ENABLE_LLVM_PROFILE_GENERATION_DEFINES_$(ENABLE_LLVM_PROFILE_GENERATION)); | |
| ENABLE_LLVM_PROFILE_GENERATION_DEFINES_YES = ENABLE_LLVM_PROFILE_GENERATION=1; | |
| OTHER_CFLAGS = $(inherited) $(WK_CLANG_PGO_USE_CFLAGS) $(WK_CLANG_PGO_GEN_FLAGS); | |
| OTHER_LDFLAGS = $(inherited) $(LLVM_PROFILE_GENERATION_OTHER_LD_FLAGS) $(WK_CLANG_PGO_USE_LDFLAGS) $(WK_CLANG_PGO_GEN_FLAGS); | |
| GCC_PREPROCESSOR_DEFINITIONS = $(inherited) $(ENABLE_LLVM_PROFILE_GENERATION_DEFINES); | |
| GCC_SYMBOLS_PRIVATE_EXTERN = YES; | |
| STRIP_INSTALLED_PRODUCT = NO; | |
| GENERATE_BMALLOC_MODULEMAP = YES; | |
| // The bmalloc module is ill-formed on bridgeOS. | |
| GENERATE_BMALLOC_MODULEMAP[sdk=bridgeos*] = ; | |
| EXCLUDED_SOURCE_FILE_NAMES = $(inherited) $(EXCLUDED_SOURCE_FILE_NAMES_$(GENERATE_BMALLOC_MODULEMAP)); | |
| EXCLUDED_SOURCE_FILE_NAMES_ = module.modulemap; | |
| EXCLUDED_SOURCE_FILE_NAMES_NO = module.modulemap; | |
| // Some SDKs which have a bmalloc module do not support allowing Cxx interop with Swift explicit modules. | |
| WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP = $(GENERATE_BMALLOC_MODULEMAP); | |
| WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP[sdk=macosx26.2*] = ; | |
| WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP[sdk=macosx26.3*] = ; | |
| WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP[sdk=iphone*26.2*] = ; | |
| WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP[sdk=iphone*26.3*] = ; | |
| WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP[sdk=appletv*26.2*] = ; | |
| WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP[sdk=appletv*26.3*] = ; | |
| WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP[sdk=watch*26.2*] = ; | |
| WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP[sdk=watch*26.3*] = ; | |
| WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP[sdk=xr*26.2*] = ; | |
| WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP[sdk=xr*26.3*] = ; | |
| // Some SDKs which have a bmalloc module do not support allowing Cxx interop with Swift explicit modules. | |
| _SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP = $(WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP); | |
| SWIFT_INSTALL_MODULE_FOR_DEPLOYMENT = $(WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP); | |
| BUILD_LIBRARY_FOR_DISTRIBUTION = $(WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP); | |
| MODULES_FOLDER_PATH = $(MODULES_FOLDER_PATH_$(WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP)); | |
| MODULES_FOLDER_PATH_YES = swift; | |
| OTHER_SWIFT_FLAGS = $(inherited) $(OTHER_SWIFT_FLAGS_GENERATE_BMALLOC_MODULEMAP_$(GENERATE_BMALLOC_MODULEMAP)) $(OTHER_SWIFT_FLAGS_WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP_$(WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP)) $(WK_SWIFT_PGO_USE_FLAGS) $(WK_SWIFT_PGO_GEN_FLAGS); | |
| OTHER_SWIFT_FLAGS_GENERATE_BMALLOC_MODULEMAP_YES = ; | |
| OTHER_SWIFT_FLAGS_WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP_ = -no-verify-emitted-module-interface; | |
| OTHER_SWIFT_FLAGS_WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP_YES = -Xcc -std=c++2b; | |
| SWIFT_OBJC_INTEROP_MODE = $(SWIFT_OBJC_INTEROP_MODE_$(WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP)); | |
| SWIFT_OBJC_INTEROP_MODE_YES = objcxx; | |
| SWIFT_INSTALL_OBJC_HEADER = NO; | |
| SWIFT_LIBRARY_LEVEL = spi; | |
| SWIFT_ACTIVE_COMPILATION_CONDITIONS = $(inherited) $(SWIFT_ACTIVE_COMPILATION_CONDITIONS_$(WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP)); | |
| SWIFT_ACTIVE_COMPILATION_CONDITIONS_YES = BMALLOC_SWIFT_CXX_INTEROP; | |
| SWIFT_DEFAULT_ACTOR_ISOLATION = nonisolated; | |
| SWIFT_STRICT_CONCURRENCY = complete; | |
| ENABLE_WK_LIBRARY_MODULE_VERIFIER = $(ENABLE_WK_LIBRARY_MODULE_VERIFIER_$(WK_ENABLE_SLOW_BUILD_VERIFICATION)); | |
| ENABLE_WK_LIBRARY_MODULE_VERIFIER_YES = $(WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP); | |
| MODULE_VERIFIER_SUPPORTED_LANGUAGES = c objective-c c++ objective-c++; | |
| MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = gnu99 gnu23 c23 c++2b; | |
| OTHER_MODULE_VERIFIER_FLAGS = -- $(WK_AVAILABILITY_OVERLAY_FLAGS) -iframework $(BUILT_PRODUCTS_DIR)/SDKAdditions/System/Library/Frameworks -isystem $(DSTROOT)$(BMALLOC_INSTALL_PATH_PREFIX)$(WK_LIBRARY_HEADERS_FOLDER_PATH) -I$(BUILT_PRODUCTS_DIR)$(WK_LIBRARY_HEADERS_FOLDER_PATH) -I$(WK_ADDITIONAL_SDKS)$(WK_LIBRARY_HEADERS_FOLDER_PATH) -isystem "$(WK_PRIVATE_SDK_DIR)$(WK_ALTERNATE_WEBKIT_SDK_PATH)$(WK_LIBRARY_HEADERS_FOLDER_PATH)" -iframework $(WK_PRIVATE_SDK_DIR)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks -Wsystem-headers-in-module=bmalloc; |