summaryrefslogtreecommitdiff
path: root/xmake/rules/c++/modules/modules_support
diff options
context:
space:
mode:
authorruki <[email protected]>2025-03-07 10:33:00 +0800
committerGitHub <[email protected]>2025-03-07 10:33:00 +0800
commite6809b94206cb4ec9bc05baa0f09567ebb5d67e9 (patch)
treea5ff151620d489ebc8051bea9d382d1ad883bcda /xmake/rules/c++/modules/modules_support
parent0e5beb5bed3ec5126245b64264c7ca5c1829c9fa (diff)
Update compiler_support.lua
Diffstat (limited to 'xmake/rules/c++/modules/modules_support')
-rw-r--r--xmake/rules/c++/modules/modules_support/clang/compiler_support.lua24
1 files changed, 15 insertions, 9 deletions
diff --git a/xmake/rules/c++/modules/modules_support/clang/compiler_support.lua b/xmake/rules/c++/modules/modules_support/clang/compiler_support.lua
index 01c559f2e..6eb4f84b1 100644
--- a/xmake/rules/c++/modules/modules_support/clang/compiler_support.lua
+++ b/xmake/rules/c++/modules/modules_support/clang/compiler_support.lua
@@ -288,17 +288,23 @@ function get_stdmodules(target)
elseif cpplib == "stdc++" then
-- libstdc++ doesn't have a std module file atm
elseif cpplib == "msstl" then
- -- msstl std module file is not compatible with llvm <= 19
- local toolchain = target:toolchain("clang") or target:toolchain("clang-cl")
- local msvc = import("core.tool.toolchain", {anonymous = true}).load("msvc", {plat = toolchain:plat(), arch = toolchain:arch()})
- if msvc and msvc:check() then
- local vcvars = msvc:config("vcvars")
- if vcvars.VCInstallDir and vcvars.VCToolsVersion then
- local stdmodulesdir = path.join(vcvars.VCInstallDir, "Tools", "MSVC", vcvars.VCToolsVersion, "modules")
- if os.isdir(stdmodulesdir) then
- return {path.join(stdmodulesdir, "std.ixx"), path.join(stdmodulesdir, "std.compat.ixx")}
+ -- msstl std module file is not compatible with llvm < 19
+ local clang_version = get_clang_version(target)
+ if clang_version and semver.compare(clang_version, "19.0") >= 0 then
+ local toolchain = target:toolchain("clang") or target:toolchain("clang-cl")
+ local msvc = import("core.tool.toolchain", {anonymous = true}).load("msvc", {plat = toolchain:plat(), arch = toolchain:arch()})
+ if msvc and msvc:check() then
+ local vcvars = msvc:config("vcvars")
+ if vcvars.VCInstallDir and vcvars.VCToolsVersion then
+ local stdmodulesdir = path.join(vcvars.VCInstallDir, "Tools", "MSVC", vcvars.VCToolsVersion, "modules")
+ if os.isdir(stdmodulesdir) then
+ return {path.join(stdmodulesdir, "std.ixx"), path.join(stdmodulesdir, "std.compat.ixx")}
+ end
end
end
+ else
+ wprint("msstl std module file is not compatible with llvm < 19, please upgrade clang/clang-cl version!")
+ return
end
end
end