diff options
| author | ruki <[email protected]> | 2025-06-29 22:02:34 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2025-06-29 22:02:34 +0800 |
| commit | c6f7c7f4036dc9f7f9ad3aab6071c838e3877610 (patch) | |
| tree | a11d68e00e0f94036ae969c2d793e73d5a307381 | |
| parent | 10ff4f1d31a0ab7a9f5d130a16eba445ab3e0b02 (diff) | |
fix build.fence #6586
| -rw-r--r-- | xmake/modules/private/action/build/target.lua | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/xmake/modules/private/action/build/target.lua b/xmake/modules/private/action/build/target.lua index c302408ac..438211349 100644 --- a/xmake/modules/private/action/build/target.lua +++ b/xmake/modules/private/action/build/target.lua @@ -92,18 +92,11 @@ function _match_sourcebatches(target, filepatterns) end end --- add targetjobs and deps orders -function _add_targetjobs_orders(jobgraph, target, dep, opt) +-- add plain orders for targetjobs and deps +function _add_targetjobs_plain_orders(jobgraph, target, dep, opt) local jobname, jobname_dep local job_kind = opt.job_kind - if dep:policy("build.fence") or dep:policy("build.across_targets_in_parallel") == false then - jobname = string.format("%s/begin_%s", target:fullname(), job_kind) - jobname_dep = string.format("%s/end_%s", dep:fullname(), job_kind) - -- build.across_targets_in_parallel is deprecated - if dep:policy("build.across_targets_in_parallel") == false then - wprint("policy(\"build.across_targets_in_parallel\") has been deprecated, please use policy(\"build.fence\") instead of it.") - end - elseif job_kind == "build" then + if job_kind == "build" then jobname = target:fullname() .. "/link" jobname_dep = dep:fullname() .. "/link" if not jobgraph:has(jobname) then @@ -118,6 +111,23 @@ function _add_targetjobs_orders(jobgraph, target, dep, opt) end end +-- add deep orders for targetjobs and deps +function _add_targetjobs_deep_orders(jobgraph, target, dep, opt) + local jobname, jobname_dep + local job_kind = opt.job_kind + if dep:policy("build.fence") or dep:policy("build.across_targets_in_parallel") == false then + jobname = string.format("%s/begin_%s", target:fullname(), job_kind) + jobname_dep = string.format("%s/end_%s", dep:fullname(), job_kind) + -- build.across_targets_in_parallel is deprecated + if dep:policy("build.across_targets_in_parallel") == false then + wprint("policy(\"build.across_targets_in_parallel\") has been deprecated, please use policy(\"build.fence\") instead of it.") + end + end + if jobname and jobname_dep and jobgraph:has(jobname) and jobgraph:has(jobname_dep) then + jobgraph:add_orders(jobname_dep, jobname) + end +end + -- add target jobs for the builtin script function add_targetjobs_for_builtin_script(jobgraph, target, opt) opt = opt or {} @@ -352,7 +362,13 @@ function add_targetjobs_and_deps(jobgraph, target, targetrefs, opt) for _, depname in ipairs(target:get("deps")) do local dep = project.target(depname, {namespace = target:namespace()}) add_targetjobs_and_deps(jobgraph, dep, targetrefs, opt) - _add_targetjobs_orders(jobgraph, target, dep, opt) + _add_targetjobs_plain_orders(jobgraph, target, dep, opt) + end + + -- we need to pass to the whole dependency chain + -- @see https://github.com/xmake-io/xmake/issues/6586 + for _, dep in ipairs(target:orderdeps()) do + _add_targetjobs_deep_orders(jobgraph, target, dep, opt) end end end |
