diff options
author | Patrick Ohly <patrick.ohly@intel.com> | 2017-03-14 16:29:32 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-03-21 22:43:02 +0000 |
commit | b3de5d5795767a4b8c331fa5040166e7e410eeec (patch) | |
tree | cd13c7b8ffb2297c4d6fa9d45d7a9635041c623c | |
parent | a678f54e710e46b3cf674ffa41d6432b22effbdf (diff) | |
download | openembedded-core-b3de5d5795767a4b8c331fa5040166e7e410eeec.tar.gz openembedded-core-b3de5d5795767a4b8c331fa5040166e7e410eeec.tar.bz2 openembedded-core-b3de5d5795767a4b8c331fa5040166e7e410eeec.zip |
rm_work.bbclass: re-enable recursive do_rm_work_all
When rewriting the do_rm_work injection, do_rm_work_all had been
removed because it seemed obsolete, as do_build now always triggers
do_rm_work.
However, do_build does not get triggered for all recipes and thus
do_rm_work was not called for recipes that got built only
partially. For example, zlib depends indirectly on
zlib-native:do_populate_sysroot. Because of that dependency,
zlib-native got compiled, but do_rm_work was never called for it.
Re-introducing do_rm_work_all fixes that by making do_build depend on
do_rm_work_all, which then recursively depends on do_rm_work of all
dependencies. This has the unintended side-effect that do_rm_work then
also triggers additional work (like do_populate_lic) that normally
doesn't need to be done for a build. This seems like the lesser evil,
compared to an incomplete cleanup because it mostly enables the
lighter tasks after do_populate_sysroot.
The real solution would be to have two kinds of relationships: a weak
ordering relationship ("if A and B are enabled, A must run before B,
but B can also run without A") and hard dependencies ("B cannot run
unless A has run before").
Signed-off-by: Patrick Ohly <patrick.ohly@intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
-rw-r--r-- | meta/classes/rm_work.bbclass | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/meta/classes/rm_work.bbclass b/meta/classes/rm_work.bbclass index 054c93716e..2490a69c62 100644 --- a/meta/classes/rm_work.bbclass +++ b/meta/classes/rm_work.bbclass @@ -102,6 +102,12 @@ do_rm_work () { rm -f $i done } +do_rm_work_all () { + : +} +do_rm_work_all[recrdeptask] = "do_rm_work" +do_rm_work_all[noexec] = "1" +addtask rm_work_all after before do_build do_populate_sdk[postfuncs] += "rm_work_populatesdk" rm_work_populatesdk () { @@ -138,9 +144,8 @@ python inject_rm_work() { # do_build inherits additional runtime dependencies on # other recipes and thus will typically run much later than completion of # work in the recipe itself. - deps = bb.build.preceedtask('do_build', True, d) - if 'do_build' in deps: - deps.remove('do_build') + deps = set(bb.build.preceedtask('do_build', True, d)) + deps.difference_update(('do_build', 'do_rm_work_all')) # In practice, addtask() here merely updates the dependencies. bb.build.addtask('do_rm_work', 'do_build', ' '.join(deps), d) } |