summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur LAURENT <[email protected]>2022-12-06 18:42:11 +0100
committerArthur LAURENT <[email protected]>2022-12-06 18:42:11 +0100
commitea9ea2d31ec34c55e1968484efe4f5413116adc4 (patch)
treeef060592e55bbca4d940717845dafcc65c71bd88
parenta7c8c7a5cd2cedc1b7cf29bc6d782762f5eb4b14 (diff)
Ensure module import order on MSVC
-rw-r--r--tests/projects/c++/modules/link_order/src/bar.mpp2
-rw-r--r--tests/projects/c++/modules/link_order/src/foo.mpp2
-rw-r--r--tests/projects/c++/modules/link_order/src/main.cpp2
-rw-r--r--tests/projects/c++/modules/link_order/xmake.lua2
-rw-r--r--xmake/rules/c++/modules/modules_support/msvc.lua7
5 files changed, 10 insertions, 5 deletions
diff --git a/tests/projects/c++/modules/link_order/src/bar.mpp b/tests/projects/c++/modules/link_order/src/bar.mpp
index 1073101c3..dc7c14ec8 100644
--- a/tests/projects/c++/modules/link_order/src/bar.mpp
+++ b/tests/projects/c++/modules/link_order/src/bar.mpp
@@ -1,5 +1,5 @@
export module duplicate;
-export int value2() {
+export int value() {
return 1;
}
diff --git a/tests/projects/c++/modules/link_order/src/foo.mpp b/tests/projects/c++/modules/link_order/src/foo.mpp
index 570f0386a..eba3a4223 100644
--- a/tests/projects/c++/modules/link_order/src/foo.mpp
+++ b/tests/projects/c++/modules/link_order/src/foo.mpp
@@ -1,5 +1,5 @@
export module duplicate;
-export int value1() {
+export int value() {
return 0;
}
diff --git a/tests/projects/c++/modules/link_order/src/main.cpp b/tests/projects/c++/modules/link_order/src/main.cpp
index ba2954f28..cd9524d8b 100644
--- a/tests/projects/c++/modules/link_order/src/main.cpp
+++ b/tests/projects/c++/modules/link_order/src/main.cpp
@@ -1,5 +1,5 @@
import duplicate;
int main() {
- return VALUE();
+ return value();
}
diff --git a/tests/projects/c++/modules/link_order/xmake.lua b/tests/projects/c++/modules/link_order/xmake.lua
index 7d92945a6..ffdf26074 100644
--- a/tests/projects/c++/modules/link_order/xmake.lua
+++ b/tests/projects/c++/modules/link_order/xmake.lua
@@ -14,11 +14,9 @@ target("bar")
target("link_order_1")
set_kind("binary")
add_deps("foo", "bar")
- add_defines("VALUE=value1")
add_files("src/main.cpp")
target("link_order_2")
set_kind("binary")
add_deps("bar", "foo")
- add_defines("VALUE=value2")
add_files("src/main.cpp") \ No newline at end of file
diff --git a/xmake/rules/c++/modules/modules_support/msvc.lua b/xmake/rules/c++/modules/modules_support/msvc.lua
index c360cb2eb..756f19703 100644
--- a/xmake/rules/c++/modules/modules_support/msvc.lua
+++ b/xmake/rules/c++/modules/modules_support/msvc.lua
@@ -719,12 +719,19 @@ function get_requiresflags(target, requires, opt)
local flags = {}
local modulemap = _get_modulemap_from_mapper(target)
-- add deps required module flags
+ local already_mapped_modules = {}
for name, _ in table.orderpairs(requires) do
+ -- if already in flags, continue
+ if already_mapped_modules[name] then
+ goto continue
+ end
+
for _, dep in ipairs(target:orderdeps()) do
local modulemap_ = _get_modulemap_from_mapper(dep)
if modulemap_[name] then
table.join2(flags, modulemap_[name].flag)
table.join2(flags, modulemap_[name].deps or {})
+ already_mapped_modules[name] = true
if os.isfile(modulemap_[name].objectfile) then
_add_objectfile_to_link_arguments(target, modulemap_[name].objectfile)
end