summaryrefslogtreecommitdiff
path: root/xmake/rules/c++/modules/modules_support/common.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2022-09-15 00:16:21 +0800
committerruki <[email protected]>2022-09-15 00:16:21 +0800
commit959fd89644089153c02bcc3a32f600d7457aea8c (patch)
treeee8614735131e326c6f3b4752d3e316fc85bfd3b /xmake/rules/c++/modules/modules_support/common.lua
parentad272ce991c63093048e0588385617170c0d850e (diff)
improve modules
Diffstat (limited to 'xmake/rules/c++/modules/modules_support/common.lua')
-rw-r--r--xmake/rules/c++/modules/modules_support/common.lua38
1 files changed, 2 insertions, 36 deletions
diff --git a/xmake/rules/c++/modules/modules_support/common.lua b/xmake/rules/c++/modules/modules_support/common.lua
index 593913887..ef3b8c9c0 100644
--- a/xmake/rules/c++/modules/modules_support/common.lua
+++ b/xmake/rules/c++/modules/modules_support/common.lua
@@ -27,6 +27,7 @@ import("core.cache.memcache", {alias = "_memcache"})
import("core.cache.localcache", {alias = "_localcache"})
import("core.project.project")
import("lib.detect.find_file")
+import("private.async.buildjobs")
import("stl_headers")
-- get memcache
@@ -473,44 +474,9 @@ function generate_headerunits_for_batchcmds(target, batchcmds, sourcebatch, modu
end
end
--- build batch jobs for module dependencies
-function _build_batchjobs_for_moduledeps(modules, batchjobs, rootjob, jobrefs, moduleinfo)
- local targetjob_ref = jobrefs[moduleinfo.name]
- if targetjob_ref then
- batchjobs:add(targetjob_ref, rootjob)
- else
- local modulejob = batchjobs:add(moduleinfo.job, rootjob)
- if modulejob then
- jobrefs[moduleinfo.name] = modulejob
- for _, depname in ipairs(moduleinfo.deps) do
- local dep = modules[depname]
- if dep then -- maybe nil, e.g. `import <string>;`
- _build_batchjobs_for_moduledeps(modules, batchjobs, modulejob, jobrefs, dep)
- end
- end
- end
- end
-end
-
-- build batchjobs for modules
function build_batchjobs_for_modules(modules, batchjobs, rootjob)
- local depset = hashset.new()
- for _, moduleinfo in pairs(modules) do
- assert(moduleinfo.job)
- for _, depname in ipairs(moduleinfo.deps) do
- depset:insert(depname)
- end
- end
- local modules_root = {}
- for _, moduleinfo in pairs(modules) do
- if not depset:has(moduleinfo.name) then
- table.insert(modules_root, moduleinfo)
- end
- end
- local jobrefs = {}
- for _, moduleinfo in pairs(modules_root) do
- _build_batchjobs_for_moduledeps(modules, batchjobs, rootjob, jobrefs, moduleinfo)
- end
+ return buildjobs(modules, batchjobs, rootjob)
end
-- build modules for batchjobs