diff options
| author | Arthur LAURENT <[email protected]> | 2024-02-05 16:18:41 +0100 |
|---|---|---|
| committer | Arthur LAURENT <[email protected]> | 2024-02-05 16:18:41 +0100 |
| commit | 0b8ea930d1d9cc7dbb38fa62d1331f2addbbdc66 (patch) | |
| tree | 21f185317734f8202ad9aa4a5968e2d68cdbc55a /xmake/rules/c++/modules | |
| parent | 750aa4ca36eb7189ac810e9c4bd9b468dfc1af08 (diff) | |
cull unreferenced modules and fix gcc module mapper
Diffstat (limited to 'xmake/rules/c++/modules')
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) |
