Fix building the eSDK with "live" in IMAGE_FSTYPES
cover Fix building the eSDK with "live" in IMAGE_FSTYPES
The following changes since commit 646c366c2566bd8dd6f73681cea9f5b021589a56:
gst-player: upgrade to latest HEAD (2016-06-27 14:08:37 +0100)
are available in the git repository at:
git://git.openembedded.org/openembedded-core-contrib paule/esdk-initramfs-fixes
http://cgit.openembedded.org/cgit.cgi/openembedded-core-contrib/log/?h=paule/esdk-initramfs-fixes
Paul Eggleton (2):
classes/populate_sdk_ext: ensure tasks to build the image are included classes/populate_sdk_ext: exclude initramfs images from locked
signatures
meta/classes/populate_sdk_ext.bbclass | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-)
Signature · 1 line
2.5.5
PATCH 1/2 classes/populate_sdk_ext: ensure tasks to build the image are included
If you build an extensible SDK for an image and IMAGE_FSTYPES includes "live" then the extensible SDK will fail to install with a bunch of unexpected task execution errors, matching the missing items required to build the live image. The issue was we were still depending on do_rootfs rather than do_image_complete. The fix was slightly more complicated than just changing the task name as do_image_complete's dependencies are in the form of dependencies on tasks within the same recipe (represented in the "deps" varflag rather than the "depends" varflag).
Fixes [YOCTO #9826].
--- meta/classes/populate_sdk_ext.bbclass | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
meta/classes/populate_sdk_ext.bbclass +7 -1
@@ -447,7 +447,13 @@ fakeroot python do_populate_sdk_ext() { } def get_ext_sdk_depends(d): - return d.getVarFlag('do_rootfs', 'depends', True) + ' ' + d.getVarFlag('do_build', 'depends', True) + # Note: the deps varflag is a list not a string, so we need to specify expand=False + deps = d.getVarFlag('do_image_complete', 'deps', False) + pn = d.getVar('PN', True) + deplist = ['%s:%s' % (pn, dep) for dep in deps] + for task in ['do_image_complete', 'do_rootfs', 'do_build']: + deplist.extend((d.getVarFlag(task, 'depends', True) or '').split()) + return ' '.join(deplist) python do_sdk_depends() { # We have to do this separately in its own task so we avoid recursing into
Signature · 1 line
2.5.5
PATCH 2/2 classes/populate_sdk_ext: exclude initramfs images from locked signatures
In reply to Paul EggletonTasks for image recipes cannot be locked - there's nothing to restore from shared state to cover them and as a result, if you had "live" in IMAGE_FSTYPES the build would fail with "taskhash mismatch" errors for do_rootfs and do_image_complete for the initramfs image recipe, since it had to try to run those. We should probably catch that issue earlier in the build and produce a proper error, but for now at least exclude these signatures from the locked-sigs.inc file so that extensible SDK installers built when IMAGE_FSTYPES includes "live". (It turned out we already had code to find other image tasks in the task list in order to generate the list of install targets.)
Follow-up fix for [YOCTO #9826].
--- meta/classes/populate_sdk_ext.bbclass | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
meta/classes/populate_sdk_ext.bbclass +5 -4
@@ -39,7 +39,7 @@ SDK_UPDATE_URL ?= "" SDK_TARGETS ?= "${PN}" -def get_sdk_install_targets(d): +def get_sdk_install_targets(d, images_only=False): sdk_install_targets = '' if d.getVar('SDK_EXT_TYPE', True) != 'minimal': sdk_install_targets = d.getVar('SDK_TARGETS', True)
@@ -50,8 +50,9 @@ def get_sdk_install_targets(d): if v[0] not in sdk_install_targets: sdk_install_targets += ' {}'.format(v[0]) - if d.getVar('SDK_INCLUDE_PKGDATA', True) == '1': - sdk_install_targets += ' meta-world-pkgdata:do_allpackagedata' + if not images_only: + if d.getVar('SDK_INCLUDE_PKGDATA', True) == '1': + sdk_install_targets += ' meta-world-pkgdata:do_allpackagedata' return sdk_install_targets
@@ -280,7 +281,7 @@ python copy_buildsystem () { f.write('\n') # Filter the locked signatures file to just the sstate tasks we are interested in - excluded_targets = d.getVar('SDK_TARGETS', True) + excluded_targets = get_sdk_install_targets(d, images_only=True) sigfile = d.getVar('WORKDIR', True) + '/locked-sigs.inc' lockedsigs_pruned = baseoutpath + '/conf/locked-sigs.inc' oe.copy_buildsystem.prune_lockedsigs([],
Signature · 1 line
2.5.5