summaryrefslogtreecommitdiff
path: root/xmake/toolchains
diff options
context:
space:
mode:
authorstar9029 <[email protected]>2024-11-14 18:33:37 +0800
committerstar9029 <[email protected]>2024-11-14 18:33:37 +0800
commitef7e37c8833d59455a7d30d7b7b244e3e230ea1d (patch)
tree81814b4617c37c687cb616810dde899f86727e4c /xmake/toolchains
parent2c9034a9c7b6e567ba6f23089323d4908519d547 (diff)
Support custom vc build tools
Diffstat (limited to 'xmake/toolchains')
-rw-r--r--xmake/toolchains/msvc/check.lua29
1 files changed, 28 insertions, 1 deletions
diff --git a/xmake/toolchains/msvc/check.lua b/xmake/toolchains/msvc/check.lua
index 6d5772733..92e4d18ba 100644
--- a/xmake/toolchains/msvc/check.lua
+++ b/xmake/toolchains/msvc/check.lua
@@ -100,6 +100,28 @@ function _check_vstudio(toolchain)
return vs
end
+-- check the visual studio
+function _check_vc_build_tools(toolchain, bat)
+ local opt = {}
+ opt.bat = bat
+ local vcvarsall = find_vstudio.load_custom_vcenv(opt)
+ local vcvars = vcvarsall[toolchain:arch()]
+ if vcvars and vcvars.PATH and vcvars.INCLUDE and vcvars.LIB then
+ -- save vcvars
+ toolchain:config_set("vcvars", vcvars)
+ toolchain:config_set("vcarchs", table.orderkeys(vcvarsall))
+ toolchain:config_set("vs_toolset", vcvars.VCToolsVersion)
+ toolchain:config_set("vs_sdkver", vcvars.WindowsSDKVersion)
+
+ -- check compiler
+ local cl = find_tool("cl.exe", {version = true, force = true, envs = vcvars})
+ if cl and cl.version then
+ cprint("checking for Microsoft C/C++ Compiler (%s) version ... ${color.success}%s", toolchain:arch(), cl.version)
+ end
+ return vcvars
+ end
+end
+
-- main entry
function main(toolchain)
@@ -113,7 +135,12 @@ function main(toolchain)
local cxx = path.basename(config.get("cxx") or "cl"):lower()
local mrc = path.basename(config.get("mrc") or "rc"):lower()
if cc == "cl" or cxx == "cl" or mrc == "rc" then
- return _check_vstudio(toolchain)
+ local vc_bat = option.get("vc_bat")
+ if vc_bat then
+ return _check_vc_build_tools(toolchain, vc_bat)
+ else
+ return _check_vstudio(toolchain)
+ end
end
end