summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/classes/rm_work.bbclass31
1 files changed, 20 insertions, 11 deletions
diff --git a/meta/classes/rm_work.bbclass b/meta/classes/rm_work.bbclass
index 9b7220fc2b..054c93716e 100644
--- a/meta/classes/rm_work.bbclass
+++ b/meta/classes/rm_work.bbclass
@@ -26,9 +26,6 @@ BB_SCHEDULER ?= "completion"
26# Run the rm_work task in the idle scheduling class 26# Run the rm_work task in the idle scheduling class
27BB_TASK_IONICE_LEVEL_task-rm_work = "3.0" 27BB_TASK_IONICE_LEVEL_task-rm_work = "3.0"
28 28
29RMWORK_ORIG_TASK := "${BB_DEFAULT_TASK}"
30BB_DEFAULT_TASK = "rm_work_all"
31
32do_rm_work () { 29do_rm_work () {
33 # If the recipe name is in the RM_WORK_EXCLUDE, skip the recipe. 30 # If the recipe name is in the RM_WORK_EXCLUDE, skip the recipe.
34 for p in ${RM_WORK_EXCLUDE}; do 31 for p in ${RM_WORK_EXCLUDE}; do
@@ -105,13 +102,6 @@ do_rm_work () {
105 rm -f $i 102 rm -f $i
106 done 103 done
107} 104}
108addtask rm_work after do_${RMWORK_ORIG_TASK}
109
110do_rm_work_all () {
111 :
112}
113do_rm_work_all[recrdeptask] = "do_rm_work"
114addtask rm_work_all after do_rm_work
115 105
116do_populate_sdk[postfuncs] += "rm_work_populatesdk" 106do_populate_sdk[postfuncs] += "rm_work_populatesdk"
117rm_work_populatesdk () { 107rm_work_populatesdk () {
@@ -125,7 +115,13 @@ rm_work_rootfs () {
125} 115}
126rm_work_rootfs[cleandirs] = "${WORKDIR}/rootfs" 116rm_work_rootfs[cleandirs] = "${WORKDIR}/rootfs"
127 117
128python () { 118# We have to add the do_rmwork task already now, because all tasks are
119# meant to be defined before the RecipeTaskPreProcess event triggers.
120# The inject_rm_work event handler then merely changes task dependencies.
121addtask do_rm_work
122addhandler inject_rm_work
123inject_rm_work[eventmask] = "bb.event.RecipeTaskPreProcess"
124python inject_rm_work() {
129 if bb.data.inherits_class('kernel', d): 125 if bb.data.inherits_class('kernel', d):
130 d.appendVar("RM_WORK_EXCLUDE", ' ' + d.getVar("PN")) 126 d.appendVar("RM_WORK_EXCLUDE", ' ' + d.getVar("PN"))
131 # If the recipe name is in the RM_WORK_EXCLUDE, skip the recipe. 127 # If the recipe name is in the RM_WORK_EXCLUDE, skip the recipe.
@@ -134,4 +130,17 @@ python () {
134 if pn in excludes: 130 if pn in excludes:
135 d.delVarFlag('rm_work_rootfs', 'cleandirs') 131 d.delVarFlag('rm_work_rootfs', 'cleandirs')
136 d.delVarFlag('rm_work_populatesdk', 'cleandirs') 132 d.delVarFlag('rm_work_populatesdk', 'cleandirs')
133 else:
134 # Inject do_rm_work into the tasks of the current recipe such that do_build
135 # depends on it and that it runs after all other tasks that block do_build,
136 # i.e. after all work on the current recipe is done. The reason for taking
137 # this approach instead of making do_rm_work depend on do_build is that
138 # do_build inherits additional runtime dependencies on
139 # other recipes and thus will typically run much later than completion of
140 # work in the recipe itself.
141 deps = bb.build.preceedtask('do_build', True, d)
142 if 'do_build' in deps:
143 deps.remove('do_build')
144 # In practice, addtask() here merely updates the dependencies.
145 bb.build.addtask('do_rm_work', 'do_build', ' '.join(deps), d)
137} 146}