summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-11-05 00:38:31 +0800
committerruki <[email protected]>2022-11-05 00:38:31 +0800
commit181a337b4092af6691d8e2e135d21dae4a03556a (patch)
treef5c3948d20cacb3bfe6225dee8c35970890b9245
parentb9c18ddfd99ca4d2bb3d5dec76a8bc1b24394bf2 (diff)
improve std modules for msvc
-rw-r--r--tests/projects/c++/modules/stdmodules/src/my_module.cpp6
-rw-r--r--tests/projects/c++/modules/stdmodules/src/my_module.mpp6
-rw-r--r--tests/projects/c++/modules/stdmodules/test/test.cpp6
-rw-r--r--tests/projects/c++/modules/stdmodules/xmake.lua1
-rw-r--r--xmake/rules/c++/modules/modules_support/msvc.lua25
5 files changed, 32 insertions, 12 deletions
diff --git a/tests/projects/c++/modules/stdmodules/src/my_module.cpp b/tests/projects/c++/modules/stdmodules/src/my_module.cpp
index 829be43e3..5264da821 100644
--- a/tests/projects/c++/modules/stdmodules/src/my_module.cpp
+++ b/tests/projects/c++/modules/stdmodules/src/my_module.cpp
@@ -1,5 +1,9 @@
module my_module;
+#ifdef _MSC_VER
+import std.core;
+#else
import std;
+#endif
-auto my_sum(size_t a, size_t b) -> size_t { return a + b; } \ No newline at end of file
+auto my_sum(size_t a, size_t b) -> size_t { return a + b; }
diff --git a/tests/projects/c++/modules/stdmodules/src/my_module.mpp b/tests/projects/c++/modules/stdmodules/src/my_module.mpp
index 196b33381..5c0e44bc9 100644
--- a/tests/projects/c++/modules/stdmodules/src/my_module.mpp
+++ b/tests/projects/c++/modules/stdmodules/src/my_module.mpp
@@ -1,5 +1,9 @@
export module my_module;
+#ifdef _MSC_VER
+import std.core;
+#else
import std;
+#endif
-export auto my_sum(size_t a, size_t b) -> size_t; \ No newline at end of file
+export auto my_sum(size_t a, size_t b) -> size_t;
diff --git a/tests/projects/c++/modules/stdmodules/test/test.cpp b/tests/projects/c++/modules/stdmodules/test/test.cpp
index 050715c4f..380f02838 100644
--- a/tests/projects/c++/modules/stdmodules/test/test.cpp
+++ b/tests/projects/c++/modules/stdmodules/test/test.cpp
@@ -1,5 +1,11 @@
#include <stdio.h>
+
+#ifdef _MSC_VER
+import std.core;
+#else
import std;
+#endif
+
import my_module;
int main(int argc, char** argv) {
diff --git a/tests/projects/c++/modules/stdmodules/xmake.lua b/tests/projects/c++/modules/stdmodules/xmake.lua
index 1c699bb80..b3521e74b 100644
--- a/tests/projects/c++/modules/stdmodules/xmake.lua
+++ b/tests/projects/c++/modules/stdmodules/xmake.lua
@@ -2,6 +2,7 @@ add_rules("mode.debug", "mode.release")
set_languages("c++20")
add_cxxflags("clang::-stdlib=libc++")
+set_values("msvc.modules.stdifcdir", true)
target("mod")
set_kind("shared")
add_files("src/*.cpp", "src/*.mpp")
diff --git a/xmake/rules/c++/modules/modules_support/msvc.lua b/xmake/rules/c++/modules/modules_support/msvc.lua
index 04ab2bf7a..b57ac4520 100644
--- a/xmake/rules/c++/modules/modules_support/msvc.lua
+++ b/xmake/rules/c++/modules/modules_support/msvc.lua
@@ -126,25 +126,30 @@ end
-- load module support for the current target
function load(target)
- -- get flags
- local modulesflag = get_modulesflag(target)
-- add modules flags
+ local modulesflag = get_modulesflag(target)
target:add("cxxflags", modulesflag)
-- add stdifcdir in case of if the user ask for it
- if target:values("msvc.modules.stdifcdir") then
- local stdifcdirflag = get_stdifcdirflag(target)
- for _, toolchain_inst in ipairs(target:toolchains()) do
- if toolchain_inst:name() == "msvc" then
- local vcvars = toolchain_inst:config("vcvars")
- if vcvars.VCInstallDir and vcvars.VCToolsVersion then
- local stdifcdir = path.join(vcvars.VCInstallDir, "Tools", "MSVC", vcvars.VCToolsVersion, "ifc", target:is_arch("x64") and "x64" or "x86")
+ local stdifcdirflag = get_stdifcdirflag(target)
+ if stdifcdirflag then
+ local msvc = target:toolchain("msvc")
+ if msvc then
+ local vcvars = msvc:config("vcvars")
+ if vcvars.VCInstallDir and vcvars.VCToolsVersion then
+ local arch
+ if target:is_arch("x64", "x86_64") then
+ arch = "x64"
+ elseif target:is_arch("x86", "i386") then
+ arch = "x86"
+ end
+ if arch then
+ local stdifcdir = path.join(vcvars.VCInstallDir, "Tools", "MSVC", vcvars.VCToolsVersion, "ifc", arch)
if os.isdir(stdifcdir) then
target:add("cxxflags", {stdifcdirflag, winos.short_path(stdifcdir)}, {force = true, expand = false})
end
end
- break
end
end
end