mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-07-11 14:02:52 +02:00
2960abd008
we don't need this message here, because the final confirmation at the end of main() says which targets were built. saying what individual rom images were built is just needless bloat, especially with the new simplified lbmk design; we no longer provide lots of rom images with different keymaps, because we now expect the user to insert a gkb file themselves with cbfstool. Signed-off-by: Leah Rowe <leah@libreboot.org>
193 lines
6.3 KiB
Bash
Executable File
193 lines
6.3 KiB
Bash
Executable File
#!/usr/bin/env sh
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
# Copyright (c) 2014-2016,2020-2021,2023-2024 Leah Rowe <leah@libreboot.org>
|
|
# Copyright (c) 2021-2022 Ferass El Hafidi <vitali64pmemail@protonmail.com>
|
|
# Copyright (c) 2022 Caleb La Grange <thonkpeasant@protonmail.com>
|
|
# Copyright (c) 2022-2023 Alper Nebi Yasak <alpernebiyasak@gmail.com>
|
|
# Copyright (c) 2023 Riku Viitanen <riku.viitanen@protonmail.com>
|
|
|
|
set -u -e
|
|
|
|
. "include/lib.sh"
|
|
|
|
tmprom="$tmpdir/rom"
|
|
|
|
seavgabiosrom="elf/seabios/default/libgfxinit/vgabios.bin"
|
|
cfgsdir="config/coreboot"
|
|
rp2040src="src/pico-serprog"
|
|
rp2040x="$rp2040src/build/pico_serprog.uf2"
|
|
picosdk="src/pico-sdk"
|
|
rp2040dir="$picosdk/src/boards/include/boards"
|
|
stm32src="src/stm32-vserprog"
|
|
stm32x="$stm32src/stm32-vserprog.hex"
|
|
stm32dir="$stm32src/boards"
|
|
|
|
# Disable all payloads by default.
|
|
# target.cfg files have to specifically enable [a] payload(s)
|
|
pv="payload_uboot payload_seabios payload_memtest t payload_grub"
|
|
v="romdir initmode displaymode targetdir tree release ubootelf"
|
|
v="$v board grub_scan_disk uboot_config grubtree grubelf tmpmv"
|
|
eval `setvars "n" $pv`
|
|
eval `setvars "" $v boards targets serdir ser`
|
|
|
|
main()
|
|
{
|
|
while [ $# -gt 0 ]; do
|
|
if [ "$1" = "serprog" ]; then
|
|
[ $# -lt 2 ] && $err "serprog type not set"
|
|
[ "$2" != "rp2040" ] && [ "$2" != "stm32" ] && \
|
|
$err "invalid serprog type"
|
|
eval "x_ ./update trees -f \"\${${2}src##*/}\""
|
|
ser="$2" && shift 2 && continue
|
|
fi
|
|
[ "$1$ser" = "list" ] && x_ ls -1 config/coreboot && return
|
|
[ "$1" = "all" ] && shift && continue
|
|
boards="$1 $boards"; shift 1
|
|
done
|
|
|
|
[ -n "$boards" ] || [ -n "$ser" ] || boards="$(ls -1 \
|
|
config/coreboot)" || $err "can't list coreboot boards"
|
|
|
|
[ -n "$ser" ] && \
|
|
eval "serlist \"\$${ser}dir\" > \"\$tmpdir/ser\" || $err \"!ser\""
|
|
[ -n "$ser" ] && [ -z "$boards" ] && boards="$(cat "$tmpdir/ser")"
|
|
|
|
for x in $boards; do
|
|
[ -n "$ser" ] && mkserprogfw "$ser" "$x"
|
|
[ -z "$ser" ] && [ -d "config/coreboot/$x/config" ] && \
|
|
configure_target "$x" && build_roms && \
|
|
[ -d "bin/$board" ] && targets="$targets, $x"; continue
|
|
done
|
|
|
|
[ -n "$ser" ] && [ "$xbmk_release" = "y" ] && \
|
|
mkrom_tarball "bin/serprog_$ser" && return 0
|
|
|
|
[ -z "$ser" ] && [ -z "$targets" ] && $err "No images were compiled"
|
|
[ -z "$ser" ] && printf "ROMs built in bin/ for: %s\n" "${targets#, }"
|
|
printf "Please flash from bin/, NOT elf/ - ALSO:\n%s\n" "$kbnotice"
|
|
}
|
|
|
|
mkserprogfw()
|
|
{
|
|
x_ mkdir -p "bin/serprog_$1"
|
|
[ "$1" = "rp2040" ] && x_ cmake -DPICO_BOARD="$2" \
|
|
-DPICO_SDK_PATH="$picosdk" -B "$rp2040src/build" "$rp2040src" && \
|
|
x_ cmake --build "$rp2040src/build"
|
|
[ "$1" = "stm32" ] && x_ make -C "$stm32src" libopencm3-just-make \
|
|
BOARD=$2 && x_ make -C "$stm32src" BOARD=$2
|
|
eval "x_ mv \"\$${1}x\" \"bin/serprog_$1/serprog_$2.\${${1}x##*.}\""
|
|
}
|
|
|
|
serlist()
|
|
{
|
|
basename -a -s .h "$1/"*.h || $err "$1: can't list boards"
|
|
}
|
|
|
|
configure_target()
|
|
{
|
|
eval `setvars "n" $pv`
|
|
eval `setvars "" $v`
|
|
|
|
board="$1"; targetdir="$cfgsdir/$board"; romdir="bin/$board"
|
|
|
|
# Override the above defaults using target.cfg
|
|
eval `setcfg "$targetdir/target.cfg"`
|
|
x_ ./update trees -b coreboot $board
|
|
|
|
[ -z "$tree" ] && $err "$board: tree not defined"
|
|
[ "$xbmk_release" = "y" ] && [ "$release" = "n" ] && return 1
|
|
[ "$board" = "$tree" ] && return 1
|
|
|
|
cbdir="src/coreboot/$tree"
|
|
cbfstool="elf/cbfstool/$tree/cbfstool"
|
|
[ -f "$cbfstool" ] || x_ ./update trees -b coreboot utils $tree
|
|
|
|
[ -n "$uboot_config" ] || uboot_config="default"
|
|
[ "$payload_uboot" = "y" ] || payload_seabios="y"
|
|
[ "$payload_grub" = "y" ] && payload_seabios="y"
|
|
[ "$payload_seabios" = "y" ] && [ -n "$payload_uboot" = "y" ] && \
|
|
$err "$board: U-Boot and SeaBIOS/GRUB are both enabled."
|
|
|
|
[ -z "$grub_scan_disk" ] && grub_scan_disk="nvme ahci ata"
|
|
|
|
[ -n "$grubtree" ] || grubtree="default"
|
|
grubelf="elf/grub/$grubtree/payload/grub.elf"
|
|
|
|
[ "$payload_memtest" = "y" ] || payload_memtest="n"
|
|
[ "$(uname -m)" = "x86_64" ] || payload_memtest="n"; return 0
|
|
}
|
|
|
|
build_roms()
|
|
{
|
|
x_ rm -Rf "$romdir"
|
|
|
|
for cbcfg in "$targetdir/config/"*; do
|
|
[ -f "$cbcfg" ] || continue; cn="${cbcfg##*/}"; dt="${cn#*_}" \
|
|
&& [ "$dt" = "$cn" ] && dt="txtmode"; displaymode="$dt"
|
|
initmode="${cn%%_*}"; chkvars initmode displaymode
|
|
e "$cbcfg" f not || add_payloads
|
|
done; x_ rm -f "$tmprom"
|
|
}
|
|
|
|
add_payloads()
|
|
{
|
|
cbuild="$cbelfdir/$board/${initmode}_$displaymode"
|
|
[ "$initmode" = "normal" ] && cbuild="${cbuild%"_$displaymode"}"
|
|
x_ cp "$cbuild/coreboot.rom" "$tmprom"
|
|
|
|
[ "$payload_seabios" = "y" ] && add_seabios_payload
|
|
[ "$payload_uboot" = "y" ] || return 0
|
|
|
|
# add u-boot payload
|
|
ubdir="elf/u-boot/$board/$uboot_config"; ubootelf="$ubdir/u-boot.elf" \
|
|
&& [ ! -f "$ubootelf" ] && ubootelf="$ubdir/u-boot"
|
|
[ -f "$ubootelf" ] || x_ ./update trees -b u-boot $board
|
|
[ -f "$ubootelf" ] || $err "$board: Can't find u-boot"
|
|
|
|
cbfs "$tmprom" "$ubootelf" "fallback/payload"
|
|
cprom "$romdir/uboot_payload_${board}_${initmode}_$displaymode.rom"
|
|
}
|
|
|
|
add_seabios_payload()
|
|
{
|
|
_seabioself="elf/seabios/default/$initmode/bios.bin.elf"
|
|
x_ ./update trees -b seabios
|
|
|
|
pstr="seabios" && [ "$payload_grub" = "y" ] && pstr="seabios_withgrub"
|
|
newrom="$romdir/${pstr}_${board}_$initmode.rom"
|
|
[ "$initmode" = "normal" ] || newrom="${newrom%.rom}_$displaymode.rom"
|
|
|
|
cbfs "$tmprom" "$_seabioself" "fallback/payload"
|
|
x_ "$cbfstool" "$tmprom" add-int -i 3000 -n etc/ps2-keyboard-spinup
|
|
|
|
z="2"; [ "$initmode" = "vgarom" ] && z="0"
|
|
x_ "$cbfstool" "$tmprom" add-int -i $z -n etc/pci-optionrom-exec
|
|
x_ "$cbfstool" "$tmprom" add-int -i 0 -n etc/optionroms-checksum
|
|
[ "$initmode" = "libgfxinit" ] && cbfs "$tmprom" "$seavgabiosrom" \
|
|
vgaroms/seavgabios.bin raw
|
|
|
|
if [ "$payload_grub" = "y" ]; then
|
|
x_ ./update trees -b grub $grubtree
|
|
cbfs "$tmprom" "$grubelf" "img/grub2"
|
|
printf "set grub_scan_disk=\"%s\"\n" "$grub_scan_disk" \
|
|
> "$tmpdir/tmpcfg" || $err "$board: !insert scandisk"
|
|
cbfs "$tmprom" "$tmpdir/tmpcfg" scan.cfg raw
|
|
fi
|
|
|
|
[ "$payload_memtest" = "y" ] && x_ ./update trees -b memtest86plus && \
|
|
cbfs "$tmprom" "elf/memtest86plus/memtest.bin" img/memtest
|
|
|
|
cprom "$newrom" && [ "$payload_grub" = "y" ] && \
|
|
cbfs "$tmprom" "$grubdata/bootorder" bootorder raw && \
|
|
cprom "${newrom%.rom}_grubfirst.rom"; return 0
|
|
}
|
|
|
|
cprom()
|
|
{
|
|
x_ mkdir -p "${1%/*}"; x_ cp "$tmprom" "$1"
|
|
[ "$xbmk_release" = "y" ] && mksha512sum "$1" "vendorhashes" && \
|
|
x_ ./vendor inject -r "$1" -b "$board" -n nuke; return 0
|
|
}
|
|
|
|
main $@
|