From b2409c79d337f6160a86cce03ae6013e042ab934 Mon Sep 17 00:00:00 2001 From: Arthur LAURENT Date: Tue, 15 Aug 2023 18:17:14 +0200 Subject: use /experimental:modules on msvc only when VS version is < to 16.11 --- xmake/rules/c++/modules/modules_support/msvc.lua | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/xmake/rules/c++/modules/modules_support/msvc.lua b/xmake/rules/c++/modules/modules_support/msvc.lua index 703374423..2822c8949 100644 --- a/xmake/rules/c++/modules/modules_support/msvc.lua +++ b/xmake/rules/c++/modules/modules_support/msvc.lua @@ -133,9 +133,13 @@ end -- load module support for the current target function load(target) - -- add modules flags + -- add modules flags if visual studio version is < 16.11 (vc 14.29) local modulesflag = get_modulesflag(target) - target:add("cxxflags", modulesflag) + local msvc = target:toolchain("msvc") + local vcvars = msvc:config("vcvars") + if vcvars.VCInstallDir and vcvars.VCToolsVersion and semver.compare(vcvars.VCToolsVersion, "14.29") == -1 then + target:add("cxxflags", modulesflag) + end -- enable std modules if c++23 by defaults if target:data("c++.msvc.enable_std_import") == nil then @@ -606,7 +610,11 @@ function get_modulesflag(target) if compinst:has_flags("-experimental:module", "cxxflags", {flagskey = "cl_experimental_module"}) then modulesflag = "-experimental:module" end - assert(modulesflag, "compiler(msvc): does not support c++ module!") + local msvc = target:toolchain("msvc") + local vcvars = msvc:config("vcvars") + if vcvars.VCInstallDir and vcvars.VCToolsVersion and semver.compare(vcvars.VCToolsVersion, "14.29") == -1 then + assert(modulesflag, "compiler(msvc): does not support c++ module!") + end _g.modulesflag = modulesflag or false end return modulesflag or nil -- cgit v1.3.1