summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2025-12-26 10:29:58 +0800
committerGitHub <[email protected]>2025-12-26 10:29:58 +0800
commitf6bead07b47ebf489125198f97cd398ef2b67d22 (patch)
tree624d7f0ef54aef2aac58f478742d5e471658dec2
parent810f3e5a697f4e546045b80fdb0aa4893717932f (diff)
parentfd0512ecccfc30a82356747e106ed98db45ae0cf (diff)
Merge pull request #7164 from xmake-io/clangcl
fix envs for clang-cl
-rw-r--r--tests/projects/c++/modules/packages-subtarget/xmake.lua2
-rw-r--r--tests/projects/c++/modules/packages/xmake.lua2
-rw-r--r--tests/projects/c++/modules/xmake_tests1/xmake.lua5
-rw-r--r--xmake/modules/core/tools/cl.lua15
-rw-r--r--xmake/modules/private/utils/toolchain.lua9
-rw-r--r--xmake/toolchains/clang-cl/load.lua6
6 files changed, 24 insertions, 15 deletions
diff --git a/tests/projects/c++/modules/packages-subtarget/xmake.lua b/tests/projects/c++/modules/packages-subtarget/xmake.lua
index bfafb232b..365ef08da 100644
--- a/tests/projects/c++/modules/packages-subtarget/xmake.lua
+++ b/tests/projects/c++/modules/packages-subtarget/xmake.lua
@@ -1,5 +1,5 @@
add_rules("mode.release", "mode.debug")
-set_languages("c++2b")
+set_languages("c++20")
add_repositories("my-repo my-repo")
add_requires("foo", "bar", "bar2")
diff --git a/tests/projects/c++/modules/packages/xmake.lua b/tests/projects/c++/modules/packages/xmake.lua
index 62dba119b..936b83daf 100644
--- a/tests/projects/c++/modules/packages/xmake.lua
+++ b/tests/projects/c++/modules/packages/xmake.lua
@@ -1,5 +1,5 @@
add_rules("mode.release", "mode.debug")
-set_languages("c++2b")
+set_languages("c++20")
add_repositories("my-repo my-repo")
add_requires("foo", "bar", "bar2")
diff --git a/tests/projects/c++/modules/xmake_tests1/xmake.lua b/tests/projects/c++/modules/xmake_tests1/xmake.lua
index 64198ec69..c0f5530fe 100644
--- a/tests/projects/c++/modules/xmake_tests1/xmake.lua
+++ b/tests/projects/c++/modules/xmake_tests1/xmake.lua
@@ -1,6 +1,7 @@
add_rules('mode.debug', 'mode.release')
- set_languages('c++23')
- set_policy('build.c++.modules.std', false)
+
+set_languages('c++23')
+set_policy('build.c++.modules.std', false)
target('module_dep')
set_kind('moduleonly')
diff --git a/xmake/modules/core/tools/cl.lua b/xmake/modules/core/tools/cl.lua
index 240189e4c..e5f8f7eaf 100644
--- a/xmake/modules/core/tools/cl.lua
+++ b/xmake/modules/core/tools/cl.lua
@@ -267,6 +267,13 @@ function nf_language(self, stdname)
-- the stdc++ maps
if _g.cxxmaps == nil then
+ -- clang-cl with c++23preview does not work for c++ modules
+ -- https://github.com/xmake-io/xmake/issues/7169
+ local cxx23 = {"-std:c++23", "-std:c++23preview", "-std:c++latest"}
+ if self:name() == "clang_cl" then
+ cxx23 = {"-std:c++23", "-std:c++latest"}
+ end
+ local cxx2b = cxx23
_g.cxxmaps =
{
cxx11 = "-std:c++11"
@@ -281,10 +288,10 @@ function nf_language(self, stdname)
, gnuxx20 = {"-std:c++20", "-std:c++latest"}
, cxx2a = {"-std:c++20", "-std:c++latest"}
, gnuxx2a = {"-std:c++20", "-std:c++latest"}
- , cxx23 = {"-std:c++23", "-std:c++23preview", "-std:c++latest"}
- , gnuxx23 = {"-std:c++23", "-std:c++23preview", "-std:c++latest"}
- , cxx2b = {"-std:c++23", "-std:c++23preview", "-std:c++latest"}
- , gnuxx2b = {"-std:c++23", "-std:c++23preview", "-std:c++latest"}
+ , cxx23 = cxx23
+ , gnuxx23 = cxx23
+ , cxx2b = cxx2b
+ , gnuxx2b = cxx2b
, cxx26 = {"-std:c++26", "-std:c++latest"}
, gnuxx26 = {"-std:c++26", "-std:c++latest"}
, cxxlatest = "-std:c++latest"
diff --git a/xmake/modules/private/utils/toolchain.lua b/xmake/modules/private/utils/toolchain.lua
index 48aabdffa..263137300 100644
--- a/xmake/modules/private/utils/toolchain.lua
+++ b/xmake/modules/private/utils/toolchain.lua
@@ -180,14 +180,15 @@ function get_clang_target_flags(toolchain)
end
-- add vs environments
-function add_vsenvs(toolchain, expect_vars)
+function add_vsenvs(toolchain, opt)
+ opt = opt or {}
local curenvs = os.getenvs()
- expect_vars = expect_vars or {"PATH", "LIB", "INCLUDE", "LIBPATH"}
- for _, name in ipairs(expect_vars) do
+ local varnames = opt.varnames or {"PATH", "LIB", "INCLUDE", "LIBPATH"}
+ for _, name in ipairs(varnames) do
_add_vsenv(toolchain, name, curenvs)
end
for _, name in ipairs(find_vstudio.get_vcvars()) do
- if not table.contains(expect_vars, name:upper()) then
+ if not table.contains(varnames, name:upper()) then
_add_vsenv(toolchain, name, curenvs)
end
end
diff --git a/xmake/toolchains/clang-cl/load.lua b/xmake/toolchains/clang-cl/load.lua
index 69f9c8297..e06883012 100644
--- a/xmake/toolchains/clang-cl/load.lua
+++ b/xmake/toolchains/clang-cl/load.lua
@@ -47,9 +47,6 @@ function main(toolchain)
toolchain:set("toolset", "ar", "link.exe")
end
- -- add vs environments
- toolchain_utils.add_vsenvs(toolchain)
-
-- add llvm runenvs before adding vsenvs
--
-- The dynamic libraries (DLLs) for Clang ASan and MSVC ASan share the same filename, making them incompatible.
@@ -57,6 +54,9 @@ function main(toolchain)
-- If the Clang path is not prioritized (placed first), the system incorrectly loads the MSVC ASan DLL, resulting in a runtime failure.
toolchain_utils.add_llvm_runenvs(toolchain)
+ -- add vs environments
+ toolchain_utils.add_vsenvs(toolchain)
+
-- add target flags
local flags = toolchain_utils.get_clang_target_flags(toolchain)
if flags then