gnuboot/resources/scripts/build/release/u-boot-libre

281 lines
6.5 KiB
Plaintext
Raw Normal View History

#!/usr/bin/env bash
#
# helper script: generate deblobbed stable u-boot source code releases
#
# Copyright (C) 2020,2021 Leah Rowe <info@minifree.org>
# Copyright (C) 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
# Copyright (C) 2022 Alper Nebi Yasak <alpernebiyasak@gmail.com>
#
# 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/>.
#
[ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e
revision="r2"
supported_uboot_versions=" \
2021.07 \
2022.07 \
2022.10 \
2023.01 \
2023.04 \
"
topdir="$(realpath $(dirname $(realpath $0))/../../../../)"
uboot_release_topdir="${topdir}/release/u-boot-libre"
release_files=""
# This detects if this script is called by the ./build script like
# that: ./build release u-boot-libre [arguments]
runs_from_build()
{
i=0
for arg in $(strings /proc/$PPID/cmdline) ; do
if [ $i -eq 1 ] && [ "${arg}" != "./build" ] ; then
return 1
elif [ $i -eq 2 ] && [ "${arg}" != "release" ] ; then
return 1
elif [ $i -eq 3 ] && [ "${arg}" != "u-boot-libre" ] ; then
return 1
fi
i=$(expr $i + 1)
done
return 0
}
usage()
{
progname="resources/scripts/build/release/u-boot-libre"
if runs_from_build ; then
progname="./build release u-boot-libre"
fi
printf "Usage:\n"
printf "\t%s [--with-guix] # %s\n" \
"${progname}" \
"Release deblobbed u-boot tarballs for all supported versions"
printf "\t%s <version> [--with-guix] # %s\n" \
"${progname}" \
"Release deblobbed u-boot tarballs for the given version"
printf "\t%s --list-versions # %s\n" \
"${progname}" \
"List supported u-boot versions"
printf "\t%s --help # %s\n" \
"${progname}" \
"Prints this help"
printf "\nOptions:\n\t%s\n" \
"--with-guix # Use Guix to build the tarballs"
}
append_release_file()
{
if [ -z "${release_files}" ] ; then
release_files="${release_files}$1"
else
release_files="${release_files} $1"
fi
}
append_release_files()
{
for file in "$@" ; do
append_release_file "${file}"
done
}
print_release_files()
{
version="$1"
printf "Source code archives for u-boot-libre-%s-%s available at:\n" \
"${version}" "${revision}"
for file in ${release_files} ; do
printf "\t${file}\n"
done
}
release_deblobbed_uboot()
{
version="$1"
release_version_dir="${uboot_release_topdir}/${version}-${revision}"
tmpdir="${release_version_dir}/u-boot-libre-${version}-${revision}"
tarball="${tmpdir}.tar"
printf "Building source code archive, version %s revision %s\n" \
"${version}" "${revision}"
cd "${topdir}"
"${topdir}/download" u-boot "v${version}"
rm -rf \
"${tmpdir}/" \
"${tarball}" \
"${tarball}.lz" \
"${tarball}.xz"
mkdir -p "$(dirname ${tmpdir})"
cp -R "u-boot/u-boot/" "${tmpdir}"
rm -rf ${tmpdir}/.git ${tmpdir}/.gitignore
make -C ${tmpdir} distclean
prefix="$(dirname ${tmpdir} | sed 's#^/*##')/"
tar cf "${tarball}" "${tmpdir}" \
--transform="s#${prefix}##" \
--format=gnu \
--sort=name \
--owner=0 --group=0 --numeric-owner \
--mtime="@${SOURCE_DATE_EPOCH:-0}" \
lzip -9 --keep -vv "${tarball}"
xz -9 --keep -vv "${tarball}"
rm -rf "${tmpdir}/"
append_release_files \
"${tarball}" \
"${tarball}.lz" \
"${tarball}.xz"
}
release_uboot_blobs_list()
{
version="$1"
blobs_list="$(${topdir}/download u-boot --blobs-list v${version})"
release_version_dir="${uboot_release_topdir}/${version}-${revision}"
destination="${release_version_dir}/blobs-${version}-${revision}.list"
cd "${topdir}"
rm -rf \
"${destination}" \
"${destination}.lz" \
"${destination}.xz"
install -m 755 -d "${release_version_dir}"
install -m 644 -T "${blobs_list}" "${destination}"
lzip -9 --keep -vv "${destination}"
xz -9 --keep -vv "${destination}"
append_release_files \
"${destination}" \
"${destination}.lz" \
"${destination}.xz"
}
release_uboot_deblob_script()
{
version="$1"
deblob_script="$(${topdir}/download u-boot --gen-deblob-script v${version})"
release_version_dir="${uboot_release_topdir}/${version}-${revision}"
destination="${release_version_dir}/deblob-${version}-${revision}.sh"
cd "${topdir}"
rm -rf \
"${destination}" \
"${destination}.lz" \
"${destination}.xz"
install -m 755 -d "${release_version_dir}"
install -m 644 -T "${deblob_script}" "${destination}"
lzip -9 --keep -vv "${destination}"
xz -9 --keep -vv "${destination}"
append_release_files \
"${destination}" \
"${destination}.lz" \
"${destination}.xz"
}
guix_shell() {
# We use the guix v1.4.0 commit hash instead of the tag name
# as this way we don't need extra work to implement more
# robust integrity checking.
guix time-machine \
--commit="8e2f32cee982d42a79e53fc1e9aa7b8ff0514714" \
-- \
shell \
--container \
--emulate-fhs \
--network \
bash \
coreutils \
findutils \
gcc-toolchain \
gawk \
git \
grep \
lzip \
make \
nss-certs \
sed \
tar \
xz \
-- \
"$@"
}
if [ $# -eq 1 ] && [ "$1" = "--help" ] ; then
usage
exit 0
elif [ $# -eq 1 ] && [ "$1" = "--list-versions" ] ; then
for version in ${supported_uboot_versions} ; do
printf "${version}\n"
done
exit 0
elif [ $# -eq 0 ] ; then
for version in ${supported_uboot_versions} ; do
release_deblobbed_uboot "${version}"
release_uboot_blobs_list "${version}"
release_uboot_deblob_script "${version}"
print_release_files "${version}"
done
exit 0
elif [ $# -eq 1 ] && [ "$1" = "--with-guix" ] ; then
guix_shell "$0"
exit 0
elif [ $# -eq 1 ] ; then
found=0
for version in ${supported_uboot_versions} ; do
if [ "${version}" = "$1" ] ; then
release_deblobbed_uboot "$1"
release_uboot_blobs_list "$1"
release_uboot_deblob_script "$1"
print_release_files "$1"
exit 0
fi
done
printf "Error: Version '${1}' is not supported\n"
exit 1
elif [ $# -eq 2 ] && [ "$2" = "--with-guix" ] ; then
guix_shell "$0" "$1"
exit 0
fi
exit 0