merge script/update/release into build

the main script isn't that big, and since the main
purpose of cbmk is geared toward the releases, it
makes sense to reduce the number of scripts by
merging into the main one

the way this works, "./update release" still works
afterward

so, the way cbmk is used shall remain unchanged

Signed-off-by: Leah Rowe <leah@libreboot.org>
audit2-merge1
Leah Rowe 2024-05-11 03:52:52 +01:00 committed by Leah Rowe
parent 41f4ee3c2d
commit f12c2f284f
2 changed files with 206 additions and 215 deletions

208
build
View File

@ -1,6 +1,6 @@
#!/usr/bin/env sh
# SPDX-License-Identifier: GPL-3.0-or-later
# SPDX-FileCopyrightText: 2014,2015,2020,2021,2023 Leah Rowe <leah@libreboot.org>
# SPDX-FileCopyrightText: 2014,2015,2020-2024 Leah Rowe <leah@libreboot.org>
# SPDX-FileCopyrightText: 2015 Patrick "P. J." McDermott <pj@pehjota.net>
# SPDX-FileCopyrightText: 2015, 2016 Klemens Nanni <contact@autoboot.org>
# SPDX-FileCopyrightText: 2022, Caleb La Grange <thonkpeasant@protonmail.com>
@ -14,7 +14,8 @@ fi
. "include/option.sh"
eval "$(setvars "" option aur_notice)"
eval "$(setvars "" option aur_notice vdir relname src_dirname srcdir _xm \
target romdir mode)"
err="fail"
linkpath="${0}"
@ -44,6 +45,7 @@ initcmd()
help) usage ${0} ;;
list) items "${buildpath}" ;;
version) mkversion ;;
release) shift 1; mkrelease $@ ;;
*)
option="${1}"
return 0 ;;
@ -111,6 +113,208 @@ usage()
EOF
}
mkrelease()
{
export CBMK_RELEASE="y"
export CBMK_STATUS="n"
vdir="release"
while getopts d:m: option; do
[ -z "${OPTARG}" ] && $err "Empty argument not allowed"
case "${option}" in
d) vdir="${OPTARG}" ;;
m) mode="${OPTARG}" ;;
*) $err "Invalid option" ;;
esac
done
check_project
vdir="${vdir}/${version}"
relname="${projectname}-${version}"
[ "${mode}" = "u-boot" ] && relname="u-boot-for-${relname}"
src_dirname="${relname}_src"
srcdir="${vdir}/${src_dirname}"
[ -e "${vdir}" ] && $err "already exists: \"${vdir}\""
mkvdir
build_release
printf "DONE! Check release files under %s\n" "${vdir}"
}
mkvdir()
{
mkdir -p "${vdir}" || $err "mkvdir: !mkdir -p \"${vdir}\""
git clone . "${srcdir}" || $err "mkdir: !gitclone \"${srcdir}\""
insert_version_files "$srcdir" || $err "mkvdir $srcdir: versionfile"
}
build_release()
{
_xm="build_release ${vdir}"
(
cd "${srcdir}" || $err "${_xm}: !cd \"${srcdir}\""
fetch_trees
[ "${mode}" = "u-boot" ] || x_ mv src/docs docs
) || $err "can't create release files"
git log --graph --pretty=format:'%Cred%h%Creset %s %Creset' \
--abbrev-commit > "${srcdir}/CHANGELOG" || \
$err "build_release $srcdir: couldn't generate changelog"
(
if [ "${mode}" = "u-boot" ]; then
cd "${srcdir}/src/" || $err "${_xm}: mktarball \"${srcdir}\""
mktarball u-boot "../../${srcdir##*/}.tar.xz" || \
$err "$_xm: mksrc"
# make a src archive containing only u-boot
else
cd "${srcdir%/*}" || $err "${_xm}: mktarball \"${srcdir}\""
mktarball "${srcdir##*/}" "${srcdir##*/}.tar.xz" || \
$err "$_xm: mksrc"
fi
) || $err "can't create src tarball"
[ "${mode}" = "src" ] && return 0
[ "${mode}" = "u-boot" ] && return 0
(
cd "${srcdir}" || $err "${_xm}: 2 !cd \"${srcdir}\""
mkrom_images
) || $err "can't build rom images"
rm -Rf "${srcdir}" || $err "!rm -Rf ${srcdir}"
}
fetch_trees()
{
for x in config/git/*; do
[ "${mode}" = "u-boot" ] && break
[ ! -f "${x}" ] || ./update trees -f "${x#config/git/}" || \
$err "${_xm}: fetch ${x#config/git/}"
done
[ "${mode}" = "u-boot" ] && x_ ./update trees -f u-boot
for x in config/*/build.list; do
[ -f "${x}" ] || continue
xp="${x#*/}"; xp="${xp%/*}"
[ -L "${xp}" ] || rm -Rf "src/${xp}/${xp}" || \
$err "!rm -Rf \"src/${xp}/${xp}\""
done
find . -name ".git" -exec rm -Rf {} + || $err "$_xm: rm .git"
find . -name ".gitmodules" -exec rm -Rf {} + || $err "$_xm: rm .gitmod"
x_ rm -Rf tmp .git
}
mkrom_images()
{
./build roms all || $err "${_xm}: roms-all"
./build roms serprog rp2040 || $err "${_xm}: rp2040"
./build roms serprog stm32 || $err "${_xm}: stm32"
for rombuild in bin/*; do
[ -d "${rombuild}" ] || continue
handle_rom_archive "${rombuild}"
done
mv "release/${version}/roms/" ../roms || $err "${_xm}: copy roms/"
}
handle_rom_archive()
{
builddir="${1}"
romdir="tmp/romdir"
rm -Rf "${romdir}" || $err "!rm romdir, handle_rom_archive"
target="${builddir##*/}"
if [ ! -f "config/coreboot/${target}/target.cfg" ]; then
# No config, just make a tarball
tarball="release/${version}/roms/${relname}_${target}.tar.xz"
insert_copying_files "${builddir}" || \
$err "!insert copy, handle, ${builddir}"
mktarball "${builddir}" "${tarball}"
return 0
fi
romdir="${romdir}/bin/${target}"
mkdir -p "${romdir}" || $err "!mkdir -p romdir, handle_rom_archive"
cp "$builddir/"* "$romdir" || $err "!cp romdir, handle_rom_archive"
printf "Generating release/%s/roms/%s-%s_%s.tar.xz\n" \
"${version}" "${projectname}" "${version}" "${target##*/}"
insert_version_files "${romdir}" || \
$err "mkrom_tarball ${romdir}: versionfile"
insert_copying_files "$romdir" || $err "!insert copy, handle 2, $romdir"
mkrom_tarball
}
insert_copying_files()
{
remkdir "${1}/licenses"
l="${1}/licenses"
# copy licenses to rom image archive, for completion
cp "src/grub/COPYING" "${l}/COPYING.grub" || return 1
cp "src/coreboot/default/COPYING" "${l}/COPYING.coreboot" || return 1
cp -R "src/coreboot/default/LICENSES" "${l}/LICENSES.coreboot" || \
return 1
cp "src/seabios/default/COPYING" "${l}/COPYING.coreboot" || return 1
cp "src/seabios/default/COPYING.LESSER" "$l/COPYING.LESSER.seabios" \
|| return 1
cp -R "src/u-boot/default/Licenses" "${l}/COPYING.u-boot" || return 1
printf "Multiple licenses. Check corresponding %s source archive\n" \
"${projectname}" > "${1}/COPYING" || return 1
rm -f src/u-boot/*/test/lib/strlcat.c || return 1
}
mkrom_tarball()
{
archivename="${relname}_${target##*/}"
f="release/${version}/roms/${archivename}"
mkdir -p "${f%/*}" || $err "mkrom_tarball: !mkdir -p ${f%/*}"
(
cd "${romdir%"/bin/$target"}" || $err "!cd ${romdir%"/bin/$target"}"
mktarball "bin/${target}" "${archivename}.tar.xz"
) || $err "can't create rom tarball"
mv "${romdir%"/bin/${target}"}/${archivename}.tar.xz"* "${f%/*}" || \
$err "mktar ${f%/*}/${romdir%"/bin/$target"}/$archivename.tar.xz"
printf "Created ROM archive: %s" "${f%/*}/${archivename}.tar.xz"
}
insert_version_files()
{
printf "%s\n" "${version}" > "${1}/version" || return 1
printf "%s\n" "${versiondate}" > "${1}/versiondate" || return 1
printf "%s\n" "${projectname}" > "${1}/projectname" || return 1
}
mktarball()
{
# preserve timestamps for reproducible tarballs
tar_implementation=$(tar --version | head -n1) || :
[ "${2%/*}" = "${2}" ] || \
mkdir -p "${2%/*}" || $err "mk, !mkdir -p \"${2%/*}\""
printf "\nCreating archive: %s\n\n" "$2"
if [ "${tar_implementation% *}" = "tar (GNU tar)" ]; then
tar --sort=name --owner=root:0 --group=root:0 \
--mtime="UTC 2024-05-04" -c "$1" | xz -T$threads -9e \
> "$2" || $err "mktarball 1, ${1}"
else
# TODO: reproducible tarballs on non-GNU systems
tar -c "$1" | xz -T$threads -9e > "$2" || \
$err "mktarball 2, $1"
fi
(
[ "${2%/*}" != "${2}" ] && x_ cd "${2%/*}"
sha512sum "${2##*/}" > "${2##*/}.sha512" || \
$err "!sha512sum \"${2##*/}\" > \"${2##*/}.sha512\""
) || $err "failed to create tarball checksum"
}
mkversion()
{
printf "revision: %s %s\n" "$projectname" "$version"

View File

@ -1,213 +0,0 @@
#!/usr/bin/env sh
# SPDX-License-Identifier: MIT
# SPDX-FileCopyrightText: 2020-2024 Leah Rowe <leah@libreboot.org>
set -u -e
. "include/option.sh"
eval "$(setvars "" vdir relname src_dirname srcdir _xm target romdir mode)"
export CBMK_RELEASE="y"
export CBMK_STATUS="n"
main()
{
vdir="release"
while getopts d:m: option; do
[ -z "${OPTARG}" ] && $err "Empty argument not allowed"
case "${option}" in
d) vdir="${OPTARG}" ;;
m) mode="${OPTARG}" ;;
*) $err "Invalid option" ;;
esac
done
check_project
vdir="${vdir}/${version}"
relname="${projectname}-${version}"
[ "${mode}" = "u-boot" ] && relname="u-boot-for-${relname}"
src_dirname="${relname}_src"
srcdir="${vdir}/${src_dirname}"
[ -e "${vdir}" ] && $err "already exists: \"${vdir}\""
mkvdir
build_release
printf "DONE! Check release files under %s\n" "${vdir}"
}
mkvdir()
{
mkdir -p "${vdir}" || $err "mkvdir: !mkdir -p \"${vdir}\""
git clone . "${srcdir}" || $err "mkdir: !gitclone \"${srcdir}\""
insert_version_files "$srcdir" || $err "mkvdir $srcdir: versionfile"
}
build_release()
{
_xm="build_release ${vdir}"
(
cd "${srcdir}" || $err "${_xm}: !cd \"${srcdir}\""
fetch_trees
[ "${mode}" = "u-boot" ] || x_ mv src/docs docs
) || $err "can't create release files"
git log --graph --pretty=format:'%Cred%h%Creset %s %Creset' \
--abbrev-commit > "${srcdir}/CHANGELOG" || \
$err "build_release $srcdir: couldn't generate changelog"
(
if [ "${mode}" = "u-boot" ]; then
cd "${srcdir}/src/" || $err "${_xm}: mktarball \"${srcdir}\""
mktarball u-boot "../../${srcdir##*/}.tar.xz" || \
$err "$_xm: mksrc"
# make a src archive containing only u-boot
else
cd "${srcdir%/*}" || $err "${_xm}: mktarball \"${srcdir}\""
mktarball "${srcdir##*/}" "${srcdir##*/}.tar.xz" || \
$err "$_xm: mksrc"
fi
) || $err "can't create src tarball"
[ "${mode}" = "src" ] && return 0
[ "${mode}" = "u-boot" ] && return 0
(
cd "${srcdir}" || $err "${_xm}: 2 !cd \"${srcdir}\""
mkrom_images
) || $err "can't build rom images"
rm -Rf "${srcdir}" || $err "!rm -Rf ${srcdir}"
}
fetch_trees()
{
for x in config/git/*; do
[ "${mode}" = "u-boot" ] && break
[ ! -f "${x}" ] || ./update trees -f "${x#config/git/}" || \
$err "${_xm}: fetch ${x#config/git/}"
done
[ "${mode}" = "u-boot" ] && x_ ./update trees -f u-boot
for x in config/*/build.list; do
[ -f "${x}" ] || continue
xp="${x#*/}"; xp="${xp%/*}"
[ -L "${xp}" ] || rm -Rf "src/${xp}/${xp}" || \
$err "!rm -Rf \"src/${xp}/${xp}\""
done
find . -name ".git" -exec rm -Rf {} + || $err "$_xm: rm .git"
find . -name ".gitmodules" -exec rm -Rf {} + || $err "$_xm: rm .gitmod"
x_ rm -Rf tmp .git
}
mkrom_images()
{
./build roms all || $err "${_xm}: roms-all"
./build roms serprog rp2040 || $err "${_xm}: rp2040"
./build roms serprog stm32 || $err "${_xm}: stm32"
for rombuild in bin/*; do
[ -d "${rombuild}" ] || continue
handle_rom_archive "${rombuild}"
done
mv "release/${version}/roms/" ../roms || $err "${_xm}: copy roms/"
}
handle_rom_archive()
{
builddir="${1}"
romdir="tmp/romdir"
rm -Rf "${romdir}" || $err "!rm romdir, handle_rom_archive"
target="${builddir##*/}"
if [ ! -f "config/coreboot/${target}/target.cfg" ]; then
# No config, just make a tarball
tarball="release/${version}/roms/${relname}_${target}.tar.xz"
insert_copying_files "${builddir}" || \
$err "!insert copy, handle, ${builddir}"
mktarball "${builddir}" "${tarball}"
return 0
fi
romdir="${romdir}/bin/${target}"
mkdir -p "${romdir}" || $err "!mkdir -p romdir, handle_rom_archive"
cp "$builddir/"* "$romdir" || $err "!cp romdir, handle_rom_archive"
printf "Generating release/%s/roms/%s-%s_%s.tar.xz\n" \
"${version}" "${projectname}" "${version}" "${target##*/}"
insert_version_files "${romdir}" || \
$err "mkrom_tarball ${romdir}: versionfile"
insert_copying_files "$romdir" || $err "!insert copy, handle 2, $romdir"
mkrom_tarball
}
insert_copying_files()
{
remkdir "${1}/licenses"
l="${1}/licenses"
# copy licenses to rom image archive, for completion
cp "src/grub/COPYING" "${l}/COPYING.grub" || return 1
cp "src/coreboot/default/COPYING" "${l}/COPYING.coreboot" || return 1
cp -R "src/coreboot/default/LICENSES" "${l}/LICENSES.coreboot" || \
return 1
cp "src/seabios/default/COPYING" "${l}/COPYING.coreboot" || return 1
cp "src/seabios/default/COPYING.LESSER" "$l/COPYING.LESSER.seabios" \
|| return 1
cp -R "src/u-boot/default/Licenses" "${l}/COPYING.u-boot" || return 1
printf "Multiple licenses. Check corresponding %s source archive\n" \
"${projectname}" > "${1}/COPYING" || return 1
rm -f src/u-boot/*/test/lib/strlcat.c || return 1
}
mkrom_tarball()
{
archivename="${relname}_${target##*/}"
f="release/${version}/roms/${archivename}"
mkdir -p "${f%/*}" || $err "mkrom_tarball: !mkdir -p ${f%/*}"
(
cd "${romdir%"/bin/$target"}" || $err "!cd ${romdir%"/bin/$target"}"
mktarball "bin/${target}" "${archivename}.tar.xz"
) || $err "can't create rom tarball"
mv "${romdir%"/bin/${target}"}/${archivename}.tar.xz"* "${f%/*}" || \
$err "mktar ${f%/*}/${romdir%"/bin/$target"}/$archivename.tar.xz"
printf "Created ROM archive: %s" "${f%/*}/${archivename}.tar.xz"
}
insert_version_files()
{
printf "%s\n" "${version}" > "${1}/version" || return 1
printf "%s\n" "${versiondate}" > "${1}/versiondate" || return 1
printf "%s\n" "${projectname}" > "${1}/projectname" || return 1
}
mktarball()
{
# preserve timestamps for reproducible tarballs
tar_implementation=$(tar --version | head -n1) || :
[ "${2%/*}" = "${2}" ] || \
mkdir -p "${2%/*}" || $err "mk, !mkdir -p \"${2%/*}\""
printf "\nCreating archive: %s\n\n" "$2"
if [ "${tar_implementation% *}" = "tar (GNU tar)" ]; then
tar --sort=name --owner=root:0 --group=root:0 \
--mtime="UTC 2024-05-10" -c "$1" | xz -T$threads -9e \
> "$2" || $err "mktarball 1, ${1}"
else
# TODO: reproducible tarballs on non-GNU systems
tar -c "$1" | xz -T$threads -9e > "$2" || \
$err "mktarball 2, $1"
fi
(
[ "${2%/*}" != "${2}" ] && x_ cd "${2%/*}"
sha512sum "${2##*/}" > "${2##*/}.sha512" || \
$err "!sha512sum \"${2##*/}\" > \"${2##*/}.sha512\""
) || $err "failed to create tarball checksum"
}
main $@