summaryrefslogtreecommitdiff
path: root/chromium/build/toolchain
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-29 10:46:47 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-11-02 12:02:10 +0000
commit99677208ff3b216fdfec551fbe548da5520cd6fb (patch)
tree476a4865c10320249360e859d8fdd3e01833b03a /chromium/build/toolchain
parentc30a6232df03e1efbd9f3b226777b07e087a1122 (diff)
downloadqtwebengine-chromium-99677208ff3b216fdfec551fbe548da5520cd6fb.tar.gz
BASELINE: Update Chromium to 86.0.4240.124
Change-Id: Ide0ff151e94cd665ae6521a446995d34a9d1d644 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/build/toolchain')
-rw-r--r--chromium/build/toolchain/OWNERS1
-rw-r--r--chromium/build/toolchain/android/OWNERS1
-rw-r--r--chromium/build/toolchain/apple/OWNERS1
-rw-r--r--chromium/build/toolchain/concurrent_links.gni32
-rw-r--r--chromium/build/toolchain/gcc_toolchain.gni2
-rwxr-xr-x[-rw-r--r--]chromium/build/toolchain/get_concurrent_links.py103
-rw-r--r--chromium/build/toolchain/mac/OWNERS3
-rw-r--r--chromium/build/toolchain/toolchain.gni4
-rw-r--r--chromium/build/toolchain/win/midl.gni2
-rw-r--r--chromium/build/toolchain/win/setup_toolchain.py9
10 files changed, 114 insertions, 44 deletions
diff --git a/chromium/build/toolchain/OWNERS b/chromium/build/toolchain/OWNERS
index 37c7730cbcf..39669b33da0 100644
--- a/chromium/build/toolchain/OWNERS
+++ b/chromium/build/toolchain/OWNERS
@@ -1,4 +1,3 @@
-dpranke@chromium.org
dpranke@google.com
scottmg@chromium.org
diff --git a/chromium/build/toolchain/android/OWNERS b/chromium/build/toolchain/android/OWNERS
new file mode 100644
index 00000000000..a74cfbe228b
--- /dev/null
+++ b/chromium/build/toolchain/android/OWNERS
@@ -0,0 +1 @@
+file://build/android/OWNERS
diff --git a/chromium/build/toolchain/apple/OWNERS b/chromium/build/toolchain/apple/OWNERS
new file mode 100644
index 00000000000..6f3324f07c8
--- /dev/null
+++ b/chromium/build/toolchain/apple/OWNERS
@@ -0,0 +1 @@
+file://build/apple/OWNERS
diff --git a/chromium/build/toolchain/concurrent_links.gni b/chromium/build/toolchain/concurrent_links.gni
index 55407729774..37422736148 100644
--- a/chromium/build/toolchain/concurrent_links.gni
+++ b/chromium/build/toolchain/concurrent_links.gni
@@ -7,6 +7,7 @@
# in the context of the default_toolchain, so we can at least check for that.
assert(current_toolchain == default_toolchain)
+import("//build/config/android/config.gni")
import("//build/config/compiler/compiler.gni")
import("//build/config/mac/symbols.gni")
import("//build/config/sanitizers/sanitizers.gni")
@@ -47,10 +48,8 @@ if (concurrent_links == -1) {
} else if (is_android && !is_component_build && symbol_level == 2) {
# Full debug symbols require large memory for link.
_args = [ "--mem_per_link_gb=25" ]
- } else if (is_android && !is_debug && !using_sanitizer && symbol_level < 2) {
- # Increase the number of concurrent links for release bots. Debug builds
- # make heavier use of ProGuard, and so should not be raised. Sanitizers also
- # increase the memory overhead.
+ } else if (is_android && !is_debug && !using_sanitizer && is_java_debug &&
+ disable_android_lint && symbol_level < 2) {
if (symbol_level == 1) {
_args = [ "--mem_per_link_gb=6" ]
} else {
@@ -63,7 +62,30 @@ if (concurrent_links == -1) {
_args = []
}
+ # For Android builds, we also need to be wary of:
+ # * ProGuard / R8
+ # * Android Lint
+ # These both have a peak usage of < 2GB, but that is still large enough for
+ # them to need to use a pool since they both typically happen at the
+ # same time as linking.
+ if (is_android) {
+ _args += [ "--secondary_mem_per_link=2" ]
+ }
+
# TODO(crbug.com/617429) Pass more build configuration info to the script
# so that we can compute better values.
- concurrent_links = exec_script("get_concurrent_links.py", _args, "value")
+ _command_dict = exec_script("get_concurrent_links.py", _args, "scope")
+
+ concurrent_links = _command_dict.primary_pool_size
+ concurrent_links_logs = _command_dict.explanation
+ if (_command_dict.secondary_pool_size >= concurrent_links) {
+ # Have R8 / Lint share the link pool unless we would safely get more
+ # concurrency out of using a separate one.
+ # On low-RAM machines, this allows an apk's native library to link at the
+ # same time as its java is optimized with R8.
+ java_cmd_pool_size = _command_dict.secondary_pool_size
+ }
+} else {
+ concurrent_links_logs =
+ [ "concurrent_links set by GN arg (value=$concurrent_links)" ]
}
diff --git a/chromium/build/toolchain/gcc_toolchain.gni b/chromium/build/toolchain/gcc_toolchain.gni
index 1c7bf7e7ab8..06854b73f02 100644
--- a/chromium/build/toolchain/gcc_toolchain.gni
+++ b/chromium/build/toolchain/gcc_toolchain.gni
@@ -32,7 +32,7 @@ declare_args() {
# When the arg is set via args.gn, it applies to all toolchains. In order to not
# hit the assert in grit_rule.gni, explicitly disable for host toolchains.
-if (is_linux && target_os == "android") {
+if ((is_linux || is_chromeos) && target_os == "android") {
enable_resource_whitelist_generation = false
}
diff --git a/chromium/build/toolchain/get_concurrent_links.py b/chromium/build/toolchain/get_concurrent_links.py
index e5121c77a97..e895e13bab8 100644..100755
--- a/chromium/build/toolchain/get_concurrent_links.py
+++ b/chromium/build/toolchain/get_concurrent_links.py
@@ -1,3 +1,4 @@
+#!/usr/bin/env python
# Copyright 2014 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.
@@ -7,28 +8,32 @@
from __future__ import print_function
+import argparse
import multiprocessing
-import optparse
import os
import re
import subprocess
import sys
+sys.path.insert(1, os.path.join(os.path.dirname(__file__), '..'))
+import gn_helpers
+
+
def _GetTotalMemoryInBytes():
if sys.platform in ('win32', 'cygwin'):
import ctypes
class MEMORYSTATUSEX(ctypes.Structure):
_fields_ = [
- ("dwLength", ctypes.c_ulong),
- ("dwMemoryLoad", ctypes.c_ulong),
- ("ullTotalPhys", ctypes.c_ulonglong),
- ("ullAvailPhys", ctypes.c_ulonglong),
- ("ullTotalPageFile", ctypes.c_ulonglong),
- ("ullAvailPageFile", ctypes.c_ulonglong),
- ("ullTotalVirtual", ctypes.c_ulonglong),
- ("ullAvailVirtual", ctypes.c_ulonglong),
- ("sullAvailExtendedVirtual", ctypes.c_ulonglong),
+ ("dwLength", ctypes.c_ulong),
+ ("dwMemoryLoad", ctypes.c_ulong),
+ ("ullTotalPhys", ctypes.c_ulonglong),
+ ("ullAvailPhys", ctypes.c_ulonglong),
+ ("ullTotalPageFile", ctypes.c_ulonglong),
+ ("ullAvailPageFile", ctypes.c_ulonglong),
+ ("ullTotalVirtual", ctypes.c_ulonglong),
+ ("ullAvailVirtual", ctypes.c_ulonglong),
+ ("sullAvailExtendedVirtual", ctypes.c_ulonglong),
]
stat = MEMORYSTATUSEX(dwLength=ctypes.sizeof(MEMORYSTATUSEX))
@@ -52,35 +57,71 @@ def _GetTotalMemoryInBytes():
return 0
-def _GetDefaultConcurrentLinks(mem_per_link_gb, reserve_mem_gb):
+def _GetDefaultConcurrentLinks(per_link_gb, reserve_gb, secondary_per_link_gb):
+ explanation = []
+ explanation.append(
+ 'per_link_gb={} reserve_gb={} secondary_per_link_gb={}'.format(
+ per_link_gb, reserve_gb, secondary_per_link_gb))
# Inherit the legacy environment variable for people that have set it in GYP.
- pool_size = int(os.getenv('GYP_LINK_CONCURRENCY', 0))
- if pool_size:
- return pool_size
+ num_links = int(os.getenv('GYP_LINK_CONCURRENCY', 0))
+ if num_links:
+ reason = 'GYP_LINK_CONCURRENCY'
+ else:
+ mem_total_gb = float(_GetTotalMemoryInBytes()) / 2**30
+ mem_total_gb = max(0, mem_total_gb - reserve_gb)
+ mem_cap = int(max(1, mem_total_gb / per_link_gb))
+ hard_cap = max(1, int(os.getenv('GYP_LINK_CONCURRENCY_MAX', 2**32)))
+
+ try:
+ cpu_cap = multiprocessing.cpu_count()
+ except:
+ cpu_cap = 1
- mem_total_bytes = _GetTotalMemoryInBytes()
- mem_total_bytes = max(0, mem_total_bytes - reserve_mem_gb * 2**30)
- num_concurrent_links = int(max(1, mem_total_bytes / mem_per_link_gb / 2**30))
- hard_cap = max(1, int(os.getenv('GYP_LINK_CONCURRENCY_MAX', 2**32)))
+ explanation.append('cpu_count={} mem_total_gb={:.1f}GiB'.format(
+ cpu_cap, mem_total_gb))
- try:
- cpu_cap = multiprocessing.cpu_count()
- except:
- cpu_cap = 1
+ num_links = min(mem_cap, hard_cap, cpu_cap)
+ if num_links == cpu_cap:
+ reason = 'cpu_count'
+ elif num_links == hard_cap:
+ reason = 'GYP_LINK_CONCURRENCY_MAX'
+ else:
+ reason = 'RAM'
- return min(num_concurrent_links, hard_cap, cpu_cap)
+ explanation.append('concurrent_links={} (reason: {})'.format(
+ num_links, reason))
+
+ # See if there is RAM leftover for a secondary pool.
+ if secondary_per_link_gb and num_links == mem_cap:
+ mem_remaining = mem_total_gb - mem_cap * per_link_gb
+ secondary_size = int(max(0, mem_remaining / secondary_per_link_gb))
+ explanation.append('secondary_size={} (mem_remaining={:.1f}GiB)'.format(
+ secondary_size, mem_remaining))
+ else:
+ secondary_size = 0
+
+ return num_links, secondary_size, explanation
def main():
- parser = optparse.OptionParser()
- parser.add_option('--mem_per_link_gb', action="store", type="int", default=8)
- parser.add_option('--reserve_mem_gb', action="store", type="int", default=0)
- parser.disable_interspersed_args()
- options, _ = parser.parse_args()
-
- print(_GetDefaultConcurrentLinks(options.mem_per_link_gb,
- options.reserve_mem_gb))
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--mem_per_link_gb', type=int, default=8)
+ parser.add_argument('--reserve_mem_gb', type=int, default=0)
+ parser.add_argument('--secondary_mem_per_link', type=int, default=0)
+ options = parser.parse_args()
+
+ primary_pool_size, secondary_pool_size, explanation = (
+ _GetDefaultConcurrentLinks(options.mem_per_link_gb,
+ options.reserve_mem_gb,
+ options.secondary_mem_per_link))
+ sys.stdout.write(
+ gn_helpers.ToGNString({
+ 'primary_pool_size': primary_pool_size,
+ 'secondary_pool_size': secondary_pool_size,
+ 'explanation': explanation,
+ }))
return 0
+
if __name__ == '__main__':
sys.exit(main())
diff --git a/chromium/build/toolchain/mac/OWNERS b/chromium/build/toolchain/mac/OWNERS
index 0ed2e154d83..6f3324f07c8 100644
--- a/chromium/build/toolchain/mac/OWNERS
+++ b/chromium/build/toolchain/mac/OWNERS
@@ -1,2 +1 @@
-rsesek@chromium.org
-sdefresne@chromium.org
+file://build/apple/OWNERS
diff --git a/chromium/build/toolchain/toolchain.gni b/chromium/build/toolchain/toolchain.gni
index 80c2e7b5e4a..d556b0e0927 100644
--- a/chromium/build/toolchain/toolchain.gni
+++ b/chromium/build/toolchain/toolchain.gni
@@ -39,7 +39,7 @@ if (generate_linker_map) {
declare_args() {
# Clang compiler version. Clang files are placed at version-dependent paths.
- clang_version = "11.0.0"
+ clang_version = "12.0.0"
}
# Check target_os here instead of is_ios as this file is loaded for secondary
@@ -49,7 +49,7 @@ assert(!use_xcode_clang || target_os == "ios",
"Using Xcode's clang is only supported in iOS builds")
# Extension for shared library files (including leading dot).
-if (is_mac || is_ios) {
+if (is_apple) {
shlib_extension = ".dylib"
} else if (is_android && is_component_build) {
# By appending .cr, we prevent name collisions with libraries already
diff --git a/chromium/build/toolchain/win/midl.gni b/chromium/build/toolchain/win/midl.gni
index 72e79ebaa35..9c107dbce1d 100644
--- a/chromium/build/toolchain/win/midl.gni
+++ b/chromium/build/toolchain/win/midl.gni
@@ -55,7 +55,7 @@ template("midl") {
} else {
# midl.py expects 'gen' to be replaced with 'midl'.
generated_dir = rebase_path("//third_party/win_build_output") + "/midl/" +
- rebase_path(rebase_path(out_dir, root_build_dir), "gen")
+ rebase_path(out_dir, root_gen_dir)
}
if (defined(invoker.dynamic_guid)) {
diff --git a/chromium/build/toolchain/win/setup_toolchain.py b/chromium/build/toolchain/win/setup_toolchain.py
index 1a7c3d74b5c..d9cd6129754 100644
--- a/chromium/build/toolchain/win/setup_toolchain.py
+++ b/chromium/build/toolchain/win/setup_toolchain.py
@@ -139,9 +139,16 @@ def _LoadToolchainEnv(cpu, sdk_dir, target_store):
if not os.path.exists(script_path):
# vcvarsall.bat for VS 2017 fails if run after running vcvarsall.bat from
# VS 2013 or VS 2015. Fix this by clearing the vsinstalldir environment
- # variable.
+ # variable. Since vcvarsall.bat appends to the INCLUDE, LIB, and LIBPATH
+ # environment variables we need to clear those to avoid getting double
+ # entries when vcvarsall.bat has been run before gn gen. vcvarsall.bat
+ # also adds to PATH, but there is no clean way of clearing that and it
+ # doesn't seem to cause problems.
if 'VSINSTALLDIR' in os.environ:
del os.environ['VSINSTALLDIR']
+ del os.environ['INCLUDE']
+ del os.environ['LIB']
+ del os.environ['LIBPATH']
other_path = os.path.normpath(os.path.join(
os.environ['GYP_MSVS_OVERRIDE_PATH'],
'VC/Auxiliary/Build/vcvarsall.bat'))