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