mirror of
git://git.yoctoproject.org/meta-freescale.git
synced 2025-08-22 00:42:07 +02:00
140 lines
5.4 KiB
Plaintext
140 lines
5.4 KiB
Plaintext
# Allow generation of mfgtool bundle
|
|
#
|
|
# The class provides the infrastructure for MFGTOOL generation and is tied to images. To generate
|
|
# the bundle, the task populate_mfgtool must be called. For example:
|
|
#
|
|
# ,----[ Running populate_mfgtool for core-image-minimal image ]
|
|
# | $: bitbake core-image-minimal -c populate_mfgtool
|
|
# `----
|
|
#
|
|
# The class behavior is controlled through the MFGTOOLCONFIG (analogous to PACKAGECONFIG)
|
|
# variable. The MFGTOOLCONFIG variable itself specifies a space-separated list of the script to
|
|
# enable. Following the script, you can determine the behavior of each script by providing up to two
|
|
# order-dependent arguments, which are separated by commas. You can omit any argument you like but
|
|
# must retain the separating commas. The order is important and specifies the following:
|
|
#
|
|
# 1. Extra dependencies that should be added to the do_populate_mfgtool task, if the script is
|
|
# enabled.
|
|
# 2. Extra binaries that should be added to the bundle, if the script is enabled.
|
|
#
|
|
# For example:
|
|
#
|
|
# ,----[ Defining foo.uuu.in and bar.uuu script ]
|
|
# | MFGTOOLCONFIG = "foo.uuu.in bar.uuu"
|
|
# | MFGTOOLCONFIG[foo.uuu.in] = "dep-foo1:do_deploy dep-foo2:do_deploy,file-foo1"
|
|
# | MFGTOOLCONFIG[bar.uuu] = "dep-bar1:do_deploy,file-bar1 file-bar2"
|
|
# `----
|
|
#
|
|
# The dep-foo1:do_deploy, dep-foo2:do_deploy, and dep-bar1:do_deploy are added to
|
|
# do_populate_mfgtool dependencies. In addition, file-foo1, file-bar1, and file-bar2 are copied to
|
|
# the bundle, only if the script is enabled.
|
|
#
|
|
# During the mfgtool bundle generation, the uuu.in files are processed and some variables
|
|
# replaced. The variables are:
|
|
#
|
|
# - MACHINE
|
|
# - UBOOT_BINARY
|
|
# - SPL_BINARY
|
|
# - IMAGE_BASENAME
|
|
#
|
|
# Copyright 2022-2023 (C) O.S. Systems Software LTDA.
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
MFGTOOL_FILESPATH ??= " \
|
|
${@base_set_filespath(["%s/mfgtool" % p for p in "${BBPATH}".split(":")] \
|
|
+ ["${FILE_DIRNAME}/${BP}/mfgtool", \
|
|
"${FILE_DIRNAME}/${BPN}/mfgtool", \
|
|
"${FILE_DIRNAME}/files/mfgtool"] \
|
|
, d)} \
|
|
"
|
|
|
|
MFGTOOLDIR = "${WORKDIR}/mfgtool-${PN}"
|
|
do_populate_mfgtool[dirs] += "${MFGTOOLDIR}"
|
|
do_populate_mfgtool[cleandirs] = "${MFGTOOLDIR}"
|
|
|
|
addtask populate_mfgtool after do_image_complete do_unpack before do_deploy
|
|
do_populate_mfgtool[nostamp] = "1"
|
|
do_populate_mfgtool[dirs] += "${DEPLOY_DIR_IMAGE} ${WORKDIR}"
|
|
do_populate_mfgtool[recrdeptask] += "do_deploy"
|
|
do_populate_mfgtool[depends] += "uuu-bin:do_populate_sysroot"
|
|
|
|
python () {
|
|
depends = []
|
|
deploy_files = ""
|
|
scripts = (d.getVar('MFGTOOLCONFIG') or "").split()
|
|
scripts_and_flags = d.getVarFlags('MFGTOOLCONFIG') or {}
|
|
for flag, flagval in sorted(scripts_and_flags.items()):
|
|
items = flagval.split(",")
|
|
num = len(items)
|
|
if num > 2:
|
|
bb.error("%s: MFGTOOLCONFIG[%s] Only \"depends,deploy files\" can be specified!" % (d.getVar("PN"), flag))
|
|
|
|
if flag in scripts:
|
|
if num >= 2 and items[1]:
|
|
deploy_files += ' ' + items[1]
|
|
if num >= 1 and items[0]:
|
|
depends.append(items[0])
|
|
|
|
d.appendVarFlag('do_populate_mfgtool', 'depends', ' ' + ' '.join(depends))
|
|
d.setVar('_SCRIPT_DEPLOY_FILES', ' '.join(sorted(list(set(deploy_files.split())))))
|
|
}
|
|
|
|
python do_populate_mfgtool() {
|
|
# For MFGTOOLCONFIG items we use BitBake's fetcher module allowing a consistent behavior.
|
|
scripts = (d.getVar('MFGTOOLCONFIG') or "").split()
|
|
src_uri = ["file://%s" % f for f in scripts]
|
|
if not src_uri:
|
|
bb.fatal("MFGTOOLCONFIG is empty so populate_mfgtool cannot be run.")
|
|
return
|
|
bb.debug(1, "following scripts are used: %s" % ', '.join(scripts))
|
|
|
|
localdata = bb.data.createCopy(d)
|
|
filespath = (d.getVar('MFGTOOL_FILESPATH') or "")
|
|
localdata.setVar('FILESPATH', filespath)
|
|
|
|
try:
|
|
fetcher = bb.fetch2.Fetch(src_uri, localdata)
|
|
fetcher.unpack(localdata.getVar('WORKDIR'))
|
|
except bb.fetch2.BBFetchException as e:
|
|
bb.fatal("BitBake Fetcher Error: " + repr(e))
|
|
|
|
# Generate MFGTOOL bundle.
|
|
bb.build.exec_func('generate_mfgtool_bundle', d)
|
|
}
|
|
|
|
generate_mfgtool_bundle() {
|
|
bbnote "Processing uuu files ..."
|
|
for src in $(ls -1 ${WORKDIR}/*.uuu.in); do
|
|
dest=$(echo $src | sed 's,.in$,,g')
|
|
bbnote " - $src -> $dest"
|
|
sed -e 's/@@MACHINE@@/${MACHINE}/g' \
|
|
-e "s,@@UBOOT_BINARY@@,${UBOOT_BINARY},g" \
|
|
-e "s,@@SPL_BINARY@@,${SPL_BINARY},g" \
|
|
-e "s,@@IMAGE_BASENAME@@,${IMAGE_BASENAME},g" \
|
|
$src > $dest
|
|
done
|
|
|
|
bbnote "Deploying uuu files ..."
|
|
for src in $(ls -1 ${WORKDIR}/*.uuu); do
|
|
dest=$(basename $src)
|
|
bbnote " - $src -> ${MFGTOOLDIR}/${PN}-${MACHINE}/$dest"
|
|
install -D -m 0644 $src ${MFGTOOLDIR}/${PN}-${MACHINE}/$dest
|
|
done
|
|
|
|
bbnote "Copying uuu binaries..."
|
|
cp -v -s ${STAGING_LIBDIR}/uuu/* ${MFGTOOLDIR}/${PN}-${MACHINE}/
|
|
|
|
bbnote "Copying MFGTOOL extra deploy files..."
|
|
for f in ${_SCRIPT_DEPLOY_FILES}; do
|
|
mkdir -p ${MFGTOOLDIR}/${PN}-${MACHINE}/binaries
|
|
cp -v -s ${DEPLOY_DIR_IMAGE}/$f ${MFGTOOLDIR}/${PN}-${MACHINE}/binaries/
|
|
done
|
|
|
|
tar -czf ${DEPLOY_DIR_IMAGE}/mfgtool-bundle-${PN}-${MACHINE}.tar.gz \
|
|
--dereference -C ${MFGTOOLDIR} ${PN}-${MACHINE}
|
|
|
|
ln -fs mfgtool-bundle-${PN}-${MACHINE}.tar.gz \
|
|
${DEPLOY_DIR_IMAGE}/mfgtool-bundle-${PN}.tar.gz
|
|
}
|