summaryrefslogtreecommitdiff
path: root/xmake/modules/private/utils/toolchain.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2025-10-09 00:39:41 +0800
committerruki <[email protected]>2025-10-09 00:39:41 +0800
commit3fbba4de3674ce636cdb2e3456eff3828f77355a (patch)
tree9227eec9e32877dfd7e942ae767228696f2d44cc /xmake/modules/private/utils/toolchain.lua
parent888f5c3b5452b2b8c6c47e89028c4449a238e31f (diff)
improve to check msvc
Diffstat (limited to 'xmake/modules/private/utils/toolchain.lua')
-rw-r--r--xmake/modules/private/utils/toolchain.lua32
1 files changed, 32 insertions, 0 deletions
diff --git a/xmake/modules/private/utils/toolchain.lua b/xmake/modules/private/utils/toolchain.lua
index da2e9febf..fe88b4838 100644
--- a/xmake/modules/private/utils/toolchain.lua
+++ b/xmake/modules/private/utils/toolchain.lua
@@ -17,10 +17,42 @@
-- @author ruki
-- @file toolchain.lua
--
+
+-- imports
+import("core.base.option")
+import("core.project.config")
import("core.base.semver")
import("core.tool.linker")
import("core.tool.compiler")
import("core.language.language")
+import("lib.detect.find_tool")
+import("detect.sdks.find_vstudio")
+
+-- check vc build tools sdk
+function check_vc_build_tools(toolchain, sdkdir, check)
+ local opt = {}
+ opt.sdkdir = sdkdir
+ opt.vs_toolset = toolchain:config("vs_toolset") or config.get("vs_toolset")
+ opt.vs_sdkver = toolchain:config("vs_sdkver") or config.get("vs_sdkver")
+
+ local vcvarsall = find_vstudio.find_build_tools(opt)
+ if not vcvarsall then
+ return
+ end
+
+ local vcvars = vcvarsall[toolchain:arch()]
+ if vcvars and vcvars.PATH and vcvars.INCLUDE and vcvars.LIB then
+ 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)
+
+ if check then
+ check(vcvars)
+ end
+ return vcvars
+ end
+end
-- is the compatible with the host?
function is_compatible_with_host(name)