diff options
| author | Arthur LAURENT <[email protected]> | 2022-12-06 18:42:11 +0100 |
|---|---|---|
| committer | Arthur LAURENT <[email protected]> | 2022-12-06 18:42:11 +0100 |
| commit | ea9ea2d31ec34c55e1968484efe4f5413116adc4 (patch) | |
| tree | ef060592e55bbca4d940717845dafcc65c71bd88 | |
| parent | a7c8c7a5cd2cedc1b7cf29bc6d782762f5eb4b14 (diff) | |
Ensure module import order on MSVC
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 |
