From 00b1911c65fa1b21c3dedec40170998573b62178 Mon Sep 17 00:00:00 2001 From: Patrick Ohly Date: Wed, 29 Mar 2017 13:29:50 +0200 Subject: populate_sdk_ext.bbclass: enhance compatibility with rm_work.bbclass "bitbake -c populate_dsk_ext" must not trigger do_rm_work, because it is impossible to declare that the additional tasks activated by "-c populate_dsk_ext" must run before do_rm_work. When do_populate_dsk_ext and do_rm_work are both active, the resulting race condition breaks do_populate_dsk_ext. The existing bitbake dependencies can't be used for that, because "addtask populate_dsk_ext before do_rm_work" would then always execute populate_dsk_ext also in normal builds. do_populate_dsk_ext triggers do_rm_work indirectly through the dependency on do_build of the SDK_TARGETs. Using the new do_build_without_rm_work instead (when available, with do_build as before if not) avoids the problem. However, one has to be careful to not trigger do_rm_work in the same build in some other way. "bitbake core-image-sato:do_populate_sdk_ext core-image-sato:do_build" still fails, for example. Doing one after the other works. Fixes: [YOCTO 11042] Signed-off-by: Patrick Ohly Signed-off-by: Richard Purdie --- meta/classes/populate_sdk_ext.bbclass | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'meta/classes/populate_sdk_ext.bbclass') diff --git a/meta/classes/populate_sdk_ext.bbclass b/meta/classes/populate_sdk_ext.bbclass index 3bccb142e6..db822bf771 100644 --- a/meta/classes/populate_sdk_ext.bbclass +++ b/meta/classes/populate_sdk_ext.bbclass @@ -656,7 +656,12 @@ do_populate_sdk_ext[depends] = "${@d.getVarFlag('do_populate_sdk', 'depends', Fa ${@'meta-world-pkgdata:do_collect_packagedata' if d.getVar('SDK_INCLUDE_PKGDATA') == '1' else ''} \ ${@'meta-extsdk-toolchain:do_locked_sigs' if d.getVar('SDK_INCLUDE_TOOLCHAIN') == '1' else ''}" -do_populate_sdk_ext[rdepends] += "${@' '.join([x + ':do_build' for x in d.getVar('SDK_TARGETS').split()])}" +# We must avoid depending on do_build here if rm_work.bbclass is active, +# because otherwise do_rm_work may run before do_populate_sdk_ext itself. +# We can't mark do_populate_sdk_ext and do_sdk_depends as having to +# run before do_rm_work, because then they would also run as part +# of normal builds. +do_populate_sdk_ext[rdepends] += "${@' '.join([x + ':' + (d.getVar('RM_WORK_BUILD_WITHOUT') or 'do_build') for x in d.getVar('SDK_TARGETS').split()])}" # Make sure code changes can result in rebuild do_populate_sdk_ext[vardeps] += "copy_buildsystem \ -- cgit 1.2.3-korg