blob: 01af105f31308d92e2a596c4a91b66d7f41ddbcd [file]
# Copyright 2026 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Utils for inferring builder names from GN args."""
import json
import logging
import os
import pathlib
import platform
import subprocess
import sys
_THIS_DIR = pathlib.Path(__file__).resolve().parent
_SRC_DIR = _THIS_DIR.parents[1]
# Add SRC_DIR to path to allow importing from build/
sys.path.append(str(_SRC_DIR))
from build import gn_helpers
from build import detect_host_arch
def read_explicit_gn_args(build_dir):
"""Reads explicit GN args from build dir"""
return gn_helpers.ReadArgsGN(str(build_dir))
def get_host_fallback_args():
"""Returns host OS and CPU."""
host_os = platform.system().lower()
if host_os == 'darwin':
host_os = 'mac'
elif host_os == 'windows':
host_os = 'win'
host_cpu = detect_host_arch.HostArch()
return host_os, host_cpu
def guess_builder(build_dir):
"""Infers the builder name based on build_dir."""
gn_args = read_explicit_gn_args(build_dir)
if not gn_args:
logging.info('No GN args found in build dir, '
'falling back to host machine dimensions.')
target_os, target_cpu = get_host_fallback_args()
else:
target_os = gn_args.get('target_os')
target_cpu = gn_args.get('target_cpu')
if not target_os or not target_cpu:
# If an args.gn file is present but does not explicitly specify target_os
# or target_cpu, default to the host machine's dimensions.
fallback_os, fallback_cpu = get_host_fallback_args()
target_os = target_os or fallback_os
target_cpu = target_cpu or fallback_cpu
mapping = {
('linux', 'x64'): ('ci', 'Linux Tests'),
('mac', 'x64'): ('ci', 'mac15-x64-rel-tests'),
('mac', 'arm64'): ('ci', 'mac15-arm64-rel-tests'),
('win', 'x64'): ('ci', 'Win10 Tests x64'),
('android', 'arm64'): ('ci', 'android-14-arm64-rel'),
('android', 'x64'): ('ci', 'android-16-x64-rel'),
('android', 'x86'): ('ci', 'android-x86-rel'),
('chromeos', 'x64'): ('ci', 'chromeos-amd64-generic-rel-gtest'),
('chromeos', 'arm64'): ('ci', 'chromeos-arm64-generic-rel'),
('ios', 'arm64'): ('ci', 'ios-simulator'),
}
key = (target_os, target_cpu)
return mapping.get(key)