summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-09-15 22:59:39 +0800
committerruki <[email protected]>2022-09-15 22:59:39 +0800
commit287d22b008abbed35dc102538fdd280811f51951 (patch)
tree0e41504187b4307de25771a71dbd70c194b390de
parenta0a675293ca0b9968bc21371da95db63c1034226 (diff)
improve to run object rules
-rw-r--r--xmake/actions/build/kinds/object.lua44
1 files changed, 31 insertions, 13 deletions
diff --git a/xmake/actions/build/kinds/object.lua b/xmake/actions/build/kinds/object.lua
index 9a4bbe3b9..79c37ffcf 100644
--- a/xmake/actions/build/kinds/object.lua
+++ b/xmake/actions/build/kinds/object.lua
@@ -92,6 +92,18 @@ function _has_scripts_for_target(target, suffix)
end
end
+-- has scripts for group
+function _has_scripts_for_group(group, suffix)
+ for _, item in pairs(group) do
+ if item.target and _has_scripts_for_target(item.target, suffix) then
+ return true
+ end
+ if item.rule and _has_scripts_for_rule(item.rule, suffix) then
+ return true
+ end
+ end
+end
+
-- add batch jobs for the custom rule
function _add_batchjobs_for_rule(batchjobs, rootjob, target, sourcebatch, suffix)
@@ -249,31 +261,37 @@ function add_batchjobs_for_sourcefiles(batchjobs, rootjob, target, sourcebatches
local groups = _build_sourcebatch_groups(target, sourcebatches)
-- add batch jobs for build_after
- local groups_root = rootjob
+ local groups_root
local groups_leaf = rootjob
for idx, group in ipairs(groups) do
- batchjobs:group_enter(target:name() .. "/after_build_files" .. idx)
- _add_batchjobs_for_group(batchjobs, groups_leaf, target, group, "after")
- groups_leaf = batchjobs:group_leave() or groups_leaf
- if idx == 1 then
- groups_root = groups_leaf
+ if _has_scripts_for_group(group, "after") then
+ batchjobs:group_enter(target:name() .. "/after_build_files" .. idx)
+ _add_batchjobs_for_group(batchjobs, groups_leaf, target, group, "after")
+ groups_leaf = batchjobs:group_leave() or groups_leaf
+ groups_root = groups_root or groups_leaf
end
end
-- add batch jobs for build
for idx, group in ipairs(groups) do
- batchjobs:group_enter(target:name() .. "/build_files" .. idx)
- _add_batchjobs_for_group(batchjobs, groups_leaf, target, group)
- groups_leaf = batchjobs:group_leave() or groups_leaf
+ if _has_scripts_for_group(group) then
+ batchjobs:group_enter(target:name() .. "/build_files" .. idx)
+ _add_batchjobs_for_group(batchjobs, groups_leaf, target, group)
+ groups_leaf = batchjobs:group_leave() or groups_leaf
+ groups_root = groups_root or groups_leaf
+ end
end
-- add batch jobs for build_before
for idx, group in ipairs(groups) do
- batchjobs:group_enter(target:name() .. "/before_build_files" .. idx)
- _add_batchjobs_for_group(batchjobs, groups_leaf, target, group, "before")
- groups_leaf = batchjobs:group_leave() or groups_leaf
+ if _has_scripts_for_group(group, "before") then
+ batchjobs:group_enter(target:name() .. "/before_build_files" .. idx)
+ _add_batchjobs_for_group(batchjobs, groups_leaf, target, group, "before")
+ groups_leaf = batchjobs:group_leave() or groups_leaf
+ groups_root = groups_root or groups_leaf
+ end
end
- return groups_leaf, groups_root
+ return groups_leaf, groups_root or groups_leaf
end
-- add batch jobs for building object files