Files
lbmk/resources/scripts/build/release/roms
T
Leah Rowe 544737c864 scripts: build cbutils, not specific utils
some checks check for specific utils, which are
then used to indicate the existence of other utils,
which means that building them singularly, as is
currently done, may result in errors later if another
tool doesn't exist compiled yet

this is an obscure bug, fixed by this patch. more of a
workaround really. a dirty hack. when checking for any
of the coreboot utilities required, build all coreboot
utilities that are possibly required

the utilities are small enough that this does not add
much extra time to build, and in most cases, all of them
will be needed anyway
2023-03-05 14:00:06 +00:00

123 lines
3.4 KiB
Bash
Executable File

#!/usr/bin/env sh
#
# helper script: generate release archive (ROM images)
#
# Copyright (C) 2020,2021,2022 Leah Rowe <info@minifree.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# This script assumes that the working directory is the root
# of git or release archive
[ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e
projectname="$(cat projectname)"
version="version-unknown"
if [ -f version ]; then
version="$(cat version)"
fi
versiondate="version-date-unknown"
if [ -f versiondate ]; then
versiondate="$(cat versiondate)"
fi
if [ ! -d "bin/" ]; then
printf "build/release/roms: no ROMs built yet. Exiting.\n"
exit 1
fi
[ ! -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/"
printf "Building ROM image archives for version %s\n" "${version}"
for romdir in bin/*; do
target="${romdir##*/}"
echo ${target}
if [ ! -d "${romdir}/" ]; then
continue
fi
CONFIG_HAVE_MRC="y"
CONFIG_HAVE_ME_BIN="y"
grep "CONFIG_HAVE_ME_BIN=y" "resources/coreboot/${target}/config/"* || CONFIG_HAVE_ME_BIN="n"
grep "CONFIG_HAVE_MRC=y" "resources/coreboot/${target}/config/"* || CONFIG_HAVE_MRC="n"
# remove ME/MRC from ROM images
if [ "${CONFIG_HAVE_ME_BIN}" = "y" ]; then
if [ ! -d coreboot/default ]; then
./download coreboot default || exit 1
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"
for romfile in "${romdir}"/*.rom
do
if [ ! -f "${romfile}" ]
then
continue
fi
${ifdtool} --nuke me "${romfile}" || exit 1
mv "${romfile}" "${romdir}_tmp"/
mv "${romfile}.new" "${romfile}"
if [ "${CONFIG_HAVE_MRC}" = "y" ]
then
${cbfstool} "${romfile}" remove -n mrc.bin || exit 1
${cbfstool} "${romfile}" print
fi
done
fi
printf "Generating release/%s/roms/%s-%s_%s.tar.xz\n" "${version}" "${projectname}" "${version}" "${target##*/}"
printf "%s\n" "${version}" > "${romdir}/version"
printf "%s\n" "${versiondate}" > "${romdir}/versiondate"
printf "%s\n" "${projectname}" > "${romdir}/projectname"
tar -c "${romdir}/" | xz -9e >"release/${version}/roms/${projectname}-${version}_${target##*/}.tar.xz"
if [ -d "${romdir}_tmp" ]
then
rm -Rf "${romdir}"
mv "${romdir}_tmp" "${romdir}"
fi
done
printf "\nROM image release archives available at release/%s/roms/\n\n" "${version}"