diff options
| author | ruki <[email protected]> | 2025-11-12 15:27:48 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-11-12 15:27:48 +0800 |
| commit | d4205f6eca2257d69db51089341490e369552180 (patch) | |
| tree | 48f4acadb1abfcd339d04dca06384fbad3ddfb38 | |
| parent | 0f072dca50a57d8cf8ec10557a48bd8abffd30dd (diff) | |
| parent | f81ec6fcddefdd455db492347e724477cbb57224 (diff) | |
Merge pull request #7018 from xmake-io/linkdeps
disable build order only if dependency linking inheritance is disabled
| -rw-r--r-- | xmake/core/project/target.lua | 32 | ||||
| -rw-r--r-- | xmake/modules/private/action/build/target.lua | 10 |
2 files changed, 27 insertions, 15 deletions
diff --git a/xmake/core/project/target.lua b/xmake/core/project/target.lua index 6547a4a6c..40af6a2b4 100644 --- a/xmake/core/project/target.lua +++ b/xmake/core/project/target.lua @@ -279,19 +279,25 @@ function _instance:_get_from_deps(name, result_values, result_sources, opt) local total = #orderdeps for idx, _ in ipairs(orderdeps) do local dep = orderdeps[total + 1 - idx] - local values = dep:get(name, opt) - if values ~= nil then - table.insert(result_values, values) - table.insert(result_sources, "dep::" .. dep:name()) - end - local dep_values = {} - local dep_sources = {} - dep:_get_from_options(name, dep_values, dep_sources, opt) - dep:_get_from_packages(name, dep_values, dep_sources, opt) - for idx, values in ipairs(dep_values) do - local dep_source = dep_sources[idx] - table.insert(result_values, values) - table.insert(result_sources, "dep::" .. dep:name() .. "/" .. dep_source) + -- We can inherit some configuration from dependencies. + -- e.g. disable to inherit links, add_deps("foo", {links = false}) + -- @see https://github.com/xmake-io/xmake/issues/6925 + local inherit = self:extraconf("deps", dep:name(), name) + if inherit ~= false then + local values = dep:get(name, opt) + if values ~= nil then + table.insert(result_values, values) + table.insert(result_sources, "dep::" .. dep:name()) + end + local dep_values = {} + local dep_sources = {} + dep:_get_from_options(name, dep_values, dep_sources, opt) + dep:_get_from_packages(name, dep_values, dep_sources, opt) + for idx, values in ipairs(dep_values) do + local dep_source = dep_sources[idx] + table.insert(result_values, values) + table.insert(result_sources, "dep::" .. dep:name() .. "/" .. dep_source) + end end end end diff --git a/xmake/modules/private/action/build/target.lua b/xmake/modules/private/action/build/target.lua index b4cbd3b0a..c88d7b830 100644 --- a/xmake/modules/private/action/build/target.lua +++ b/xmake/modules/private/action/build/target.lua @@ -96,7 +96,10 @@ end function _add_targetjobs_plain_orders(jobgraph, target, dep, opt) local jobname, jobname_dep local job_kind = opt.job_kind - if job_kind == "build" then + -- Configure the build order only if dependency linking inheritance is not disabled. + -- e.g. add_deps("foo", {links = false}) + -- @see https://github.com/xmake-io/xmake/issues/6925 + if job_kind == "build" and target:extraconf("deps", dep:name(), "links") ~= false then jobname = target:fullname() .. "/link" jobname_dep = dep:fullname() .. "/link" if not jobgraph:has(jobname) then @@ -115,7 +118,10 @@ end function _add_targetjobs_deep_orders(jobgraph, target, dep, opt) local jobname, jobname_dep local job_kind = opt.job_kind - local target_fence = opt.target_fence or dep:policy("build.fence") or dep:policy("build.across_targets_in_parallel") == false + local target_fence = opt.target_fence + if target_fence == nil and (job_kind == "prepare" or job_kind == "build") then + target_fence = dep:policy("build.fence") or dep:policy("build.across_targets_in_parallel") == false + end if target_fence then jobname = string.format("%s/begin_%s", target:fullname(), job_kind) jobname_dep = string.format("%s/end_%s", dep:fullname(), job_kind) |
