mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-07-11 14:02:52 +02:00
1e89264ce3
Just one script. Just one! Well, two, but the 2nd one already existed: logic in update/project/trees and update/project/repo was merged into include/git.sh and update/project/build was renamed to update/project/trees; an -f option was added, which calls the functions under git.sh so git clones are now handled by the main build script (for handling makefiles and defconfigs) but the logic there is a stub, where git.sh does all the actual heavy lifting this cuts the file count down by two, and reduces sloccount a reasonable amount because much of the logic already exists in the build script, when it comes to handling targets. git.sh was adjusted to integrate with this, rather than act standalone Signed-off-by: Leah Rowe <leah@libreboot.org>
164 lines
4.5 KiB
Bash
Executable File
164 lines
4.5 KiB
Bash
Executable File
#!/usr/bin/env sh
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
# SPDX-FileCopyrightText: 2020,2021,2022,2023 Leah Rowe <leah@libreboot.org>
|
|
|
|
[ "x${DEBUG+set}" = 'xset' ] && set -v
|
|
set -u -e
|
|
|
|
. "include/err.sh"
|
|
|
|
tree="default"
|
|
eval "$(setvars "" target CONFIG_HAVE_MRC CONFIG_HAVE_ME_BIN \
|
|
CONFIG_KBC1126_FIRMWARE CONFIG_INCLUDE_SMSC_SCH5545_EC_FW)"
|
|
ifdtool="cbutils/${tree}/ifdtool"
|
|
cbfstool="cbutils/${tree}/cbfstool"
|
|
microcode_required="y"
|
|
|
|
main()
|
|
{
|
|
printf "Building ROM image archives for version %s\n" "${version}"
|
|
|
|
init_check
|
|
for romdir in bin/*; do
|
|
[ -d "${romdir}" ] || continue
|
|
make_archive "${romdir}"
|
|
done
|
|
printf "\nROM archives available at release/%s/roms/\n\n" "${version}"
|
|
}
|
|
|
|
init_check()
|
|
{
|
|
[ ! -d "bin/" ] && \
|
|
err "init_check: no ROMs built yet (error)"
|
|
[ -d "release/" ] || \
|
|
x_ mkdir -p release/
|
|
[ -d "release/${version}/" ] || \
|
|
x_ mkdir -p "release/${version}/"
|
|
[ ! -d "release/${version}/roms/" ] || \
|
|
x_ rm -Rf "release/${version}/roms/"
|
|
[ -d "release/${version}/roms/" ] && return 0
|
|
x_ mkdir -p "release/${version}/roms/"
|
|
}
|
|
|
|
make_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
|
|
tarball=release/${version}/roms/${target}_${version}.tar.xz
|
|
x_ tar -c "${builddir}" | xz -T0 -6 > ${tarball} || \
|
|
x_ rm -f ${tarball}
|
|
return 0
|
|
fi
|
|
|
|
romdir="${romdir}/bin/${target}"
|
|
x_ mkdir -p "${romdir}"
|
|
x_ cp "${builddir}"/* "${romdir}"
|
|
|
|
printf "%s\n" "${target}"
|
|
|
|
microcode_required="y"
|
|
. "config/coreboot/${target}/target.cfg"
|
|
if [ "${microcode_required}" != "y" ] && \
|
|
[ "${microcode_required}" != "n" ]; then microcode_required="y"; fi
|
|
|
|
for x in CONFIG_HAVE_MRC CONFIG_HAVE_ME_BIN CONFIG_KBC1126_FIRMWARE \
|
|
CONFIG_INCLUDE_SMSC_SCH5545_EC_FW; do
|
|
eval "${x}=\"y\""
|
|
grep "${x}=y" "config/coreboot/${target}/config/"* || \
|
|
eval "${x}=\"n\""
|
|
done
|
|
|
|
# remove ME/MRC/EC firmware from ROM images
|
|
if [ "${CONFIG_HAVE_ME_BIN}" = "y" ] || \
|
|
[ "${target}" = "e6400_4mb" ] || \
|
|
[ "${microcode_required}" = "n" ]; then
|
|
strip_archive "${romdir}"
|
|
fi
|
|
|
|
printf "Generating release/%s/roms/%s-%s_%s.tar.xz\n" \
|
|
"${version}" "${projectname}" "${version}" "${target##*/}"
|
|
x_ printf "%s\n" "${version}" > "${romdir}/version"
|
|
x_ printf "%s\n" "${versiondate}" > "${romdir}/versiondate"
|
|
x_ printf "%s\n" "${projectname}" > "${romdir}/projectname"
|
|
|
|
archivename="${projectname}-${version}_${target##*/}"
|
|
f="release/${version}/roms/${archivename}"
|
|
(
|
|
x_ cd "${romdir%/bin/${target}}"
|
|
x_ tar -c "bin/${target}/" | xz -T0 -9e > "${archivename}.tar.xz"
|
|
)
|
|
x_ mv "${romdir%/bin/${target}}/${archivename}.tar.xz" "${f}.tar.xz"
|
|
x_ rm -Rf "${romdir%/bin/${target}}"
|
|
}
|
|
|
|
strip_archive()
|
|
{
|
|
romdir=${1}
|
|
[ -d "src/coreboot/${tree}" ] || \
|
|
x_ ./update project trees -f coreboot ${tree}
|
|
|
|
x_ ./update project trees -b coreboot utils ${tree}
|
|
|
|
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
|
|
|
|
# Hash the rom before removing vendor files
|
|
x_ rm -f "${romdir}/vendorhashes"
|
|
x_ touch "${romdir}/vendorhashes"
|
|
(
|
|
x_ cd "${romdir}"
|
|
x_ sha512sum *.rom >> vendorhashes
|
|
)
|
|
for romfile in "${romdir}"/*.rom; do
|
|
[ -f "${romfile}" ] || continue
|
|
strip_rom_image "${romfile}"
|
|
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}"
|
|
}
|
|
|
|
strip_rom_image()
|
|
{
|
|
[ -f "${1}" ] || return 0
|
|
[ "${CONFIG_HAVE_ME_BIN}" != "y" ] || \
|
|
x_ "${ifdtool}" --nuke me "${1}" -O "${1}"
|
|
[ "${CONFIG_HAVE_MRC}" != "y" ] || \
|
|
x_ "${cbfstool}" "${1}" remove -n mrc.bin
|
|
[ "${CONFIG_INCLUDE_SMSC_SCH5545_EC_FW}" != "y" ] || \
|
|
x_ "${cbfstool}" "${1}" remove -n sch5545_ecfw.bin
|
|
if [ "${CONFIG_KBC1126_FIRMWARE}" = "y" ]; then
|
|
x_ "${cbfstool}" "${1}" remove -n ecfw1.bin
|
|
x_ "${cbfstool}" "${1}" remove -n ecfw2.bin
|
|
fi
|
|
# TODO: replace this board-specific hack
|
|
[ "${target}" = "e6400_4mb" ] || return 0
|
|
x_ "${cbfstool}" "${1}" remove -n "pci10de,06eb.rom"
|
|
}
|
|
|
|
main $@
|