diff options
| author | star9029 <[email protected]> | 2024-11-18 15:39:31 +0800 |
|---|---|---|
| committer | star9029 <[email protected]> | 2024-11-18 15:39:31 +0800 |
| commit | 968471fe0c02ba62bb4dc7b27bb72397090e7697 (patch) | |
| tree | 19944e53a1f744460759f02c4362253192e22e43 | |
| parent | e126a59290cf409e064fe970b62ed2aec125c25f (diff) | |
support clang-cl
| -rw-r--r-- | xmake/toolchains/clang-cl/check.lua | 55 | ||||
| -rw-r--r-- | xmake/toolchains/msvc/check.lua | 2 |
2 files changed, 47 insertions, 10 deletions
diff --git a/xmake/toolchains/clang-cl/check.lua b/xmake/toolchains/clang-cl/check.lua index 515c3d639..b416a44ce 100644 --- a/xmake/toolchains/clang-cl/check.lua +++ b/xmake/toolchains/clang-cl/check.lua @@ -24,6 +24,15 @@ import("core.project.config") import("detect.sdks.find_vstudio") import("lib.detect.find_tool") +function _find_clang_cl(vcvars) + local paths + local pathenv = os.getenv("PATH") + if pathenv then + paths = path.splitenv(pathenv) + end + return find_tool("clang-cl.exe", {version = true, force = true, paths = paths, envs = vcvars}) +end + -- attempt to check vs environment function _check_vsenv(toolchain) @@ -69,12 +78,7 @@ function _check_vsenv(toolchain) -- check compiler local program - local paths - local pathenv = os.getenv("PATH") - if pathenv then - paths = path.splitenv(pathenv) - end - local tool = find_tool("clang-cl.exe", {version = true, force = true, paths = paths, envs = vcvars}) + local tool = _find_clang_cl(vcvars) if tool then program = tool.program end @@ -105,11 +109,39 @@ function _check_vstudio(toolchain) return vs end +function _check_vc_build_tools(toolchain, sdkdir) + 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 + -- 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 clang_cl = _find_clang_cl(vcvars) + if clang_cl and clang_cl.version then + cprint("checking for LLVM Clang C/C++ Compiler (%s) version ... ${color.success}%s", toolchain:arch(), clang_cl.version) + end + return vcvars + end +end + -- main entry function main(toolchain) - -- only for windows - if not is_host("windows") then + -- only for windows or linux (msvc-wine) + if not is_host("windows", "linux") then return end @@ -118,7 +150,12 @@ function main(toolchain) local cxx = path.basename(config.get("cxx") or "clang-cl"):lower() local mrc = path.basename(config.get("mrc") or "rc"):lower() if cc == "clang-cl" or cxx == "clang-cl" or mrc == "rc" then - return _check_vstudio(toolchain) + local sdkdir = toolchain:sdkdir() + if sdkdir then + return _check_vc_build_tools(toolchain, sdkdir) + else + return _check_vstudio(toolchain) + end end end diff --git a/xmake/toolchains/msvc/check.lua b/xmake/toolchains/msvc/check.lua index 37eb45255..3c70d43c0 100644 --- a/xmake/toolchains/msvc/check.lua +++ b/xmake/toolchains/msvc/check.lua @@ -141,7 +141,7 @@ 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 - local sdkdir = option.get("sdk") or toolchain:config("sdk") or config.get("sdk") + local sdkdir = toolchain:sdkdir() if sdkdir then return _check_vc_build_tools(toolchain, sdkdir) else |
