summaryrefslogtreecommitdiff
path: root/xmake/rules/c++/modules
diff options
context:
space:
mode:
authorArthur LAURENT <[email protected]>2024-02-05 16:18:41 +0100
committerArthur LAURENT <[email protected]>2024-02-05 16:18:41 +0100
commit0b8ea930d1d9cc7dbb38fa62d1331f2addbbdc66 (patch)
tree21f185317734f8202ad9aa4a5968e2d68cdbc55a /xmake/rules/c++/modules
parent750aa4ca36eb7189ac810e9c4bd9b468dfc1af08 (diff)
cull unreferenced modules and fix gcc module mapper
Diffstat (limited to 'xmake/rules/c++/modules')
-rw-r--r--xmake/rules/c++/modules/modules_support/builder.lua2
-rw-r--r--xmake/rules/c++/modules/modules_support/dependency_scanner.lua6
-rw-r--r--xmake/rules/c++/modules/modules_support/gcc/builder.lua17
-rw-r--r--xmake/rules/c++/modules/xmake.lua6
4 files changed, 12 insertions, 19 deletions
diff --git a/xmake/rules/c++/modules/modules_support/builder.lua b/xmake/rules/c++/modules/modules_support/builder.lua
index 62b874bfb..af0a0539f 100644
--- a/xmake/rules/c++/modules/modules_support/builder.lua
+++ b/xmake/rules/c++/modules/modules_support/builder.lua
@@ -31,7 +31,7 @@ import("dependency_scanner")
-- build target modules
function _build_modules(target, sourcebatch, modules, opt)
- local objectfiles = dependency_scanner.sort_modules_by_dependencies(sourcebatch.objectfiles, modules)
+ local objectfiles = sourcebatch.objectfiles
_builder(target).populate_module_map(target, modules)
-- build modules
diff --git a/xmake/rules/c++/modules/modules_support/dependency_scanner.lua b/xmake/rules/c++/modules/modules_support/dependency_scanner.lua
index 82e960827..b5b3fcf5f 100644
--- a/xmake/rules/c++/modules/modules_support/dependency_scanner.lua
+++ b/xmake/rules/c++/modules/modules_support/dependency_scanner.lua
@@ -422,7 +422,11 @@ function sort_modules_by_dependencies(objectfiles, modules)
local objectfiles_sorted_set = hashset.from(objectfiles_sorted)
for _, objectfile in ipairs(objectfiles) do
if not objectfiles_sorted_set:has(objectfile) then
- table.insert(result, objectfile)
+ -- cull unreferenced named module but add non-module files
+ local _, provide, _ = compiler_support.get_provided_module(modules[objectfile])
+ if not provide then
+ table.insert(result, objectfile)
+ end
end
end
return result
diff --git a/xmake/rules/c++/modules/modules_support/gcc/builder.lua b/xmake/rules/c++/modules/modules_support/gcc/builder.lua
index 7e96c3fcc..17b3aabc5 100644
--- a/xmake/rules/c++/modules/modules_support/gcc/builder.lua
+++ b/xmake/rules/c++/modules/modules_support/gcc/builder.lua
@@ -107,13 +107,6 @@ function _get_maplines(target, module)
for required, _ in table.orderpairs(module.requires) do
local dep_module
local dep_target
- for _, dep in ipairs(target:orderdeps()) do
- dep_module = get_from_target_mapper(dep, required)
- if dep_module then
- dep_target = dep
- break
- end
- end
-- if not in target dep
if not dep_module then
@@ -173,16 +166,6 @@ end
-- populate module map
function populate_module_map(target, modules)
-
- -- append all modules
- for _, module in pairs(modules) do
- local name, provide = compiler_support.get_provided_module(module)
- if provide then
- add_module_to_target_mapper(target, name, provide.sourcefile, compiler_support.get_bmi_path(provide.bmi))
- end
- end
-
- -- then update their deps
for _, module in pairs(modules) do
local name, provide = compiler_support.get_provided_module(module)
if provide then
diff --git a/xmake/rules/c++/modules/xmake.lua b/xmake/rules/c++/modules/xmake.lua
index 96446e2ec..c8385da03 100644
--- a/xmake/rules/c++/modules/xmake.lua
+++ b/xmake/rules/c++/modules/xmake.lua
@@ -98,6 +98,9 @@ rule("c++.build.modules.builder")
compiler_support.patch_sourcebatch(target, sourcebatch, opt)
local modules = dependency_scanner.get_module_dependencies(target, sourcebatch, opt)
+ -- avoid linking culled objectfiles
+ sourcebatch.objectfiles = dependency_scanner.sort_modules_by_dependencies(sourcebatch.objectfiles, modules)
+
-- build modules
builder.build_modules_for_batchjobs(target, batchjobs, sourcebatch, modules, opt)
@@ -150,6 +153,9 @@ rule("c++.build.modules.builder")
compiler_support.patch_sourcebatch(target, sourcebatch, opt)
local modules = dependency_scanner.get_module_dependencies(target, sourcebatch, opt)
+ -- avoid linking culled objectfiles
+ sourcebatch.objectfiles = dependency_scanner.sort_modules_by_dependencies(sourcebatch.objectfiles, modules)
+
-- build headerunits
builder.build_headerunits_for_batchcmds(target, batchcmds, sourcebatch, modules, opt)