• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# -*- bazel-starlark -*-
2# Copyright 2023 The Chromium Authors
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5"""Siso configuration for clang-cl/windows."""
6
7load("@builtin//encoding.star", "json")
8load("@builtin//path.star", "path")
9load("@builtin//struct.star", "module")
10load("./clang_all.star", "clang_all")
11load("./clang_code_coverage_wrapper.star", "clang_code_coverage_wrapper")
12load("./config.star", "config")
13load("./gn_logs.star", "gn_logs")
14load("./rewrapper_cfg.star", "rewrapper_cfg")
15
16def __win_toolchain_dir(ctx):
17    # build/win_toolchain.json may not exist when
18    # $env:DEPOT_TOOLS_WIN_TOOLCHAIN=0 or so.
19    if not ctx.fs.exists("build/win_toolchain.json"):
20        return None
21    data = json.decode(str(ctx.fs.read("build/win_toolchain.json")))
22    if "path" in data:
23        return ctx.fs.canonpath(data["path"])
24    return None
25
26def __filegroups(ctx):
27    win_toolchain_dir = __win_toolchain_dir(ctx)
28    fg = {}
29    if win_toolchain_dir:
30        fg.update({
31            # for precomputed subtree
32            win_toolchain_dir + ":headers-ci": {
33                "type": "glob",
34                "includes": [
35                    "*.h",
36                    "*.inl",
37                    "*.H",
38                    "*.Hxx",
39                    "*.hxx",
40                    "*.hpp",
41                    "VC/Tools/MSVC/*/include/*",
42                    "VC/Tools/MSVC/*/include/*/*",
43                ],
44            },
45        })
46    fg.update(clang_all.filegroups(ctx))
47    return fg
48
49def __clang_compile_coverage(ctx, cmd):
50    clang_command = clang_code_coverage_wrapper.run(ctx, list(cmd.args))
51    ctx.actions.fix(args = clang_command)
52
53__handlers = {
54    "clang_compile_coverage": __clang_compile_coverage,
55}
56
57def __step_config(ctx, step_config):
58    cfg = "buildtools/reclient_cfgs/chromium-browser-clang/rewrapper_windows.cfg"
59    if ctx.fs.exists(cfg):
60        reproxy_config = rewrapper_cfg.parse(ctx, cfg)
61        largePlatform = {}
62        for k, v in reproxy_config["platform"].items():
63            if k.startswith("label:action"):
64                continue
65            largePlatform[k] = v
66
67        # no "action_large" Windows worker pool
68        if reproxy_config["platform"]["OSFamily"] != "Windows":
69            largePlatform["label:action_large"] = "1"
70        step_config["platforms"].update({
71            "clang-cl": reproxy_config["platform"],
72            "clang-cl_large": largePlatform,
73        })
74        step_config["input_deps"].update(clang_all.input_deps)
75
76        # when win_toolchain_dir is unknown (e.g.
77        # missing build/win_toolchain.json), we can't run
78        # clang-cl remotely as we can find sysroot files
79        # under exec_root, so just run locally.
80        # When building with ToT Clang, we can't run clang-cl
81        # remotely, too.
82        remote = False
83        win_toolchain_dir = __win_toolchain_dir(ctx)
84        if win_toolchain_dir:
85            remote = True
86            if reproxy_config["platform"]["OSFamily"] == "Windows":
87                step_config["input_deps"].update({
88                    win_toolchain_dir + ":headers": [
89                        win_toolchain_dir + ":headers-ci",
90                    ],
91                })
92            else:
93                step_config["input_deps"].update({
94                    win_toolchain_dir + ":headers": [
95                        win_toolchain_dir + ":headers-ci",
96                        # third_party/libc++ includes "DeplayIMP.h"
97                        path.join(win_toolchain_dir, "VC/Tools/MSVC/14.34.31933/include/DelayIMP.h"),
98                        # third_party/abseil-cpp includes "dbghelp.h"
99                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/dbghelp.h"),
100                        # third_party/abseil-cpp includes "aclapi.h"
101                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/aclapi.h"),
102                        # base/debug includes "psapi.h"
103                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/psapi.h"),
104                        # base/process includes "tlhelp32.h"
105                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/tlhelp32.h"),
106                        # base/process includes "userenv.h"
107                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/userenv.h"),
108                        # base includes "shlobj.h"
109                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/shlobj.h"),
110                        # base/win includes "lm.h"
111                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/lm.h"),
112                        # base/win includes "mdmregistration.h"
113                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/mdmregistration.h"),
114                        # base/win includes "shellscalingapi.h"
115                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/shellscalingapi.h"),
116                        # base/win includes "uiviewsettingsinterop.h"
117                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/uiviewsettingsinterop.h"),
118                        # native_client/src/shared/platform/win includes "WinError.h"
119                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/shared/WinError.h"),
120                        # third_party/webrtc/rtc_base/win includes "windows.graphics.directX.direct3d11.h"
121                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/cppwinrt/winrt/windows.graphics.directX.direct3d11.h"),
122                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/winrt/windows.graphics.directX.direct3d11.h"),
123                        # third_party/webrtc/rtc_base/win includes "windows.graphics.directX.direct3d11.interop.h"
124                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/windows.graphics.directX.direct3d11.interop.h"),
125                        # third_party/crashpad/crashpad/handler/win includes "werapi.h"
126                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/werapi.h"),
127                        # chrome/install_static/ includes "wtsapi32.h"
128                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/wtsapi32.h"),
129                        # third_party/dawn/include/dawn/native includes "DXGI1_4.h"
130                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/shared/DXGI1_4.h"),
131                        # v8/src/diagnostics includes "versionhelpers.h"
132                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/versionhelpers.h"),
133                        # ui/gfx/ includes "DXGIType.h"
134                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/shared/DXGIType.h"),
135                        # third_party/unrar includes "PowrProf.h"
136                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/PowrProf.h"),
137                        # device/base/ includes "dbt.h"
138                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/dbt.h"),
139                        # third_party/skia/ includes "ObjBase.h"
140                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/ObjBase.h"),
141                        # third_party/webrtc/rtc_base includes "ws2spi.h"
142                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/ws2spi.h"),
143                        # third_party/skia/ includes "T2EmbApi.h"
144                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/T2EmbApi.h"),
145                        # device/vr/windows/ includes "D3D11_1.h"
146                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/D3D11_1.h"),
147                        # rlz/win/ includes "Sddl.h"
148                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/shared/Sddl.h"),
149                        # chrome/common/safe_browsing/ includes "softpub.h"
150                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/softpub.h"),
151                        # services/device/generic_sensor/ includes "Sensors.h"
152                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/Sensors.h"),
153                        # third_party/webrtc/modules/desktop_capture/win includes "windows.graphics.capture.interop.h"
154                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/windows.graphics.capture.interop.h"),
155                        # third_party/skia/ includes "FontSub.h"
156                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/FontSub.h"),
157                        # chrome/updater/ includes "regstr.h"
158                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/regstr.h"),
159                        # services/device/compute_pressure includes "pdh.h"
160                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/pdh.h"),
161                        # chrome/installer/ includes "mshtmhst.h"
162                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/mshtmhst.h"),
163                        # net/ssl/ includes "NCrypt.h"
164                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/NCrypt.h"),
165                        # device/fido/win/ includes "Combaseapi.h"
166                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/Combaseapi.h"),
167                        # components/device_signals/core/system_signals/win includes "wscapi.h"
168                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/wscapi.h"),
169                        # net/proxy_resolution/win/ includes "dhcpcsdk.h"
170                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/dhcpcsdk.h"),
171                        # third_party/dawn/third_party/glfw includes "xinput.h"
172                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/xinput.h"),
173                        # v8/tools/v8windbg includes "pathcch.h"
174                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/pathcch.h"),
175                        # remoting/host includes "rpcproxy.h"
176                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/rpcproxy.h"),
177                        # sandbox/win includes "Aclapi.h"
178                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/Aclapi.h"),
179                        # ui/accessibility/platform includes "uiautomation.h"
180                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/uiautomation.h"),
181                        # chrome/credential_provider/gaiacp includes "ntsecapi.h"
182                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/ntsecapi.h"),
183                        # net/dns includes "Winsock2.h"
184                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/Winsock2.h"),
185                        # media/cdm/win includes "mferror.h"
186                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/mferror.h"),
187                        # chrome/credentialProvider/gaiacp includes "Winternl.h"
188                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/Winternl.h"),
189                        # media/audio/win includes "audioclient.h"
190                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/audioclient.h"),
191                        # media/audio/win includes "MMDeviceAPI.h"
192                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/MMDeviceAPI.h"),
193                        # net/proxy_resolution/win includes "dhcpv6csdk.h"
194                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/dhcpv6csdk.h"),
195                        # components/system_media_controls/win includes "systemmediatransportcontrolsinterop.h"
196                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/systemmediatransportcontrolsinterop.h"),
197                        # ui/native_theme includes "Windows.Media.ClosedCaptioning.h"
198                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/cppwinrt/winrt/Windows.Media.ClosedCaptioning.h"),
199                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/winrt/Windows.Media.ClosedCaptioning.h"),
200                        # media/audio/win includes "Functiondiscoverykeys_devpkey.h"
201                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/Functiondiscoverykeys_devpkey.h"),
202                        # device/fido includes "Winuser.h"
203                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/Winuser.h"),
204                        # chrome/updater/win includes "msxml2.h"
205                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/msxml2.h"),
206                        # remoting/host includes "ime.h"
207                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/ime.h"),
208                        # remoting/host/win includes "D3DCommon.h"
209                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/D3DCommon.h"),
210                        # ui/views/controls/menu includes "Vssym32.h"
211                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/Vssym32.h"),
212                        # third_party/wtl includes "richedit.h"
213                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/richedit.h"),
214                        # chrome/updater/net includes "Urlmon.h"
215                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/Urlmon.h"),
216                        # device/gamepad includes "XInput.h"
217                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/XInput.h"),
218                        # chrome/credential_provider/gaiacp includes "Shlobj.h"
219                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/Shlobj.h"),
220                        # content/renderer includes "mlang.h"
221                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/mlang.h"),
222                        # components/storage_monitor includes "portabledevice.h"
223                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/portabledevice.h"),
224                        # third_party/wtl includes "richole.h"
225                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/richole.h"),
226                        # chrome/utility/importer includes "intshcut.h"
227                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/intshcut.h"),
228                        # chrome/browser/net includes "Ws2spi.h"
229                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/Ws2spi.h"),
230                        # chrome/browser/enterprise/platform_auth includes "proofofpossessioncookieinfo.h)"
231                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/proofofpossessioncookieinfo.h"),
232                        # chrome/utility/importer includes "urlhist.h"
233                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/urlhist.h"),
234                        # chrome/updater/win/installer includes "msiquery.h"
235                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/msiquery.h"),
236                        # third_party/win_virtual_display/controller includes "Devpropdef.h"
237                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/shared/Devpropdef.h"),
238                        # third_party/dawn/third_party/dxc/include/dxc/Support/WinIncludes.h "ObjIdl.h"
239                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/ObjIdl.h"),
240                        # third_party/dawn/third_party/dxc/lib/Support includes "D3Dcommon.h"
241                        # https://github.com/microsoft/DirectXShaderCompiler/pull/6380
242                        path.join(win_toolchain_dir, "Windows Kits/10/Include/10.0.22621.0/um/D3Dcommon.h"),
243                    ],
244                })
245        remote_wrapper = reproxy_config.get("remote_wrapper")
246        input_root_absolute_path = gn_logs.read(ctx).get("clang_need_input_root_absolute_path") == "true"
247        canonicalize_dir = not input_root_absolute_path
248
249        step_config["rules"].extend([
250            {
251                "name": "clang-cl/cxx",
252                "action": "(.*_)?cxx",
253                "command_prefix": "..\\..\\third_party\\llvm-build\\Release+Asserts\\bin\\clang-cl.exe",
254                "inputs": [
255                    "third_party/llvm-build/Release+Asserts/bin/clang-cl.exe",
256                ],
257                "exclude_input_patterns": ["*.stamp"],
258                "platform_ref": "clang-cl",
259                "remote": remote,
260                "input_root_absolute_path": input_root_absolute_path,
261                "canonicalize_dir": canonicalize_dir,
262                "remote_wrapper": remote_wrapper,
263                "timeout": "2m",
264            },
265            {
266                "name": "clang-cl/cc",
267                "action": "(.*_)?cc",
268                "command_prefix": "..\\..\\third_party\\llvm-build\\Release+Asserts\\bin\\clang-cl.exe",
269                "inputs": [
270                    "third_party/llvm-build/Release+Asserts/bin/clang-cl.exe",
271                ],
272                "exclude_input_patterns": ["*.stamp"],
273                "platform_ref": "clang-cl",
274                "remote": remote,
275                "input_root_absolute_path": input_root_absolute_path,
276                "canonicalize_dir": canonicalize_dir,
277                "remote_wrapper": remote_wrapper,
278                "timeout": "2m",
279            },
280            {
281                "name": "clang-coverage/cxx",
282                "action": "(.*_)?cxx",
283                "command_prefix": "python3.exe ../../build/toolchain/clang_code_coverage_wrapper.py",
284                "inputs": [
285                    "third_party/llvm-build/Release+Asserts/bin/clang++",
286                ],
287                "exclude_input_patterns": ["*.stamp"],
288                "handler": "clang_compile_coverage",
289                "platform_ref": "clang-cl",
290                "remote": remote,
291                "input_root_absolute_path": input_root_absolute_path,
292                "canonicalize_dir": canonicalize_dir,
293                "remote_wrapper": remote_wrapper,
294                "timeout": "2m",
295            },
296            {
297                "name": "clang-coverage/cc",
298                "action": "(.*_)?cc",
299                "command_prefix": "python3.exe ../../build/toolchain/clang_code_coverage_wrapper.py",
300                "inputs": [
301                    "third_party/llvm-build/Release+Asserts/bin/clang",
302                ],
303                "exclude_input_patterns": ["*.stamp"],
304                "handler": "clang_compile_coverage",
305                "platform_ref": "clang-cl",
306                "remote": remote,
307                "input_root_absolute_path": input_root_absolute_path,
308                "canonicalize_dir": canonicalize_dir,
309                "remote_wrapper": remote_wrapper,
310                "timeout": "2m",
311            },
312        ])
313    return step_config
314
315clang = module(
316    "clang",
317    step_config = __step_config,
318    filegroups = __filegroups,
319    handlers = __handlers,
320)
321