summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile9
-rwxr-xr-xdownload3
-rwxr-xr-xresources/scripts/build/release/u-boot-libre217
-rwxr-xr-xresources/scripts/build/release/u-boot-stable-src-release60
-rwxr-xr-xresources/scripts/download/coreboot36
-rwxr-xr-xresources/scripts/download/flashrom17
-rwxr-xr-xresources/scripts/download/grub17
-rwxr-xr-xresources/scripts/download/ich9utils17
-rwxr-xr-xresources/scripts/download/memtest86plus17
-rwxr-xr-xresources/scripts/download/seabios17
-rwxr-xr-xresources/scripts/download/u-boot198
-rwxr-xr-xtests/u-boot-libre29
-rw-r--r--tests/u-boot-libre.sha5129
13 files changed, 567 insertions, 79 deletions
diff --git a/Makefile b/Makefile
index 5749c974..2fcb7553 100644
--- a/Makefile
+++ b/Makefile
@@ -20,9 +20,10 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
-.PHONY: all download modules ich9m-descriptors payloads roms release clean \
- crossgcc-clean install-dependencies-ubuntu install-dependencies-debian \
- install-dependencies-arch install-dependencies-void
+.PHONY: all check download modules ich9m-descriptors payloads roms release \
+ clean crossgcc-clean install-dependencies-ubuntu \
+ install-dependencies-debian install-dependencies-arch \
+ install-dependencies-void
all: roms
@@ -69,3 +70,5 @@ install-dependencies-arch:
install-dependencies-void:
./build dependencies void
+check:
+ ./tests/u-boot-libre
diff --git a/download b/download
index 7d32a353..8de5e225 100755
--- a/download
+++ b/download
@@ -60,6 +60,9 @@ help() {
coreboot trees by default, but './download coreboot x60' will only download
the coreboot tree required for the target: x60
+ Each program download script should also accept the --help paramater to
+ display the usage of the script.
+
Refer to the documentation for more information.
EOF
}
diff --git a/resources/scripts/build/release/u-boot-libre b/resources/scripts/build/release/u-boot-libre
new file mode 100755
index 00000000..a871aab7
--- /dev/null
+++ b/resources/scripts/build/release/u-boot-libre
@@ -0,0 +1,217 @@
+#!/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>
+#
+# 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="r1"
+
+supported_uboot_versions=" \
+ 2021.07 \
+"
+
+topdir="$(realpath $(dirname $(realpath $0))/../../../../)"
+uboot_release_topdir="${topdir}/release/u-boot-libre"
+
+release_files=""
+
+usage()
+{
+ progname="resources/scripts/build/release/u-boot-libre"
+
+ printf "Usage:\n"
+ printf "\t%s # %s\n" \
+ "${progname}" \
+ "Release deblobbed u-boot tarballs for all supported versions"
+ printf "\t%s [version] # %s\n" \
+ "${progname}" \
+ "Release deblobbed u-boot tarballs for the given versions"
+ printf "\t%s --list-versions # %s\n" \
+ "${progname}" \
+ "List supported u-boot versions"
+ printf "\t%s --help # %s\n" \
+ "${progname}" \
+ "Prints this help"
+}
+
+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="1970-01-01" \
+
+ 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 "${blobs_list}" "${destination}"
+
+ lzip -9 --keep -vv "${destination}"
+ xz -9 --keep -vv "${destination}"
+
+ append_release_files \
+ "${destination}" \
+ "${destination}.lz" \
+ "${destination}.xz"
+}
+
+if [ $# -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 -a "$1" == "--help" ] ; then
+ usage
+ exit 0
+elif [ $# -eq 1 -a "$1" == "--list-versions" ] ; then
+ for version in ${supported_uboot_versions} ; do
+ printf "${version}\n"
+ done
+ exit 0
+elif [ $# -eq 1 ] ; then
+ found=0
+ for revision in ${supported_uboot_revisions} ; do
+ if [ "${revision}" = "$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
+fi
+
+exit 0
diff --git a/resources/scripts/build/release/u-boot-stable-src-release b/resources/scripts/build/release/u-boot-stable-src-release
deleted file mode 100755
index 357338cf..00000000
--- a/resources/scripts/build/release/u-boot-stable-src-release
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/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>
-#
-# 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
-
-version="v2021.07"
-revision="r1"
-
-topdir="$(realpath $(dirname $(realpath $0))/../../../../)"
-tmpdir="${topdir}/release/u-boot/u-boot-${version}-${revision}"
-tarball="${tmpdir}.tar"
-
-printf "Building source code archive, version %s revision %s\n" "${version}" "${revision}"
-
-cd "${topdir}"
-"${topdir}/download" u-boot
-
-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}##"
-lzip -9 --keep -vv "${tarball}"
-xz -9 --keep -vv "${tarball}"
-
-rm -rf "${tmpdir}/"
-
-printf "Source code archives available at:\n\t%s\n\t%s\n\t%s\n" \
- "${tarball}" \
- "${tarball}.lz" \
- "${tarball}.xz"
diff --git a/resources/scripts/download/coreboot b/resources/scripts/download/coreboot
index 6d0aa353..b94b1bc9 100755
--- a/resources/scripts/download/coreboot
+++ b/resources/scripts/download/coreboot
@@ -21,6 +21,42 @@
[ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e
+list_supported_boards()
+{
+ for board in resources/coreboot/*; do
+ echo $board | sed 's#resources/coreboot/##'
+ done
+}
+
+usage()
+{
+ progname="./download coreboot"
+ printf "Usage:\n"
+ printf "\t%s # %s\n" \
+ "${progname}" \
+ "Download and deblob Coreboot for all the boards"
+ printf "\t%s [board [board] ...] # %s\n" \
+ "${progname}" \
+ "Download and deblob Coreboot for the given boards"
+ printf "\t%s --list-boards # %s\n" \
+ "${progname}" \
+ "Prints this help"
+ printf "\t%s --help # %s\n" \
+ "${progname}" \
+ "List supported boards"
+ printf "\t%s --help # %s\n" \
+ "${progname}" \
+ "Prints this help"
+}
+
+if [ $# -eq 1 -a "$1" == "--help" ] ; then
+ usage
+ exit 0
+elif [ $# -eq 1 -a "$1" == "--list-boards" ] ; then
+ list_supported_boards
+ exit 0
+fi
+
# set this when you want to modify each coreboot tree
# for example, you want to test custom patches
# NODELETE= ./download coreboot
diff --git a/resources/scripts/download/flashrom b/resources/scripts/download/flashrom
index a22f22f2..c5ff4bac 100755
--- a/resources/scripts/download/flashrom
+++ b/resources/scripts/download/flashrom
@@ -21,6 +21,23 @@
[ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e
+usage()
+{
+ progname="./download flashrom"
+ printf "Usage:\n"
+ printf "\t%s # %s\n" \
+ "${progname}" \
+ "Download flashrom"
+ printf "\t%s --help # %s\n" \
+ "${progname}" \
+ "Prints this help"
+}
+
+if [ $# -ne 0 ] ; then
+ usage
+ exit 0
+fi
+
# Get flashrom at the last previously tested revision
# Remove the old version that may still exist:
diff --git a/resources/scripts/download/grub b/resources/scripts/download/grub
index 47c75bc1..97bae1ed 100755
--- a/resources/scripts/download/grub
+++ b/resources/scripts/download/grub
@@ -21,6 +21,23 @@
[ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e
+usage()
+{
+ progname="./download grub"
+ printf "Usage:\n"
+ printf "\t%s # %s\n" \
+ "${progname}" \
+ "Download GRUB"
+ printf "\t%s --help # %s\n" \
+ "${progname}" \
+ "Prints this help"
+}
+
+if [ $# -ne 0 ] ; then
+ usage
+ exit 0
+fi
+
# Remove the old version that may still exist
# ------------------------------------------------------------------------------
diff --git a/resources/scripts/download/ich9utils b/resources/scripts/download/ich9utils
index a00f27dd..d8232b03 100755
--- a/resources/scripts/download/ich9utils
+++ b/resources/scripts/download/ich9utils
@@ -21,6 +21,23 @@
[ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e
+usage()
+{
+ progname="./download ich9utils"
+ printf "Usage:\n"
+ printf "\t%s # %s\n" \
+ "${progname}" \
+ "Download ich9utils"
+ printf "\t%s --help # %s\n" \
+ "${progname}" \
+ "Prints this help"
+}
+
+if [ $# -ne 0 ] ; then
+ usage
+ exit 0
+fi
+
printf "Downloading ich9utils\n"
if [ -d ich9utils ]; then
diff --git a/resources/scripts/download/memtest86plus b/resources/scripts/download/memtest86plus
index 1b3da822..c0897c80 100755
--- a/resources/scripts/download/memtest86plus
+++ b/resources/scripts/download/memtest86plus
@@ -23,6 +23,23 @@
[ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e
+usage()
+{
+ progname="./download memtest86plus"
+ printf "Usage:\n"
+ printf "\t%s # %s\n" \
+ "${progname}" \
+ "Download MemTest86+"
+ printf "\t%s --help # %s\n" \
+ "${progname}" \
+ "Prints this help"
+}
+
+if [ $# -ne 0 ] ; then
+ usage
+ exit 0
+fi
+
# Get the last version of MemTest86+ used, apply patches, build it.
# Remove the old version that may exist
diff --git a/resources/scripts/download/seabios b/resources/scripts/download/seabios
index 58ea2bb8..a7c4ab5e 100755
--- a/resources/scripts/download/seabios
+++ b/resources/scripts/download/seabios
@@ -19,6 +19,23 @@
[ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e
+usage()
+{
+ progname="./download seabios"
+ printf "Usage:\n"
+ printf "\t%s # %s\n" \
+ "${progname}" \
+ "Download SeaBIOS"
+ printf "\t%s --help # %s\n" \
+ "${progname}" \
+ "Prints this help"
+}
+
+if [ $# -ne 0 ] ; then
+ usage
+ exit 0
+fi
+
# Get SeaBIOS, revert to commit last used and apply patches.
# Remove the old version that may still exist
diff --git a/resources/scripts/download/u-boot b/resources/scripts/download/u-boot
index 704d1c3a..bd0258c0 100755
--- a/resources/scripts/download/u-boot
+++ b/resources/scripts/download/u-boot
@@ -32,6 +32,12 @@ deleteblobs="true"
# This script handles the internet, and Git. Both are inherently unreliable.
[[ -f build_error ]] && rm -f build_error
+# Make sure that older revision are first as code uses that order to
+# find the latest supported revision.
+supported_uboot_revisions=" \
+ v2021.07 \
+"
+
downloadfor() {
uboot_revision="v2021.07"
uboot_dir="u-boot/u-boot"
@@ -59,7 +65,7 @@ downloadfor() {
if [ ! -d "${uboot_dir}" ]; then
printf "Download u-boot from upstream:\n"
- git clone https://source.denx.de/u-boot/u-boot \
+ git clone https://source.denx.de/u-boot/u-boot.git \
"${uboot_dir}" || \
rm -Rf "${uboot_dir}"
if [ ! -d "${uboot_dir}" ]; then
@@ -99,25 +105,185 @@ strip_comments()
sed '/^$/d'
}
-printf "Downloading u-boot and (if exist in build system) applying patches\n"
-downloadfor
+generate_deblob_script()
+{
+ blob_list_file="$1"
+ output="$2"
-rm -f "build_error"
-printf "\n\n"
+ # Add sheebang and copyright headers from this file
+ awk '{
+ if ($0 !~ /^#/ && NF > 0) {
+ stop=1;
+ }
+ if (stop !=1) {
+ printf("%s\n", $0);
+ }
+ }' $0 >> ${output}
-if [ "${deleteblobs}" = "true" ]; then
- bloblist="resources/u-boot/default/blobs.list"
+ # Add rm -rf before directories and rm -f before files
+ awk \
+ '{
+ }{
+ if (NF == 0) {
+ printf("\n");
+ } else {
+ if ($0 !~ /#/ && $NF ~ /\/$/) {
+ printf("rm -rf %s\n", $0);
+ } else if ($0 !~ /#/) {
+ printf("rm -f %s\n", $0);
+ } else {
+ # We have comments, try to see if they are
+ # still valid paths before the comments
+ comments_found=0
+ last_field=0
+ for(i=1; i<=NF; i++) {
+ if($i ~ /#/) {
+ comments_found=1;
+ } else if(comments_found != 1) {
+ last_field=i;
+ }
+ }
+ if (last_field == 0) {
+ printf("%s\n", $0);
+ } else if ($last_field ~ /\/$/) {
+ printf("rm -rf %s\n", $0);
+ } else {
+ printf("rm -f %s\n", $0);
+ }
+ }
+ }
+ }' "${blob_list_file}" >> "${output}"
+}
+
+usage()
+{
+ progname="./download u-boot"
+
+ printf "Usage:\n"
+ printf "\t%s # %s\n" \
+ "${progname}" \
+ "Download latest u-boot git revision and deblob it"
+ printf "\t%s [revision] # %s\n" \
+ "${progname}" \
+ "Download given u-boot git revision and deblob it"
+ printf "\t%s --blobs-list # %s\n" \
+ "${progname}" \
+ "Print the path of the blobs.list file for the latest supported u-boot revision"
+ printf "\t%s --blobs-list [revision] # %s\n" \
+ "${progname}" \
+ "Print the path of the blobs.list file for the given u-boot revision"
+ printf "\t%s --gen-deblob-script # %s\n" \
+ "${progname}" \
+ "Print the path of the generated deblob script for the latest supported u-boot revision"
+ printf "\t%s --gen-deblob-script [revision] # %s\n" \
+ "${progname}" \
+ "Print the path of the generated deblob script for the given u-boot revision"
+ printf "\t%s --list-revisions # %s\n" \
+ "${progname}" \
+ "List supported u-boot revisions"
+ printf "\t%s --help # %s\n" \
+ "${progname}" \
+ "Prints this help"
+}
+
+download_uboot_revision()
+{
+ git_revision="$1"
+
+ printf "Downloading u-boot "
+ printf "and (if exist in build system) applying patches\n"
+ downloadfor "${git_revision}"
+
+ rm -f "build_error"
+ printf "\n\n"
+
+ if [ "${deleteblobs}" = "true" ]; then
+ blobslist="resources/u-boot/default/blobs.list"
+ for blob_path in $(strip_comments "${blobslist}"); do
+ if echo "${blob_path}" | \
+ grep '/$' 2>&1 >/dev/null ; then
+ printf "Deleting blob directory: '%s/%s'\n" \
+ "${uboot_dir}" "${blob_path}"
+ rm -rf "${uboot_dir}/${blob_path}"
+ else
+ printf "Deleting blob file: '%s/%s'\n" \
+ "${uboot_dir}" "${blob_path}"
+ rm -f "${uboot_dir}/${blob_path}"
+ fi
+ done
+ fi
+}
+
+print_blobs_list_path()
+{
+ printf "resources/u-boot/default/blobs.list\n"
+}
- for blob_path in $(strip_comments "${bloblist}"); do
- if echo "${blob_path}" | grep '/$' 2>&1 >/dev/null ; then
- printf "Deleting blob directory: '%s/%s'\n" \
- "${uboot_dir}" "${blob_path}"
- rm -rf "${uboot_dir}/${blob_path}"
- else
- printf "Deleting blob file: '%s/%s'\n" \
- "${uboot_dir}" "${blob_path}"
- rm -f "${uboot_dir}/${blob_path}"
+print_deblob_script_path()
+{
+ version="$1"
+ path="$(mktemp)"
+
+ generate_deblob_script "$(print_blobs_list_path ${version})" "${path}"
+ printf "%s\n" ${path}
+}
+
+if [ $# -eq 0 ] ; then
+ latest_revision="$(echo ${supported_uboot_revisions} | tail -n1)"
+ download_uboot_revision "${latest_revision}"
+ exit 0
+elif [ $# -eq 1 -a "$1" == "--help" ] ; then
+ usage
+ exit 0
+elif [ $# -eq 1 -a "$1" == "--list-revisions" ] ; then
+ for revision in ${supported_uboot_revisions} ; do
+ printf "${revision}\n"
+ done
+ exit 0
+elif [ $# -eq 1 -a "$1" == "--blobs-list" ] ; then
+ latest_revision="$(echo ${supported_uboot_revisions} | tail -n1)"
+ print_blobs_list_path "${latest_revision}"
+ exit 0
+elif [ $# -eq 2 -a "$1" == "--blobs-list" ] ; then
+ found=0
+ for revision in ${supported_uboot_revisions} ; do
+ if [ "${revision}" = "$2" ] ; then
+ print_blobs_list_path "$2"
+ exit 0
+ fi
+ done
+
+ printf "Error: Revision '${1}' is not supported\n"
+
+ exit 1
+elif [ $# -eq 1 -a "$1" == "--gen-deblob-script" ] ; then
+ latest_revision="$(echo ${supported_uboot_revisions} | tail -n1)"
+ print_deblob_script_path "${latest_revision}"
+ exit 0
+elif [ $# -eq 2 -a "$1" == "--gen-deblob-script" ] ; then
+ found=0
+ for revision in ${supported_uboot_revisions} ; do
+ if [ "${revision}" = "$2" ] ; then
+ print_deblob_script_path "$2"
+ exit 0
+ fi
+ done
+
+ printf "Error: Revision '${1}' is not supported\n"
+
+ exit 1
+elif [ $# -eq 1 ] ; then
+ found=0
+ for revision in ${supported_uboot_revisions} ; do
+ if [ "${revision}" = "$1" ] ; then
+ download_uboot_revision "$1"
+ exit 0
fi
done
+
+ printf "Error: Revision '${1}' is not supported\n"
+
+ exit 1
fi
+
exit 0
diff --git a/tests/u-boot-libre b/tests/u-boot-libre
new file mode 100755
index 00000000..de234024
--- /dev/null
+++ b/tests/u-boot-libre
@@ -0,0 +1,29 @@
+#!/usr/bin/env bash
+
+#
+# tests for resources/scripts/build/release/u-boot-stable-src-release
+#
+# Copyright (C) 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.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/>.
+#
+
+[ "x${DEBUG+set}" = 'xset' ] && set -v
+set -u -e
+
+topdir="$(realpath $(dirname $(realpath $0))/../)"
+progname="$(basename $(realpath $0))"
+
+"${topdir}/resources/scripts/build/release/u-boot-libre"
+sha512sum -c "${topdir}/tests/${progname}.sha512"
diff --git a/tests/u-boot-libre.sha512 b/tests/u-boot-libre.sha512
new file mode 100644
index 00000000..4439175b
--- /dev/null
+++ b/tests/u-boot-libre.sha512
@@ -0,0 +1,9 @@
+1684a70273e177cdc4f94da7214198cde5e86bebf76ff29a8e7a7ed8c2470bd392eb4b1ec7eda55ee95335e76123dc28429e90b2015453734f07c28f83358bf2 release/u-boot-libre/2021.07-r1/u-boot-libre-2021.07-r1.tar
+3e26aa796759dd5af01795963cc35b1ae9c9e93844c73f22a4881bae30e98f68f8d1695983da76ab5fb8aa9785b0c37d3b8a1186ed5d64b11758a4ae2b146e2c release/u-boot-libre/2021.07-r1/u-boot-libre-2021.07-r1.tar.lz
+d6bbd0c311fa7d73a018d2195618a9cff9984502624e83097e94c310557eb47da85f43a9e06bb3bc15828b050d9af0799fbaa828aff0a73e7f0592cccc4a2f47 release/u-boot-libre/2021.07-r1/u-boot-libre-2021.07-r1.tar.xz
+007968618d182bb26eb13f25720a06f28a59b0a67e5b0e66ae2f7c1246c82139091606e61f780d60496866b31cb037a5a41f207d1b00e293280bcfc17cba8317 release/u-boot-libre/2021.07-r1/blobs-2021.07-r1.list
+cc338a69266cc94d3a283a2f0e14660a649573eaf70f11254db00c190a85da5892f9ca78d2d44633d46f90c857297b954ba41d3d9e076a94433326a161f73b61 release/u-boot-libre/2021.07-r1/blobs-2021.07-r1.list.lz
+174726b4505a9af850fb15cbfba73c6ea2eeb669352f37e577f37c225c8407f8c0da63f43d0d2285fdd6123fab4ac59233c8bd01bc863ba0e338c8469df10c1c release/u-boot-libre/2021.07-r1/blobs-2021.07-r1.list.xz
+007968618d182bb26eb13f25720a06f28a59b0a67e5b0e66ae2f7c1246c82139091606e61f780d60496866b31cb037a5a41f207d1b00e293280bcfc17cba8317 release/u-boot-libre/2021.07-r1/deblob-2021.07-r1.sh
+cc338a69266cc94d3a283a2f0e14660a649573eaf70f11254db00c190a85da5892f9ca78d2d44633d46f90c857297b954ba41d3d9e076a94433326a161f73b61 release/u-boot-libre/2021.07-r1/deblob-2021.07-r1.sh.lz
+174726b4505a9af850fb15cbfba73c6ea2eeb669352f37e577f37c225c8407f8c0da63f43d0d2285fdd6123fab4ac59233c8bd01bc863ba0e338c8469df10c1c release/u-boot-libre/2021.07-r1/deblob-2021.07-r1.sh.xz