summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-07-30 21:53:17 +0800
committerruki <[email protected]>2022-07-30 21:53:17 +0800
commit792be350e4fb85cce9b610248a9ba0f7ff5666e9 (patch)
tree2f1acab03ae8bd9f4f51d8bbd21a35eb06a13b84
parent934073e85ec7d17a68cbf812cc0a79cb936351b0 (diff)
fix submodules2 for msvc
-rw-r--r--xmake/rules/c++/modules/build_modules/msvc.lua13
1 files changed, 10 insertions, 3 deletions
diff --git a/xmake/rules/c++/modules/build_modules/msvc.lua b/xmake/rules/c++/modules/build_modules/msvc.lua
index 7076bcaa5..0a8976468 100644
--- a/xmake/rules/c++/modules/build_modules/msvc.lua
+++ b/xmake/rules/c++/modules/build_modules/msvc.lua
@@ -102,15 +102,12 @@ function build_with_batchjobs(target, batchjobs, sourcebatch, opt)
assert(stdifcdirflag, "compiler(msvc): does not support c++ module!")
-- we need patch objectfiles to sourcebatch for linking module objects
- local modulefiles = {}
sourcebatch.sourcekind = "cxx"
sourcebatch.objectfiles = sourcebatch.objectfiles or {}
sourcebatch.dependfiles = sourcebatch.dependfiles or {}
for _, sourcefile in ipairs(sourcebatch.sourcefiles) do
local objectfile = target:objectfile(sourcefile)
local dependfile = target:dependfile(objectfile)
- local modulefile = (cachedir and path.join(cachedir, path.basename(sourcefile)) or objectfile) .. ".ifc"
- table.insert(modulefiles, modulefile)
table.insert(sourcebatch.objectfiles, objectfile)
table.insert(sourcebatch.dependfiles, dependfile)
end
@@ -118,6 +115,16 @@ function build_with_batchjobs(target, batchjobs, sourcebatch, opt)
-- load moduledeps
local moduledeps, moduledeps_files = module_parser.load(target, sourcebatch, opt)
+ -- get modulefiles
+ local modulefiles = {}
+ for _, sourcefile in ipairs(sourcebatch.sourcefiles) do
+ local moduleinfo = moduledeps_files[sourcefile] or {}
+ -- make module file path, @note we need process submodule name, e.g. module.submodule.mpp -> module.submodule.ifc
+ -- @see https://github.com/xmake-io/xmake/issues/2614
+ local modulefile = (cachedir and path.join(cachedir, moduleinfo.name or path.basename(sourcefile)) or objectfile) .. ".ifc"
+ table.insert(modulefiles, modulefile)
+ end
+
-- compile module files to object files
local count = 0
local sourcefiles_total = #sourcebatch.sourcefiles