Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: b3f1f7efedad5b6f50e1acd35a4a400e2393d120
      
https://github.com/WebKit/WebKit/commit/b3f1f7efedad5b6f50e1acd35a4a400e2393d120
  Author: Zak Ridouh <[email protected]>
  Date:   2026-07-09 (Thu, 09 Jul 2026)

  Changed paths:
    M Tools/Scripts/webkit-build-directory
    M Tools/Scripts/webkitdirs.pm
    A Tools/Scripts/webkitperl/webkitdirs_unittest/determineIsCMakeBuild.pl
    A 
Tools/Scripts/webkitperl/webkitdirs_unittest/determineIsCMakeBuildLastBuiltCMake.pl
    A 
Tools/Scripts/webkitperl/webkitdirs_unittest/determineIsCMakeBuildLastBuiltXcode.pl
    A Tools/Scripts/webkitperl/webkitdirs_unittest/determineIsCMakeBuildXcode.pl
    M Tools/Scripts/webkitpy/port/base.py
    M Tools/Scripts/webkitpy/port/config.py
    M Tools/Scripts/webkitpy/port/config_unittest.py
    M Tools/Scripts/webkitpy/port/factory.py

  Log Message:
  -----------
  Auto-pick last-built tree on Mac for scripts that use local build products, 
add --xcode flag
https://bugs.webkit.org/show_bug.cgi?id=315146
rdar://177478344

Reviewed by Pascoe.

When both WebKitBuild/<Config>/ (Xcode) and WebKitBuild/cmake-mac/<Config>/
(CMake) exist, webkit-build-directory now defaults to whichever tree was built
most recently instead of always preferring Xcode. The choice is logged on
STDERR ("Using last-built tree: cmake-mac/Debug" or "Using last-built tree:
Debug").

Tools that benefit (anything that shells out to webkit-build-directory):
run-api-tests, run-webkit-tests, run-perf-tests, run-webdriver,
run-minibrowser, run-swiftbrowser, run-jsc-stress-tests, run-testmem,
dump-class-layout, install-built-product, measure-build-time,
extract-tbds-from-internal-sdk.

Build drivers (build-webkit and its wrappers, set-webkit-configuration) call
webkitdirs.pm directly without opting into the tiebreaker and keep today's
behavior, so they never auto-flip the build target.

Add --xcode as a counterpart to --cmake for explicit pinning.

The tiebreaker is opt-in via enableLastBuiltTiebreaker(), which
webkit-build-directory calls for itself before any product-directory query. It
compares each build system's own build log rather than a specific product
binary, so a partial build (e.g. a JSC-only build that never relinks
WebKit.framework) still moves the marker: the CMake/Ninja tree's
cmake-mac/<Config>/.ninja_log versus the Xcode/XCBuild tree's
WebKitBuild/XCBuildData/build.db, read via File::stat's ->mtime. A missing log
resolves to mtime 0, so an absent log degrades to the pre-existing "Xcode wins
when both exist" default. build.db lives at the WebKitBuild root and is shared
across Xcode configurations, so with two Xcode configs it reflects the most
recent Xcode build of any of them rather than this specific configuration; that
only ever biases back toward the historical Xcode-wins default. Non-Cocoa ports
are gated out via the existing isAppleCocoaWebKit() guard.

* Tools/Scripts/webkit-build-directory:
* Tools/Scripts/webkitdirs.pm:
(determineIsCMakeBuild):
(enableLastBuiltTiebreaker): Added.
* Tools/Scripts/webkitperl/webkitdirs_unittest/determineIsCMakeBuild.pl:
* Tools/Scripts/webkitperl/webkitdirs_unittest/determineIsCMakeBuildXcode.pl: 
Added.
* 
Tools/Scripts/webkitperl/webkitdirs_unittest/determineIsCMakeBuildLastBuiltCMake.pl:
 Added.
* 
Tools/Scripts/webkitperl/webkitdirs_unittest/determineIsCMakeBuildLastBuiltXcode.pl:
 Added.
* Tools/Scripts/webkitpy/port/base.py:
(Port.__init__):
* Tools/Scripts/webkitpy/port/config.py:
(Config.__init__):
(Config.build_directory):
* Tools/Scripts/webkitpy/port/config_unittest.py:
(ConfigTest.make_config):
(ConfigTest.test_build_directory_passes_xcode_flag):
(ConfigTest.test_build_directory_passes_xcode_flag.mock_run_command):
* Tools/Scripts/webkitpy/port/factory.py:
(configuration_options):

Canonical link: https://commits.webkit.org/316853@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to