mirror of
https://git.yoctoproject.org/git/poky
synced 2026-01-01 13:58:04 +00:00
classes-recipe/image: Add image file manifest
Downstream tasks may want to know what image files were written by the do_image family of tasks (e.g. SPDX) so have each task write out a manifest file that describes the files it produced, then aggregate them in do_image_complete (From OE-Core rev: 5da5e2c528e8f4c78d389d60b03725323ff1527c) Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> (cherry picked from commit 5e55ed4c5b9d5af3c96b82805af34af1512fc3d1) Signed-off-by: Steve Sakoman <steve@sakoman.com>
This commit is contained in:
parent
b5184d1487
commit
a905366ee1
|
|
@ -88,6 +88,11 @@ PACKAGE_INSTALL_ATTEMPTONLY ?= "${FEATURE_INSTALL_OPTIONAL}"
|
|||
|
||||
IMGDEPLOYDIR = "${WORKDIR}/deploy-${PN}-image-complete"
|
||||
|
||||
IMGMANIFESTDIR = "${WORKDIR}/image-task-manifest"
|
||||
|
||||
IMAGE_OUTPUT_MANIFEST_DIR = "${WORKDIR}/deploy-image-output-manifest"
|
||||
IMAGE_OUTPUT_MANIFEST = "${IMAGE_OUTPUT_MANIFEST_DIR}/manifest.json"
|
||||
|
||||
# Images are generally built explicitly, do not need to be part of world.
|
||||
EXCLUDE_FROM_WORLD = "1"
|
||||
|
||||
|
|
@ -277,14 +282,28 @@ fakeroot python do_image () {
|
|||
execute_pre_post_process(d, pre_process_cmds)
|
||||
}
|
||||
do_image[dirs] = "${TOPDIR}"
|
||||
do_image[cleandirs] += "${IMGMANIFESTDIR}"
|
||||
addtask do_image after do_rootfs
|
||||
|
||||
fakeroot python do_image_complete () {
|
||||
from oe.utils import execute_pre_post_process
|
||||
from pathlib import Path
|
||||
import json
|
||||
|
||||
post_process_cmds = d.getVar("IMAGE_POSTPROCESS_COMMAND")
|
||||
|
||||
execute_pre_post_process(d, post_process_cmds)
|
||||
|
||||
image_manifest_dir = Path(d.getVar('IMGMANIFESTDIR'))
|
||||
|
||||
data = []
|
||||
|
||||
for manifest_path in image_manifest_dir.glob("*.json"):
|
||||
with manifest_path.open("r") as f:
|
||||
data.extend(json.load(f))
|
||||
|
||||
with open(d.getVar("IMAGE_OUTPUT_MANIFEST"), "w") as f:
|
||||
json.dump(data, f)
|
||||
}
|
||||
do_image_complete[dirs] = "${TOPDIR}"
|
||||
SSTATETASKS += "do_image_complete"
|
||||
|
|
@ -292,6 +311,8 @@ SSTATE_SKIP_CREATION:task-image-complete = '1'
|
|||
do_image_complete[sstate-inputdirs] = "${IMGDEPLOYDIR}"
|
||||
do_image_complete[sstate-outputdirs] = "${DEPLOY_DIR_IMAGE}"
|
||||
do_image_complete[stamp-extra-info] = "${MACHINE_ARCH}"
|
||||
do_image_complete[sstate-plaindirs] += "${IMAGE_OUTPUT_MANIFEST_DIR}"
|
||||
do_image_complete[dirs] += "${IMAGE_OUTPUT_MANIFEST_DIR}"
|
||||
addtask do_image_complete after do_image before do_build
|
||||
python do_image_complete_setscene () {
|
||||
sstate_setscene(d)
|
||||
|
|
@ -501,12 +522,14 @@ python () {
|
|||
d.setVar(task, '\n'.join(cmds))
|
||||
d.setVarFlag(task, 'func', '1')
|
||||
d.setVarFlag(task, 'fakeroot', '1')
|
||||
d.setVarFlag(task, 'imagetype', t)
|
||||
|
||||
d.appendVarFlag(task, 'prefuncs', ' ' + debug + ' set_image_size')
|
||||
d.prependVarFlag(task, 'postfuncs', 'create_symlinks ')
|
||||
d.appendVarFlag(task, 'subimages', ' ' + ' '.join(subimages))
|
||||
d.appendVarFlag(task, 'vardeps', ' ' + ' '.join(vardeps))
|
||||
d.appendVarFlag(task, 'vardepsexclude', ' DATETIME DATE ' + ' '.join(vardepsexclude))
|
||||
d.appendVarFlag(task, 'postfuncs', ' write_image_output_manifest')
|
||||
|
||||
bb.debug(2, "Adding task %s before %s, after %s" % (task, 'do_image_complete', after))
|
||||
bb.build.addtask(task, 'do_image_complete', after, d)
|
||||
|
|
@ -604,6 +627,41 @@ python create_symlinks() {
|
|||
bb.note("Skipping symlink, source does not exist: %s -> %s" % (dst, src))
|
||||
}
|
||||
|
||||
python write_image_output_manifest() {
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
taskname = d.getVar("BB_CURRENTTASK")
|
||||
image_deploy_dir = Path(d.getVar('IMGDEPLOYDIR'))
|
||||
image_manifest_dir = Path(d.getVar('IMGMANIFESTDIR'))
|
||||
manifest_path = image_manifest_dir / ("do_" + d.getVar("BB_CURRENTTASK") + ".json")
|
||||
|
||||
image_name = d.getVar("IMAGE_NAME")
|
||||
image_basename = d.getVar("IMAGE_BASENAME")
|
||||
machine = d.getVar("MACHINE")
|
||||
|
||||
subimages = (d.getVarFlag("do_" + taskname, 'subimages', False) or "").split()
|
||||
imagetype = d.getVarFlag("do_" + taskname, 'imagetype', False)
|
||||
|
||||
data = {
|
||||
"taskname": taskname,
|
||||
"imagetype": imagetype,
|
||||
"images": []
|
||||
}
|
||||
|
||||
for type in subimages:
|
||||
image_filename = image_name + "." + type
|
||||
image_path = image_deploy_dir / image_filename
|
||||
if not image_path.exists():
|
||||
continue
|
||||
data["images"].append({
|
||||
"filename": image_filename,
|
||||
})
|
||||
|
||||
with manifest_path.open("w") as f:
|
||||
json.dump([data], f)
|
||||
}
|
||||
|
||||
MULTILIBRE_ALLOW_REP += "${base_bindir} ${base_sbindir} ${bindir} ${sbindir} ${libexecdir} ${sysconfdir} ${nonarch_base_libdir}/udev /lib/modules/[^/]*/modules.*"
|
||||
MULTILIB_CHECK_FILE = "${WORKDIR}/multilib_check.py"
|
||||
MULTILIB_TEMP_ROOTFS = "${WORKDIR}/multilib"
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user