summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2025-03-27 23:02:06 +0800
committerruki <[email protected]>2025-04-08 15:31:55 +0800
commite12ddee3cc3d237b6f01f03c71f18763781eb1eb (patch)
tree6703b0b28e3d1e19ed4196418e5a3802ca499402
parente10063b886379b0bb2d28666c23e0eefd9cda9d7 (diff)
add script job
-rw-r--r--xmake/actions/build/target_utils.lua74
1 files changed, 54 insertions, 20 deletions
diff --git a/xmake/actions/build/target_utils.lua b/xmake/actions/build/target_utils.lua
index d92d548c7..41c979b85 100644
--- a/xmake/actions/build/target_utils.lua
+++ b/xmake/actions/build/target_utils.lua
@@ -35,12 +35,61 @@ function _clean_target(target)
end
end
+-- add script job
+function _add_script_job(jobgraph, instance, script_name, scriptcmd_name, opt)
+ opt = opt or {}
+ local joborders = opt.joborders
+ local group_name = opt.group_name
+ local script = instance:script(script_name)
+ if script then
+ -- call custom script with jobgraph
+ -- e.g.
+ --
+ -- target("test")
+ -- on_build(function (target, jobgraph, opt)
+ -- end, {jobgraph = true})
+ if instance:extraconf(script_name, "jobgraph") then
+ script(target, jobgraph)
+ elseif instance:extraconf(script_name, "batch") then
+ wprint("%s.%s: the batch mode is deprecated, please use jobgraph mode instead of it.", instance:fullname(), script_name)
+ else
+ -- call custom script directly
+ -- e.g.
+ --
+ -- target("test")
+ -- on_build(function (target, opt)
+ -- end)
+ local jobname = string.format("%s/%s/%s", instance == target and "target" or "rule", instance:fullname(), script_name)
+ jobgraph:add(jobname, function (index, total, opt)
+ script(target, {progress = opt.progress})
+ end, {groups = group_name})
+ table.insert(joborders, jobname)
+ end
+ else
+ -- call command script
+ -- e.g.
+ --
+ -- target("test")
+ -- on_buildcmd(function (target, batchcmds, opt)
+ -- end)
+ local scriptcmd = instance:script(scriptcmd_name)
+ if scriptcmd then
+ local jobname = string.format("%s/%s/%s", instance == target and "target" or "rule", instance:fullname(), scriptcmd_name)
+ jobgraph:add(jobname, function (index, total, opt)
+ local batchcmds_ = batchcmds.new({target = target})
+ scriptcmd(target, batchcmds_, {progress = opt.progress})
+ batchcmds_:runcmds({changed = target:is_rebuilt(), dryrun = option.get("dry-run")})
+ end, {groups = group_name})
+ table.insert(joborders, jobname)
+ end
+ end
+end
+
-- add stage jobs for the given target
-- stage: before, after or ""
function _add_stage_jobs_for_target(jobgraph, target, stage, opt)
opt = opt or {}
local job_kind = opt.job_kind
- local progress = opt.progress
-- the group name, e.g. foo/after_prepare, bar/before_build
local group_name = string.format("%s/%s_%s", target:fullname(), stage, job_kind)
@@ -60,25 +109,10 @@ function _add_stage_jobs_for_target(jobgraph, target, stage, opt)
-- call target and rules script
local joborders = {}
for _, instance in ipairs(instances) do
- local script = instance:script(script_name)
- if script then
- local jobname = string.format("%s/%s/%s", instance == target and "target" or "rule", instance:fullname(), script_name)
- jobgraph:add(jobname, function (index, total, opt)
- script(target, {progress = progress})
- end, {groups = group_name})
- table.insert(joborders, jobname)
- else
- local scriptcmd = instance:script(scriptcmd_name)
- if scriptcmd then
- local jobname = string.format("%s/%s/%s", instance == target and "target" or "rule", instance:fullname(), scriptcmd_name)
- jobgraph:add(jobname, function (index, total, opt)
- local batchcmds_ = batchcmds.new({target = target})
- scriptcmd(target, batchcmds_, {progress = progress})
- batchcmds_:runcmds({changed = target:is_rebuilt(), dryrun = option.get("dry-run")})
- end, {groups = group_name})
- table.insert(joborders, jobname)
- end
- end
+ _add_script_job(jobgraph, instance, script_name, scriptcmd_name, {
+ group_name = group_name,
+ joborders = joborders
+ })
end
-- add job orders