summaryrefslogtreecommitdiff
path: root/xmake/rules/c++/modules/xmake.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2025-04-06 20:58:25 +0800
committerruki <[email protected]>2025-04-08 15:31:57 +0800
commit99f68b5c58d822170c84e2b6c0b3f7f974e009be (patch)
treec8c56bda3847417b66ca747eab722107847a7f86 /xmake/rules/c++/modules/xmake.lua
parent406b9d08d56eae4893082d75e84f016f4619f66c (diff)
remove unused prepare jobs
Diffstat (limited to 'xmake/rules/c++/modules/xmake.lua')
-rw-r--r--xmake/rules/c++/modules/xmake.lua84
1 files changed, 23 insertions, 61 deletions
diff --git a/xmake/rules/c++/modules/xmake.lua b/xmake/rules/c++/modules/xmake.lua
index 5f17e2099..87429f90c 100644
--- a/xmake/rules/c++/modules/xmake.lua
+++ b/xmake/rules/c++/modules/xmake.lua
@@ -70,6 +70,20 @@ rule("c++.build.modules.builder")
set_sourcekinds("cxx")
set_extensions(".mpp", ".mxx", ".cppm", ".ixx")
+ -- generate module dependencies
+ on_prepare_files(function (target, jobgraph, sourcebatch, opt)
+ if target:data("cxx.has_modules") then
+ import("modules_support.builder")
+ import("modules_support.dependency_scanner")
+
+ -- patch sourcebatch
+ builder.patch_sourcebatch(target, sourcebatch)
+
+ -- generate module dependencies
+ dependency_scanner.generate_module_dependencies(target, jobgraph, sourcebatch, opt)
+ end
+ end, {jobgraph = true})
+
-- parallel build support to accelerate `xmake build` to build modules
before_build_files(function(target, jobgraph, sourcebatch, opt)
if target:data("cxx.has_modules") then
@@ -77,36 +91,11 @@ rule("c++.build.modules.builder")
import("modules_support.dependency_scanner")
import("modules_support.builder")
- -- add target deps modules
- if target:orderdeps() then
- local deps_sourcefiles = dependency_scanner.get_targetdeps_modules(target)
- if deps_sourcefiles then
- table.join2(sourcebatch.sourcefiles, deps_sourcefiles)
- end
- end
-
- -- append std module
- local std_modules = compiler_support.get_stdmodules(target)
- if std_modules then
- table.join2(sourcebatch.sourcefiles, std_modules)
- end
-
- -- extract packages modules dependencies
- local package_modules_data = dependency_scanner.get_all_packages_modules(target, opt)
- if package_modules_data then
- -- append to sourcebatch
- for _, package_module_data in table.orderpairs(package_modules_data) do
- table.insert(sourcebatch.sourcefiles, package_module_data.file)
- target:fileconfig_set(package_module_data.file, {external = package_module_data.external, defines = package_module_data.metadata.defines})
- end
- end
-
- opt = opt or {}
- opt.jobgraph = true
-
- compiler_support.patch_sourcebatch(target, sourcebatch, opt)
- local modules = dependency_scanner.get_module_dependencies(target, sourcebatch, opt)
+ -- patch sourcebatch
+ builder.patch_sourcebatch(target, sourcebatch)
+ -- get module dependencies
+ local modules = dependency_scanner.get_module_dependencies(target, sourcebatch)
if not target:is_moduleonly() then
-- avoid building non referenced modules
local build_objectfiles, link_objectfiles = dependency_scanner.sort_modules_by_dependencies(target, sourcebatch.objectfiles, modules)
@@ -134,45 +123,18 @@ rule("c++.build.modules.builder")
import("modules_support.dependency_scanner")
import("modules_support.builder")
- -- add target deps modules
- if target:orderdeps() then
- local deps_sourcefiles = dependency_scanner.get_targetdeps_modules(target)
- if deps_sourcefiles then
- table.join2(sourcebatch.sourcefiles, deps_sourcefiles)
- end
- end
-
- -- append std module
- local std_modules = compiler_support.get_stdmodules(target)
- if std_modules then
- table.join2(sourcebatch.sourcefiles, std_modules)
- end
-
- -- extract packages modules dependencies
- local package_modules_data = dependency_scanner.get_all_packages_modules(target, opt)
- if package_modules_data then
- -- append to sourcebatch
- for _, package_module_data in table.orderpairs(package_modules_data) do
- table.insert(sourcebatch.sourcefiles, package_module_data.file)
- target:fileconfig_set(package_module_data.file, {external = package_module_data.external, defines = package_module_data.metadata.defines})
- end
- end
-
- opt = opt or {}
- opt.jobgraph = false
-
- compiler_support.patch_sourcebatch(target, sourcebatch, opt)
- local modules = dependency_scanner.get_module_dependencies(target, sourcebatch, opt)
+ -- patch sourcebatch
+ builder.patch_sourcebatch(target, sourcebatch)
+ -- get module dependencies
+ local modules = dependency_scanner.get_module_dependencies(target, sourcebatch)
if not target:is_moduleonly() then
-- avoid building non referenced modules
local build_objectfiles, link_objectfiles = dependency_scanner.sort_modules_by_dependencies(target, sourcebatch.objectfiles, modules)
sourcebatch.objectfiles = build_objectfiles
-- build headerunits and modules
- builder.build_headerunits_for_batchcmds(target, batchcmds, sourcebatch, modules, opt)
- builder.build_modules_for_batchcmds(target, batchcmds, sourcebatch, modules, opt)
-
+ builder.build_modules_and_headerunits(target, batchcmds, sourcebatch, modules, opt)
sourcebatch.objectfiles = link_objectfiles
else
-- avoid duplicate linking of object files of non-module programs