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