diff options
| author | ruki <[email protected]> | 2022-08-27 22:38:55 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2022-08-27 22:38:55 +0800 |
| commit | 21ef485f37c1e1901914f8419b252715713cc247 (patch) | |
| tree | 99955e20962f2c6242bbbe58022e9da47ce8c524 | |
| parent | c63f962b4369cb1d5c7ca24bfbe3031a831e9e77 (diff) | |
fix module batch group
| -rw-r--r-- | xmake/modules/private/async/jobpool.lua | 17 | ||||
| -rw-r--r-- | xmake/rules/c++/modules/xmake.lua | 3 |
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 |
