summaryrefslogtreecommitdiffstats
path: root/meta/classes/rm_work.bbclass
diff options
context:
space:
mode:
authorPatrick Ohly <patrick.ohly@intel.com>2017-03-29 13:29:49 +0200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2017-03-31 10:10:29 +0100
commitd83e16a99ccc53d1e30ec934be431dcb932563f9 (patch)
treeb881bddd5842d71a55ef6bdcbff4510e88dc2b5a /meta/classes/rm_work.bbclass
parent8e7f76bd8ab5d7303e2f384ad35b87736cfdd935 (diff)
downloadpoky-d83e16a99ccc53d1e30ec934be431dcb932563f9.tar.gz
rm_work.bbclass: introduce do_build_without_rm_work
Some classes, for example populate_sdk_ext.bbclass, must be able to trigger a full build of a recipe without also triggering do_rm_work. They cannot depend on do_build anymore, because that would trigger do_rm_work. Instead, do_build_without_rm_work can be used. It has the exact same dependencies as do_build, minus do_rm_work and do_rm_work_all. This may also be useful in a test build of a recipe where one wants to preserve the work directory without having to modify configuration settings: bitbake foobar:do_build_without_rm_work (From OE-Core rev: 04a7b8d6d2e86cc4dd1362c775f5e3ac1eb1d19d) Signed-off-by: Patrick Ohly <patrick.ohly@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes/rm_work.bbclass')
-rw-r--r--meta/classes/rm_work.bbclass27
1 files changed, 24 insertions, 3 deletions
diff --git a/meta/classes/rm_work.bbclass b/meta/classes/rm_work.bbclass
index 2490a69c62..badeaeba07 100644
--- a/meta/classes/rm_work.bbclass
+++ b/meta/classes/rm_work.bbclass
@@ -121,10 +121,24 @@ rm_work_rootfs () {
121} 121}
122rm_work_rootfs[cleandirs] = "${WORKDIR}/rootfs" 122rm_work_rootfs[cleandirs] = "${WORKDIR}/rootfs"
123 123
124# We have to add the do_rmwork task already now, because all tasks are 124# This task can be used instead of do_build to trigger building
125# without also invoking do_rm_work. It only exists when rm_work.bbclass
126# is active, otherwise do_build needs to be used.
127#
128# The intended usage is
129# ${@ d.getVar('RM_WORK_BUILD_WITHOUT') or 'do_build'}
130# in places that previously used just 'do_build'.
131RM_WORK_BUILD_WITHOUT = "do_build_without_rm_work"
132do_build_without_rm_work () {
133 :
134}
135do_build_without_rm_work[noexec] = "1"
136
137# We have to add these tasks already now, because all tasks are
125# meant to be defined before the RecipeTaskPreProcess event triggers. 138# meant to be defined before the RecipeTaskPreProcess event triggers.
126# The inject_rm_work event handler then merely changes task dependencies. 139# The inject_rm_work event handler then merely changes task dependencies.
127addtask do_rm_work 140addtask do_rm_work
141addtask do_build_without_rm_work
128addhandler inject_rm_work 142addhandler inject_rm_work
129inject_rm_work[eventmask] = "bb.event.RecipeTaskPreProcess" 143inject_rm_work[eventmask] = "bb.event.RecipeTaskPreProcess"
130python inject_rm_work() { 144python inject_rm_work() {
@@ -133,6 +147,12 @@ python inject_rm_work() {
133 # If the recipe name is in the RM_WORK_EXCLUDE, skip the recipe. 147 # If the recipe name is in the RM_WORK_EXCLUDE, skip the recipe.
134 excludes = (d.getVar("RM_WORK_EXCLUDE") or "").split() 148 excludes = (d.getVar("RM_WORK_EXCLUDE") or "").split()
135 pn = d.getVar("PN") 149 pn = d.getVar("PN")
150
151 # Determine what do_build depends upon, without including do_build
152 # itself or our own special do_rm_work_all.
153 deps = set(bb.build.preceedtask('do_build', True, d))
154 deps.difference_update(('do_build', 'do_rm_work_all'))
155
136 if pn in excludes: 156 if pn in excludes:
137 d.delVarFlag('rm_work_rootfs', 'cleandirs') 157 d.delVarFlag('rm_work_rootfs', 'cleandirs')
138 d.delVarFlag('rm_work_populatesdk', 'cleandirs') 158 d.delVarFlag('rm_work_populatesdk', 'cleandirs')
@@ -144,8 +164,9 @@ python inject_rm_work() {
144 # do_build inherits additional runtime dependencies on 164 # do_build inherits additional runtime dependencies on
145 # other recipes and thus will typically run much later than completion of 165 # other recipes and thus will typically run much later than completion of
146 # work in the recipe itself. 166 # work in the recipe itself.
147 deps = set(bb.build.preceedtask('do_build', True, d))
148 deps.difference_update(('do_build', 'do_rm_work_all'))
149 # In practice, addtask() here merely updates the dependencies. 167 # In practice, addtask() here merely updates the dependencies.
150 bb.build.addtask('do_rm_work', 'do_build', ' '.join(deps), d) 168 bb.build.addtask('do_rm_work', 'do_build', ' '.join(deps), d)
169
170 # Always update do_build_without_rm_work dependencies.
171 bb.build.addtask('do_build_without_rm_work', '', ' '.join(deps), d)
151} 172}