xref: /aosp_15_r20/external/angle/build/config/siso/clang_windows.star (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker# -*- bazel-starlark -*-
2*8975f5c5SAndroid Build Coastguard Worker# Copyright 2023 The Chromium Authors
3*8975f5c5SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker# found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker"""Siso configuration for clang-cl/windows."""
6*8975f5c5SAndroid Build Coastguard Worker
7*8975f5c5SAndroid Build Coastguard Workerload("@builtin//lib/gn.star", "gn")
8*8975f5c5SAndroid Build Coastguard Workerload("@builtin//path.star", "path")
9*8975f5c5SAndroid Build Coastguard Workerload("@builtin//struct.star", "module")
10*8975f5c5SAndroid Build Coastguard Workerload("./clang_all.star", "clang_all")
11*8975f5c5SAndroid Build Coastguard Workerload("./clang_code_coverage_wrapper.star", "clang_code_coverage_wrapper")
12*8975f5c5SAndroid Build Coastguard Workerload("./config.star", "config")
13*8975f5c5SAndroid Build Coastguard Workerload("./gn_logs.star", "gn_logs")
14*8975f5c5SAndroid Build Coastguard Workerload("./reproxy.star", "reproxy")
15*8975f5c5SAndroid Build Coastguard Workerload("./rewrapper_cfg.star", "rewrapper_cfg")
16*8975f5c5SAndroid Build Coastguard Workerload("./win_sdk.star", "win_sdk")
17*8975f5c5SAndroid Build Coastguard Worker
18*8975f5c5SAndroid Build Coastguard Workerdef __filegroups(ctx):
19*8975f5c5SAndroid Build Coastguard Worker    fg = {}
20*8975f5c5SAndroid Build Coastguard Worker    fg.update(win_sdk.filegroups(ctx))
21*8975f5c5SAndroid Build Coastguard Worker    fg.update(clang_all.filegroups(ctx))
22*8975f5c5SAndroid Build Coastguard Worker    return fg
23*8975f5c5SAndroid Build Coastguard Worker
24*8975f5c5SAndroid Build Coastguard Workerdef __clang_compile_coverage(ctx, cmd):
25*8975f5c5SAndroid Build Coastguard Worker    clang_command = clang_code_coverage_wrapper.run(ctx, list(cmd.args))
26*8975f5c5SAndroid Build Coastguard Worker    ctx.actions.fix(args = clang_command)
27*8975f5c5SAndroid Build Coastguard Worker
28*8975f5c5SAndroid Build Coastguard Worker__handlers = {
29*8975f5c5SAndroid Build Coastguard Worker    "clang_compile_coverage": __clang_compile_coverage,
30*8975f5c5SAndroid Build Coastguard Worker}
31*8975f5c5SAndroid Build Coastguard Worker
32*8975f5c5SAndroid Build Coastguard Workerdef __step_config(ctx, step_config):
33*8975f5c5SAndroid Build Coastguard Worker    cfg = "buildtools/reclient_cfgs/chromium-browser-clang/rewrapper_windows.cfg"
34*8975f5c5SAndroid Build Coastguard Worker    if ctx.fs.exists(cfg):
35*8975f5c5SAndroid Build Coastguard Worker        reproxy_config = rewrapper_cfg.parse(ctx, cfg)
36*8975f5c5SAndroid Build Coastguard Worker        largePlatform = {}
37*8975f5c5SAndroid Build Coastguard Worker        for k, v in reproxy_config["platform"].items():
38*8975f5c5SAndroid Build Coastguard Worker            if k.startswith("label:action"):
39*8975f5c5SAndroid Build Coastguard Worker                continue
40*8975f5c5SAndroid Build Coastguard Worker            largePlatform[k] = v
41*8975f5c5SAndroid Build Coastguard Worker
42*8975f5c5SAndroid Build Coastguard Worker        # no "action_large" Windows worker pool
43*8975f5c5SAndroid Build Coastguard Worker        windowsWorker = True
44*8975f5c5SAndroid Build Coastguard Worker        if reproxy_config["platform"]["OSFamily"] != "Windows":
45*8975f5c5SAndroid Build Coastguard Worker            largePlatform["label:action_large"] = "1"
46*8975f5c5SAndroid Build Coastguard Worker            windowsWorker = False
47*8975f5c5SAndroid Build Coastguard Worker        step_config["platforms"].update({
48*8975f5c5SAndroid Build Coastguard Worker            "clang-cl": reproxy_config["platform"],
49*8975f5c5SAndroid Build Coastguard Worker            "clang-cl_large": largePlatform,
50*8975f5c5SAndroid Build Coastguard Worker        })
51*8975f5c5SAndroid Build Coastguard Worker        step_config["input_deps"].update(clang_all.input_deps)
52*8975f5c5SAndroid Build Coastguard Worker
53*8975f5c5SAndroid Build Coastguard Worker        # when win_toolchain_dir is unknown (e.g.
54*8975f5c5SAndroid Build Coastguard Worker        # missing build/win_toolchain.json), we can't run
55*8975f5c5SAndroid Build Coastguard Worker        # clang-cl remotely as we can find sysroot files
56*8975f5c5SAndroid Build Coastguard Worker        # under exec_root, so just run locally.
57*8975f5c5SAndroid Build Coastguard Worker        # When building with ToT Clang, we can't run clang-cl
58*8975f5c5SAndroid Build Coastguard Worker        # remotely, too.
59*8975f5c5SAndroid Build Coastguard Worker        remote = False
60*8975f5c5SAndroid Build Coastguard Worker        win_toolchain_dir = win_sdk.toolchain_dir(ctx)
61*8975f5c5SAndroid Build Coastguard Worker        if win_toolchain_dir:
62*8975f5c5SAndroid Build Coastguard Worker            remote = True
63*8975f5c5SAndroid Build Coastguard Worker            if reproxy_config["platform"]["OSFamily"] == "Windows":
64*8975f5c5SAndroid Build Coastguard Worker                step_config["input_deps"].update({
65*8975f5c5SAndroid Build Coastguard Worker                    win_toolchain_dir + ":headers": [
66*8975f5c5SAndroid Build Coastguard Worker                        win_toolchain_dir + ":headers-ci",
67*8975f5c5SAndroid Build Coastguard Worker                    ],
68*8975f5c5SAndroid Build Coastguard Worker                })
69*8975f5c5SAndroid Build Coastguard Worker            else:
70*8975f5c5SAndroid Build Coastguard Worker                win_sdk.step_config(ctx, step_config)
71*8975f5c5SAndroid Build Coastguard Worker        remote_wrapper = reproxy_config.get("remote_wrapper")
72*8975f5c5SAndroid Build Coastguard Worker        input_root_absolute_path = gn_logs.read(ctx).get("clang_need_input_root_absolute_path") == "true"
73*8975f5c5SAndroid Build Coastguard Worker        canonicalize_dir = not input_root_absolute_path
74*8975f5c5SAndroid Build Coastguard Worker
75*8975f5c5SAndroid Build Coastguard Worker        timeout = "2m"
76*8975f5c5SAndroid Build Coastguard Worker        if (not reproxy.enabled(ctx)) and windowsWorker:
77*8975f5c5SAndroid Build Coastguard Worker            # use longer timeout for siso native
78*8975f5c5SAndroid Build Coastguard Worker            # it takes long time for input fetch (many files in sysroot etc)
79*8975f5c5SAndroid Build Coastguard Worker            timeout = "4m"
80*8975f5c5SAndroid Build Coastguard Worker
81*8975f5c5SAndroid Build Coastguard Worker        step_config["rules"].extend([
82*8975f5c5SAndroid Build Coastguard Worker            {
83*8975f5c5SAndroid Build Coastguard Worker                "name": "clang-cl/cxx",
84*8975f5c5SAndroid Build Coastguard Worker                "action": "(.*_)?cxx",
85*8975f5c5SAndroid Build Coastguard Worker                "command_prefix": "..\\..\\third_party\\llvm-build\\Release+Asserts\\bin\\clang-cl.exe",
86*8975f5c5SAndroid Build Coastguard Worker                "inputs": [
87*8975f5c5SAndroid Build Coastguard Worker                    "third_party/llvm-build/Release+Asserts/bin/clang-cl.exe",
88*8975f5c5SAndroid Build Coastguard Worker                ],
89*8975f5c5SAndroid Build Coastguard Worker                "exclude_input_patterns": ["*.stamp"],
90*8975f5c5SAndroid Build Coastguard Worker                "platform_ref": "clang-cl",
91*8975f5c5SAndroid Build Coastguard Worker                "remote": remote,
92*8975f5c5SAndroid Build Coastguard Worker                "input_root_absolute_path": input_root_absolute_path,
93*8975f5c5SAndroid Build Coastguard Worker                "canonicalize_dir": canonicalize_dir,
94*8975f5c5SAndroid Build Coastguard Worker                "remote_wrapper": remote_wrapper,
95*8975f5c5SAndroid Build Coastguard Worker                "timeout": timeout,
96*8975f5c5SAndroid Build Coastguard Worker            },
97*8975f5c5SAndroid Build Coastguard Worker            {
98*8975f5c5SAndroid Build Coastguard Worker                "name": "clang-cl/cc",
99*8975f5c5SAndroid Build Coastguard Worker                "action": "(.*_)?cc",
100*8975f5c5SAndroid Build Coastguard Worker                "command_prefix": "..\\..\\third_party\\llvm-build\\Release+Asserts\\bin\\clang-cl.exe",
101*8975f5c5SAndroid Build Coastguard Worker                "inputs": [
102*8975f5c5SAndroid Build Coastguard Worker                    "third_party/llvm-build/Release+Asserts/bin/clang-cl.exe",
103*8975f5c5SAndroid Build Coastguard Worker                ],
104*8975f5c5SAndroid Build Coastguard Worker                "exclude_input_patterns": ["*.stamp"],
105*8975f5c5SAndroid Build Coastguard Worker                "platform_ref": "clang-cl",
106*8975f5c5SAndroid Build Coastguard Worker                "remote": remote,
107*8975f5c5SAndroid Build Coastguard Worker                "input_root_absolute_path": input_root_absolute_path,
108*8975f5c5SAndroid Build Coastguard Worker                "canonicalize_dir": canonicalize_dir,
109*8975f5c5SAndroid Build Coastguard Worker                "remote_wrapper": remote_wrapper,
110*8975f5c5SAndroid Build Coastguard Worker                "timeout": timeout,
111*8975f5c5SAndroid Build Coastguard Worker            },
112*8975f5c5SAndroid Build Coastguard Worker            {
113*8975f5c5SAndroid Build Coastguard Worker                "name": "clang-coverage/cxx",
114*8975f5c5SAndroid Build Coastguard Worker                "action": "(.*_)?cxx",
115*8975f5c5SAndroid Build Coastguard Worker                "command_prefix": "python3.exe ../../build/toolchain/clang_code_coverage_wrapper.py",
116*8975f5c5SAndroid Build Coastguard Worker                "inputs": [
117*8975f5c5SAndroid Build Coastguard Worker                    "third_party/llvm-build/Release+Asserts/bin/clang++",
118*8975f5c5SAndroid Build Coastguard Worker                ],
119*8975f5c5SAndroid Build Coastguard Worker                "exclude_input_patterns": ["*.stamp"],
120*8975f5c5SAndroid Build Coastguard Worker                "handler": "clang_compile_coverage",
121*8975f5c5SAndroid Build Coastguard Worker                "platform_ref": "clang-cl",
122*8975f5c5SAndroid Build Coastguard Worker                "remote": remote,
123*8975f5c5SAndroid Build Coastguard Worker                "input_root_absolute_path": input_root_absolute_path,
124*8975f5c5SAndroid Build Coastguard Worker                "canonicalize_dir": canonicalize_dir,
125*8975f5c5SAndroid Build Coastguard Worker                "remote_wrapper": remote_wrapper,
126*8975f5c5SAndroid Build Coastguard Worker                "timeout": timeout,
127*8975f5c5SAndroid Build Coastguard Worker            },
128*8975f5c5SAndroid Build Coastguard Worker            {
129*8975f5c5SAndroid Build Coastguard Worker                "name": "clang-coverage/cc",
130*8975f5c5SAndroid Build Coastguard Worker                "action": "(.*_)?cc",
131*8975f5c5SAndroid Build Coastguard Worker                "command_prefix": "python3.exe ../../build/toolchain/clang_code_coverage_wrapper.py",
132*8975f5c5SAndroid Build Coastguard Worker                "inputs": [
133*8975f5c5SAndroid Build Coastguard Worker                    "third_party/llvm-build/Release+Asserts/bin/clang",
134*8975f5c5SAndroid Build Coastguard Worker                ],
135*8975f5c5SAndroid Build Coastguard Worker                "exclude_input_patterns": ["*.stamp"],
136*8975f5c5SAndroid Build Coastguard Worker                "handler": "clang_compile_coverage",
137*8975f5c5SAndroid Build Coastguard Worker                "platform_ref": "clang-cl",
138*8975f5c5SAndroid Build Coastguard Worker                "remote": remote,
139*8975f5c5SAndroid Build Coastguard Worker                "input_root_absolute_path": input_root_absolute_path,
140*8975f5c5SAndroid Build Coastguard Worker                "canonicalize_dir": canonicalize_dir,
141*8975f5c5SAndroid Build Coastguard Worker                "remote_wrapper": remote_wrapper,
142*8975f5c5SAndroid Build Coastguard Worker                "timeout": timeout,
143*8975f5c5SAndroid Build Coastguard Worker            },
144*8975f5c5SAndroid Build Coastguard Worker        ])
145*8975f5c5SAndroid Build Coastguard Worker    elif gn.args(ctx).get("use_remoteexec") == "true":
146*8975f5c5SAndroid Build Coastguard Worker        fail("remoteexec requires rewrapper config")
147*8975f5c5SAndroid Build Coastguard Worker    return step_config
148*8975f5c5SAndroid Build Coastguard Worker
149*8975f5c5SAndroid Build Coastguard Workerclang = module(
150*8975f5c5SAndroid Build Coastguard Worker    "clang",
151*8975f5c5SAndroid Build Coastguard Worker    step_config = __step_config,
152*8975f5c5SAndroid Build Coastguard Worker    filegroups = __filegroups,
153*8975f5c5SAndroid Build Coastguard Worker    handlers = __handlers,
154*8975f5c5SAndroid Build Coastguard Worker)
155