summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-06-27 00:17:28 +0800
committerGitHub <[email protected]>2022-06-27 00:17:28 +0800
commit8741e218102297f8db17e3d3cb706b2afb7f023a (patch)
treed9c0fa418ca63e175d750a10c1fed4cd13474d7c
parent685fa705f82bda73e2fc25d3ebb0071be54aa51b (diff)
parent4349cb582609b9afac5198916188a772d21adaa8 (diff)
Merge pull request #2501 from xmake-io/builddeps
fix build deps for across targets
-rw-r--r--tests/projects/other/build_deps/xmake.lua4
-rw-r--r--xmake/actions/build/build.lua23
2 files changed, 17 insertions, 10 deletions
diff --git a/tests/projects/other/build_deps/xmake.lua b/tests/projects/other/build_deps/xmake.lua
index 8d59fb2f7..5729b5c8f 100644
--- a/tests/projects/other/build_deps/xmake.lua
+++ b/tests/projects/other/build_deps/xmake.lua
@@ -4,6 +4,7 @@ target("dep1")
set_kind("static")
add_deps("dep3")
add_files("src/dep1.c")
+ set_policy("build.across_targets_in_parallel", false)
after_load(function (target)
os.rm(target:targetfile())
os.rm(target:dep("dep3"):targetfile())
@@ -20,6 +21,7 @@ target("dep2")
set_kind("static")
add_deps("dep3")
add_files("src/dep2.c")
+ set_policy("build.across_targets_in_parallel", false)
after_load(function (target)
os.rm(target:targetfile())
os.rm(target:dep("dep3"):targetfile())
@@ -36,6 +38,7 @@ target("dep3")
set_kind("static")
add_files("src/dep3.c")
add_deps("dep4", "dep5")
+ set_policy("build.across_targets_in_parallel", false)
after_load(function (target)
os.rm(target:targetfile())
os.rm(target:dep("dep4"):targetfile())
@@ -119,7 +122,6 @@ target("test3")
add_deps("dep1")
add_rules("test3")
add_files("src/test3.c")
- set_policy("build.across_targets_in_parallel", false)
after_load(function (target)
os.rm(target:targetfile())
os.rm(target:dep("dep1"):targetfile())
diff --git a/xmake/actions/build/build.lua b/xmake/actions/build/build.lua
index f5a2931f4..a32b8d705 100644
--- a/xmake/actions/build/build.lua
+++ b/xmake/actions/build/build.lua
@@ -117,7 +117,7 @@ function _add_batchjobs_for_target(batchjobs, rootjob, target)
-- add after_build job for target
local oldenvs
- local job_after_build = batchjobs:addjob(target:name() .. "/after_build", function (index, total)
+ local job_build_after = batchjobs:addjob(target:name() .. "/after_build", function (index, total)
-- do after_build
local progress = (index * 100) / total
@@ -147,7 +147,7 @@ function _add_batchjobs_for_target(batchjobs, rootjob, target)
end, {rootjob = rootjob})
-- add batch jobs for target, @note only on_build script support batch jobs
- local job_build, job_build_leaf = _add_batchjobs(batchjobs, job_after_build, target)
+ local job_build, job_build_leaf = _add_batchjobs(batchjobs, job_build_after, target)
-- add before_build job for target
local job_build_before = batchjobs:addjob(target:name() .. "/before_build", function (index, total)
@@ -180,9 +180,7 @@ function _add_batchjobs_for_target(batchjobs, rootjob, target)
end
end
end, {rootjob = job_build_leaf})
-
- -- we need do build_before after all dependent targets if across_targets_in_parallel is disabled
- return target:policy("build.across_targets_in_parallel") == false and job_build_before or job_build, job_after_build
+ return job_build_before, job_build, job_build_after
end
-- add batch jobs for the given target and deps
@@ -191,11 +189,17 @@ function _add_batchjobs_for_target_and_deps(batchjobs, rootjob, jobrefs, target)
if targetjob_ref then
batchjobs:add(targetjob_ref, rootjob)
else
- local targetjob, targetjob_root = _add_batchjobs_for_target(batchjobs, rootjob, target)
- if targetjob and targetjob_root then
- jobrefs[target:name()] = targetjob_root
+ local job_build_before, job_build, job_build_after = _add_batchjobs_for_target(batchjobs, rootjob, target)
+ if job_build_before and job_build and job_build_after then
+ jobrefs[target:name()] = job_build_after
for _, depname in ipairs(target:get("deps")) do
- _add_batchjobs_for_target_and_deps(batchjobs, targetjob, jobrefs, project.target(depname))
+ local dep = project.target(depname)
+ local targetjob = job_build
+ -- @see https://github.com/xmake-io/xmake/discussions/2500
+ if dep:policy("build.across_targets_in_parallel") == false then
+ targetjob = job_build_before
+ end
+ _add_batchjobs_for_target_and_deps(batchjobs, targetjob, jobrefs, dep)
end
end
end
@@ -260,3 +264,4 @@ function main(targetname, group_pattern)
end
+