summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-08-27 22:38:55 +0800
committerruki <[email protected]>2022-08-27 22:38:55 +0800
commit21ef485f37c1e1901914f8419b252715713cc247 (patch)
tree99955e20962f2c6242bbbe58022e9da47ce8c524
parentc63f962b4369cb1d5c7ca24bfbe3031a831e9e77 (diff)
fix module batch group
-rw-r--r--xmake/modules/private/async/jobpool.lua17
-rw-r--r--xmake/rules/c++/modules/xmake.lua3
2 files changed, 13 insertions, 7 deletions
diff --git a/xmake/modules/private/async/jobpool.lua b/xmake/modules/private/async/jobpool.lua
index dfcf2b6d5..696515f08 100644
--- a/xmake/modules/private/async/jobpool.lua
+++ b/xmake/modules/private/async/jobpool.lua
@@ -148,10 +148,12 @@ end
-- enter group
--
-- @param name the group name
+-- @param opt the options, e.g. {rootjob = ..}
--
-function jobpool:group_enter(name)
+function jobpool:group_enter(name, opt)
+ opt = opt or {}
assert(not self._group, "jobpool: cannot enter group(%s)!", name)
- self._group = {name = name, group = true}
+ self._group = {name = name, group = true, rootjob = opt.rootjob}
end
-- leave group
@@ -161,8 +163,13 @@ end
function jobpool:group_leave()
local group = self._group
self._group = nil
- if group and group._parents then
- return group
+ if group then
+ if group._parents then
+ return group
+ else
+ -- we just return the rootjob if there is not any jobs in this group
+ return group.rootjob
+ end
end
end
@@ -214,7 +221,7 @@ end
-- tostring
function jobpool:__tostring()
local refs = {}
- return string.serialize(self:_gentree(self:rootjob(), refs), {indent = 2})
+ return string.serialize(self:_gentree(self:rootjob(), refs), {indent = 2, orderkeys = true})
end
-- new a jobpool
diff --git a/xmake/rules/c++/modules/xmake.lua b/xmake/rules/c++/modules/xmake.lua
index 8a05ff0e0..387534fe0 100644
--- a/xmake/rules/c++/modules/xmake.lua
+++ b/xmake/rules/c++/modules/xmake.lua
@@ -52,7 +52,6 @@ rule("c++.build.modules.builder")
set_sourcekinds("cxx")
set_extensions(".mpp", ".mxx", ".cppm", ".ixx")
- -- build modules
-- parallel build support to accelerate `xmake build` to build modules
before_build_files(function(target, batchjobs, sourcebatch, opt)
if target:data("cxx.has_modules") then
@@ -65,7 +64,7 @@ rule("c++.build.modules.builder")
-- generate headerunits and we need do it before building modules
opt.rootjob = batchjobs:group_leave() or opt.rootjob
- batchjobs:group_enter(target:name() .. "/generate_headerunits")
+ batchjobs:group_enter(target:name() .. "/generate_headerunits", {rootjob = opt.rootjob})
common.generate_headerunits_for_batchjobs(target, batchjobs, sourcebatch, modules, opt)
else
-- avoid duplicate linking of object files of non-module programs