diff options
| author | ruki <[email protected]> | 2025-12-26 10:29:58 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-12-26 10:29:58 +0800 |
| commit | f6bead07b47ebf489125198f97cd398ef2b67d22 (patch) | |
| tree | 624d7f0ef54aef2aac58f478742d5e471658dec2 | |
| parent | 810f3e5a697f4e546045b80fdb0aa4893717932f (diff) | |
| parent | fd0512ecccfc30a82356747e106ed98db45ae0cf (diff) | |
Merge pull request #7164 from xmake-io/clangcl
fix envs for clang-cl
| -rw-r--r-- | tests/projects/c++/modules/packages-subtarget/xmake.lua | 2 | ||||
| -rw-r--r-- | tests/projects/c++/modules/packages/xmake.lua | 2 | ||||
| -rw-r--r-- | tests/projects/c++/modules/xmake_tests1/xmake.lua | 5 | ||||
| -rw-r--r-- | xmake/modules/core/tools/cl.lua | 15 | ||||
| -rw-r--r-- | xmake/modules/private/utils/toolchain.lua | 9 | ||||
| -rw-r--r-- | xmake/toolchains/clang-cl/load.lua | 6 |
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 |
