Skip to content

Commit 4dbba08

Browse files
xedindewei-zhu
authored andcommitted
Add flags to generate and use PGO profiles for Swift code
https://bugs.webkit.org/show_bug.cgi?id=324376 rdar://187615767 Reviewed by Dewei Zhu. The change: - renames `WK_{ENABLE_}_PGO_*` flags to `WK_{ENABLE}_CLANG_PGO_*`. - Adds new flags to generate an use PGO profiles for Swift code. It mirrors exactly how Clang flags are structured. The use of `-Xfrontend` is necessary because swift-driver might not support the flag even though the compiler does. * Configurations/CommonBase.xcconfig: * Source/JavaScriptCore/Configurations/BaseTarget.xcconfig: * Source/JavaScriptCore/Configurations/JavaScriptCore.xcconfig: * Source/JavaScriptCore/Configurations/libJavaScriptCore.xcconfig: * Source/JavaScriptCore/Configurations/libJavaScriptCoreTools.xcconfig: * Source/WTF/Configurations/WTF.xcconfig: * Source/WebCore/Configurations/WebCore.xcconfig: * Source/WebCore/Configurations/WebCoreTestSupport.xcconfig: * Source/WebKit/Configurations/BaseExtension.xcconfig: * Source/WebKit/Configurations/BaseTarget.xcconfig: * Source/WebKit/Configurations/GPUService.xcconfig: * Source/WebKit/Configurations/WebContentService.xcconfig: * Source/WebKit/Configurations/WebKit.xcconfig: * Source/WebKit/Configurations/WebKitSwift.xcconfig: * Source/WebKit/Configurations/_WebKit_SwiftUI.xcconfig: * Source/WebKit/Configurations/adattributiond.xcconfig: * Source/WebKit/Configurations/webpushd.xcconfig: * Source/WebKit/Configurations/webpushtool.xcconfig: * Source/bmalloc/Configurations/bmalloc.xcconfig: * Source/bmalloc/Scripts/copy-profiling-data.py: * Tools/TestWebKitAPI/Configurations/TestIPC.xcconfig: Canonical link: https://commits.webkit.org/321420@main
1 parent a0ec49d commit 4dbba08

21 files changed

Lines changed: 236 additions & 137 deletions

‎Configurations/CommonBase.xcconfig‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,11 @@ WK_PRESERVE_MOST_DEFINES_YES = HAVE_PRESERVE_MOST=1;
6767
WK_PRESERVE_MOST_DEFINES_YES_THIN = HAVE_PRESERVE_MOST=1;
6868

6969
// -fwrapv: Make signed integer overflow two's compliment rather than UB.
70-
WK_COMMON_OTHER_CFLAGS = -fwrapv $(WK_AVAILABILITY_OVERLAY_FLAGS) $(WK_SANITIZER_OTHER_CFLAGS) $(WK_COMMON_OTHER_CFLAGS_PGO_$(WK_OR_$(WK_ENABLE_PGO_USE)_$(ENABLE_LLVM_PROFILE_GENERATION)));
70+
WK_COMMON_OTHER_CFLAGS = -fwrapv $(WK_AVAILABILITY_OVERLAY_FLAGS) $(WK_SANITIZER_OTHER_CFLAGS) $(WK_COMMON_OTHER_CFLAGS_CLANG_PGO_$(WK_OR_$(WK_ENABLE_CLANG_PGO_USE)_$(ENABLE_LLVM_PROFILE_GENERATION)));
7171
// Work around rdar://141760829 until the fix is available on all clang-1700
7272
// based toolchains.
7373
// Fix from rdar://178983382 to avoid symbol module prefix differences causing performance loss.
74-
WK_COMMON_OTHER_CFLAGS_PGO_YES = -mllvm -system-headers-coverage -mllvm -static-func-full-module-prefix=false;
74+
WK_COMMON_OTHER_CFLAGS_CLANG_PGO_YES = -mllvm -system-headers-coverage -mllvm -static-func-full-module-prefix=false;
7575

7676
OTHER_CFLAGS = $(inherited) $(WK_COMMON_OTHER_CFLAGS);
7777

@@ -88,7 +88,9 @@ FUSE_BUILD_SCRIPT_PHASES = YES;
8888
WK_COMMON_OTHER_LDFLAGS = $(WK_SANITIZER_OTHER_LDFLAGS) $(WK_COMMON_OTHER_LDFLAGS_INSTRUMENTATION_$(ENABLE_LLVM_PROFILE_GENERATION));
8989
// Work around rdar://151083138 by moving the section the profiling runtime
9090
// mmaps to its own segment.
91-
WK_COMMON_OTHER_LDFLAGS_INSTRUMENTATION_YES = -Wl,-rename_section,__DATA,__llvm_prf_cnts,__MMAP_DATA,__llvm_prf_cnts;
91+
// -fprofile-generate here (rather than on OTHER_CFLAGS) exists solely to make
92+
// clang auto-link the LLVM profiling runtime.
93+
WK_COMMON_OTHER_LDFLAGS_INSTRUMENTATION_YES = -Wl,-rename_section,__DATA,__llvm_prf_cnts,__MMAP_DATA,__llvm_prf_cnts -fprofile-generate;
9294
OTHER_LDFLAGS = $(inherited) $(WK_COMMON_OTHER_LDFLAGS);
9395

9496
WK_COMMON_OTHER_TAPI_FLAGS = -x objective-c++ -std=c++2b -fno-rtti $(WK_SANITIZER_OTHER_TAPI_FLAGS) $(WK_AVAILABILITY_OVERLAY_FLAGS);

‎Source/JavaScriptCore/Configurations/BaseTarget.xcconfig‎

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,20 @@ ENABLE_LLVM_PROFILE_GENERATION_DEFINES = $(ENABLE_LLVM_PROFILE_GENERATION_DEFINE
2727
ENABLE_LLVM_PROFILE_GENERATION_DEFINES_YES = ENABLE_LLVM_PROFILE_GENERATION=1;
2828

2929
// IR PGO profile generation flags
30-
WK_PGO_GEN_FLAGS = $(WK_PGO_GEN_FLAGS_$(ENABLE_LLVM_PROFILE_GENERATION));
31-
WK_PGO_GEN_FLAGS_YES = -fprofile-generate;
30+
WK_CLANG_PGO_GEN_FLAGS = $(WK_CLANG_PGO_GEN_FLAGS_$(ENABLE_LLVM_PROFILE_GENERATION));
31+
WK_CLANG_PGO_GEN_FLAGS_YES = -fprofile-generate;
32+
WK_SWIFT_PGO_GEN_FLAGS = $(WK_SWIFT_PGO_GEN_FLAGS_$(ENABLE_LLVM_PROFILE_GENERATION));
33+
WK_SWIFT_PGO_GEN_FLAGS_YES = -Xfrontend -ir-profile-generate;
3234

3335
GCC_PREFIX_HEADER = JavaScriptCorePrefix.h;
3436
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) $(ENABLE_LLVM_PROFILE_GENERATION_DEFINES);
3537
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
36-
OTHER_CFLAGS = $(inherited) -fno-slp-vectorize --system-header-prefix=unicode/ -D__STDC_WANT_LIB_EXT1__=1 $(WK_PGO_GEN_FLAGS);
38+
OTHER_CFLAGS = $(inherited) -fno-slp-vectorize --system-header-prefix=unicode/ -D__STDC_WANT_LIB_EXT1__=1 $(WK_CLANG_PGO_GEN_FLAGS);
3739
HEADER_SEARCH_PATHS = "${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore" $(HEADER_SEARCH_PATHS);
3840
PRODUCT_NAME = JavaScriptCore;
3941

4042
// Remove below workaround once fix from rdar://146134116 is universally available in all supported configurations.
4143
LLVM_PROFILE_GENERATION_OTHER_LD_FLAGS = $(LLVM_PROFILE_GENERATION_OTHER_LD_FLAGS_$(ENABLE_LLVM_PROFILE_GENERATION))
4244
LLVM_PROFILE_GENERATION_OTHER_LD_FLAGS_YES = -Wl,-dirty_data_list,/dev/null;
4345

44-
OTHER_LDFLAGS = $(inherited) $(LLVM_PROFILE_GENERATION_OTHER_LD_FLAGS) $(WK_PGO_GEN_FLAGS);
46+
OTHER_LDFLAGS = $(inherited) $(LLVM_PROFILE_GENERATION_OTHER_LD_FLAGS) $(WK_CLANG_PGO_GEN_FLAGS);

‎Source/JavaScriptCore/Configurations/JavaScriptCore.xcconfig‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ _SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP = $(JSC_SUPPORTS_SWIFT);
8989
SWIFT_OBJC_INTEROP_MODE = $(SWIFT_OBJC_INTEROP_MODE_$(JSC_SUPPORTS_SWIFT));
9090
SWIFT_OBJC_INTEROP_MODE_YES = objcxx;
9191

92-
OTHER_SWIFT_FLAGS = $(inherited) $(WK_OTHER_SWIFT_FLAGS_WK_HAS_VALID_JSC_PRIVATE_MODULE_$(JSC_SUPPORTS_SWIFT));
92+
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);
9393
WK_OTHER_SWIFT_FLAGS_WK_HAS_VALID_JSC_PRIVATE_MODULE_YES = -Xcc -std=c++2b;
9494

9595
SWIFT_DEFAULT_ACTOR_ISOLATION = nonisolated;
@@ -126,8 +126,8 @@ WK_NO_STATIC_INITIALIZERS_Production__ = $(WK_ERROR_WHEN_LINKING_WITH_STATIC_INI
126126
WK_NO_STATIC_INITIALIZERS_Production_NO_ = $(WK_ERROR_WHEN_LINKING_WITH_STATIC_INITIALIZERS);
127127

128128
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);
129-
OTHER_LDFLAGS[sdk=embedded*] = $(inherited) $(OTHER_LDFLAGS_BASE) $(WK_PGO_USE_LDFLAGS) $(WK_PGO_GEN_FLAGS);
130-
OTHER_LDFLAGS[sdk=macosx*] = $(inherited) $(OTHER_LDFLAGS_BASE) -framework CoreServices $(WK_PGO_USE_LDFLAGS) $(WK_PGO_GEN_FLAGS);
129+
OTHER_LDFLAGS[sdk=embedded*] = $(inherited) $(OTHER_LDFLAGS_BASE) $(WK_CLANG_PGO_USE_LDFLAGS) $(WK_CLANG_PGO_GEN_FLAGS);
130+
OTHER_LDFLAGS[sdk=macosx*] = $(inherited) $(OTHER_LDFLAGS_BASE) -framework CoreServices $(WK_CLANG_PGO_USE_LDFLAGS) $(WK_CLANG_PGO_GEN_FLAGS);
131131

132132
// Use order files from WebKitAdditions for internal SDK macOS production builds
133133
WK_ORDER_FILE = $(WK_WEBKITADDITIONS_HEADERS_FOLDER_PATH)/OrderFiles/JavaScriptCore.order.txt;

‎Source/JavaScriptCore/Configurations/libJavaScriptCore.xcconfig‎

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -31,23 +31,36 @@ WK_COMPRESSED_OPTIMIZATION_PROFILE_FOLDER_YES = $(WK_WEBKITADDITIONS_HEADERS_FOL
3131
// PGO profile JSC uses. JSC's Copy Profiling Data phase symlinks to WTF's
3232
// already-decompressed output when present, falling back to a fresh decompression
3333
// if WTF's output is missing. This saves 50MB of disk space at desk.
34-
WK_PGO_REUSE_FROM_TARGET = WTF;
35-
36-
WK_ENABLE_PGO_USE = $(WK_ENABLE_PGO_USE_$(WK_NOT_$(ENABLE_LLVM_PROFILE_GENERATION))_$(USE_INTERNAL_SDK)_$(CONFIGURATION)_$(WK_PLATFORM_NAME));
37-
WK_ENABLE_PGO_USE_YES_YES_Release_macosx = YES;
38-
WK_ENABLE_PGO_USE_YES_YES_Release_iphoneos = YES;
39-
WK_ENABLE_PGO_USE_YES_YES_Release_xros = YES;
40-
WK_ENABLE_PGO_USE_YES_YES_Production_macosx = YES;
41-
WK_ENABLE_PGO_USE_YES_YES_Production_iphoneos = YES;
42-
WK_ENABLE_PGO_USE_YES_YES_Production_xros = YES;
43-
44-
WK_PGO_USE_CFLAGS = $(WK_PGO_USE_CFLAGS_$(WK_ENABLE_PGO_USE));
45-
WK_PGO_USE_CFLAGS_YES = -fprofile-use=$(WK_OPTIMIZATION_PROFILE_FILE) -Wno-error=backend-plugin;
46-
WK_PGO_USE_LDFLAGS = $(WK_PGO_USE_LDFLAGS_$(WK_ENABLE_PGO_USE));
47-
WK_PGO_USE_LDFLAGS_YES = -fprofile-use=$(WK_OPTIMIZATION_PROFILE_FILE) -Wno-error=backend-plugin;
48-
49-
OTHER_CFLAGS = $(inherited) $(WK_PGO_USE_CFLAGS) $(WK_PGO_GEN_FLAGS);
50-
OTHER_LDFLAGS = $(inherited) $(WK_PGO_USE_LDFLAGS) $(WK_PGO_GEN_FLAGS);
34+
WK_CLANG_PGO_REUSE_FROM_TARGET = WTF;
35+
36+
WK_ENABLE_CLANG_PGO_USE = $(WK_ENABLE_CLANG_PGO_USE_$(WK_NOT_$(ENABLE_LLVM_PROFILE_GENERATION))_$(USE_INTERNAL_SDK)_$(CONFIGURATION)_$(WK_PLATFORM_NAME));
37+
WK_ENABLE_CLANG_PGO_USE_YES_YES_Release_macosx = YES;
38+
WK_ENABLE_CLANG_PGO_USE_YES_YES_Release_iphoneos = YES;
39+
WK_ENABLE_CLANG_PGO_USE_YES_YES_Release_xros = YES;
40+
WK_ENABLE_CLANG_PGO_USE_YES_YES_Production_macosx = YES;
41+
WK_ENABLE_CLANG_PGO_USE_YES_YES_Production_iphoneos = YES;
42+
WK_ENABLE_CLANG_PGO_USE_YES_YES_Production_xros = YES;
43+
44+
WK_CLANG_PGO_USE_CFLAGS = $(WK_CLANG_PGO_USE_CFLAGS_$(WK_ENABLE_CLANG_PGO_USE));
45+
WK_CLANG_PGO_USE_CFLAGS_YES = -fprofile-use=$(WK_OPTIMIZATION_PROFILE_FILE) -Wno-error=backend-plugin;
46+
WK_CLANG_PGO_USE_LDFLAGS = $(WK_CLANG_PGO_USE_LDFLAGS_$(WK_ENABLE_CLANG_PGO_USE));
47+
WK_CLANG_PGO_USE_LDFLAGS_YES = -fprofile-use=$(WK_OPTIMIZATION_PROFILE_FILE) -Wno-error=backend-plugin;
48+
49+
// Swift's IR-PGO consumer only accepts profiles produced by clang's own IR PGO
50+
// instrumentation, so only ever enable it in lockstep with WK_ENABLE_CLANG_PGO_USE
51+
// rather than tracking it separately. Swift PGO is supported only starting from
52+
// macOS 26, because earlier deployment targets generate a Frontend profile
53+
// instead of an IR one.
54+
WK_SWIFT_IR_PGO_SUPPORTED = YES;
55+
WK_SWIFT_IR_PGO_SUPPORTED[sdk=macosx*] = $(WK_SWIFT_IR_PGO_SUPPORTED$(WK_MACOS_1500_2600));
56+
WK_SWIFT_IR_PGO_SUPPORTED_MACOS_BEFORE_2600 = NO;
57+
WK_SWIFT_IR_PGO_SUPPORTED_MACOS_SINCE_2600 = YES;
58+
59+
WK_SWIFT_PGO_USE_FLAGS = $(WK_SWIFT_PGO_USE_FLAGS_$(WK_AND_$(WK_ENABLE_CLANG_PGO_USE)_$(WK_SWIFT_IR_PGO_SUPPORTED)));
60+
WK_SWIFT_PGO_USE_FLAGS_YES = -Xfrontend -ir-profile-use=$(WK_OPTIMIZATION_PROFILE_FILE);
61+
62+
OTHER_CFLAGS = $(inherited) $(WK_CLANG_PGO_USE_CFLAGS) $(WK_CLANG_PGO_GEN_FLAGS);
63+
OTHER_LDFLAGS = $(inherited) $(WK_CLANG_PGO_USE_LDFLAGS) $(WK_CLANG_PGO_GEN_FLAGS);
5164
// rdar://174426778: Force a 64-bit fat header, as some build configurations
5265
// generate a >4GB static archive but do not trigger sizing logic inside lipo.
5366
OTHER_LIPOFLAGS = $(inherited) -fat64;

‎Source/JavaScriptCore/Configurations/libJavaScriptCoreTools.xcconfig‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@
3535
PRODUCT_NAME = JavaScriptCoreTools;
3636

3737
// Disable IR PGO profile generation for JavaScriptCoreTools.
38-
WK_PGO_GEN_FLAGS = ;
38+
WK_CLANG_PGO_GEN_FLAGS = ;
39+
WK_SWIFT_PGO_GEN_FLAGS = ;
3940

4041
// Not built for simulator or Catalyst builds.
4142
WK_LIB_JSC_TOOLS_SIMULATOR = NO;

‎Source/WTF/Configurations/WTF.xcconfig‎

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -32,33 +32,48 @@ PRODUCT_MODULE_NAME = wtf;
3232
// copy-profiling-data.py phase where to find the source profile, while
3333
// still writing into our own per-project DerivedSources/WTF/Profiling
3434
// output.
35-
WK_PGO_SOURCE_PROJECT_NAME = JavaScriptCore;
35+
WK_CLANG_PGO_SOURCE_PROJECT_NAME = JavaScriptCore;
3636

3737
// bmalloc builds first as a dependency of WTF and decompresses the same
3838
// PGO profile WTF uses. WTF's Copy Profiling Data phase symlinks to bmalloc's
3939
// already-decompressed output when present, falling back to a fresh decompression
4040
// if bmalloc's output is missing. This saves 50MB of disk space at desk.
41-
WK_PGO_REUSE_FROM_TARGET = bmalloc;
41+
WK_CLANG_PGO_REUSE_FROM_TARGET = bmalloc;
4242

4343
WK_OPTIMIZATION_PROFILE_FILE = $(BUILT_PRODUCTS_DIR)/DerivedSources/WTF/Profiling/$(arch).profdata;
4444
WK_COMPRESSED_OPTIMIZATION_PROFILE_FOLDER = $(WK_COMPRESSED_OPTIMIZATION_PROFILE_FOLDER_$(USE_INTERNAL_SDK));
4545
WK_COMPRESSED_OPTIMIZATION_PROFILE_FOLDER_YES = $(WK_WEBKITADDITIONS_HEADERS_FOLDER_PATH)/Profiling;
4646

47-
WK_ENABLE_PGO_USE = $(WK_ENABLE_PGO_USE_$(WK_NOT_$(ENABLE_LLVM_PROFILE_GENERATION))_$(USE_INTERNAL_SDK)_$(CONFIGURATION)_$(WK_PLATFORM_NAME));
48-
WK_ENABLE_PGO_USE_YES_YES_Release_macosx = YES;
49-
WK_ENABLE_PGO_USE_YES_YES_Release_iphoneos = YES;
50-
WK_ENABLE_PGO_USE_YES_YES_Release_xros = YES;
51-
WK_ENABLE_PGO_USE_YES_YES_Production_macosx = YES;
52-
WK_ENABLE_PGO_USE_YES_YES_Production_iphoneos = YES;
53-
WK_ENABLE_PGO_USE_YES_YES_Production_xros = YES;
54-
55-
WK_PGO_USE_CFLAGS = $(WK_PGO_USE_CFLAGS_$(WK_ENABLE_PGO_USE));
56-
WK_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;
57-
WK_PGO_USE_LDFLAGS = $(WK_PGO_USE_LDFLAGS_$(WK_ENABLE_PGO_USE));
58-
WK_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;
59-
60-
WK_PGO_GEN_FLAGS = $(WK_PGO_GEN_FLAGS_$(ENABLE_LLVM_PROFILE_GENERATION));
61-
WK_PGO_GEN_FLAGS_YES = -fprofile-generate;
47+
WK_ENABLE_CLANG_PGO_USE = $(WK_ENABLE_CLANG_PGO_USE_$(WK_NOT_$(ENABLE_LLVM_PROFILE_GENERATION))_$(USE_INTERNAL_SDK)_$(CONFIGURATION)_$(WK_PLATFORM_NAME));
48+
WK_ENABLE_CLANG_PGO_USE_YES_YES_Release_macosx = YES;
49+
WK_ENABLE_CLANG_PGO_USE_YES_YES_Release_iphoneos = YES;
50+
WK_ENABLE_CLANG_PGO_USE_YES_YES_Release_xros = YES;
51+
WK_ENABLE_CLANG_PGO_USE_YES_YES_Production_macosx = YES;
52+
WK_ENABLE_CLANG_PGO_USE_YES_YES_Production_iphoneos = YES;
53+
WK_ENABLE_CLANG_PGO_USE_YES_YES_Production_xros = YES;
54+
55+
WK_CLANG_PGO_USE_CFLAGS = $(WK_CLANG_PGO_USE_CFLAGS_$(WK_ENABLE_CLANG_PGO_USE));
56+
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;
57+
WK_CLANG_PGO_USE_LDFLAGS = $(WK_CLANG_PGO_USE_LDFLAGS_$(WK_ENABLE_CLANG_PGO_USE));
58+
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;
59+
60+
// Swift's IR-PGO consumer only accepts profiles produced by clang's own IR PGO
61+
// instrumentation, so only ever enable it in lockstep with WK_ENABLE_CLANG_PGO_USE
62+
// rather than tracking it separately. Swift PGO is supported only starting from
63+
// macOS 26, because earlier deployment targets generate a Frontend profile
64+
// instead of an IR one.
65+
WK_SWIFT_IR_PGO_SUPPORTED = YES;
66+
WK_SWIFT_IR_PGO_SUPPORTED[sdk=macosx*] = $(WK_SWIFT_IR_PGO_SUPPORTED$(WK_MACOS_1500_2600));
67+
WK_SWIFT_IR_PGO_SUPPORTED_MACOS_BEFORE_2600 = NO;
68+
WK_SWIFT_IR_PGO_SUPPORTED_MACOS_SINCE_2600 = YES;
69+
70+
WK_SWIFT_PGO_USE_FLAGS = $(WK_SWIFT_PGO_USE_FLAGS_$(WK_AND_$(WK_ENABLE_CLANG_PGO_USE)_$(WK_SWIFT_IR_PGO_SUPPORTED)));
71+
WK_SWIFT_PGO_USE_FLAGS_YES = -Xfrontend -ir-profile-use=$(WK_OPTIMIZATION_PROFILE_FILE);
72+
73+
WK_CLANG_PGO_GEN_FLAGS = $(WK_CLANG_PGO_GEN_FLAGS_$(ENABLE_LLVM_PROFILE_GENERATION));
74+
WK_CLANG_PGO_GEN_FLAGS_YES = -fprofile-generate;
75+
WK_SWIFT_PGO_GEN_FLAGS = $(WK_SWIFT_PGO_GEN_FLAGS_$(ENABLE_LLVM_PROFILE_GENERATION));
76+
WK_SWIFT_PGO_GEN_FLAGS_YES = -Xfrontend -ir-profile-generate;
6277

6378
// Remove below workaround once fix from rdar://146134116 is universally available in all supported configurations.
6479
LLVM_PROFILE_GENERATION_OTHER_LD_FLAGS = $(LLVM_PROFILE_GENERATION_OTHER_LD_FLAGS_$(ENABLE_LLVM_PROFILE_GENERATION));
@@ -67,8 +82,8 @@ LLVM_PROFILE_GENERATION_OTHER_LD_FLAGS_YES = -Wl,-dirty_data_list,/dev/null;
6782
ENABLE_LLVM_PROFILE_GENERATION_DEFINES = $(ENABLE_LLVM_PROFILE_GENERATION_DEFINES_$(ENABLE_LLVM_PROFILE_GENERATION));
6883
ENABLE_LLVM_PROFILE_GENERATION_DEFINES_YES = ENABLE_LLVM_PROFILE_GENERATION=1;
6984

70-
OTHER_CFLAGS = $(inherited) $(WK_PGO_USE_CFLAGS) $(WK_PGO_GEN_FLAGS);
71-
OTHER_LDFLAGS = $(inherited) $(LLVM_PROFILE_GENERATION_OTHER_LD_FLAGS) $(WK_PGO_USE_LDFLAGS) $(WK_PGO_GEN_FLAGS);
85+
OTHER_CFLAGS = $(inherited) $(WK_CLANG_PGO_USE_CFLAGS) $(WK_CLANG_PGO_GEN_FLAGS);
86+
OTHER_LDFLAGS = $(inherited) $(LLVM_PROFILE_GENERATION_OTHER_LD_FLAGS) $(WK_CLANG_PGO_USE_LDFLAGS) $(WK_CLANG_PGO_GEN_FLAGS);
7287
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) $(ENABLE_LLVM_PROFILE_GENERATION_DEFINES);
7388

7489
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
@@ -135,7 +150,7 @@ BUILD_LIBRARY_FOR_DISTRIBUTION = $(WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP);
135150
MODULES_FOLDER_PATH = $(MODULES_FOLDER_PATH_$(WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP));
136151
MODULES_FOLDER_PATH_YES = swift;
137152

138-
OTHER_SWIFT_FLAGS = $(inherited) $(OTHER_SWIFT_FLAGS_WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP_$(WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP));
153+
OTHER_SWIFT_FLAGS = $(inherited) $(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);
139154
OTHER_SWIFT_FLAGS_WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP_ = -no-verify-emitted-module-interface;
140155
OTHER_SWIFT_FLAGS_WK_SWIFT_EXPLICIT_MODULES_ALLOW_CXX_INTEROP_YES = -Xcc -I$(DSTROOT)$(WTF_INSTALL_PATH_PREFIX)$(WK_LIBRARY_HEADERS_FOLDER_PATH) -Xcc -I$(BUILT_PRODUCTS_DIR)$(WTF_INSTALL_PATH_PREFIX)$(WK_LIBRARY_HEADERS_FOLDER_PATH) -Xcc -std=c++2b;
141156

0 commit comments

Comments
 (0)