@@ -109,11 +109,9 @@ function find_build_tools(opt)
109109 end
110110
111111 local variables = {}
112- local VCToolsVersion
113- local vs_toolset = opt .vs_toolset
114- if vs_toolset and os .isdir (path .join (sdkdir , " VC/Tools/MSVC" , vs_toolset )) then
115- VCToolsVersion = vs_toolset
116- else
112+ local VCInstallDir = path .join (sdkdir , " VC" )
113+ local VCToolsVersion = opt .vs_toolset
114+ if not VCToolsVersion or not os .isdir (path .join (VCInstallDir , " Tools/MSVC" , VCToolsVersion )) then
117115 -- https://github.com/xmake-io/xmake/issues/6159
118116 local latest_toolset
119117 for _ , dir in ipairs (os .dirs (path .join (sdkdir , " VC/Tools/MSVC/*" ))) do
@@ -128,8 +126,9 @@ function find_build_tools(opt)
128126 return
129127 end
130128 end
129+ variables .VCInstallDir = VCInstallDir
131130 variables .VCToolsVersion = VCToolsVersion
132- variables .VCToolsInstallDir = path .join (sdkdir , " VC/ Tools/MSVC" , VCToolsVersion )
131+ variables .VCToolsInstallDir = path .join (VCInstallDir , " Tools/MSVC" , VCToolsVersion )
133132
134133 local WindowsSDKVersion
135134 local vs_sdkver = opt .vs_sdkver
@@ -145,10 +144,15 @@ function find_build_tools(opt)
145144 end
146145 variables .WindowsSDKVersion = WindowsSDKVersion
147146 variables .WindowsSdkDir = path .join (sdkdir , " Windows Kits/10" )
147+ variables .WindowsSdkBinPath = path .join (variables .WindowsSdkDir , " bin" )
148+ variables .WindowsSdkVerBinPath = path .join (variables .WindowsSdkBinPath , WindowsSDKVersion )
149+ variables .ExtensionSdkDir = path .join (variables .WindowsSdkDir , " ExtensionSdkDir" )
150+ variables .UCRTVersion = WindowsSDKVersion
151+ variables .UniversalCRTSdkDir = variables .WindowsSdkDir
148152
149153 local includedirs = {
150154 path .join (variables .VCToolsInstallDir , " include" ),
151- path .join (variables .VCToolsInstallDir , " atlmfc/ include" ),
155+ path .join (variables .VCToolsInstallDir , " atlmfc" , " include" ),
152156 path .join (variables .WindowsSdkDir , " Include" , WindowsSDKVersion , " ucrt" ),
153157 path .join (variables .WindowsSdkDir , " Include" , WindowsSDKVersion , " shared" ),
154158 path .join (variables .WindowsSdkDir , " Include" , WindowsSDKVersion , " um" ),
@@ -158,8 +162,10 @@ function find_build_tools(opt)
158162
159163 local linkdirs = {
160164 path .join (variables .VCToolsInstallDir , " lib" ),
165+ path .join (variables .VCToolsInstallDir , " atlmfc" , " lib" ),
161166 path .join (variables .WindowsSdkDir , " Lib" , WindowsSDKVersion , " ucrt" ),
162167 path .join (variables .WindowsSdkDir , " Lib" , WindowsSDKVersion , " um" ),
168+ path .join (variables .WindowsSdkDir , " Lib" , WindowsSDKVersion , " km" ),
163169 }
164170
165171 local archs = {
@@ -182,32 +188,42 @@ function find_build_tools(opt)
182188 if # lib ~= 0 then
183189 local vcvars = {
184190 BUILD_TOOLS_ROOT = sdkdir ,
191+ VSInstallDir = sdkdir ,
185192
186193 -- vs runs in a windows ctx, so the envsep is always ";"
187194 INCLUDE = path .joinenv (includedirs , ' ;' ),
188195 LIB = path .joinenv (lib , ' ;' ),
189196
190- WindowsSdkDir = variables .WindowsSdkDir ,
191- WindowsSDKVersion = WindowsSDKVersion ,
192- VCToolsInstallDir = variables .VCToolsInstallDir ,
193197 VSCMD_ARG_HOST_ARCH = " x64" ,
198+
199+ VCInstallDir = variables .VCInstallDir ,
200+ VCToolsVersion = variables .VCToolsVersion ,
201+ VCToolsInstallDir = variables .VCToolsInstallDir ,
202+
203+ WindowsSDKVersion = variables .WindowsSDKVersion ,
204+ WindowsSdkDir = variables .WindowsSdkDir ,
205+ WindowsSdkBinPath = variables .WindowsSdkBinPath ,
206+ WindowsSdkVerBinPath = variables .WindowsSdkVerBinPath ,
207+ ExtensionSdkDir = variables .ExtensionSdkDir ,
208+ UCRTVersion = variables .UCRTVersion ,
209+ UniversalCRTSdkDir = variables .UniversalCRTSdkDir ,
194210 }
195211
196- local buidl_tools_bin = {}
212+ local build_tools_bin = {}
197213 local host_dir = " Host" .. vcvars .VSCMD_ARG_HOST_ARCH
198214 if is_host (" windows" ) then
199- table.insert (buidl_tools_bin , path .join (vcvars .VCToolsInstallDir , " bin" , host_dir , target_arch ))
200- table.insert (buidl_tools_bin , path .join (vcvars .WindowsSdkDir , " bin" , WindowsSDKVersion ))
201- table.insert (buidl_tools_bin , path .join (vcvars .WindowsSdkDir , " bin" , WindowsSDKVersion , " ucrt" ))
215+ table.insert (build_tools_bin , path .join (vcvars .VCToolsInstallDir , " bin" , host_dir , target_arch ))
216+ table.insert (build_tools_bin , path .join (vcvars .WindowsSdkDir , " bin" , WindowsSDKVersion ))
217+ table.insert (build_tools_bin , path .join (vcvars .WindowsSdkDir , " bin" , WindowsSDKVersion , " ucrt" ))
202218 elseif is_host (" linux" ) then
203219 -- for msvc-wine
204- table.insert (buidl_tools_bin , path .join (sdkdir , " bin" , target_arch ))
220+ table.insert (build_tools_bin , path .join (sdkdir , " bin" , target_arch ))
205221 end
206222
207223 vcvars .VSCMD_ARG_TGT_ARCH = target_arch
208- vcvars .BUILD_TOOLS_BIN = path .joinenv (buidl_tools_bin )
224+ vcvars .BUILD_TOOLS_BIN = path .joinenv (build_tools_bin )
209225
210- local PATH = buidl_tools_bin
226+ local PATH = build_tools_bin
211227 table .join2 (PATH , path .splitenv (os.getenv (" PATH" )))
212228 vcvars .PATH = path .joinenv (PATH )
213229
0 commit comments