mirror of
https://github.com/dart-lang/sdk
synced 2024-11-02 12:24:24 +00:00
b5c63ce757
* Migrate to python3; drop python support. * Update Windows toolchain support. * Remove some unused methods. * Python 2.7 is still needed on Windows. * Update gsutil to a version that supports python3. Fixes: https://github.com/dart-lang/sdk/issues/28793 TEST=Manually tested common user journeys. Change-Id: I663a22b237a548bb82dc2e601e399e3bc3649211 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/192182 Reviewed-by: William Hesse <whesse@google.com> Reviewed-by: Alexander Aprelev <aam@google.com>
67 lines
2.6 KiB
Python
67 lines
2.6 KiB
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.
|
|
|
|
# This script computs the number of concurrent links we want to run in the build
|
|
# as a function of machine spec. It's based on GetDefaultConcurrentLinks in GYP.
|
|
|
|
import os
|
|
import re
|
|
import subprocess
|
|
import sys
|
|
|
|
|
|
def GetDefaultConcurrentLinks():
|
|
# 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
|
|
|
|
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),
|
|
]
|
|
|
|
stat = MEMORYSTATUSEX(dwLength=ctypes.sizeof(MEMORYSTATUSEX))
|
|
ctypes.windll.kernel32.GlobalMemoryStatusEx(ctypes.byref(stat))
|
|
|
|
mem_limit = max(1, stat.ullTotalPhys // (4 * (2**30))) # total / 4GB
|
|
hard_cap = max(1, int(os.getenv('GYP_LINK_CONCURRENCY_MAX', 2**32)))
|
|
return min(mem_limit, hard_cap)
|
|
elif sys.platform.startswith('linux'):
|
|
if os.path.exists("/proc/meminfo"):
|
|
with open("/proc/meminfo") as meminfo:
|
|
memtotal_re = re.compile(r'^MemTotal:\s*(\d*)\s*kB')
|
|
for line in meminfo:
|
|
match = memtotal_re.match(line)
|
|
if not match:
|
|
continue
|
|
# Allow 8Gb per link on Linux because Gold is quite memory hungry
|
|
return max(1, int(match.group(1)) // (8 * (2**20)))
|
|
return 1
|
|
elif sys.platform == 'darwin':
|
|
try:
|
|
avail_bytes = int(
|
|
subprocess.check_output(['sysctl', '-n', 'hw.memsize']))
|
|
# A static library debug build of Chromium's unit_tests takes ~2.7GB, so
|
|
# 4GB per ld process allows for some more bloat.
|
|
return max(1, avail_bytes // (4 * (2**30))) # total / 4GB
|
|
except Exception:
|
|
return 1
|
|
else:
|
|
# TODO(scottmg): Implement this for other platforms.
|
|
return 1
|
|
|
|
|
|
print(GetDefaultConcurrentLinks())
|