summaryrefslogtreecommitdiff
path: root/xmake/rules/c++/modules
diff options
context:
space:
mode:
authorruki <[email protected]>2022-08-12 22:49:52 +0800
committerGitHub <[email protected]>2022-08-12 22:49:52 +0800
commit8dccc2d987d20b6df18360adab034ebd42f6ec9b (patch)
treea1c93f8dc0088d165f504f7d7afd8d485040f78c /xmake/rules/c++/modules
parent5e0358b48a64ca871165be09d2d9d23b77849879 (diff)
Update common.lua
Diffstat (limited to 'xmake/rules/c++/modules')
-rw-r--r--xmake/rules/c++/modules/modules_support/common.lua16
1 files changed, 16 insertions, 0 deletions
diff --git a/xmake/rules/c++/modules/modules_support/common.lua b/xmake/rules/c++/modules/modules_support/common.lua
index 8072800bc..39ad17f2e 100644
--- a/xmake/rules/c++/modules/modules_support/common.lua
+++ b/xmake/rules/c++/modules/modules_support/common.lua
@@ -125,6 +125,17 @@ function bmi_extension(target)
return modules_support(target).get_bmi_extension()
end
+-- has module extension? e.g. *.mpp, ...
+function has_module_extension(sourcefile)
+ local modulexts = _g.modulexts
+ if modulexts == nil then
+ modulexts = hashset.of(".mpp", ".mxx", ".cppm", ".ixx")
+ _g.modulexts = modulexts
+ end
+ local extension = path.extension(sourcefile)
+ return modulexts:has(extension:lower())
+end
+
-- this target contains module files?
function contains_modules(target)
local target_with_modules = target:sourcebatches()["c++.build.modules"] and true or false
@@ -377,6 +388,11 @@ function fallback_generate_dependencies(target, jsonfile, sourcefile)
module_name = line:match("export%s+module%s+(.+)%s*;")
end
local module_depname = line:match("import%s+(.+)%s*;")
+ -- we need parse module interface dep in cxx/impl_unit.cpp, e.g. hello.mpp and hello_impl.cpp
+ -- @see https://github.com/xmake-io/xmake/pull/2664#issuecomment-1213167314
+ if not module_depname and not has_module_extension(sourcefile) then
+ module_depname = line:match("module%s+(.+)%s*;")
+ end
if module_depname then
local module_dep = {}
-- partition? import :xxx;