• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# -*- bazel-starlark -*-
2# Copyright 2024 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 fow win sdk."""
6
7load("@builtin//encoding.star", "json")
8load("@builtin//lib/gn.star", "gn")
9load("@builtin//path.star", "path")
10load("@builtin//runtime.star", "runtime")
11load("@builtin//struct.star", "module")
12load("./gn_logs.star", "gn_logs")
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 __win_sdk_version(ctx):
25    return gn_logs.read(ctx).get("windows_sdk_version")
26
27def __target_cpu(ctx):
28    if "args.gn" in ctx.metadata:
29        gn_args = gn.args(ctx)
30        target = gn_args.get("target_cpu", "").strip('"')
31        if target:
32            return target
33    return __host_cpu()
34
35def __host_cpu():
36    if runtime.arch == "amd64":
37        return "x64"
38    return runtime.arch
39
40def __enabled(ctx):
41    if "args.gn" in ctx.metadata:
42        gn_args = gn.args(ctx)
43        if gn_args.get("target_os") == '"win"':
44            return True
45    return runtime.os == "windows"
46
47def __filegroups(ctx):
48    win_toolchain_dir = __win_toolchain_dir(ctx)
49    sdk_version = __win_sdk_version(ctx)
50    target_cpu = __target_cpu(ctx)
51    host_cpu = __host_cpu()
52    fg = {}
53    if win_toolchain_dir and sdk_version:
54        def __extend_libs_for_target_cpu(libs, cpu):
55            libs.extend([
56                path.join("VC/Tools/MSVC/*/lib", cpu, "*.lib"),
57                path.join("VC/Tools/MSVC/*/lib", cpu, "*.pdb"),
58                path.join("VC/Tools/MSVC/*/*/lib", cpu, "*.lib"),
59                path.join("VC/Tools/MSVC/*/*/lib", cpu, "*.pdb"),
60                path.join("VC/Tools/MSVC/*/lib", cpu, "*/*.lib"),
61                path.join("Windows Kits/10/Lib", sdk_version, "ucrt", cpu, "*.lib"),
62                path.join("Windows Kits/10/Lib", sdk_version, "um", cpu, "*.lib"),
63                path.join("Windows Kits/10/Lib", cpu, "*.lib"),
64            ])
65            return libs
66
67        toolchain_lib_globs = [
68            "DIA SDK/lib/*.lib",
69            "DIA SDK/lib/*/*.lib",
70        ]
71        toolchain_lib_globs = __extend_libs_for_target_cpu(toolchain_lib_globs, target_cpu)
72        if target_cpu != host_cpu:
73            # Add libs for host OS if it's cross build because it might be a
74            # target with sub toolchain for host.
75            toolchain_lib_globs = __extend_libs_for_target_cpu(toolchain_lib_globs, host_cpu)
76
77        fg.update({
78            # for precomputed subtrees.
79            # Case insensitive files are listed by filegroups.
80            # But, case sensitive files are added individually in
81            # __step_config() below.
82            win_toolchain_dir + ":headers-ci": {
83                "type": "glob",
84                "includes": [
85                    "*.h",
86                    "*.inl",
87                    "*.H",
88                    "*.Hxx",
89                    "*.hxx",
90                    "*.hpp",
91                    "VC/Tools/MSVC/*/include/*",
92                    "VC/Tools/MSVC/*/include/*/*",
93                ],
94            },
95            win_toolchain_dir + ":libs-ci": {
96                "type": "glob",
97                "includes": toolchain_lib_globs,
98            },
99        })
100    return fg
101
102def __step_config(ctx, step_config):
103    win_toolchain_dir = __win_toolchain_dir(ctx)
104    if not win_toolchain_dir:
105        return
106    target_cpu = __target_cpu(ctx)
107    host_cpu = __host_cpu()
108    win_toolchain_headers = [
109        win_toolchain_dir + ":headers-ci",
110    ]
111    win_toolchain_libs = [
112        win_toolchain_dir + ":libs-ci",
113    ]
114    sdk_version = __win_sdk_version(ctx)
115    if sdk_version:
116        win_toolchain_headers.extend([
117            # third_party/abseil-cpp includes "dbghelp.h"
118            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/dbghelp.h"),
119            # third_party/abseil-cpp includes "aclapi.h"
120            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/aclapi.h"),
121            # base/debug includes "psapi.h"
122            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/psapi.h"),
123            # base/process includes "tlhelp32.h"
124            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/tlhelp32.h"),
125            # base/process includes "userenv.h"
126            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/userenv.h"),
127            # base includes "shlobj.h"
128            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/shlobj.h"),
129            # base/win includes "lm.h"
130            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/lm.h"),
131            # base/win includes "mdmregistration.h"
132            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/mdmregistration.h"),
133            # base/win includes "shellscalingapi.h"
134            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/shellscalingapi.h"),
135            # base/win includes "uiviewsettingsinterop.h"
136            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/uiviewsettingsinterop.h"),
137            # native_client/src/shared/platform/win includes "WinError.h"
138            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "shared/WinError.h"),
139            # third_party/webrtc/rtc_base/win includes "windows.graphics.directX.direct3d11.h"
140            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "cppwinrt/winrt/windows.graphics.directX.direct3d11.h"),
141            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "winrt/windows.graphics.directX.direct3d11.h"),
142            # third_party/webrtc/rtc_base/win includes "windows.graphics.directX.direct3d11.interop.h"
143            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/windows.graphics.directX.direct3d11.interop.h"),
144            # third_party/crashpad/crashpad/handler/win includes "werapi.h"
145            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/werapi.h"),
146            # chrome/install_static/ includes "wtsapi32.h"
147            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/wtsapi32.h"),
148            # third_party/dawn/include/dawn/native includes "DXGI1_4.h"
149            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "shared/DXGI1_4.h"),
150            # v8/src/diagnostics includes "versionhelpers.h"
151            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/versionhelpers.h"),
152            # ui/gfx/ includes "DXGIType.h"
153            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "shared/DXGIType.h"),
154            # third_party/unrar includes "PowrProf.h"
155            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/PowrProf.h"),
156            # device/base/ includes "dbt.h"
157            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/dbt.h"),
158            # third_party/skia/ includes "ObjBase.h"
159            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/ObjBase.h"),
160            # third_party/webrtc/rtc_base includes "ws2spi.h"
161            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/ws2spi.h"),
162            # third_party/skia/ includes "T2EmbApi.h"
163            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/T2EmbApi.h"),
164            # device/vr/windows/ includes "D3D11_1.h"
165            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/D3D11_1.h"),
166            # rlz/win/ includes "Sddl.h"
167            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "shared/Sddl.h"),
168            # chrome/common/safe_browsing/ includes "softpub.h"
169            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/softpub.h"),
170            # services/device/generic_sensor/ includes "Sensors.h"
171            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/Sensors.h"),
172            # third_party/webrtc/modules/desktop_capture/win includes "windows.graphics.capture.interop.h"
173            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/windows.graphics.capture.interop.h"),
174            # third_party/skia/ includes "FontSub.h"
175            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/FontSub.h"),
176            # chrome/updater/ includes "regstr.h"
177            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/regstr.h"),
178            # services/device/compute_pressure includes "pdh.h"
179            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/pdh.h"),
180            # chrome/installer/ includes "mshtmhst.h"
181            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/mshtmhst.h"),
182            # net/ssl/ includes "NCrypt.h"
183            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/NCrypt.h"),
184            # device/fido/win/ includes "Combaseapi.h"
185            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/Combaseapi.h"),
186            # components/device_signals/core/system_signals/win includes "wscapi.h"
187            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/wscapi.h"),
188            # net/proxy_resolution/win/ includes "dhcpcsdk.h"
189            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/dhcpcsdk.h"),
190            # third_party/dawn/third_party/glfw includes "xinput.h"
191            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/xinput.h"),
192            # v8/tools/v8windbg includes "pathcch.h"
193            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/pathcch.h"),
194            # remoting/host includes "rpcproxy.h"
195            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/rpcproxy.h"),
196            # sandbox/win includes "Aclapi.h"
197            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/Aclapi.h"),
198            # ui/accessibility/platform includes "uiautomation.h"
199            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/uiautomation.h"),
200            # chrome/credential_provider/gaiacp includes "ntsecapi.h"
201            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/ntsecapi.h"),
202            # net/dns includes "Winsock2.h"
203            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/Winsock2.h"),
204            # media/cdm/win includes "mferror.h"
205            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/mferror.h"),
206            # chrome/credentialProvider/gaiacp includes "Winternl.h"
207            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/Winternl.h"),
208            # media/audio/win includes "audioclient.h"
209            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/audioclient.h"),
210            # media/audio/win includes "MMDeviceAPI.h"
211            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/MMDeviceAPI.h"),
212            # net/proxy_resolution/win includes "dhcpv6csdk.h"
213            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/dhcpv6csdk.h"),
214            # components/system_media_controls/win includes "systemmediatransportcontrolsinterop.h"
215            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/systemmediatransportcontrolsinterop.h"),
216            # ui/native_theme includes "Windows.Media.ClosedCaptioning.h"
217            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "cppwinrt/winrt/Windows.Media.ClosedCaptioning.h"),
218            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "winrt/Windows.Media.ClosedCaptioning.h"),
219            # media/audio/win includes "Functiondiscoverykeys_devpkey.h"
220            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/Functiondiscoverykeys_devpkey.h"),
221            # device/fido includes "Winuser.h"
222            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/Winuser.h"),
223            # chrome/updater/win includes "msxml2.h"
224            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/msxml2.h"),
225            # remoting/host includes "ime.h"
226            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/ime.h"),
227            # remoting/host/win includes "D3DCommon.h"
228            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/D3DCommon.h"),
229            # ui/views/controls/menu includes "Vssym32.h"
230            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/Vssym32.h"),
231            # third_party/wtl includes "richedit.h"
232            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/richedit.h"),
233            # chrome/updater/net includes "Urlmon.h"
234            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/Urlmon.h"),
235            # device/gamepad includes "XInput.h"
236            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/XInput.h"),
237            # chrome/credential_provider/gaiacp includes "Shlobj.h"
238            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/Shlobj.h"),
239            # content/renderer includes "mlang.h"
240            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/mlang.h"),
241            # components/storage_monitor includes "portabledevice.h"
242            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/portabledevice.h"),
243            # third_party/wtl includes "richole.h"
244            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/richole.h"),
245            # chrome/utility/importer includes "intshcut.h"
246            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/intshcut.h"),
247            # chrome/browser/net includes "Ws2spi.h"
248            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/Ws2spi.h"),
249            # chrome/browser/enterprise/platform_auth includes "proofofpossessioncookieinfo.h)"
250            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/proofofpossessioncookieinfo.h"),
251            # chrome/utility/importer includes "urlhist.h"
252            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/urlhist.h"),
253            # chrome/updater/win/installer includes "msiquery.h"
254            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/msiquery.h"),
255            # third_party/win_virtual_display/controller includes "Devpropdef.h"
256            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "shared/Devpropdef.h"),
257            # third_party/dawn/third_party/dxc/include/dxc/Support/WinIncludes.h "ObjIdl.h"
258            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/ObjIdl.h"),
259            # third_party/dawn/third_party/dxc/lib/Support includes "D3Dcommon.h"
260            # https://github.com/microsoft/DirectXShaderCompiler/pull/6380
261            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/D3Dcommon.h"),
262        ])
263
264        def __extend_libs_for_case_varients(libs, cpu):
265            # The following libs are necessary to resolve case mismatches on
266            # Linux remote workers.
267            libs.extend([
268                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "Bthprops.lib"),
269                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "Cfgmgr32.lib"),
270                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "Crypt32.lib"),
271                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "DXGI.lib"),
272                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "DbgEng.lib"),
273                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "DbgModel.lib"),
274                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "Ole32.lib"),
275                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "Pathcch.lib"),
276                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "Propsys.lib"),
277                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "Rtworkq.lib"),
278                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "RuntimeObject.lib"),
279                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "Setupapi.lib"),
280                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "Wintrust.lib"),
281                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "advapi32.lib"),
282                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "comctl32.lib"),
283                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "comdlg32.lib"),
284                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "credui.lib"),
285                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "crypt32.lib"),
286                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "dbghelp.lib"),
287                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "dhcpcsvc.lib"),
288                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "dnsapi.lib"),
289                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "gdi32.lib"),
290                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "imagehlp.lib"),
291                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "imm32.lib"),
292                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "kernel32.lib"),
293                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "mf.lib"),
294                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "mfplat.lib"),
295                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "msi.lib"),
296                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "msimg32.lib"),
297                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "msxml2.lib"),
298                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "netapi32.lib"),
299                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "ntdsapi.lib"),
300                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "ole32.lib"),
301                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "oleacc.lib"),
302                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "oleaut32.lib"),
303                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "onecore.lib"),
304                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "opengl32.lib"),
305                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "pdh.lib"),
306                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "portabledeviceguids.lib"),
307                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "rpcns4.lib"),
308                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "rpcrt4.lib"),
309                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "sapi.lib"),
310                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "secur32.lib"),
311                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "setupapi.lib"),
312                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "shlwapi.lib"),
313                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "uiautomationcore.lib"),
314                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "urlmon.lib"),
315                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "user32.lib"),
316                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "userenv.lib"),
317                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "usp10.lib"),
318                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "uuid.lib"),
319                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "uxtheme.lib"),
320                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "version.lib"),
321                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "wininet.lib"),
322                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "winmm.lib"),
323                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "winspool.lib"),
324                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "wintrust.lib"),
325                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "ws2_32.lib"),
326                path.join(win_toolchain_dir, "Windows Kits/10/Lib", sdk_version, "um", cpu, "wtsapi32.lib"),
327            ])
328            return libs
329
330        win_toolchain_libs.extend([
331            # Having the empty "Windows Kits/10/Include/{sdk_version}" directory is necessary
332            # for lld-link to search libs under "Windows Kits/10/Lib/{sdk_version}/um".
333            path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version),
334        ])
335        win_toolchain_libs = __extend_libs_for_case_varients(win_toolchain_libs, target_cpu)
336        if target_cpu != host_cpu:
337            win_toolchain_libs = __extend_libs_for_case_varients(win_toolchain_libs, host_cpu)
338        step_config["input_deps"].update({
339            win_toolchain_dir + ":headers": win_toolchain_headers,
340            win_toolchain_dir + ":libs": win_toolchain_libs,
341        })
342    else:
343        # sdk_version may be unknown when first build after `gn clean` (no gn_logs.txt yet)
344        print("sdk_version is unknown")
345
346win_sdk = module(
347    "win_sdk",
348    enabled = __enabled,
349    toolchain_dir = __win_toolchain_dir,
350    step_config = __step_config,
351    filegroups = __filegroups,
352)
353