diff options
| author | ruki <[email protected]> | 2022-06-27 00:17:28 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-06-27 00:17:28 +0800 |
| commit | 8741e218102297f8db17e3d3cb706b2afb7f023a (patch) | |
| tree | d9c0fa418ca63e175d750a10c1fed4cd13474d7c | |
| parent | 685fa705f82bda73e2fc25d3ebb0071be54aa51b (diff) | |
| parent | 4349cb582609b9afac5198916188a772d21adaa8 (diff) | |
Merge pull request #2501 from xmake-io/builddeps
fix build deps for across targets
| -rw-r--r-- | tests/projects/other/build_deps/xmake.lua | 4 | ||||
| -rw-r--r-- | xmake/actions/build/build.lua | 23 |
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 + |
