mirror of
https://git.yoctoproject.org/poky
synced 2026-02-15 05:03:03 +01:00
By default, do_rm_work either skips recipes entirely (when listed in RM_WORK_EXCLUDE) or removes everything except for temp. In meta-swupd, virtual image recipes collaborate on producing update data for the base recipe. Tasks running in the base recipe need some information from the virtual images. Those files could be passed via a new shared work directory, but that scatters data in even more places. It's simpler to use the normal WORKDIR and teach rm_work.bbclass to not remove the special output with the new RM_WORK_EXCLUDE_ITEMS. (From OE-Core rev: 28fbb2dd17033308cc09811fbc4f43e2f6c17f54) Signed-off-by: Patrick Ohly <patrick.ohly@intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
138 lines
4.0 KiB
Plaintext
138 lines
4.0 KiB
Plaintext
#
|
|
# Removes source after build
|
|
#
|
|
# To use it add that line to conf/local.conf:
|
|
#
|
|
# INHERIT += "rm_work"
|
|
#
|
|
# To inhibit rm_work for some recipes, specify them in RM_WORK_EXCLUDE.
|
|
# For example, in conf/local.conf:
|
|
#
|
|
# RM_WORK_EXCLUDE += "icu-native icu busybox"
|
|
#
|
|
# Recipes can also configure which entries in their ${WORKDIR}
|
|
# are preserved besides temp, which already gets excluded by default
|
|
# because it contains logs:
|
|
# do_install_append () {
|
|
# echo "bar" >${WORKDIR}/foo
|
|
# }
|
|
# RM_WORK_EXCLUDE_ITEMS += "foo"
|
|
RM_WORK_EXCLUDE_ITEMS = "temp"
|
|
|
|
# Use the completion scheduler by default when rm_work is active
|
|
# to try and reduce disk usage
|
|
BB_SCHEDULER ?= "completion"
|
|
|
|
# Run the rm_work task in the idle scheduling class
|
|
BB_TASK_IONICE_LEVEL_task-rm_work = "3.0"
|
|
|
|
RMWORK_ORIG_TASK := "${BB_DEFAULT_TASK}"
|
|
BB_DEFAULT_TASK = "rm_work_all"
|
|
|
|
do_rm_work () {
|
|
# If the recipe name is in the RM_WORK_EXCLUDE, skip the recipe.
|
|
for p in ${RM_WORK_EXCLUDE}; do
|
|
if [ "$p" = "${PN}" ]; then
|
|
bbnote "rm_work: Skipping ${PN} since it is in RM_WORK_EXCLUDE"
|
|
exit 0
|
|
fi
|
|
done
|
|
|
|
cd ${WORKDIR}
|
|
for dir in *
|
|
do
|
|
# Retain only logs and other files in temp, safely ignore
|
|
# failures of removing pseudo folers on NFS2/3 server.
|
|
if [ $dir = 'pseudo' ]; then
|
|
rm -rf $dir 2> /dev/null || true
|
|
elif ! echo '${RM_WORK_EXCLUDE_ITEMS}' | grep -q -w "$dir"; then
|
|
rm -rf $dir
|
|
fi
|
|
done
|
|
|
|
# Need to add pseudo back or subsqeuent work in this workdir
|
|
# might fail since setscene may not rerun to recreate it
|
|
mkdir -p ${WORKDIR}/pseudo/
|
|
|
|
# Change normal stamps into setscene stamps as they better reflect the
|
|
# fact WORKDIR is now empty
|
|
# Also leave noexec stamps since setscene stamps don't cover them
|
|
cd `dirname ${STAMP}`
|
|
for i in `basename ${STAMP}`*
|
|
do
|
|
for j in ${SSTATETASKS} do_shared_workdir
|
|
do
|
|
case $i in
|
|
*do_setscene*)
|
|
break
|
|
;;
|
|
*sigdata*|*sigbasedata*)
|
|
i=dummy
|
|
break
|
|
;;
|
|
*do_package_write*)
|
|
i=dummy
|
|
break
|
|
;;
|
|
*do_rootfs*|*do_image*|*do_bootimg*|*do_bootdirectdisk*|*do_vmimg*|*do_write_qemuboot_conf*)
|
|
i=dummy
|
|
break
|
|
;;
|
|
*do_build*)
|
|
i=dummy
|
|
break
|
|
;;
|
|
# We remove do_package entirely, including any
|
|
# sstate version since otherwise we'd need to leave 'plaindirs' around
|
|
# such as 'packages' and 'packages-split' and these can be large. No end
|
|
# of chain tasks depend directly on do_package anymore.
|
|
*do_package|*do_package.*|*do_package_setscene.*)
|
|
rm -f $i;
|
|
i=dummy
|
|
break
|
|
;;
|
|
*_setscene*)
|
|
i=dummy
|
|
break
|
|
;;
|
|
*$j|*$j.*)
|
|
mv $i `echo $i | sed -e "s#${j}#${j}_setscene#"`
|
|
i=dummy
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
rm -f $i
|
|
done
|
|
}
|
|
addtask rm_work after do_${RMWORK_ORIG_TASK}
|
|
|
|
do_rm_work_all () {
|
|
:
|
|
}
|
|
do_rm_work_all[recrdeptask] = "do_rm_work"
|
|
addtask rm_work_all after do_rm_work
|
|
|
|
do_populate_sdk[postfuncs] += "rm_work_populatesdk"
|
|
rm_work_populatesdk () {
|
|
:
|
|
}
|
|
rm_work_populatesdk[cleandirs] = "${WORKDIR}/sdk"
|
|
|
|
do_image_complete[postfuncs] += "rm_work_rootfs"
|
|
rm_work_rootfs () {
|
|
:
|
|
}
|
|
rm_work_rootfs[cleandirs] = "${WORKDIR}/rootfs"
|
|
|
|
python () {
|
|
if bb.data.inherits_class('kernel', d):
|
|
d.appendVar("RM_WORK_EXCLUDE", ' ' + d.getVar("PN"))
|
|
# If the recipe name is in the RM_WORK_EXCLUDE, skip the recipe.
|
|
excludes = (d.getVar("RM_WORK_EXCLUDE") or "").split()
|
|
pn = d.getVar("PN")
|
|
if pn in excludes:
|
|
d.delVarFlag('rm_work_rootfs', 'cleandirs')
|
|
d.delVarFlag('rm_work_populatesdk', 'cleandirs')
|
|
}
|