build/release/roms: split logic into functions

main() on top

top-down logic

79 chars or less, per line

Signed-off-by: Leah Rowe <leah@libreboot.org>
fsdg20230625
Leah Rowe 2023-05-20 19:33:29 +01:00
parent 2983309006
commit a9bd54423c
1 changed files with 118 additions and 88 deletions

View File

@ -26,33 +26,50 @@
set -u -e set -u -e
projectname="$(cat projectname)" projectname="$(cat projectname)"
version="version-unknown" version="version-unknown"
if [ -f version ]; then
version="$(cat version)"
fi
versiondate="version-date-unknown" versiondate="version-date-unknown"
if [ -f versiondate ]; then target=""
versiondate="$(cat versiondate)" CONFIG_HAVE_MRC=""
fi CONFIG_HAVE_ME_BIN=""
CONFIG_KBC1126_FIRMWARE=""
ifdtooldir="coreboot/default/util/ifdtool"
ifdtool="${ifdtooldir}/ifdtool"
cbfstooldir="coreboot/default/util/cbfstool"
cbfstool="${cbfstooldir}/cbfstool"
if [ ! -d "bin/" ]; then main()
printf "build/release/roms: no ROMs built yet. Exiting.\n" {
exit 1 printf "Building ROM image archives for version %s\n" "${version}"
fi
[ ! -d "release/" ] && \ init_check
mkdir -p release/
[ ! -d "release/${version}/" ] && \
mkdir -p "release/${version}/"
[ -d "release/${version}/roms/" ] && \
rm -Rf "release/${version}/roms/"
[ ! -d "release/${version}/roms/" ] && \
mkdir -p "release/${version}/roms/"
printf "Building ROM image archives for version %s\n" "${version}" for romdir in bin/*; do
make_archive
done
for romdir in bin/*; do printf "\nROM archives available at release/%s/roms/\n\n" "${version}"
}
init_check()
{
[ -f version ] && \
version="$(cat version)"
[ -f versiondate ] && \
versiondate="$(cat versiondate)"
[ ! -d "bin/" ] && \
err "no ROMs built yet. exiting"
[ ! -d "release/" ] && \
mkdir -p release/
[ ! -d "release/${version}/" ] && \
mkdir -p "release/${version}/"
[ -d "release/${version}/roms/" ] && \
rm -Rf "release/${version}/roms/"
[ ! -d "release/${version}/roms/" ] && \
mkdir -p "release/${version}/roms/"
}
make_archive()
{
target="${romdir##*/}" target="${romdir##*/}"
echo ${target} echo ${target}
@ -63,85 +80,98 @@ for romdir in bin/*; do
CONFIG_HAVE_MRC="y" CONFIG_HAVE_MRC="y"
CONFIG_HAVE_ME_BIN="y" CONFIG_HAVE_ME_BIN="y"
CONFIG_KBC1126_FIRMWARE="y" CONFIG_KBC1126_FIRMWARE="y"
grep "CONFIG_HAVE_ME_BIN=y" "resources/coreboot/${target}/config/"* || CONFIG_HAVE_ME_BIN="n" grep "CONFIG_HAVE_ME_BIN=y" \
grep "CONFIG_HAVE_MRC=y" "resources/coreboot/${target}/config/"* || CONFIG_HAVE_MRC="n" "resources/coreboot/${target}/config/"* \
grep "CONFIG_KBC1126_FIRMWARE=y" "resources/coreboot/${target}/config"/* || CONFIG_KBC1126_FIRMWARE="n" || CONFIG_HAVE_ME_BIN="n"
grep "CONFIG_HAVE_MRC=y" \
"resources/coreboot/${target}/config/"* \
|| CONFIG_HAVE_MRC="n"
grep "CONFIG_KBC1126_FIRMWARE=y" \
"resources/coreboot/${target}/config"/* \
|| CONFIG_KBC1126_FIRMWARE="n"
# remove ME/MRC/EC firmware from ROM images # remove ME/MRC/EC firmware from ROM images
if [ "${CONFIG_HAVE_ME_BIN}" = "y" ] || [ "${target}" = "e6400nvidia_4mb" ]; then if [ "${CONFIG_HAVE_ME_BIN}" = "y" ] \
if [ ! -d coreboot/default ]; then || [ "${target}" = "e6400nvidia_4mb" ]; then
./download coreboot default || exit 1 purge_blobs
fi
ifdtooldir="coreboot/default/util/ifdtool"
ifdtool="${ifdtooldir}/ifdtool"
if [ ! -f "${ifdtool}" ]; then
./build module cbutils default || exit 1
fi
cbfstooldir="coreboot/default/util/cbfstool"
cbfstool="${cbfstooldir}/cbfstool"
if [ ! -f "${cbfstool}" ]; then
./build module cbutils default || exit 1
fi
rm -Rf "${romdir}_tmp" # dirty hack, to reduce disk io later
# rather than using /tmp, which might not be tmpfs
mkdir "${romdir}_tmp"
if [ ! -f "${romdir}/blobhashes" ]; then
printf "%s\n" "The roms in this archive should match the following hashes AFTER blobs are inserted" > "${romdir}/blobhashes"
fi
# Hash the rom before removing blobs
( cd ${romdir}
sha1sum *.rom >> blobhashes
)
for romfile in "${romdir}"/*.rom
do
if [ ! -f "${romfile}" ]; then
continue
fi
if [ "${CONFIG_HAVE_ME_BIN}" = "y" ]; then
${ifdtool} --nuke me "${romfile}" || exit 1
mv "${romfile}" "${romdir}_tmp"/
mv "${romfile}.new" "${romfile}"
fi
if [ "${CONFIG_HAVE_MRC}" = "y" ]
then
${cbfstool} "${romfile}" remove -n mrc.bin || exit 1
${cbfstool} "${romfile}" print
fi
if [ "${CONFIG_KBC1126_FIRMWARE}" = "y" ]; then
${cbfstool} "${romfile}" remove -n ecfw1.bin || exit 1
${cbfstool} "${romfile}" remove -n ecfw2.bin || exit 1
fi
# TODO: replace this board-specific hack
if [ "${target}" = "e6400nvidia_4mb" ]; then
${cbfstool} "${romfile}" remove \
-n "pci10de,06eb.rom" \
|| exit 1
fi
done
fi fi
printf "Generating release/%s/roms/%s-%s_%s.tar.xz\n" "${version}" "${projectname}" "${version}" "${target##*/}" printf "Generating release/%s/roms/%s-%s_%s.tar.xz\n" \
"${version}" "${projectname}" \
"${version}" "${target##*/}"
printf "%s\n" "${version}" > "${romdir}/version" printf "%s\n" "${version}" > "${romdir}/version"
printf "%s\n" "${versiondate}" > "${romdir}/versiondate" printf "%s\n" "${versiondate}" > "${romdir}/versiondate"
printf "%s\n" "${projectname}" > "${romdir}/projectname" printf "%s\n" "${projectname}" > "${romdir}/projectname"
tar -c "${romdir}/" | xz -9e >"release/${version}/roms/${projectname}-${version}_${target##*/}.tar.xz"
f="release/${version}/roms/${projectname}-${version}_${target##*/}"
tar -c "${romdir}/" | xz -9e > "${f}.tar.xz"
if [ -d "${romdir}_tmp" ] if [ -d "${romdir}_tmp" ]
then then
rm -Rf "${romdir}" rm -Rf "${romdir}"
mv "${romdir}_tmp" "${romdir}" mv "${romdir}_tmp" "${romdir}"
fi fi
done }
printf "\nROM image release archives available at release/%s/roms/\n\n" "${version}" purge_blobs()
{
if [ ! -d coreboot/default ]; then
./download coreboot default || exit 1
fi
if [ ! -f "${ifdtool}" ] || [ ! -f "${cbfstool}" ]; then
./build module cbutils default || exit 1
fi
rm -Rf "${romdir}_tmp" # dirty hack, to reduce disk io later
# rather than using /tmp, which might not be tmpfs
mkdir "${romdir}_tmp"
# Hash the rom before removing blobs
if [ ! -f "${romdir}/blobhashes" ]; then
printf "ROMs must match these hashes after blob insertion:" \
> "${romdir}/blobhashes"
fi
(
cd ${romdir}
sha1sum *.rom >> blobhashes
)
for romfile in "${romdir}"/*.rom
do
if [ ! -f "${romfile}" ]; then
continue
fi
if [ "${CONFIG_HAVE_ME_BIN}" = "y" ]; then
${ifdtool} --nuke me "${romfile}" || exit 1
mv "${romfile}" "${romdir}_tmp"/
mv "${romfile}.new" "${romfile}"
fi
if [ "${CONFIG_HAVE_MRC}" = "y" ]
then
${cbfstool} "${romfile}" remove -n mrc.bin || exit 1
${cbfstool} "${romfile}" print
fi
if [ "${CONFIG_KBC1126_FIRMWARE}" = "y" ]; then
${cbfstool} "${romfile}" remove -n ecfw1.bin || exit 1
${cbfstool} "${romfile}" remove -n ecfw2.bin || exit 1
fi
# TODO: replace this board-specific hack
if [ "${target}" = "e6400nvidia_4mb" ]; then
${cbfstool} "${romfile}" remove \
-n "pci10de,06eb.rom" \
|| exit 1
fi
done
}
err()
{
printf "%s: %s\n" $0 $1
exit 1
}
main $@