pon., 6 kwi 2020 o 19:02 Bartosz Golaszewski <b...@bgdev.pl> napisaƂ(a):
>
> From: Bartosz Golaszewski <bgolaszew...@baylibre.com>
>
> Make each IMAGE_CMD task an sstate task with its own IMGDEPLOYDIR
> override. This way each generated set of artifacts is deployed as soon
> as it's ready instead of the do_image_complete task handling the entire
> deployement. This allows us to better fine-tune dependencies e.g. we
> can make do_image_wic depend on fitImage task which can in turn depend
> on do_image_ext4.
>
> We need delete the IMGDEPLOYDIR variable from the data object passed
> to each image task so that it gets expanded with the correct override.
>
> In order to make sure that tasks added to SSTATETASKS in anonymous python
> functions are correctly setup, move the code that assigns pre- and
> postfuncs to an event handler invoked on bb.event.RecipeTaskPreProcess
> in sstate.bbclass. This event is fired right after the anonymous
> functions.
>
> Signed-off-by: Bartosz Golaszewski <bgolaszew...@baylibre.com>
> ---
>  meta/classes/image.bbclass  | 17 +++++++++++++++++
>  meta/classes/sstate.bbclass |  4 ++++
>  2 files changed, 21 insertions(+)
>
> diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
> index 07aa1f1fa5..ffd63aa82a 100644
> --- a/meta/classes/image.bbclass
> +++ b/meta/classes/image.bbclass
> @@ -428,10 +428,12 @@ python () {
>          # date/time values. It will get expanded at execution time.
>          # Similarly TMPDIR since otherwise we see QA stamp comparision 
> problems
>          # Expand PV else it can trigger get_srcrev which can fail due to 
> these variables being unset
> +        # Delete IMGDEPLOYDIR so that each task gets its own, overriden value
>          localdata.setVar('PV', d.getVar('PV'))
>          localdata.delVar('DATETIME')
>          localdata.delVar('DATE')
>          localdata.delVar('TMPDIR')
> +        localdata.delVar('IMGDEPLOYDIR')
>          vardepsexclude = (d.getVarFlag('IMAGE_CMD_' + realt, 
> 'vardepsexclude', True) or '').split()
>          for dep in vardepsexclude:
>              localdata.delVar(dep)
> @@ -502,6 +504,21 @@ python () {
>
>          bb.debug(2, "Adding task %s before %s, after %s" % (task, 
> 'do_image_complete', after))
>          bb.build.addtask(task, 'do_image_complete', after, d)
> +
> +        imgdeploydir = d.getVar('IMGDEPLOYDIR')
> +        task_override = task[3:].replace('_', '-') # 'do_image_ext4' becomes 
> 'image-ext4'
> +        taskdeploydir = 
> '{}/deploy-{}-{}'.format(os.path.dirname(imgdeploydir),
> +                                                 d.getVar('PN'), 
> task_override)
> +
> +        # Each image task gets its own IMGDEPLOYDIR directory and is added to
> +        # SSTATETASKS. This way every set of artifacts gets deployed right 
> after
> +        # the do_image_foo task completes.
> +        d.setVar('IMGDEPLOYDIR_task-{}'.format(task_override), taskdeploydir)
> +        d.appendVar('SSTATETASKS', ' {}'.format(task))
> +        d.setVarFlag(task, 'sstate-inputdirs', taskdeploydir)
> +        d.setVarFlag(task, 'sstate-outputdirs', d.getVar('DEPLOY_DIR_IMAGE'))
> +        d.setVarFlag(task, 'cleandirs', taskdeploydir)
> +        d.setVar('SSTATE_SKIP_CREATION_task-{}'.format(task_override), '1')
>  }
>
>  #
> diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass
> index c73c3b42a7..3c71312010 100644
> --- a/meta/classes/sstate.bbclass
> +++ b/meta/classes/sstate.bbclass
> @@ -138,13 +138,17 @@ python () {
>          d.setVar('SSTATE_EXTRAPATH', "${NATIVELSBSTRING}/")
>          d.setVar('BB_HASHFILENAME', "True ${SSTATE_PKGSPEC} 
> ${SSTATE_SWSPEC}")
>          d.setVar('SSTATE_EXTRAPATHWILDCARD', "${NATIVELSBSTRING}/")
> +}
>
> +python sstate_setup_tasks() {
>      unique_tasks = sorted(set((d.getVar('SSTATETASKS') or "").split()))
>      d.setVar('SSTATETASKS', " ".join(unique_tasks))
>      for task in unique_tasks:
>          d.prependVarFlag(task, 'prefuncs', "sstate_task_prefunc ")
>          d.appendVarFlag(task, 'postfuncs', " sstate_task_postfunc")
>  }
> +addhandler sstate_setup_tasks
> +sstate_setup_tasks[eventmask] = "bb.event.RecipeTaskPreProcess"
>
>  def sstate_init(task, d):
>      ss = {}
> --
> 2.25.0
>

Gentle ping.

Bart
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#137235): 
https://lists.openembedded.org/g/openembedded-core/message/137235
Mute This Topic: https://lists.openembedded.org/mt/72816245/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub  
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to