Source code

Revision control

Copy as Markdown

Other Tools

# -*- bazel-starlark -*-
# Copyright 2023 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Siso configuration for clang-cl/windows."""
load("@builtin//lib/gn.star", "gn")
load("@builtin//struct.star", "module")
load("./clang_all.star", "clang_all")
load("./clang_code_coverage_wrapper.star", "clang_code_coverage_wrapper")
load("./config.star", "config")
load("./gn_logs.star", "gn_logs")
load("./reproxy.star", "reproxy")
load("./rewrapper_cfg.star", "rewrapper_cfg")
load("./win_sdk.star", "win_sdk")
def __filegroups(ctx):
fg = {}
fg.update(win_sdk.filegroups(ctx))
fg.update(clang_all.filegroups(ctx))
return fg
def __clang_compile_coverage(ctx, cmd):
clang_command = clang_code_coverage_wrapper.run(ctx, list(cmd.args))
ctx.actions.fix(args = clang_command)
__handlers = {
"clang_compile_coverage": __clang_compile_coverage,
}
__handlers.update(clang_all.handlers)
def __step_config(ctx, step_config):
cfg = "buildtools/reclient_cfgs/chromium-browser-clang/rewrapper_windows.cfg"
if ctx.fs.exists(cfg):
reproxy_config = rewrapper_cfg.parse(ctx, cfg)
largePlatform = {}
for k, v in reproxy_config["platform"].items():
if k.startswith("label:action"):
continue
largePlatform[k] = v
# no "action_large" Windows worker pool
windowsWorker = True
if reproxy_config["platform"]["OSFamily"] != "Windows":
largePlatform["label:action_large"] = "1"
windowsWorker = False
step_config["platforms"].update({
"clang-cl": reproxy_config["platform"],
"clang-cl_large": largePlatform,
"lld-link": largePlatform,
})
step_config["input_deps"].update(clang_all.input_deps)
# when win_toolchain_dir is unknown (e.g.
# missing build/win_toolchain.json), we can't run
# clang-cl remotely as we can find sysroot files
# under exec_root, so just run locally.
# When building with ToT Clang, we can't run clang-cl
# remotely, too.
remote = False
win_toolchain_dir = win_sdk.toolchain_dir(ctx)
if win_toolchain_dir:
remote = True
if reproxy_config["platform"]["OSFamily"] == "Windows":
step_config["input_deps"].update({
win_toolchain_dir + ":headers": [
win_toolchain_dir + ":headers-ci",
],
})
else:
win_sdk.step_config(ctx, step_config)
remote_wrapper = reproxy_config.get("remote_wrapper")
input_root_absolute_path = gn_logs.read(ctx).get("clang_need_input_root_absolute_path") == "true"
canonicalize_dir = not input_root_absolute_path
timeout = "2m"
if (not reproxy.enabled(ctx)) and windowsWorker:
# use longer timeout for siso native
# it takes long time for input fetch (many files in sysroot etc)
timeout = "4m"
step_config["rules"].extend([
{
"name": "clang-cl/cxx",
"action": "(.*_)?cxx",
"command_prefix": "..\\..\\third_party\\llvm-build\\Release+Asserts\\bin\\clang-cl.exe",
"inputs": [
"third_party/llvm-build/Release+Asserts/bin/clang-cl.exe",
],
"platform_ref": "clang-cl",
"remote": remote,
"input_root_absolute_path": input_root_absolute_path,
"canonicalize_dir": canonicalize_dir,
"remote_wrapper": remote_wrapper,
"timeout": timeout,
},
{
"name": "clang-cl/cc",
"action": "(.*_)?cc",
"command_prefix": "..\\..\\third_party\\llvm-build\\Release+Asserts\\bin\\clang-cl.exe",
"inputs": [
"third_party/llvm-build/Release+Asserts/bin/clang-cl.exe",
],
"platform_ref": "clang-cl",
"remote": remote,
"input_root_absolute_path": input_root_absolute_path,
"canonicalize_dir": canonicalize_dir,
"remote_wrapper": remote_wrapper,
"timeout": timeout,
},
{
"name": "clang-coverage/cxx",
"action": "(.*_)?cxx",
"command_prefix": "python3.exe ../../build/toolchain/clang_code_coverage_wrapper.py",
"inputs": [
"third_party/llvm-build/Release+Asserts/bin/clang++",
],
"handler": "clang_compile_coverage",
"platform_ref": "clang-cl",
"remote": remote,
"input_root_absolute_path": input_root_absolute_path,
"canonicalize_dir": canonicalize_dir,
"remote_wrapper": remote_wrapper,
"timeout": timeout,
},
{
"name": "clang-coverage/cc",
"action": "(.*_)?cc",
"command_prefix": "python3.exe ../../build/toolchain/clang_code_coverage_wrapper.py",
"inputs": [
"third_party/llvm-build/Release+Asserts/bin/clang",
],
"handler": "clang_compile_coverage",
"platform_ref": "clang-cl",
"remote": remote,
"input_root_absolute_path": input_root_absolute_path,
"canonicalize_dir": canonicalize_dir,
"remote_wrapper": remote_wrapper,
"timeout": timeout,
},
{
"name": "lld-link/alink",
"action": "(.*_)?alink",
"command_prefix": "..\\..\\third_party\\llvm-build\\Release+Asserts\\bin\\lld-link.exe /lib",
"handler": "lld_thin_archive",
"remote": False,
"accumulate": True,
},
{
"name": "lld-link/solink",
"action": "(.*_)?solink",
"command_prefix": "..\\..\\third_party\\llvm-build\\Release+Asserts\\bin\\lld-link.exe",
"handler": "lld_link",
"inputs": [
"third_party/llvm-build/Release+Asserts/bin/lld-link.exe",
win_sdk.toolchain_dir(ctx) + ":libs",
],
"exclude_input_patterns": [
"*.cc",
"*.h",
"*.js",
"*.pak",
"*.py",
],
"remote": config.get(ctx, "remote-link"),
"remote_wrapper": remote_wrapper,
"platform_ref": "lld-link",
"input_root_absolute_path": input_root_absolute_path,
"canonicalize_dir": canonicalize_dir,
"timeout": "2m",
},
{
"name": "lld-link/solink_module",
"action": "(.*_)?solink_module",
"command_prefix": "..\\..\\third_party\\llvm-build\\Release+Asserts\\bin\\lld-link.exe",
"handler": "lld_link",
"inputs": [
"third_party/llvm-build/Release+Asserts/bin/lld-link.exe",
win_sdk.toolchain_dir(ctx) + ":libs",
],
"exclude_input_patterns": [
"*.cc",
"*.h",
"*.js",
"*.pak",
"*.py",
],
"remote": config.get(ctx, "remote-link"),
"remote_wrapper": remote_wrapper,
"platform_ref": "lld-link",
"input_root_absolute_path": input_root_absolute_path,
"canonicalize_dir": canonicalize_dir,
"timeout": "2m",
},
{
"name": "lld-link/link",
"action": "(.*_)?link",
"command_prefix": "..\\..\\third_party\\llvm-build\\Release+Asserts\\bin\\lld-link.exe",
"handler": "lld_link",
"inputs": [
"third_party/llvm-build/Release+Asserts/bin/lld-link.exe",
win_sdk.toolchain_dir(ctx) + ":libs",
],
"exclude_input_patterns": [
"*.cc",
"*.h",
"*.js",
"*.pak",
"*.py",
],
"remote": config.get(ctx, "remote-link"),
"remote_wrapper": remote_wrapper,
"platform_ref": "lld-link",
"input_root_absolute_path": input_root_absolute_path,
"canonicalize_dir": canonicalize_dir,
"timeout": "2m",
},
])
elif gn.args(ctx).get("use_remoteexec") == "true":
fail("remoteexec requires rewrapper config")
return step_config
clang = module(
"clang",
step_config = __step_config,
filegroups = __filegroups,
handlers = __handlers,
)