Enable ThinLTO support in Production builds
authorkrollin@apple.com <krollin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 22 Mar 2019 18:56:41 +0000 (18:56 +0000)
committerkrollin@apple.com <krollin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 22 Mar 2019 18:56:41 +0000 (18:56 +0000)
https://bugs.webkit.org/show_bug.cgi?id=190758
<rdar://problem/45413233>

Reviewed by Daniel Bates.

Source/bmalloc:

Enable building with Thin LTO in Production when using Xcode 10.2 or
later. This change results in a 1.45% progression in PLT5. Full
Production build times increase about 2-3%. Incremental build times
are more severely affected, and so LTO is not enabled for local
engineering builds.

LTO is enabled only on macOS for now, until rdar://problem/49013399,
which affects ARM builds, is fixed.

To change the LTO setting when building locally:

- If building with `make`, specify WK_LTO_MODE={none,thin,full} on the
  command line.
- If building with `build-webkit`, specify --lto-mode={none,thin,full}
  on the command line.
- If building with `build-root`, specify --lto={none,thin,full} on the
  command line.
- If building with Xcode, create a LocalOverrides.xcconfig file at the
  top level of your repository directory (if needed) and define
  WK_LTO_MODE to full, thin, or none.

* Configurations/Base.xcconfig:

Source/JavaScriptCore:

Tweak JavaScriptCore's Base.xcconfig to be more in-line with other
.xcconfig files with regards to LTO settings. However, don't actually
enable LTO for JavaScriptCore. LTO is not enabled for JavaScriptCore
due to <rdar://problem/24543547>.

* Configurations/Base.xcconfig:

Source/ThirdParty/ANGLE:

Enable building with Thin LTO in Production when using Xcode 10.2 or
later. This change results in a 1.45% progression in PLT5. Full
Production build times increase about 2-3%. Incremental build times
are more severely affected, and so LTO is not enabled for local
engineering builds.

LTO is enabled only on macOS for now, until rdar://problem/49013399,
which affects ARM builds, is fixed.

To change the LTO setting when building locally:

- If building with `make`, specify WK_LTO_MODE={none,thin,full} on the
  command line.
- If building with `build-webkit`, specify --lto-mode={none,thin,full}
  on the command line.
- If building with `build-root`, specify --lto={none,thin,full} on the
  command line.
- If building with Xcode, create a LocalOverrides.xcconfig file at the
  top level of your repository directory (if needed) and define
  WK_LTO_MODE to full, thin, or none.

* Configurations/Base.xcconfig:

Source/ThirdParty/libwebrtc:

Enable building with Thin LTO in Production when using Xcode 10.2 or
later. This change results in a 1.45% progression in PLT5. Full
Production build times increase about 2-3%. Incremental build times
are more severely affected, and so LTO is not enabled for local
engineering builds.

LTO is enabled only on macOS for now, until rdar://problem/49013399,
which affects ARM builds, is fixed.

To change the LTO setting when building locally:

- If building with `make`, specify WK_LTO_MODE={none,thin,full} on the
  command line.
- If building with `build-webkit`, specify --lto-mode={none,thin,full}
  on the command line.
- If building with `build-root`, specify --lto={none,thin,full} on the
  command line.
- If building with Xcode, create a LocalOverrides.xcconfig file at the
  top level of your repository directory (if needed) and define
  WK_LTO_MODE to full, thin, or none.

* Configurations/Base.xcconfig:

Source/WebCore:

Enable building with Thin LTO in Production when using Xcode 10.2 or
later. This change results in a 1.45% progression in PLT5. Full
Production build times increase about 2-3%. Incremental build times
are more severely affected, and so LTO is not enabled for local
engineering builds.

LTO is enabled only on macOS for now, until rdar://problem/49013399,
which affects ARM builds, is fixed.

Removed the conditionals that disabled LTO on 32-bit systems since we
no longer build for those.

To change the LTO setting when building locally:

- If building with `make`, specify WK_LTO_MODE={none,thin,full} on the
  command line.
- If building with `build-webkit`, specify --lto-mode={none,thin,full}
  on the command line.
- If building with `build-root`, specify --lto={none,thin,full} on the
  command line.
- If building with Xcode, create a LocalOverrides.xcconfig file at the
  top level of your repository directory (if needed) and define
  WK_LTO_MODE to full, thin, or none.

No new tests since there should be no observable behavior difference.

* Configurations/Base.xcconfig:

Source/WebCore/PAL:

Enable building with Thin LTO in Production when using Xcode 10.2 or
later. This change results in a 1.45% progression in PLT5. Full
Production build times increase about 2-3%. Incremental build times
are more severely affected, and so LTO is not enabled for local
engineering builds.

LTO is enabled only on macOS for now, until rdar://problem/49013399,
which affects ARM builds, is fixed.

Removed the conditionals that disabled LTO on 32-bit systems since we
no longer build for those.

To change the LTO setting when building locally:

- If building with `make`, specify WK_LTO_MODE={none,thin,full} on the
  command line.
- If building with `build-webkit`, specify --lto-mode={none,thin,full}
  on the command line.
- If building with `build-root`, specify --lto={none,thin,full} on the
  command line.
- If building with Xcode, create a LocalOverrides.xcconfig file at the
  top level of your repository directory (if needed) and define
  WK_LTO_MODE to full, thin, or none.

* Configurations/Base.xcconfig:

Source/WebInspectorUI:

Enable building with Thin LTO in Production when using Xcode 10.2 or
later. This change results in a 1.45% progression in PLT5. Full
Production build times increase about 2-3%. Incremental build times
are more severely affected, and so LTO is not enabled for local
engineering builds.

LTO is enabled only on macOS for now, until rdar://problem/49013399,
which affects ARM builds, is fixed.

To change the LTO setting when building locally:

- If building with `make`, specify WK_LTO_MODE={none,thin,full} on the
  command line.
- If building with `build-webkit`, specify --lto-mode={none,thin,full}
  on the command line.
- If building with `build-root`, specify --lto={none,thin,full} on the
  command line.
- If building with Xcode, create a LocalOverrides.xcconfig file at the
  top level of your repository directory (if needed) and define
  WK_LTO_MODE to full, thin, or none.

* Configurations/Base.xcconfig:

Source/WebKit:

Enable building with Thin LTO in Production when using Xcode 10.2 or
later. This change results in a 1.45% progression in PLT5. Full
Production build times increase about 2-3%. Incremental build times
are more severely affected, and so LTO is not enabled for local
engineering builds.

LTO is enabled only on macOS for now, until rdar://problem/49013399,
which affects ARM builds, is fixed.

To change the LTO setting when building locally:

- If building with `make`, specify WK_LTO_MODE={none,thin,full} on the
  command line.
- If building with `build-webkit`, specify --lto-mode={none,thin,full}
  on the command line.
- If building with `build-root`, specify --lto={none,thin,full} on the
  command line.
- If building with Xcode, create a LocalOverrides.xcconfig file at the
  top level of your repository directory (if needed) and define
  WK_LTO_MODE to full, thin, or none.

* Configurations/Base.xcconfig:

Source/WebKitLegacy/mac:

Enable building with Thin LTO in Production when using Xcode 10.2 or
later. This change results in a 1.45% progression in PLT5. Full
Production build times increase about 2-3%. Incremental build times
are more severely affected, and so LTO is not enabled for local
engineering builds.

LTO is enabled only on macOS for now, until rdar://problem/49013399,
which affects ARM builds, is fixed.

To change the LTO setting when building locally:

- If building with `make`, specify WK_LTO_MODE={none,thin,full} on the
  command line.
- If building with `build-webkit`, specify --lto-mode={none,thin,full}
  on the command line.
- If building with `build-root`, specify --lto={none,thin,full} on the
  command line.
- If building with Xcode, create a LocalOverrides.xcconfig file at the
  top level of your repository directory (if needed) and define
  WK_LTO_MODE to full, thin, or none.

* Configurations/Base.xcconfig:

Source/WTF:

Enable building with Thin LTO in Production when using Xcode 10.2 or
later. This change results in a 1.45% progression in PLT5. Full
Production build times increase about 2-3%. Incremental build times
are more severely affected, and so LTO is not enabled for local
engineering builds.

LTO is enabled only on macOS for now, until rdar://problem/49013399,
which affects ARM builds, is fixed.

To change the LTO setting when building locally:

- If building with `make`, specify WK_LTO_MODE={none,thin,full} on the
  command line.
- If building with `build-webkit`, specify --lto-mode={none,thin,full}
  on the command line.
- If building with `build-root`, specify --lto={none,thin,full} on the
  command line.
- If building with Xcode, create a LocalOverrides.xcconfig file at the
  top level of your repository directory (if needed) and define
  WK_LTO_MODE to full, thin, or none.

* Configurations/Base.xcconfig:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@243396 268f45cc-cd09-0410-ab3c-d52691b4dbfc

20 files changed:
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/Configurations/Base.xcconfig
Source/ThirdParty/ANGLE/ChangeLog
Source/ThirdParty/ANGLE/Configurations/Base.xcconfig
Source/ThirdParty/libwebrtc/ChangeLog
Source/ThirdParty/libwebrtc/Configurations/Base.xcconfig
Source/WTF/ChangeLog
Source/WTF/Configurations/Base.xcconfig
Source/WebCore/ChangeLog
Source/WebCore/Configurations/Base.xcconfig
Source/WebCore/PAL/ChangeLog
Source/WebCore/PAL/Configurations/Base.xcconfig
Source/WebInspectorUI/ChangeLog
Source/WebInspectorUI/Configurations/Base.xcconfig
Source/WebKit/ChangeLog
Source/WebKit/Configurations/Base.xcconfig
Source/WebKitLegacy/mac/ChangeLog
Source/WebKitLegacy/mac/Configurations/Base.xcconfig
Source/bmalloc/ChangeLog
Source/bmalloc/Configurations/Base.xcconfig

index cf4a394..47abcfa 100644 (file)
@@ -1,3 +1,18 @@
+2019-03-22  Keith Rollin  <krollin@apple.com>
+
+        Enable ThinLTO support in Production builds
+        https://bugs.webkit.org/show_bug.cgi?id=190758
+        <rdar://problem/45413233>
+
+        Reviewed by Daniel Bates.
+
+        Tweak JavaScriptCore's Base.xcconfig to be more in-line with other
+        .xcconfig files with regards to LTO settings. However, don't actually
+        enable LTO for JavaScriptCore. LTO is not enabled for JavaScriptCore
+        due to <rdar://problem/24543547>.
+
+        * Configurations/Base.xcconfig:
+
 2019-03-22  Mark Lam  <mark.lam@apple.com>
 
         Placate exception check validation in genericTypedArrayViewProtoFuncLastIndexOf().
index 5e88116..c2cc867 100644 (file)
@@ -179,17 +179,24 @@ WK_COCOA_TOUCH_appletvos = cocoatouch;
 WK_COCOA_TOUCH_appletvsimulator = cocoatouch;
 WK_IS_COCOA_TOUCH = $(WK_NOT_$(WK_EMPTY_$(WK_COCOA_TOUCH)));
 
-LLVM_LTO = $(WK_LLVM_LTO_$(WK_XCODE_SUPPORTS_LTO));
+// Disable on all platforms other than macOS, due to <rdar://problem/49013399>.
+LLVM_LTO = NO;
+// Disable LTO for JavaScriptCore, due to <rdar://problem/24543547>. Add back the following line when that issue is resolved.
+// LLVM_LTO[sdk=macosx*] = $(WK_LLVM_LTO_$(WK_XCODE_SUPPORTS_LTO));
 WK_LLVM_LTO_NO = NO;
 WK_LLVM_LTO_YES = $(WK_USER_LTO_MODE);
 
-WK_XCODE_SUPPORTS_LTO = $(WK_NOT_$(WK_XCODE_VERSION_BEFORE_9_$(XCODE_VERSION_MAJOR)));
-WK_XCODE_VERSION_BEFORE_9_0800 = YES;
-WK_XCODE_VERSION_BEFORE_9_0700 = YES;
+WK_XCODE_SUPPORTS_LTO = $(WK_NOT_$(WK_XCODE_VERSION_BEFORE_10_2_$(XCODE_VERSION_MAJOR)));
+WK_XCODE_VERSION_BEFORE_10_2_0700 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_0800 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_0900 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_1000 = $(WK_XCODE_VERSION_BEFORE_10_2_1000_$(XCODE_VERSION_MINOR));
+WK_XCODE_VERSION_BEFORE_10_2_1000_1000 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_1000_1010 = YES;
 
 WK_USER_LTO_MODE = $(WK_USER_LTO_MODE_$(WK_LTO_MODE));
-WK_USER_LTO_MODE_full = NO; // Disable LTO for JavaScript due to <rdar://problem/24543547>
-WK_USER_LTO_MODE_thin = NO; // Disable LTO for JavaScript due to <rdar://problem/24543547>
+WK_USER_LTO_MODE_full = YES;
+WK_USER_LTO_MODE_thin = YES_THIN;
 WK_USER_LTO_MODE_none = NO;
 WK_USER_LTO_MODE_ = $(WK_DEFAULT_LTO_MODE);
-WK_DEFAULT_LTO_MODE = $(WK_USER_LTO_MODE_none);
+WK_DEFAULT_LTO_MODE = $(WK_USER_LTO_MODE_thin);
index 64fe0b8..67e7c7b 100644 (file)
@@ -1,3 +1,34 @@
+2019-03-22  Keith Rollin  <krollin@apple.com>
+
+        Enable ThinLTO support in Production builds
+        https://bugs.webkit.org/show_bug.cgi?id=190758
+        <rdar://problem/45413233>
+
+        Reviewed by Daniel Bates.
+
+        Enable building with Thin LTO in Production when using Xcode 10.2 or
+        later. This change results in a 1.45% progression in PLT5. Full
+        Production build times increase about 2-3%. Incremental build times
+        are more severely affected, and so LTO is not enabled for local
+        engineering builds.
+
+        LTO is enabled only on macOS for now, until rdar://problem/49013399,
+        which affects ARM builds, is fixed.
+
+        To change the LTO setting when building locally:
+
+        - If building with `make`, specify WK_LTO_MODE={none,thin,full} on the
+          command line.
+        - If building with `build-webkit`, specify --lto-mode={none,thin,full}
+          on the command line.
+        - If building with `build-root`, specify --lto={none,thin,full} on the
+          command line.
+        - If building with Xcode, create a LocalOverrides.xcconfig file at the
+          top level of your repository directory (if needed) and define
+          WK_LTO_MODE to full, thin, or none.
+
+        * Configurations/Base.xcconfig:
+
 2019-02-23  Keith Miller  <keith_miller@apple.com>
 
         Add new mac target numbers
index 99b5eae..c1f1bfb 100644 (file)
@@ -81,17 +81,23 @@ ANGLE_INSTALL_PATH_PREFIX = $(ANGLE_INSTALL_PATH_PREFIX_DEPLOYMENT_$(DEPLOYMENT_
 ANGLE_INSTALL_PATH_PREFIX_DEPLOYMENT_YES = $(ANGLE_INSTALL_PATH_PREFIX_DEPLOYMENT_YES_USE_ALTERNATE_$(WK_USE_ALTERNATE_FRAMEWORKS_DIR));
 ANGLE_INSTALL_PATH_PREFIX_DEPLOYMENT_YES_USE_ALTERNATE_YES = $(WK_ALTERNATE_FRAMEWORKS_DIR)/;
 
-LLVM_LTO = $(WK_LLVM_LTO_$(WK_XCODE_SUPPORTS_LTO));
+// Disable on all platforms other than macOS, due to <rdar://problem/49013399>.
+LLVM_LTO = NO;
+LLVM_LTO[sdk=macosx*] = $(WK_LLVM_LTO_$(WK_XCODE_SUPPORTS_LTO));
 WK_LLVM_LTO_NO = NO;
 WK_LLVM_LTO_YES = $(WK_USER_LTO_MODE);
 
-WK_XCODE_SUPPORTS_LTO = $(WK_NOT_$(WK_XCODE_VERSION_BEFORE_9_$(XCODE_VERSION_MAJOR)));
-WK_XCODE_VERSION_BEFORE_9_0800 = YES;
-WK_XCODE_VERSION_BEFORE_9_0700 = YES;
+WK_XCODE_SUPPORTS_LTO = $(WK_NOT_$(WK_XCODE_VERSION_BEFORE_10_2_$(XCODE_VERSION_MAJOR)));
+WK_XCODE_VERSION_BEFORE_10_2_0700 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_0800 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_0900 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_1000 = $(WK_XCODE_VERSION_BEFORE_10_2_1000_$(XCODE_VERSION_MINOR));
+WK_XCODE_VERSION_BEFORE_10_2_1000_1000 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_1000_1010 = YES;
 
 WK_USER_LTO_MODE = $(WK_USER_LTO_MODE_$(WK_LTO_MODE));
 WK_USER_LTO_MODE_full = YES;
 WK_USER_LTO_MODE_thin = YES_THIN;
 WK_USER_LTO_MODE_none = NO;
 WK_USER_LTO_MODE_ = $(WK_DEFAULT_LTO_MODE);
-WK_DEFAULT_LTO_MODE = $(WK_USER_LTO_MODE_none);
+WK_DEFAULT_LTO_MODE = $(WK_USER_LTO_MODE_thin);
index 9ae200a..55eb3fc 100644 (file)
@@ -1,3 +1,34 @@
+2019-03-22  Keith Rollin  <krollin@apple.com>
+
+        Enable ThinLTO support in Production builds
+        https://bugs.webkit.org/show_bug.cgi?id=190758
+        <rdar://problem/45413233>
+
+        Reviewed by Daniel Bates.
+
+        Enable building with Thin LTO in Production when using Xcode 10.2 or
+        later. This change results in a 1.45% progression in PLT5. Full
+        Production build times increase about 2-3%. Incremental build times
+        are more severely affected, and so LTO is not enabled for local
+        engineering builds.
+
+        LTO is enabled only on macOS for now, until rdar://problem/49013399,
+        which affects ARM builds, is fixed.
+
+        To change the LTO setting when building locally:
+
+        - If building with `make`, specify WK_LTO_MODE={none,thin,full} on the
+          command line.
+        - If building with `build-webkit`, specify --lto-mode={none,thin,full}
+          on the command line.
+        - If building with `build-root`, specify --lto={none,thin,full} on the
+          command line.
+        - If building with Xcode, create a LocalOverrides.xcconfig file at the
+          top level of your repository directory (if needed) and define
+          WK_LTO_MODE to full, thin, or none.
+
+        * Configurations/Base.xcconfig:
+
 2019-03-13  Keith Rollin  <krollin@apple.com>
 
         Add support for new StagedFrameworks layout
index 4f362e7..e442099 100644 (file)
@@ -111,17 +111,23 @@ WK_OVERRIDE_FRAMEWORKS_DIR_USE_STAGING_INSTALL_PATH_YES = $(WK_INSTALL_PATH_PREF
 WK_INSTALL_PATH_PREFIX = $(WK_INSTALL_PATH_PREFIX_DEPLOYMENT_$(DEPLOYMENT_LOCATION)$(WK_MACOS_1015)_USE_STAGING_INSTALL_PATH_$(USE_STAGING_INSTALL_PATH));
 WK_INSTALL_PATH_PREFIX_DEPLOYMENT_YES_MACOS_SINCE_1015_USE_STAGING_INSTALL_PATH_YES = $(PLATFORM_OOB_SYSTEM_CONTENT_DIR);
 
-LLVM_LTO = $(WK_LLVM_LTO_$(WK_XCODE_SUPPORTS_LTO));
+// Disable on all platforms other than macOS, due to <rdar://problem/49013399>.
+LLVM_LTO = NO;
+LLVM_LTO[sdk=macosx*] = $(WK_LLVM_LTO_$(WK_XCODE_SUPPORTS_LTO));
 WK_LLVM_LTO_NO = NO;
 WK_LLVM_LTO_YES = $(WK_USER_LTO_MODE);
 
-WK_XCODE_SUPPORTS_LTO = $(WK_NOT_$(WK_XCODE_VERSION_BEFORE_9_$(XCODE_VERSION_MAJOR)));
-WK_XCODE_VERSION_BEFORE_9_0800 = YES;
-WK_XCODE_VERSION_BEFORE_9_0700 = YES;
+WK_XCODE_SUPPORTS_LTO = $(WK_NOT_$(WK_XCODE_VERSION_BEFORE_10_2_$(XCODE_VERSION_MAJOR)));
+WK_XCODE_VERSION_BEFORE_10_2_0700 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_0800 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_0900 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_1000 = $(WK_XCODE_VERSION_BEFORE_10_2_1000_$(XCODE_VERSION_MINOR));
+WK_XCODE_VERSION_BEFORE_10_2_1000_1000 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_1000_1010 = YES;
 
 WK_USER_LTO_MODE = $(WK_USER_LTO_MODE_$(WK_LTO_MODE));
 WK_USER_LTO_MODE_full = YES;
 WK_USER_LTO_MODE_thin = YES_THIN;
 WK_USER_LTO_MODE_none = NO;
 WK_USER_LTO_MODE_ = $(WK_DEFAULT_LTO_MODE);
-WK_DEFAULT_LTO_MODE = $(WK_USER_LTO_MODE_none);
+WK_DEFAULT_LTO_MODE = $(WK_USER_LTO_MODE_thin);
index d9bb27d..884d884 100644 (file)
@@ -1,3 +1,34 @@
+2019-03-22  Keith Rollin  <krollin@apple.com>
+
+        Enable ThinLTO support in Production builds
+        https://bugs.webkit.org/show_bug.cgi?id=190758
+        <rdar://problem/45413233>
+
+        Reviewed by Daniel Bates.
+
+        Enable building with Thin LTO in Production when using Xcode 10.2 or
+        later. This change results in a 1.45% progression in PLT5. Full
+        Production build times increase about 2-3%. Incremental build times
+        are more severely affected, and so LTO is not enabled for local
+        engineering builds.
+
+        LTO is enabled only on macOS for now, until rdar://problem/49013399,
+        which affects ARM builds, is fixed.
+
+        To change the LTO setting when building locally:
+
+        - If building with `make`, specify WK_LTO_MODE={none,thin,full} on the
+          command line.
+        - If building with `build-webkit`, specify --lto-mode={none,thin,full}
+          on the command line.
+        - If building with `build-root`, specify --lto={none,thin,full} on the
+          command line.
+        - If building with Xcode, create a LocalOverrides.xcconfig file at the
+          top level of your repository directory (if needed) and define
+          WK_LTO_MODE to full, thin, or none.
+
+        * Configurations/Base.xcconfig:
+
 2019-03-22  Tim Horton  <timothy_horton@apple.com>
 
         Fix the build after r243354
index de1fa68..9f7014a 100644 (file)
@@ -135,20 +135,26 @@ OTHER_CFLAGS = $(ASAN_OTHER_CFLAGS);
 OTHER_CPLUSPLUSFLAGS = $(ASAN_OTHER_CPLUSPLUSFLAGS);
 OTHER_LDFLAGS = $(ASAN_OTHER_LDFLAGS);
 
-LLVM_LTO = $(WK_LLVM_LTO_$(WK_XCODE_SUPPORTS_LTO));
+// Disable on all platforms other than macOS, due to <rdar://problem/49013399>.
+LLVM_LTO = NO;
+LLVM_LTO[sdk=macosx*] = $(WK_LLVM_LTO_$(WK_XCODE_SUPPORTS_LTO));
 WK_LLVM_LTO_NO = NO;
 WK_LLVM_LTO_YES = $(WK_USER_LTO_MODE);
 
-WK_XCODE_SUPPORTS_LTO = $(WK_NOT_$(WK_XCODE_VERSION_BEFORE_9_$(XCODE_VERSION_MAJOR)));
-WK_XCODE_VERSION_BEFORE_9_0800 = YES;
-WK_XCODE_VERSION_BEFORE_9_0700 = YES;
+WK_XCODE_SUPPORTS_LTO = $(WK_NOT_$(WK_XCODE_VERSION_BEFORE_10_2_$(XCODE_VERSION_MAJOR)));
+WK_XCODE_VERSION_BEFORE_10_2_0700 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_0800 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_0900 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_1000 = $(WK_XCODE_VERSION_BEFORE_10_2_1000_$(XCODE_VERSION_MINOR));
+WK_XCODE_VERSION_BEFORE_10_2_1000_1000 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_1000_1010 = YES;
 
 WK_USER_LTO_MODE = $(WK_USER_LTO_MODE_$(WK_LTO_MODE));
 WK_USER_LTO_MODE_full = YES;
 WK_USER_LTO_MODE_thin = YES_THIN;
 WK_USER_LTO_MODE_none = NO;
 WK_USER_LTO_MODE_ = $(WK_DEFAULT_LTO_MODE);
-WK_DEFAULT_LTO_MODE = $(WK_USER_LTO_MODE_none);
+WK_DEFAULT_LTO_MODE = $(WK_USER_LTO_MODE_thin);
 
 WTF_INSTALL_PATH_PREFIX = $(WTF_INSTALL_PATH_PREFIX_DEPLOYMENT_$(DEPLOYMENT_LOCATION));
 WTF_INSTALL_PATH_PREFIX_DEPLOYMENT_YES = $(WTF_INSTALL_PATH_PREFIX_DEPLOYMENT_YES_USE_ALTERNATE_$(WK_USE_ALTERNATE_FRAMEWORKS_DIR));
index 883b35c..4c23ece 100644 (file)
@@ -1,3 +1,39 @@
+2019-03-22  Keith Rollin  <krollin@apple.com>
+
+        Enable ThinLTO support in Production builds
+        https://bugs.webkit.org/show_bug.cgi?id=190758
+        <rdar://problem/45413233>
+
+        Reviewed by Daniel Bates.
+
+        Enable building with Thin LTO in Production when using Xcode 10.2 or
+        later. This change results in a 1.45% progression in PLT5. Full
+        Production build times increase about 2-3%. Incremental build times
+        are more severely affected, and so LTO is not enabled for local
+        engineering builds.
+
+        LTO is enabled only on macOS for now, until rdar://problem/49013399,
+        which affects ARM builds, is fixed.
+
+        Removed the conditionals that disabled LTO on 32-bit systems since we
+        no longer build for those.
+
+        To change the LTO setting when building locally:
+
+        - If building with `make`, specify WK_LTO_MODE={none,thin,full} on the
+          command line.
+        - If building with `build-webkit`, specify --lto-mode={none,thin,full}
+          on the command line.
+        - If building with `build-root`, specify --lto={none,thin,full} on the
+          command line.
+        - If building with Xcode, create a LocalOverrides.xcconfig file at the
+          top level of your repository directory (if needed) and define
+          WK_LTO_MODE to full, thin, or none.
+
+        No new tests since there should be no observable behavior difference.
+
+        * Configurations/Base.xcconfig:
+
 2019-03-22  Ryan Haddad  <ryanhaddad@apple.com>
 
         Unreviewed, rolling out r243356.
index 22bb54b..f413bc0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2009-2017 Apple Inc. All rights reserved.
+// Copyright (C) 2009-2019 Apple Inc. All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
 // modification, are permitted provided that the following conditions
@@ -144,25 +144,23 @@ WK_WEBKITADDITIONS_HEADERS_FOLDER_PATH = $(SDKROOT)/$(WK_WEBKITADDITIONS_INSTALL
 WK_WEBCORE_DERIVEDSOURCES_INPUT_XCFILELIST_ADDITIONS = $(WK_WEBKITADDITIONS_HEADERS_FOLDER_PATH)/WebCore/DerivedSources-input.xcfilelist
 WK_WEBCORE_DERIVEDSOURCES_OUTPUT_XCFILELIST_ADDITIONS = $(WK_WEBKITADDITIONS_HEADERS_FOLDER_PATH)/WebCore/DerivedSources-output.xcfilelist
 
-// Attempting to build WebCore with full LTO for i386 results in the following
-// linker error, so we drop down to "thin" for that architecture if we were to
-// otherwise attempt to use "full".
-//
-// LLVM ERROR: Section too large, can't encode r_address (0x1000216) into 24 bits of scattered relocation entry.
-// clang: error: linker command failed with exit code 1 (use -v to see invocation)
-
-LLVM_LTO = $(WK_LLVM_LTO_$(WK_XCODE_SUPPORTS_LTO));
+// Disable on all platforms other than macOS, due to <rdar://problem/49013399>.
+LLVM_LTO = NO;
+LLVM_LTO[sdk=macosx*] = $(WK_LLVM_LTO_$(WK_XCODE_SUPPORTS_LTO));
 WK_LLVM_LTO_NO = NO;
 WK_LLVM_LTO_YES = $(WK_USER_LTO_MODE);
 
-WK_XCODE_SUPPORTS_LTO = $(WK_NOT_$(WK_XCODE_VERSION_BEFORE_9_$(XCODE_VERSION_MAJOR)));
-WK_XCODE_VERSION_BEFORE_9_0800 = YES;
-WK_XCODE_VERSION_BEFORE_9_0700 = YES;
+WK_XCODE_SUPPORTS_LTO = $(WK_NOT_$(WK_XCODE_VERSION_BEFORE_10_2_$(XCODE_VERSION_MAJOR)));
+WK_XCODE_VERSION_BEFORE_10_2_0700 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_0800 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_0900 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_1000 = $(WK_XCODE_VERSION_BEFORE_10_2_1000_$(XCODE_VERSION_MINOR));
+WK_XCODE_VERSION_BEFORE_10_2_1000_1000 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_1000_1010 = YES;
 
 WK_USER_LTO_MODE = $(WK_USER_LTO_MODE_$(WK_LTO_MODE));
 WK_USER_LTO_MODE_full = YES;
-WK_USER_LTO_MODE_full[arch=i386] = $(WK_USER_LTO_MODE_thin);
 WK_USER_LTO_MODE_thin = YES_THIN;
 WK_USER_LTO_MODE_none = NO;
 WK_USER_LTO_MODE_ = $(WK_DEFAULT_LTO_MODE);
-WK_DEFAULT_LTO_MODE = $(WK_USER_LTO_MODE_none);
+WK_DEFAULT_LTO_MODE = $(WK_USER_LTO_MODE_thin);
index c3878f0..f0e7645 100644 (file)
@@ -1,3 +1,37 @@
+2019-03-22  Keith Rollin  <krollin@apple.com>
+
+        Enable ThinLTO support in Production builds
+        https://bugs.webkit.org/show_bug.cgi?id=190758
+        <rdar://problem/45413233>
+
+        Reviewed by Daniel Bates.
+
+        Enable building with Thin LTO in Production when using Xcode 10.2 or
+        later. This change results in a 1.45% progression in PLT5. Full
+        Production build times increase about 2-3%. Incremental build times
+        are more severely affected, and so LTO is not enabled for local
+        engineering builds.
+
+        LTO is enabled only on macOS for now, until rdar://problem/49013399,
+        which affects ARM builds, is fixed.
+
+        Removed the conditionals that disabled LTO on 32-bit systems since we
+        no longer build for those.
+
+        To change the LTO setting when building locally:
+
+        - If building with `make`, specify WK_LTO_MODE={none,thin,full} on the
+          command line.
+        - If building with `build-webkit`, specify --lto-mode={none,thin,full}
+          on the command line.
+        - If building with `build-root`, specify --lto={none,thin,full} on the
+          command line.
+        - If building with Xcode, create a LocalOverrides.xcconfig file at the
+          top level of your repository directory (if needed) and define
+          WK_LTO_MODE to full, thin, or none.
+
+        * Configurations/Base.xcconfig:
+
 2019-03-22  Timothy Hatcher  <timothy@apple.com>
 
         Change macosx() to macos() in WK_API... and JSC_API... macros.
index 579ca7e..b903943 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2017 Apple Inc. All rights reserved.
+// Copyright (C) 2017-2019 Apple Inc. All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
 // modification, are permitted provided that the following conditions
@@ -136,25 +136,23 @@ WK_COCOA_TOUCH_appletvos = cocoatouch;
 WK_COCOA_TOUCH_appletvsimulator = cocoatouch;
 WK_IS_COCOA_TOUCH = $(WK_NOT_$(WK_EMPTY_$(WK_COCOA_TOUCH)));
 
-// Attempting to build WebCore with full LTO for i386 results in the following
-// linker error, so we drop down to "thin" for that architecture if we were to
-// otherwise attempt to use "full".
-//
-// LLVM ERROR: Section too large, can't encode r_address (0x1000216) into 24 bits of scattered relocation entry.
-// clang: error: linker command failed with exit code 1 (use -v to see invocation)
-
-LLVM_LTO = $(WK_LLVM_LTO_$(WK_XCODE_SUPPORTS_LTO));
+// Disable on all platforms other than macOS, due to <rdar://problem/49013399>.
+LLVM_LTO = NO;
+LLVM_LTO[sdk=macosx*] = $(WK_LLVM_LTO_$(WK_XCODE_SUPPORTS_LTO));
 WK_LLVM_LTO_NO = NO;
 WK_LLVM_LTO_YES = $(WK_USER_LTO_MODE);
 
-WK_XCODE_SUPPORTS_LTO = $(WK_NOT_$(WK_XCODE_VERSION_BEFORE_9_$(XCODE_VERSION_MAJOR)));
-WK_XCODE_VERSION_BEFORE_9_0800 = YES;
-WK_XCODE_VERSION_BEFORE_9_0700 = YES;
+WK_XCODE_SUPPORTS_LTO = $(WK_NOT_$(WK_XCODE_VERSION_BEFORE_10_2_$(XCODE_VERSION_MAJOR)));
+WK_XCODE_VERSION_BEFORE_10_2_0700 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_0800 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_0900 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_1000 = $(WK_XCODE_VERSION_BEFORE_10_2_1000_$(XCODE_VERSION_MINOR));
+WK_XCODE_VERSION_BEFORE_10_2_1000_1000 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_1000_1010 = YES;
 
 WK_USER_LTO_MODE = $(WK_USER_LTO_MODE_$(WK_LTO_MODE));
-WK_USER_LTO_MODE_full[arch=i386] = $(WK_USER_LTO_MODE_thin);
 WK_USER_LTO_MODE_full = YES;
 WK_USER_LTO_MODE_thin = YES_THIN;
 WK_USER_LTO_MODE_none = NO;
 WK_USER_LTO_MODE_ = $(WK_DEFAULT_LTO_MODE);
-WK_DEFAULT_LTO_MODE = $(WK_USER_LTO_MODE_none);
+WK_DEFAULT_LTO_MODE = $(WK_USER_LTO_MODE_thin);
index ca4aa47..ba61479 100644 (file)
@@ -1,3 +1,34 @@
+2019-03-22  Keith Rollin  <krollin@apple.com>
+
+        Enable ThinLTO support in Production builds
+        https://bugs.webkit.org/show_bug.cgi?id=190758
+        <rdar://problem/45413233>
+
+        Reviewed by Daniel Bates.
+
+        Enable building with Thin LTO in Production when using Xcode 10.2 or
+        later. This change results in a 1.45% progression in PLT5. Full
+        Production build times increase about 2-3%. Incremental build times
+        are more severely affected, and so LTO is not enabled for local
+        engineering builds.
+
+        LTO is enabled only on macOS for now, until rdar://problem/49013399,
+        which affects ARM builds, is fixed.
+
+        To change the LTO setting when building locally:
+
+        - If building with `make`, specify WK_LTO_MODE={none,thin,full} on the
+          command line.
+        - If building with `build-webkit`, specify --lto-mode={none,thin,full}
+          on the command line.
+        - If building with `build-root`, specify --lto={none,thin,full} on the
+          command line.
+        - If building with Xcode, create a LocalOverrides.xcconfig file at the
+          top level of your repository directory (if needed) and define
+          WK_LTO_MODE to full, thin, or none.
+
+        * Configurations/Base.xcconfig:
+
 2019-03-21  Joseph Pecoraro  <pecoraro@apple.com>
 
         Web Inspector: Timelines - Cannot export on about:blank - suggested filename containing a colon silently fails
index 8d1cf7a..b917eab 100644 (file)
@@ -108,17 +108,23 @@ WK_COCOA_TOUCH_appletvos = cocoatouch;
 WK_COCOA_TOUCH_appletvsimulator = cocoatouch;
 WK_IS_COCOA_TOUCH = $(WK_NOT_$(WK_EMPTY_$(WK_COCOA_TOUCH)));
 
-LLVM_LTO = $(WK_LLVM_LTO_$(WK_XCODE_SUPPORTS_LTO));
+// Disable on all platforms other than macOS, due to <rdar://problem/49013399>.
+LLVM_LTO = NO;
+LLVM_LTO[sdk=macosx*] = $(WK_LLVM_LTO_$(WK_XCODE_SUPPORTS_LTO));
 WK_LLVM_LTO_NO = NO;
 WK_LLVM_LTO_YES = $(WK_USER_LTO_MODE);
 
-WK_XCODE_SUPPORTS_LTO = $(WK_NOT_$(WK_XCODE_VERSION_BEFORE_9_$(XCODE_VERSION_MAJOR)));
-WK_XCODE_VERSION_BEFORE_9_0800 = YES;
-WK_XCODE_VERSION_BEFORE_9_0700 = YES;
+WK_XCODE_SUPPORTS_LTO = $(WK_NOT_$(WK_XCODE_VERSION_BEFORE_10_2_$(XCODE_VERSION_MAJOR)));
+WK_XCODE_VERSION_BEFORE_10_2_0700 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_0800 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_0900 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_1000 = $(WK_XCODE_VERSION_BEFORE_10_2_1000_$(XCODE_VERSION_MINOR));
+WK_XCODE_VERSION_BEFORE_10_2_1000_1000 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_1000_1010 = YES;
 
 WK_USER_LTO_MODE = $(WK_USER_LTO_MODE_$(WK_LTO_MODE));
 WK_USER_LTO_MODE_full = YES;
 WK_USER_LTO_MODE_thin = YES_THIN;
 WK_USER_LTO_MODE_none = NO;
 WK_USER_LTO_MODE_ = $(WK_DEFAULT_LTO_MODE);
-WK_DEFAULT_LTO_MODE = $(WK_USER_LTO_MODE_none);
+WK_DEFAULT_LTO_MODE = $(WK_USER_LTO_MODE_thin);
index 4a1b242..6ab8a58 100644 (file)
@@ -1,3 +1,34 @@
+2019-03-22  Keith Rollin  <krollin@apple.com>
+
+        Enable ThinLTO support in Production builds
+        https://bugs.webkit.org/show_bug.cgi?id=190758
+        <rdar://problem/45413233>
+
+        Reviewed by Daniel Bates.
+
+        Enable building with Thin LTO in Production when using Xcode 10.2 or
+        later. This change results in a 1.45% progression in PLT5. Full
+        Production build times increase about 2-3%. Incremental build times
+        are more severely affected, and so LTO is not enabled for local
+        engineering builds.
+
+        LTO is enabled only on macOS for now, until rdar://problem/49013399,
+        which affects ARM builds, is fixed.
+
+        To change the LTO setting when building locally:
+
+        - If building with `make`, specify WK_LTO_MODE={none,thin,full} on the
+          command line.
+        - If building with `build-webkit`, specify --lto-mode={none,thin,full}
+          on the command line.
+        - If building with `build-root`, specify --lto={none,thin,full} on the
+          command line.
+        - If building with Xcode, create a LocalOverrides.xcconfig file at the
+          top level of your repository directory (if needed) and define
+          WK_LTO_MODE to full, thin, or none.
+
+        * Configurations/Base.xcconfig:
+
 2019-03-22  Chris Dumez  <cdumez@apple.com>
 
         Unreviewed build fix after r243388.
index 86209c4..f106d27 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2017 Apple Inc. All rights reserved.
+// Copyright (C) 2010-2019 Apple Inc. All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
 // modification, are permitted provided that the following conditions
@@ -158,17 +158,23 @@ WK_WEBKITADDITIONS_HEADERS_FOLDER_PATH = $(SDKROOT)/$(WK_WEBKITADDITIONS_INSTALL
 WK_WEBKIT_DERIVEDSOURCES_INPUT_XCFILELIST_ADDITIONS = $(WK_WEBKITADDITIONS_HEADERS_FOLDER_PATH)/WebKit/DerivedSources-input.xcfilelist
 WK_WEBKIT_DERIVEDSOURCES_OUTPUT_XCFILELIST_ADDITIONS = $(WK_WEBKITADDITIONS_HEADERS_FOLDER_PATH)/WebKit/DerivedSources-output.xcfilelist
 
-LLVM_LTO = $(WK_LLVM_LTO_$(WK_XCODE_SUPPORTS_LTO));
+// Disable on all platforms other than macOS, due to <rdar://problem/49013399>.
+LLVM_LTO = NO;
+LLVM_LTO[sdk=macosx*] = $(WK_LLVM_LTO_$(WK_XCODE_SUPPORTS_LTO));
 WK_LLVM_LTO_NO = NO;
 WK_LLVM_LTO_YES = $(WK_USER_LTO_MODE);
 
-WK_XCODE_SUPPORTS_LTO = $(WK_NOT_$(WK_XCODE_VERSION_BEFORE_9_$(XCODE_VERSION_MAJOR)));
-WK_XCODE_VERSION_BEFORE_9_0800 = YES;
-WK_XCODE_VERSION_BEFORE_9_0700 = YES;
+WK_XCODE_SUPPORTS_LTO = $(WK_NOT_$(WK_XCODE_VERSION_BEFORE_10_2_$(XCODE_VERSION_MAJOR)));
+WK_XCODE_VERSION_BEFORE_10_2_0700 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_0800 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_0900 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_1000 = $(WK_XCODE_VERSION_BEFORE_10_2_1000_$(XCODE_VERSION_MINOR));
+WK_XCODE_VERSION_BEFORE_10_2_1000_1000 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_1000_1010 = YES;
 
 WK_USER_LTO_MODE = $(WK_USER_LTO_MODE_$(WK_LTO_MODE));
 WK_USER_LTO_MODE_full = YES;
 WK_USER_LTO_MODE_thin = YES_THIN;
 WK_USER_LTO_MODE_none = NO;
 WK_USER_LTO_MODE_ = $(WK_DEFAULT_LTO_MODE);
-WK_DEFAULT_LTO_MODE = $(WK_USER_LTO_MODE_none);
+WK_DEFAULT_LTO_MODE = $(WK_USER_LTO_MODE_thin);
index 8de9efa..4e41d78 100644 (file)
@@ -1,3 +1,34 @@
+2019-03-22  Keith Rollin  <krollin@apple.com>
+
+        Enable ThinLTO support in Production builds
+        https://bugs.webkit.org/show_bug.cgi?id=190758
+        <rdar://problem/45413233>
+
+        Reviewed by Daniel Bates.
+
+        Enable building with Thin LTO in Production when using Xcode 10.2 or
+        later. This change results in a 1.45% progression in PLT5. Full
+        Production build times increase about 2-3%. Incremental build times
+        are more severely affected, and so LTO is not enabled for local
+        engineering builds.
+
+        LTO is enabled only on macOS for now, until rdar://problem/49013399,
+        which affects ARM builds, is fixed.
+
+        To change the LTO setting when building locally:
+
+        - If building with `make`, specify WK_LTO_MODE={none,thin,full} on the
+          command line.
+        - If building with `build-webkit`, specify --lto-mode={none,thin,full}
+          on the command line.
+        - If building with `build-root`, specify --lto={none,thin,full} on the
+          command line.
+        - If building with Xcode, create a LocalOverrides.xcconfig file at the
+          top level of your repository directory (if needed) and define
+          WK_LTO_MODE to full, thin, or none.
+
+        * Configurations/Base.xcconfig:
+
 2019-03-21  Andy Estes  <aestes@apple.com>
 
         [iOS] Apple Pay should be available in documents with no user agent scripts
index bfc26cd..a846def 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2009-2017 Apple Inc. All rights reserved.
+// Copyright (C) 2009-2019 Apple Inc. All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
 // modification, are permitted provided that the following conditions
@@ -136,17 +136,23 @@ WK_COCOA_TOUCH_appletvos = cocoatouch;
 WK_COCOA_TOUCH_appletvsimulator = cocoatouch;
 WK_IS_COCOA_TOUCH = $(WK_NOT_$(WK_EMPTY_$(WK_COCOA_TOUCH)));
 
-LLVM_LTO = $(WK_LLVM_LTO_$(WK_XCODE_SUPPORTS_LTO));
+// Disable on all platforms other than macOS, due to <rdar://problem/49013399>.
+LLVM_LTO = NO;
+LLVM_LTO[sdk=macosx*] = $(WK_LLVM_LTO_$(WK_XCODE_SUPPORTS_LTO));
 WK_LLVM_LTO_NO = NO;
 WK_LLVM_LTO_YES = $(WK_USER_LTO_MODE);
 
-WK_XCODE_SUPPORTS_LTO = $(WK_NOT_$(WK_XCODE_VERSION_BEFORE_9_$(XCODE_VERSION_MAJOR)));
-WK_XCODE_VERSION_BEFORE_9_0800 = YES;
-WK_XCODE_VERSION_BEFORE_9_0700 = YES;
+WK_XCODE_SUPPORTS_LTO = $(WK_NOT_$(WK_XCODE_VERSION_BEFORE_10_2_$(XCODE_VERSION_MAJOR)));
+WK_XCODE_VERSION_BEFORE_10_2_0700 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_0800 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_0900 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_1000 = $(WK_XCODE_VERSION_BEFORE_10_2_1000_$(XCODE_VERSION_MINOR));
+WK_XCODE_VERSION_BEFORE_10_2_1000_1000 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_1000_1010 = YES;
 
 WK_USER_LTO_MODE = $(WK_USER_LTO_MODE_$(WK_LTO_MODE));
 WK_USER_LTO_MODE_full = YES;
 WK_USER_LTO_MODE_thin = YES_THIN;
 WK_USER_LTO_MODE_none = NO;
 WK_USER_LTO_MODE_ = $(WK_DEFAULT_LTO_MODE);
-WK_DEFAULT_LTO_MODE = $(WK_USER_LTO_MODE_none);
+WK_DEFAULT_LTO_MODE = $(WK_USER_LTO_MODE_thin);
index f943d84..cc8f030 100644 (file)
@@ -1,3 +1,34 @@
+2019-03-22  Keith Rollin  <krollin@apple.com>
+
+        Enable ThinLTO support in Production builds
+        https://bugs.webkit.org/show_bug.cgi?id=190758
+        <rdar://problem/45413233>
+
+        Reviewed by Daniel Bates.
+
+        Enable building with Thin LTO in Production when using Xcode 10.2 or
+        later. This change results in a 1.45% progression in PLT5. Full
+        Production build times increase about 2-3%. Incremental build times
+        are more severely affected, and so LTO is not enabled for local
+        engineering builds.
+
+        LTO is enabled only on macOS for now, until rdar://problem/49013399,
+        which affects ARM builds, is fixed.
+
+        To change the LTO setting when building locally:
+
+        - If building with `make`, specify WK_LTO_MODE={none,thin,full} on the
+          command line.
+        - If building with `build-webkit`, specify --lto-mode={none,thin,full}
+          on the command line.
+        - If building with `build-root`, specify --lto={none,thin,full} on the
+          command line.
+        - If building with Xcode, create a LocalOverrides.xcconfig file at the
+          top level of your repository directory (if needed) and define
+          WK_LTO_MODE to full, thin, or none.
+
+        * Configurations/Base.xcconfig:
+
 2019-03-21  Michael Saboff  <msaboff@apple.com>
 
         [BMalloc] No need to delay deallocating chunks based on recent use
index 745cf60..0962766 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2009-2017 Apple Inc. All rights reserved.
+// Copyright (C) 2009-2019 Apple Inc. All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
 // modification, are permitted provided that the following conditions
@@ -133,17 +133,23 @@ BMALLOC_INSTALL_PATH_PREFIX = $(BMALLOC_INSTALL_PATH_PREFIX_DEPLOYMENT_$(DEPLOYM
 BMALLOC_INSTALL_PATH_PREFIX_DEPLOYMENT_YES = $(BMALLOC_INSTALL_PATH_PREFIX_DEPLOYMENT_YES_USE_ALTERNATE_$(WK_USE_ALTERNATE_FRAMEWORKS_DIR));
 BMALLOC_INSTALL_PATH_PREFIX_DEPLOYMENT_YES_USE_ALTERNATE_YES = $(WK_ALTERNATE_FRAMEWORKS_DIR)/;
 
-LLVM_LTO = $(WK_LLVM_LTO_$(WK_XCODE_SUPPORTS_LTO));
+// Disable on all platforms other than macOS, due to <rdar://problem/49013399>.
+LLVM_LTO = NO;
+LLVM_LTO[sdk=macosx*] = $(WK_LLVM_LTO_$(WK_XCODE_SUPPORTS_LTO));
 WK_LLVM_LTO_NO = NO;
 WK_LLVM_LTO_YES = $(WK_USER_LTO_MODE);
 
-WK_XCODE_SUPPORTS_LTO = $(WK_NOT_$(WK_XCODE_VERSION_BEFORE_9_$(XCODE_VERSION_MAJOR)));
-WK_XCODE_VERSION_BEFORE_9_0800 = YES;
-WK_XCODE_VERSION_BEFORE_9_0700 = YES;
+WK_XCODE_SUPPORTS_LTO = $(WK_NOT_$(WK_XCODE_VERSION_BEFORE_10_2_$(XCODE_VERSION_MAJOR)));
+WK_XCODE_VERSION_BEFORE_10_2_0700 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_0800 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_0900 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_1000 = $(WK_XCODE_VERSION_BEFORE_10_2_1000_$(XCODE_VERSION_MINOR));
+WK_XCODE_VERSION_BEFORE_10_2_1000_1000 = YES;
+WK_XCODE_VERSION_BEFORE_10_2_1000_1010 = YES;
 
 WK_USER_LTO_MODE = $(WK_USER_LTO_MODE_$(WK_LTO_MODE));
 WK_USER_LTO_MODE_full = YES;
 WK_USER_LTO_MODE_thin = YES_THIN;
 WK_USER_LTO_MODE_none = NO;
 WK_USER_LTO_MODE_ = $(WK_DEFAULT_LTO_MODE);
-WK_DEFAULT_LTO_MODE = $(WK_USER_LTO_MODE_none);
+WK_DEFAULT_LTO_MODE = $(WK_USER_LTO_MODE_thin);