blob: 4098f288a12434b7b2a7f247ae1eccd6acafb78d [file] [log] [blame]
# Copyright 2019 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/config/gclient_args.gni")
import("//build/config/ios/ios_sdk.gni")
import("//build/config/zip.gni")
# Using a locally-built WebKit is only supported for Debug simulator builds.
_build_custom_webkit = checkout_ios_webkit && is_debug && use_ios_simulator
group("webkit") {
if (_build_custom_webkit) {
deps = [ ":bundle_webkit_ios_frameworks" ]
}
public_configs = [ ":_webkit_ios_config" ]
}
if (_build_custom_webkit) {
# WebKit is built from source using xcodebuild (invoked via the build_webkit.py wrapper
# script). The WebKit build places its output in a sub-directory named
# "Debug-iphonesimulator" for iOS builds and "Debug" for macOS builds.
_webkit_ios_out_base_dir = "$target_out_dir/iOS"
_webkit_mac_out_base_dir = "$target_out_dir/macOS"
_webkit_ios_xcodebuild_out_dir_name = "Debug-iphonesimulator"
_webkit_mac_xcodebuild_out_dir_name = "Debug"
_webkit_ios_out_product_dir =
"$_webkit_ios_out_base_dir/$_webkit_ios_xcodebuild_out_dir_name"
_webkit_mac_out_product_dir =
"$_webkit_mac_out_base_dir/$_webkit_mac_xcodebuild_out_dir_name"
template("compile_webkit") {
action(target_name) {
visibility = [
":bundle_webkit_ios_frameworks",
":zip_webkit_mac_minibrowser",
":webkit",
]
script = "build_webkit.py"
inputs = [
# Because it's difficult to list every webkit source file as an input
# here, use the ChangeLog files as a proxy to determine whether or not
# source files have changed.
# TODO(crbug.com/934252): This will not pick up local edits to source
# files, so find a way to properly rebuild when those change.
"src/Tools/ChangeLog",
"src/ChangeLog",
"src/Source/WebKit/ChangeLog",
"src/Source/JavaScriptCore/ChangeLog",
"src/Source/WebKitLegacy/ChangeLog",
"src/Source/WebKitLegacy/ios/ChangeLog",
"src/Source/WebKitLegacy/mac/ChangeLog",
"src/Source/bmalloc/ChangeLog",
"src/Source/WebCore/ChangeLog",
"src/Source/WTF/ChangeLog",
"src/Source/ThirdParty/ChangeLog",
"src/WebKitLibraries/ChangeLog",
]
outputs = invoker.outputs
args = invoker.args
# TODO(crbug.com/934252): "-j 4" restricts xcodebuild to four simultaneous
# jobs. This is intended to prevent overloading the machine, because ninja
# will already be spawning a large number of jobs in parallel with
# xcodebuild, but it causes the webkit build to run very slowly. Find a way
# to increase the parallelism here.
args += [
"-j",
"4",
"-quiet",
]
}
}
compile_webkit("compile_webkit_ios_frameworks") {
outputs = [
# The frameworks themselves include many resource files, but as a first
# step, use just the binaries.
"$_webkit_ios_out_product_dir/JavaScriptCore.framework",
"$_webkit_ios_out_product_dir/JavaScriptCore.framework/JavaScriptCore",
"$_webkit_ios_out_product_dir/WebCore.framework",
"$_webkit_ios_out_product_dir/WebCore.framework/WebCore",
"$_webkit_ios_out_product_dir/WebKit.framework",
"$_webkit_ios_out_product_dir/WebKit.framework/WebKit",
"$_webkit_ios_out_product_dir/WebKitLegacy.framework",
"$_webkit_ios_out_product_dir/WebKitLegacy.framework/WebKitLegacy",
"$_webkit_ios_out_product_dir/com.apple.WebKit.Networking.xpc",
"$_webkit_ios_out_product_dir/com.apple.WebKit.Networking.xpc/com.apple.WebKit.Networking.Development",
"$_webkit_ios_out_product_dir/com.apple.WebKit.Plugin.64.xpc",
"$_webkit_ios_out_product_dir/com.apple.WebKit.Plugin.64.xpc/com.apple.WebKit.Plugin.64.Development",
"$_webkit_ios_out_product_dir/com.apple.WebKit.WebContent.Development.xpc",
"$_webkit_ios_out_product_dir/com.apple.WebKit.WebContent.Development.xpc/com.apple.WebKit.WebContent.Development.Development",
"$_webkit_ios_out_product_dir/com.apple.WebKit.WebContent.xpc",
"$_webkit_ios_out_product_dir/com.apple.WebKit.WebContent.xpc/com.apple.WebKit.WebContent.Development",
]
args = [
"--ios-simulator",
"--output_dir",
rebase_path("$_webkit_ios_out_base_dir"),
]
}
_webkit_mac_minibrowser_files = [
"$_webkit_mac_out_product_dir/MiniBrowser.app/Contents/MacOS/MiniBrowser",
"$_webkit_mac_out_product_dir/MiniBrowser.app/Contents/_CodeSignature/CodeResources",
"$_webkit_mac_out_product_dir/MiniBrowser.app/Contents/Frameworks/libclang_rt.asan_osx_dynamic.dylib",
"$_webkit_mac_out_product_dir/MiniBrowser.app/Contents/Info.plist",
"$_webkit_mac_out_product_dir/MiniBrowser.app/Contents/PkgInfo",
"$_webkit_mac_out_product_dir/MiniBrowser.app/Contents/Resources/BrowserWindow.nib",
"$_webkit_mac_out_product_dir/MiniBrowser.app/Contents/Resources/ExtensionManagerWindowController.nib",
"$_webkit_mac_out_product_dir/MiniBrowser.app/Contents/Resources/MainMenu.nib",
"$_webkit_mac_out_product_dir/WebKitTestRunner",
]
compile_webkit("compile_webkit_mac_minibrowser") {
outputs = _webkit_mac_minibrowser_files
args = [
"--asan",
"--output_dir",
rebase_path("$_webkit_mac_out_base_dir"),
]
}
bundle_data("bundle_webkit_ios_frameworks") {
public_deps = [ ":compile_webkit_ios_frameworks" ]
sources = [
"$_webkit_ios_out_product_dir/JavaScriptCore.framework",
"$_webkit_ios_out_product_dir/WebCore.framework",
"$_webkit_ios_out_product_dir/WebKit.framework",
"$_webkit_ios_out_product_dir/WebKitLegacy.framework",
"$_webkit_ios_out_product_dir/com.apple.WebKit.Networking.xpc",
"$_webkit_ios_out_product_dir/com.apple.WebKit.Plugin.64.xpc",
"$_webkit_ios_out_product_dir/com.apple.WebKit.WebContent.Development.xpc",
"$_webkit_ios_out_product_dir/com.apple.WebKit.WebContent.xpc",
]
outputs =
[ "{{bundle_contents_dir}}/WebKitFrameworks/{{source_file_part}}" ]
}
zip("zip_webkit_mac_minibrowser") {
public_deps = [ ":compile_webkit_mac_minibrowser" ]
inputs = _webkit_mac_minibrowser_files
output = "$root_out_dir/WebKitMacOS.zip"
base_dir = "$_webkit_mac_out_product_dir"
}
}
config("_webkit_ios_config") {
if (_build_custom_webkit) {
# From the ld documentation: "Directories specified with -F are searched in
# the order they appear on the command line and before the default search
# path."
framework_dirs = [ "$target_out_dir/$_webkit_ios_xcodebuild_out_dir_name" ]
}
frameworks = [ "WebKit.framework" ]
}