Skip to content

Commit 96c1d7f

Browse files
authored
Merge pull request #6452 from Redbeanw44602/improve-msvc-wine
Improve msvc-wine support.
2 parents 7695fd5 + a4690c9 commit 96c1d7f

File tree

1 file changed

+33
-17
lines changed

1 file changed

+33
-17
lines changed

xmake/modules/detect/sdks/find_vstudio.lua

Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)