update/release/*: merge to update/project/release
The logic has been re-written, where source archives are
concerned. This clones the current repository, and starts
a new build from scratch. A custom release directory is
possible, by passing -d
This eliminates a step during build-testing, saving hours
of time, because it builds the release archive *inside* the
release archive, with git files removed, thus replicating
the same setup that the user would have.
This also makes everything a bit more consistent, because
it's guaranteed that a release archive will always have
the same files; previously, the release build script would
only copy what was already built, without building anything.
Now, this script builds everything itself.
The script also builds serprog images, not just coreboot.
Usage:
./update project release
If -d is not passed, release/ is used inside lbmk.
Otherwise, you could do:
./update project release -d /path/to/directory
If the directory exists, this script will exit (error).
Other minor fixes: build/fw/coreboot: make version in
coreboot-version (file) not contain hyphens, to work
around a quirk in coreboot's build system when not building
on regular libreboot releases. this quirk only appears
when lbmk is not being compiled under git.
The other main benefit of this change is that the new
script will probably require a lot less maintenance.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-08 01:34:50 +00:00
|
|
|
#!/usr/bin/env sh
|
|
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
# SPDX-FileCopyrightText: 2020-2023 Leah Rowe <leah@libreboot.org>
|
|
|
|
|
|
|
|
[ "x${DEBUG+set}" = 'xset' ] && set -v
|
|
|
|
set -u -e
|
|
|
|
|
|
|
|
. "include/err.sh"
|
2023-10-15 22:33:29 +00:00
|
|
|
. "include/option.sh"
|
update/release/*: merge to update/project/release
The logic has been re-written, where source archives are
concerned. This clones the current repository, and starts
a new build from scratch. A custom release directory is
possible, by passing -d
This eliminates a step during build-testing, saving hours
of time, because it builds the release archive *inside* the
release archive, with git files removed, thus replicating
the same setup that the user would have.
This also makes everything a bit more consistent, because
it's guaranteed that a release archive will always have
the same files; previously, the release build script would
only copy what was already built, without building anything.
Now, this script builds everything itself.
The script also builds serprog images, not just coreboot.
Usage:
./update project release
If -d is not passed, release/ is used inside lbmk.
Otherwise, you could do:
./update project release -d /path/to/directory
If the directory exists, this script will exit (error).
Other minor fixes: build/fw/coreboot: make version in
coreboot-version (file) not contain hyphens, to work
around a quirk in coreboot's build system when not building
on regular libreboot releases. this quirk only appears
when lbmk is not being compiled under git.
The other main benefit of this change is that the new
script will probably require a lot less maintenance.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-08 01:34:50 +00:00
|
|
|
|
2023-10-20 10:16:25 +00:00
|
|
|
eval "$(setvars "" vdir relname src_dirname srcdir _xm target romdir \
|
2023-10-14 04:30:54 +00:00
|
|
|
microcode_required mode)"
|
update/release/*: merge to update/project/release
The logic has been re-written, where source archives are
concerned. This clones the current repository, and starts
a new build from scratch. A custom release directory is
possible, by passing -d
This eliminates a step during build-testing, saving hours
of time, because it builds the release archive *inside* the
release archive, with git files removed, thus replicating
the same setup that the user would have.
This also makes everything a bit more consistent, because
it's guaranteed that a release archive will always have
the same files; previously, the release build script would
only copy what was already built, without building anything.
Now, this script builds everything itself.
The script also builds serprog images, not just coreboot.
Usage:
./update project release
If -d is not passed, release/ is used inside lbmk.
Otherwise, you could do:
./update project release -d /path/to/directory
If the directory exists, this script will exit (error).
Other minor fixes: build/fw/coreboot: make version in
coreboot-version (file) not contain hyphens, to work
around a quirk in coreboot's build system when not building
on regular libreboot releases. this quirk only appears
when lbmk is not being compiled under git.
The other main benefit of this change is that the new
script will probably require a lot less maintenance.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-08 01:34:50 +00:00
|
|
|
|
|
|
|
main()
|
|
|
|
{
|
|
|
|
vdir="release"
|
2023-10-13 23:35:02 +00:00
|
|
|
while getopts d:m: option; do
|
|
|
|
[ -z "${OPTARG}" ] && err "Empty argument not allowed"
|
|
|
|
case "${option}" in
|
|
|
|
d) vdir="${OPTARG}" ;;
|
|
|
|
m) mode="${OPTARG}" ;;
|
update/release/*: merge to update/project/release
The logic has been re-written, where source archives are
concerned. This clones the current repository, and starts
a new build from scratch. A custom release directory is
possible, by passing -d
This eliminates a step during build-testing, saving hours
of time, because it builds the release archive *inside* the
release archive, with git files removed, thus replicating
the same setup that the user would have.
This also makes everything a bit more consistent, because
it's guaranteed that a release archive will always have
the same files; previously, the release build script would
only copy what was already built, without building anything.
Now, this script builds everything itself.
The script also builds serprog images, not just coreboot.
Usage:
./update project release
If -d is not passed, release/ is used inside lbmk.
Otherwise, you could do:
./update project release -d /path/to/directory
If the directory exists, this script will exit (error).
Other minor fixes: build/fw/coreboot: make version in
coreboot-version (file) not contain hyphens, to work
around a quirk in coreboot's build system when not building
on regular libreboot releases. this quirk only appears
when lbmk is not being compiled under git.
The other main benefit of this change is that the new
script will probably require a lot less maintenance.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-08 01:34:50 +00:00
|
|
|
*) err "Invalid option" ;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
|
|
|
vdir="${vdir}/${version}"
|
2023-10-14 04:30:54 +00:00
|
|
|
relname="${projectname}-${version}"
|
|
|
|
src_dirname="${relname}_src"
|
update/release/*: merge to update/project/release
The logic has been re-written, where source archives are
concerned. This clones the current repository, and starts
a new build from scratch. A custom release directory is
possible, by passing -d
This eliminates a step during build-testing, saving hours
of time, because it builds the release archive *inside* the
release archive, with git files removed, thus replicating
the same setup that the user would have.
This also makes everything a bit more consistent, because
it's guaranteed that a release archive will always have
the same files; previously, the release build script would
only copy what was already built, without building anything.
Now, this script builds everything itself.
The script also builds serprog images, not just coreboot.
Usage:
./update project release
If -d is not passed, release/ is used inside lbmk.
Otherwise, you could do:
./update project release -d /path/to/directory
If the directory exists, this script will exit (error).
Other minor fixes: build/fw/coreboot: make version in
coreboot-version (file) not contain hyphens, to work
around a quirk in coreboot's build system when not building
on regular libreboot releases. this quirk only appears
when lbmk is not being compiled under git.
The other main benefit of this change is that the new
script will probably require a lot less maintenance.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-08 01:34:50 +00:00
|
|
|
srcdir="${vdir}/${src_dirname}"
|
|
|
|
|
|
|
|
[ -e "${vdir}" ] && err "already exists: \"${vdir}\""
|
|
|
|
|
|
|
|
mkvdir
|
|
|
|
build_release
|
2023-10-20 11:09:31 +00:00
|
|
|
|
|
|
|
printf "DONE! Check release files under %s\n" "${vdir}"
|
update/release/*: merge to update/project/release
The logic has been re-written, where source archives are
concerned. This clones the current repository, and starts
a new build from scratch. A custom release directory is
possible, by passing -d
This eliminates a step during build-testing, saving hours
of time, because it builds the release archive *inside* the
release archive, with git files removed, thus replicating
the same setup that the user would have.
This also makes everything a bit more consistent, because
it's guaranteed that a release archive will always have
the same files; previously, the release build script would
only copy what was already built, without building anything.
Now, this script builds everything itself.
The script also builds serprog images, not just coreboot.
Usage:
./update project release
If -d is not passed, release/ is used inside lbmk.
Otherwise, you could do:
./update project release -d /path/to/directory
If the directory exists, this script will exit (error).
Other minor fixes: build/fw/coreboot: make version in
coreboot-version (file) not contain hyphens, to work
around a quirk in coreboot's build system when not building
on regular libreboot releases. this quirk only appears
when lbmk is not being compiled under git.
The other main benefit of this change is that the new
script will probably require a lot less maintenance.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-08 01:34:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
|
)
|
|
|
|
(
|
|
|
|
cd "${srcdir%/*}" || err "${_xm}: mktarball \"${srcdir}\""
|
|
|
|
mktarball "${srcdir##*/}" "${srcdir##*/}.tar.xz" || err "${_xm}: mksrc"
|
|
|
|
)
|
update/release: copy crossgcc to archive
everything downloaded, then tarballed, then built,
now crossgcc is downloaded by coreboot.
now extract, copy crossgcc tarballs, re-compress.
TODO: simply add files to the archive, without re-
compressing the whole thing.
this is still more efficient than the old way: build
everything, then clean and compress, making another
build test on the release archive necessary; with this,
there is still only one build test per release.
with this, and the previous revisions dealing with
submodules, the source archives should now be complete.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-20 10:51:38 +00:00
|
|
|
[ "${mode}" = "src" ] && return 0 # for src mode, xgcc tarballs are
|
|
|
|
# not included in the src archive
|
|
|
|
|
|
|
|
# now build roms, then copy crossgcc to src and re-compress
|
|
|
|
# while compressing rom images too.
|
|
|
|
|
|
|
|
(
|
|
|
|
cd "${srcdir}" || err "${_xm}: 2 !cd \"${srcdir}\""
|
|
|
|
mkrom_images
|
|
|
|
)
|
|
|
|
for _cbd in "${srcdir}/src/coreboot/"*; do
|
|
|
|
[ -d "${_cbd}/util/crossgcc/tarballs" ] || continue
|
|
|
|
_xgccdir="${vdir}/crossgcc/${_cbd##*/}"
|
|
|
|
mkdir -p "${_xgccdir}" || \
|
|
|
|
err "build_release: !mkdir -p ${_xgccdir}"
|
|
|
|
cp -R "${_cbd}/util/crossgcc/tarballs/"* "${_xgccdir}" || \
|
|
|
|
err "build_gcc: !copy xgcc ${_cbd}"
|
|
|
|
done
|
|
|
|
rm -Rf "${srcdir}" || err "build_release: !rm -Rf ${srcdir}"
|
|
|
|
(
|
|
|
|
cd "${srcdir%/*}" || err "${_xm} 2: mktarball \"${srcdir}\""
|
|
|
|
tar -xf "${srcdir##*/}.tar.xz" || err "!extract ${srcdir##*/}.tar.xz"
|
|
|
|
rm -f "${srcdir##*/}.tar.xz" || err "!rm -f ${srcdir##*/}.tar.xz"
|
|
|
|
)
|
|
|
|
for _xgcc in "${vdir}/crossgcc/"*; do
|
|
|
|
[ -d "${_xgcc}" ] || continue
|
|
|
|
mv "${_xgcc}" \
|
|
|
|
"${srcdir}/src/coreboot/${_xgcc##*/}/util/crossgcc/tarballs" \
|
|
|
|
|| err "!move xgcc tarballs to ${srcdir}/xgcc/${_xgcc##*/}"
|
|
|
|
done
|
2023-10-20 20:55:57 +00:00
|
|
|
rm -Rf "${vdir}/crossgcc" || err "!rm -Rf \"${vdir}/crossgcc\""
|
update/release: copy crossgcc to archive
everything downloaded, then tarballed, then built,
now crossgcc is downloaded by coreboot.
now extract, copy crossgcc tarballs, re-compress.
TODO: simply add files to the archive, without re-
compressing the whole thing.
this is still more efficient than the old way: build
everything, then clean and compress, making another
build test on the release archive necessary; with this,
there is still only one build test per release.
with this, and the previous revisions dealing with
submodules, the source archives should now be complete.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-20 10:51:38 +00:00
|
|
|
(
|
|
|
|
cd "${srcdir%/*}" || err "${_xm}: mktarball \"${srcdir}\""
|
|
|
|
mktarball "${srcdir##*/}" "${srcdir##*/}.tar.xz" || err "${_xm}: mksrc"
|
|
|
|
)
|
|
|
|
|
|
|
|
# now test the vendor insert script, using the release archive:
|
|
|
|
(
|
|
|
|
cd "${srcdir}" || err "!cd ${srcdir}"
|
|
|
|
for vrom in ../roms/*.tar.xz; do
|
|
|
|
[ -f "${vrom}" ] || continue
|
|
|
|
case "${vrom}" in
|
|
|
|
*serprog*) continue ;;
|
|
|
|
esac
|
|
|
|
./vendor inject "${vrom}" || \
|
|
|
|
err "TESTFAIL: inject: ${vrom##*/}"
|
|
|
|
continue
|
|
|
|
done
|
|
|
|
)
|
|
|
|
|
|
|
|
rm -Rf "${srcdir}" || err "!rm -Rf ${srcdir}"
|
update/release/*: merge to update/project/release
The logic has been re-written, where source archives are
concerned. This clones the current repository, and starts
a new build from scratch. A custom release directory is
possible, by passing -d
This eliminates a step during build-testing, saving hours
of time, because it builds the release archive *inside* the
release archive, with git files removed, thus replicating
the same setup that the user would have.
This also makes everything a bit more consistent, because
it's guaranteed that a release archive will always have
the same files; previously, the release build script would
only copy what was already built, without building anything.
Now, this script builds everything itself.
The script also builds serprog images, not just coreboot.
Usage:
./update project release
If -d is not passed, release/ is used inside lbmk.
Otherwise, you could do:
./update project release -d /path/to/directory
If the directory exists, this script will exit (error).
Other minor fixes: build/fw/coreboot: make version in
coreboot-version (file) not contain hyphens, to work
around a quirk in coreboot's build system when not building
on regular libreboot releases. this quirk only appears
when lbmk is not being compiled under git.
The other main benefit of this change is that the new
script will probably require a lot less maintenance.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-08 01:34:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
fetch_trees()
|
|
|
|
{
|
2023-10-20 05:53:25 +00:00
|
|
|
for x in config/git/*; do
|
|
|
|
[ ! -f "${x}" ] || ./update trees -f "${x#config/git/}" || \
|
|
|
|
err "${_xm}: fetch ${x#config/git/}"
|
update/release/*: merge to update/project/release
The logic has been re-written, where source archives are
concerned. This clones the current repository, and starts
a new build from scratch. A custom release directory is
possible, by passing -d
This eliminates a step during build-testing, saving hours
of time, because it builds the release archive *inside* the
release archive, with git files removed, thus replicating
the same setup that the user would have.
This also makes everything a bit more consistent, because
it's guaranteed that a release archive will always have
the same files; previously, the release build script would
only copy what was already built, without building anything.
Now, this script builds everything itself.
The script also builds serprog images, not just coreboot.
Usage:
./update project release
If -d is not passed, release/ is used inside lbmk.
Otherwise, you could do:
./update project release -d /path/to/directory
If the directory exists, this script will exit (error).
Other minor fixes: build/fw/coreboot: make version in
coreboot-version (file) not contain hyphens, to work
around a quirk in coreboot's build system when not building
on regular libreboot releases. this quirk only appears
when lbmk is not being compiled under git.
The other main benefit of this change is that the new
script will probably require a lot less maintenance.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-08 01:34:50 +00:00
|
|
|
done
|
2023-10-13 22:53:24 +00:00
|
|
|
for x in config/*/build.list; do
|
|
|
|
[ -f "${x}" ] || continue
|
|
|
|
xp="${x#*/}"; xp="${xp%/*}"
|
|
|
|
[ -L "${xp}" ] || x_ rm -Rf "src/${xp}/${xp}"
|
|
|
|
done
|
2023-10-20 08:25:52 +00:00
|
|
|
|
|
|
|
find . -name ".git" -exec rm -Rf {} + || err "${_xm}: rm .git"
|
|
|
|
find . -name ".gitmodules" -exec rm -Rf {} + || err "${_xm}: rm .gitmod"
|
2023-10-20 10:16:25 +00:00
|
|
|
x_ rm -Rf tmp .git
|
update/release/*: merge to update/project/release
The logic has been re-written, where source archives are
concerned. This clones the current repository, and starts
a new build from scratch. A custom release directory is
possible, by passing -d
This eliminates a step during build-testing, saving hours
of time, because it builds the release archive *inside* the
release archive, with git files removed, thus replicating
the same setup that the user would have.
This also makes everything a bit more consistent, because
it's guaranteed that a release archive will always have
the same files; previously, the release build script would
only copy what was already built, without building anything.
Now, this script builds everything itself.
The script also builds serprog images, not just coreboot.
Usage:
./update project release
If -d is not passed, release/ is used inside lbmk.
Otherwise, you could do:
./update project release -d /path/to/directory
If the directory exists, this script will exit (error).
Other minor fixes: build/fw/coreboot: make version in
coreboot-version (file) not contain hyphens, to work
around a quirk in coreboot's build system when not building
on regular libreboot releases. this quirk only appears
when lbmk is not being compiled under git.
The other main benefit of this change is that the new
script will probably require a lot less maintenance.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-08 01:34:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
mkrom_images()
|
|
|
|
{
|
2023-10-19 23:17:30 +00:00
|
|
|
./build roms all || err "${_xm}: roms-all"
|
|
|
|
./build serprog rp2040 || err "${_xm}: rp2040"
|
|
|
|
./build serprog stm32 || err "${_xm}: stm32"
|
update/release/*: merge to update/project/release
The logic has been re-written, where source archives are
concerned. This clones the current repository, and starts
a new build from scratch. A custom release directory is
possible, by passing -d
This eliminates a step during build-testing, saving hours
of time, because it builds the release archive *inside* the
release archive, with git files removed, thus replicating
the same setup that the user would have.
This also makes everything a bit more consistent, because
it's guaranteed that a release archive will always have
the same files; previously, the release build script would
only copy what was already built, without building anything.
Now, this script builds everything itself.
The script also builds serprog images, not just coreboot.
Usage:
./update project release
If -d is not passed, release/ is used inside lbmk.
Otherwise, you could do:
./update project release -d /path/to/directory
If the directory exists, this script will exit (error).
Other minor fixes: build/fw/coreboot: make version in
coreboot-version (file) not contain hyphens, to work
around a quirk in coreboot's build system when not building
on regular libreboot releases. this quirk only appears
when lbmk is not being compiled under git.
The other main benefit of this change is that the new
script will probably require a lot less maintenance.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-08 01:34:50 +00:00
|
|
|
|
|
|
|
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"
|
|
|
|
x_ rm -Rf "${romdir}"
|
|
|
|
target="${builddir##*/}"
|
|
|
|
|
|
|
|
if [ ! -f "config/coreboot/${target}/target.cfg" ]; then
|
|
|
|
# No config, just make a tarball
|
2023-10-14 04:30:54 +00:00
|
|
|
tarball="release/${version}/roms/${relname}_${target}.tar.xz"
|
update/release/*: merge to update/project/release
The logic has been re-written, where source archives are
concerned. This clones the current repository, and starts
a new build from scratch. A custom release directory is
possible, by passing -d
This eliminates a step during build-testing, saving hours
of time, because it builds the release archive *inside* the
release archive, with git files removed, thus replicating
the same setup that the user would have.
This also makes everything a bit more consistent, because
it's guaranteed that a release archive will always have
the same files; previously, the release build script would
only copy what was already built, without building anything.
Now, this script builds everything itself.
The script also builds serprog images, not just coreboot.
Usage:
./update project release
If -d is not passed, release/ is used inside lbmk.
Otherwise, you could do:
./update project release -d /path/to/directory
If the directory exists, this script will exit (error).
Other minor fixes: build/fw/coreboot: make version in
coreboot-version (file) not contain hyphens, to work
around a quirk in coreboot's build system when not building
on regular libreboot releases. this quirk only appears
when lbmk is not being compiled under git.
The other main benefit of this change is that the new
script will probably require a lot less maintenance.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-08 01:34:50 +00:00
|
|
|
insert_copying_files "${builddir}"
|
|
|
|
mktarball "${builddir}" "${tarball}"
|
|
|
|
return 0
|
|
|
|
fi
|
|
|
|
|
|
|
|
romdir="${romdir}/bin/${target}"
|
|
|
|
x_ mkdir -p "${romdir}"
|
|
|
|
x_ cp "${builddir}/"* "${romdir}"
|
|
|
|
|
2023-10-14 02:30:52 +00:00
|
|
|
nukerom
|
update/release/*: merge to update/project/release
The logic has been re-written, where source archives are
concerned. This clones the current repository, and starts
a new build from scratch. A custom release directory is
possible, by passing -d
This eliminates a step during build-testing, saving hours
of time, because it builds the release archive *inside* the
release archive, with git files removed, thus replicating
the same setup that the user would have.
This also makes everything a bit more consistent, because
it's guaranteed that a release archive will always have
the same files; previously, the release build script would
only copy what was already built, without building anything.
Now, this script builds everything itself.
The script also builds serprog images, not just coreboot.
Usage:
./update project release
If -d is not passed, release/ is used inside lbmk.
Otherwise, you could do:
./update project release -d /path/to/directory
If the directory exists, this script will exit (error).
Other minor fixes: build/fw/coreboot: make version in
coreboot-version (file) not contain hyphens, to work
around a quirk in coreboot's build system when not building
on regular libreboot releases. this quirk only appears
when lbmk is not being compiled under git.
The other main benefit of this change is that the new
script will probably require a lot less maintenance.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-08 01:34:50 +00:00
|
|
|
|
|
|
|
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}"
|
|
|
|
mkrom_tarball
|
|
|
|
}
|
|
|
|
|
2023-10-14 02:30:52 +00:00
|
|
|
nukerom()
|
update/release/*: merge to update/project/release
The logic has been re-written, where source archives are
concerned. This clones the current repository, and starts
a new build from scratch. A custom release directory is
possible, by passing -d
This eliminates a step during build-testing, saving hours
of time, because it builds the release archive *inside* the
release archive, with git files removed, thus replicating
the same setup that the user would have.
This also makes everything a bit more consistent, because
it's guaranteed that a release archive will always have
the same files; previously, the release build script would
only copy what was already built, without building anything.
Now, this script builds everything itself.
The script also builds serprog images, not just coreboot.
Usage:
./update project release
If -d is not passed, release/ is used inside lbmk.
Otherwise, you could do:
./update project release -d /path/to/directory
If the directory exists, this script will exit (error).
Other minor fixes: build/fw/coreboot: make version in
coreboot-version (file) not contain hyphens, to work
around a quirk in coreboot's build system when not building
on regular libreboot releases. this quirk only appears
when lbmk is not being compiled under git.
The other main benefit of this change is that the new
script will probably require a lot less maintenance.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-08 01:34:50 +00:00
|
|
|
{
|
|
|
|
microcode_required="y"
|
|
|
|
. "config/coreboot/${target}/target.cfg"
|
|
|
|
if [ "${microcode_required}" != "y" ] && \
|
|
|
|
[ "${microcode_required}" != "n" ]; then microcode_required="y"; fi
|
|
|
|
if [ "${microcode_required}" = "n" ]; then
|
|
|
|
for romfile in "${romdir}"/*.rom; do
|
|
|
|
[ -f "${romfile}" ] || continue
|
|
|
|
strip_ucode "${romfile}"
|
|
|
|
done
|
|
|
|
for romfile in "${romdir}"/*.tmprom; do
|
|
|
|
[ -f "${romfile}" ] || continue
|
|
|
|
x_ mv "${romfile}" "${romfile%.tmprom}.rom"
|
|
|
|
done
|
|
|
|
fi
|
|
|
|
|
2023-10-14 02:30:52 +00:00
|
|
|
# Hash the images before removing vendor files
|
2023-10-19 23:17:30 +00:00
|
|
|
# which "./vendor inject" uses for verification
|
update/release/*: merge to update/project/release
The logic has been re-written, where source archives are
concerned. This clones the current repository, and starts
a new build from scratch. A custom release directory is
possible, by passing -d
This eliminates a step during build-testing, saving hours
of time, because it builds the release archive *inside* the
release archive, with git files removed, thus replicating
the same setup that the user would have.
This also makes everything a bit more consistent, because
it's guaranteed that a release archive will always have
the same files; previously, the release build script would
only copy what was already built, without building anything.
Now, this script builds everything itself.
The script also builds serprog images, not just coreboot.
Usage:
./update project release
If -d is not passed, release/ is used inside lbmk.
Otherwise, you could do:
./update project release -d /path/to/directory
If the directory exists, this script will exit (error).
Other minor fixes: build/fw/coreboot: make version in
coreboot-version (file) not contain hyphens, to work
around a quirk in coreboot's build system when not building
on regular libreboot releases. this quirk only appears
when lbmk is not being compiled under git.
The other main benefit of this change is that the new
script will probably require a lot less maintenance.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-08 01:34:50 +00:00
|
|
|
x_ rm -f "${romdir}/vendorhashes"
|
|
|
|
x_ touch "${romdir}/vendorhashes"
|
|
|
|
(
|
|
|
|
x_ cd "${romdir}"
|
|
|
|
x_ sha512sum *.rom >> vendorhashes
|
|
|
|
)
|
2023-10-14 02:30:52 +00:00
|
|
|
|
update/release/*: merge to update/project/release
The logic has been re-written, where source archives are
concerned. This clones the current repository, and starts
a new build from scratch. A custom release directory is
possible, by passing -d
This eliminates a step during build-testing, saving hours
of time, because it builds the release archive *inside* the
release archive, with git files removed, thus replicating
the same setup that the user would have.
This also makes everything a bit more consistent, because
it's guaranteed that a release archive will always have
the same files; previously, the release build script would
only copy what was already built, without building anything.
Now, this script builds everything itself.
The script also builds serprog images, not just coreboot.
Usage:
./update project release
If -d is not passed, release/ is used inside lbmk.
Otherwise, you could do:
./update project release -d /path/to/directory
If the directory exists, this script will exit (error).
Other minor fixes: build/fw/coreboot: make version in
coreboot-version (file) not contain hyphens, to work
around a quirk in coreboot's build system when not building
on regular libreboot releases. this quirk only appears
when lbmk is not being compiled under git.
The other main benefit of this change is that the new
script will probably require a lot less maintenance.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-08 01:34:50 +00:00
|
|
|
for romfile in "${romdir}"/*.rom; do
|
|
|
|
[ -f "${romfile}" ] || continue
|
2023-10-19 23:17:30 +00:00
|
|
|
x_ ./vendor inject -r "${romfile}" -b ${target} -n nuke
|
update/release/*: merge to update/project/release
The logic has been re-written, where source archives are
concerned. This clones the current repository, and starts
a new build from scratch. A custom release directory is
possible, by passing -d
This eliminates a step during build-testing, saving hours
of time, because it builds the release archive *inside* the
release archive, with git files removed, thus replicating
the same setup that the user would have.
This also makes everything a bit more consistent, because
it's guaranteed that a release archive will always have
the same files; previously, the release build script would
only copy what was already built, without building anything.
Now, this script builds everything itself.
The script also builds serprog images, not just coreboot.
Usage:
./update project release
If -d is not passed, release/ is used inside lbmk.
Otherwise, you could do:
./update project release -d /path/to/directory
If the directory exists, this script will exit (error).
Other minor fixes: build/fw/coreboot: make version in
coreboot-version (file) not contain hyphens, to work
around a quirk in coreboot's build system when not building
on regular libreboot releases. this quirk only appears
when lbmk is not being compiled under git.
The other main benefit of this change is that the new
script will probably require a lot less maintenance.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-08 01:34:50 +00:00
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
strip_ucode()
|
|
|
|
{
|
|
|
|
romfile=${1}
|
|
|
|
_newrom_b="${romfile%.rom}_nomicrocode.tmprom"
|
|
|
|
x_ cp "${romfile}" "${_newrom_b}"
|
|
|
|
microcode_present="y"
|
|
|
|
"${cbfstool}" "${_newrom_b}" remove -n \
|
|
|
|
cpu_microcode_blob.bin 2>/dev/null || microcode_present="n"
|
|
|
|
[ "${microcode_present}" = "n" ] || return 0
|
|
|
|
printf "REMARK: '%s' already lacks microcode\n" "${romfile}" 1>&2
|
|
|
|
printf "Renaming default ROM file instead.\n" 1>&2
|
|
|
|
x_ mv "${romfile}" "${_newrom_b}"
|
|
|
|
}
|
|
|
|
|
|
|
|
insert_copying_files()
|
|
|
|
{
|
|
|
|
x_ rm -Rf "${1}/licenses"
|
|
|
|
x_ mkdir -p "${1}/licenses"
|
|
|
|
l="${1}/licenses"
|
|
|
|
# copy licenses to rom image archive, for completion
|
|
|
|
x_ cp "src/grub/COPYING" "${l}/COPYING.grub"
|
|
|
|
x_ cp "src/coreboot/default/COPYING" "${l}/COPYING.coreboot"
|
|
|
|
x_ cp -R "src/coreboot/default/LICENSES" "${l}/LICENSES.coreboot"
|
|
|
|
x_ cp "src/seabios/default/COPYING" "${l}/COPYING.coreboot"
|
|
|
|
x_ cp "src/seabios/default/COPYING.LESSER" "${l}/COPYING.LESSER.seabios"
|
|
|
|
x_ cp -R "src/u-boot/default/Licenses" "${l}/COPYING.u-boot"
|
2023-10-20 02:29:55 +00:00
|
|
|
x_ printf "Multiple licenses. Check corresponding %s source archive\n" \
|
|
|
|
"${projectname}" > "${1}/COPYING"
|
update/release/*: merge to update/project/release
The logic has been re-written, where source archives are
concerned. This clones the current repository, and starts
a new build from scratch. A custom release directory is
possible, by passing -d
This eliminates a step during build-testing, saving hours
of time, because it builds the release archive *inside* the
release archive, with git files removed, thus replicating
the same setup that the user would have.
This also makes everything a bit more consistent, because
it's guaranteed that a release archive will always have
the same files; previously, the release build script would
only copy what was already built, without building anything.
Now, this script builds everything itself.
The script also builds serprog images, not just coreboot.
Usage:
./update project release
If -d is not passed, release/ is used inside lbmk.
Otherwise, you could do:
./update project release -d /path/to/directory
If the directory exists, this script will exit (error).
Other minor fixes: build/fw/coreboot: make version in
coreboot-version (file) not contain hyphens, to work
around a quirk in coreboot's build system when not building
on regular libreboot releases. this quirk only appears
when lbmk is not being compiled under git.
The other main benefit of this change is that the new
script will probably require a lot less maintenance.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-08 01:34:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
mkrom_tarball()
|
|
|
|
{
|
2023-10-14 04:30:54 +00:00
|
|
|
archivename="${relname}_${target##*/}"
|
update/release/*: merge to update/project/release
The logic has been re-written, where source archives are
concerned. This clones the current repository, and starts
a new build from scratch. A custom release directory is
possible, by passing -d
This eliminates a step during build-testing, saving hours
of time, because it builds the release archive *inside* the
release archive, with git files removed, thus replicating
the same setup that the user would have.
This also makes everything a bit more consistent, because
it's guaranteed that a release archive will always have
the same files; previously, the release build script would
only copy what was already built, without building anything.
Now, this script builds everything itself.
The script also builds serprog images, not just coreboot.
Usage:
./update project release
If -d is not passed, release/ is used inside lbmk.
Otherwise, you could do:
./update project release -d /path/to/directory
If the directory exists, this script will exit (error).
Other minor fixes: build/fw/coreboot: make version in
coreboot-version (file) not contain hyphens, to work
around a quirk in coreboot's build system when not building
on regular libreboot releases. this quirk only appears
when lbmk is not being compiled under git.
The other main benefit of this change is that the new
script will probably require a lot less maintenance.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-08 01:34:50 +00:00
|
|
|
f="release/${version}/roms/${archivename}"
|
|
|
|
x_ mkdir -p "${f%/*}"
|
|
|
|
(
|
|
|
|
x_ cd "${romdir%/bin/${target}}"
|
|
|
|
mktarball "bin/${target}" "${archivename}.tar.xz"
|
|
|
|
)
|
|
|
|
x_ mv "${romdir%/bin/${target}}/${archivename}.tar.xz"* "${f%/*}"
|
|
|
|
|
|
|
|
printf "Created ROM archive: ${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()
|
|
|
|
{
|
update/release: if *GNU* tar, use --mtime
with --mtime, files added to the archive can be set
to a static date (in this case, the unix epoch)
the one used here is derived from git commit dates,
and it is static; if not being handled in lbmk.git,
the versiondate file never changes
this is the first patch in a series of patches designed
to bring about reproducible builds in libreboot
a solution will need to be found, for non-GNU tar
implementations, because they did not have an
equivalent option according to their manpages.
for example, BSD tar implementations.
perhaps i could systematically go around changing
file dates, on each file, as a fallback behaviour?
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-13 22:28:11 +00:00
|
|
|
# preserve timestamps for reproducible tarballs
|
2023-10-14 03:37:14 +00:00
|
|
|
tar_implementation=$(tar --version | head -n1) || :
|
update/release: if *GNU* tar, use --mtime
with --mtime, files added to the archive can be set
to a static date (in this case, the unix epoch)
the one used here is derived from git commit dates,
and it is static; if not being handled in lbmk.git,
the versiondate file never changes
this is the first patch in a series of patches designed
to bring about reproducible builds in libreboot
a solution will need to be found, for non-GNU tar
implementations, because they did not have an
equivalent option according to their manpages.
for example, BSD tar implementations.
perhaps i could systematically go around changing
file dates, on each file, as a fallback behaviour?
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-13 22:28:11 +00:00
|
|
|
|
update/release/*: merge to update/project/release
The logic has been re-written, where source archives are
concerned. This clones the current repository, and starts
a new build from scratch. A custom release directory is
possible, by passing -d
This eliminates a step during build-testing, saving hours
of time, because it builds the release archive *inside* the
release archive, with git files removed, thus replicating
the same setup that the user would have.
This also makes everything a bit more consistent, because
it's guaranteed that a release archive will always have
the same files; previously, the release build script would
only copy what was already built, without building anything.
Now, this script builds everything itself.
The script also builds serprog images, not just coreboot.
Usage:
./update project release
If -d is not passed, release/ is used inside lbmk.
Otherwise, you could do:
./update project release -d /path/to/directory
If the directory exists, this script will exit (error).
Other minor fixes: build/fw/coreboot: make version in
coreboot-version (file) not contain hyphens, to work
around a quirk in coreboot's build system when not building
on regular libreboot releases. this quirk only appears
when lbmk is not being compiled under git.
The other main benefit of this change is that the new
script will probably require a lot less maintenance.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-08 01:34:50 +00:00
|
|
|
[ "${2%/*}" = "${2}" ] || x_ mkdir -p "${2%/*}"
|
2023-10-14 03:37:14 +00:00
|
|
|
if [ "${tar_implementation% *}" = "tar (GNU tar)" ]; then
|
|
|
|
tar --sort=name --owner=root:0 --group=root:0 \
|
|
|
|
--mtime="UTC 2023-10-14" -c "${1}" | xz -T0 -9e > "${2}" || \
|
|
|
|
err "mktarball 1, ${1}"
|
|
|
|
else
|
|
|
|
# TODO: reproducible tarballs on non-GNU systems
|
|
|
|
tar -c "${1}" | xz -T0 -9e > "${2}" || err "mktarball 2, ${1}"
|
|
|
|
fi
|
update/release/*: merge to update/project/release
The logic has been re-written, where source archives are
concerned. This clones the current repository, and starts
a new build from scratch. A custom release directory is
possible, by passing -d
This eliminates a step during build-testing, saving hours
of time, because it builds the release archive *inside* the
release archive, with git files removed, thus replicating
the same setup that the user would have.
This also makes everything a bit more consistent, because
it's guaranteed that a release archive will always have
the same files; previously, the release build script would
only copy what was already built, without building anything.
Now, this script builds everything itself.
The script also builds serprog images, not just coreboot.
Usage:
./update project release
If -d is not passed, release/ is used inside lbmk.
Otherwise, you could do:
./update project release -d /path/to/directory
If the directory exists, this script will exit (error).
Other minor fixes: build/fw/coreboot: make version in
coreboot-version (file) not contain hyphens, to work
around a quirk in coreboot's build system when not building
on regular libreboot releases. this quirk only appears
when lbmk is not being compiled under git.
The other main benefit of this change is that the new
script will probably require a lot less maintenance.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-08 01:34:50 +00:00
|
|
|
(
|
|
|
|
[ "${2%/*}" != "${2}" ] && x_ cd "${2%/*}"
|
|
|
|
x_ sha512sum "${2##*/}" > "${2##*/}.sha512"
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
main $@
|