summaryrefslogtreecommitdiff
path: root/include/rom.sh
diff options
context:
space:
mode:
Diffstat (limited to 'include/rom.sh')
-rw-r--r--include/rom.sh129
1 files changed, 87 insertions, 42 deletions
diff --git a/include/rom.sh b/include/rom.sh
index db6ce01d..7e2271f1 100644
--- a/include/rom.sh
+++ b/include/rom.sh
@@ -1,27 +1,50 @@
-#!/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) 2014-2016,2020-2021,2023-2025 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>
+# Copyright (c) 2023-2024 Riku Viitanen <riku.viitanen@protonmail.com>
mkserprog()
{
+ [ $# -lt 1 ] && $err "mkserprog: no arguments provided"
[ "$_f" = "-d" ] && return 0 # dry run
+
+ [ "$1" = "pico" ] && mkpicotool
+
basename -as .h "$serdir/"*.h > "$TMPDIR/ser" || $err "!mk $1 $TMPDIR"
while read -r sertarget; do
- [ "$1" = "rp2040" ] && x_ cmake -DPICO_BOARD="$sertarget" \
+ [ "$1" = "pico" ] &&
+ x_ rm -rf "$sersrc/build" \
+ && (pt=$(x_ grep "pico_cmake_set" \
+ "$picosdk/src/boards/include/boards/$sertarget.h" \
+ | grep "PICO_PLATFORM" | cut -d= -f2 | tr -d [:blank:])
+ mkdir -p "$sersrc/build_$pt"
+ ln -srf "$sersrc/build_$pt/" "$sersrc/build") \
+ && x_ cmake -DPICO_BOARD="$sertarget" \
-DPICO_SDK_PATH="$picosdk" -B "$sersrc/build" "$sersrc" \
+ -Dpicotool_DIR="$picotool/picotool" \
&& x_ cmake --build "$sersrc/build"
[ "$1" = "stm32" ] && x_ make -C "$sersrc" \
libopencm3-just-make BOARD=$sertarget && x_ make -C \
- "$sersrc" BOARD=$sertarget; x_ mkdir -p "bin/serprog_$1"
+ "$sersrc" BOARD=$sertarget
+ x_ mkdir -p "bin/serprog_$1"
x_ mv "$serx" "bin/serprog_$1/serprog_$sertarget.${serx##*.}"
done < "$TMPDIR/ser"
- [ "$XBMK_RELEASE" = "y" ] && mkrom_tarball "bin/serprog_$1"; return 0
+ [ "$XBMK_RELEASE" = "y" ] && mkrom_tarball "bin/serprog_$1"; :
+}
+
+mkpicotool()
+{
+ rm -Rf "$picotool" || $err "Can't remove picotool builddir"
+ (
+ x_ cd src/picotool
+ x_ cmake -DCMAKE_INSTALL_PREFIX=xbmkbin -DPICOTOOL_FLAT_INSTALL=1 \
+ -DPICO_SDK_PATH=../pico-sdk
+ make install || $err "Can't build picotool"; :
+ ) || $err "Can't build picotool"; :
}
copyps1bios()
@@ -37,17 +60,15 @@ copyps1bios()
mkpayload_grub()
{
- eval `setvars "" grub_modules grub_install_modules`
- $dry eval `setcfg "$grubdata/module/$tree"`
+ eval "`setvars "" grub_modules grub_install_modules`"
+ $dry eval "`setcfg "$grubdata/module/$tree"`"
$dry x_ rm -f "$srcdir/grub.elf"; $dry \
- "$srcdir/grub-mkstandalone" --grub-mkimage="$srcdir/grub-mkimage" \
+ x_ "$srcdir/grub-mkstandalone" --grub-mkimage="$srcdir/grub-mkimage" \
-O i386-coreboot -o "$srcdir/grub.elf" -d "${srcdir}/grub-core/" \
--fonts= --themes= --locales= --modules="$grub_modules" \
--install-modules="$grub_install_modules" \
"/boot/grub/grub_default.cfg=${srcdir}/.config" \
- "/boot/grub/grub.cfg=$grubdata/memdisk.cfg" \
- "/background.png=$grubdata/background/background1280x800.png" || \
- $err "$tree: cannot build grub.elf"; return 0
+ "/boot/grub/grub.cfg=$grubdata/memdisk.cfg"; :
}
mkvendorfiles()
@@ -57,7 +78,7 @@ mkvendorfiles()
printf "%s\n" "${version%%-*}" > "$srcdir/.coreboot-version" || \
$err "!mk $srcdir .coreboot-version"
[ -z "$mode" ] && [ "$target" != "$tree" ] && \
- x_ ./vendor download $target; return 0
+ x_ ./mk download "$target"; :
}
cook_coreboot_config()
@@ -79,11 +100,15 @@ check_coreboot_utils()
utilmode="" && [ -n "$mode" ] && utilmode="clean"
x_ make -C "$utilsrcdir" $utilmode -j$XBMK_THREADS $makeargs
- [ -z "$mode" ] && [ ! -f "$utilelfdir/$util" ] && \
- x_ mkdir -p "$utilelfdir" && \
- x_ cp "$utilsrcdir/$util" "elf/$util/$1"
- [ -z "$mode" ] || x_ rm -Rf "$utilelfdir"; continue
- done; return 0
+ if [ -z "$mode" ] && [ ! -f "$utilelfdir/$util" ]; then
+ x_ mkdir -p "$utilelfdir"
+ x_ cp "$utilsrcdir/$util" "$utilelfdir"
+ [ "$util" = "cbfstool" ] || continue
+ x_ cp "$utilsrcdir/rmodtool" "$utilelfdir"
+ elif [ -n "$mode" ]; then
+ x_ rm -Rf "$utilelfdir"
+ fi; :
+ done; :
}
mkcorebootbin()
@@ -93,7 +118,8 @@ mkcorebootbin()
tmprom="$TMPDIR/coreboot.rom"
$dry x_ cp "$srcdir/build/coreboot.rom" "$tmprom"
- initmode="${defconfig##*/}"; displaymode="${initmode##*_}"
+ initmode="${defconfig##*/}"
+ displaymode="${initmode##*_}"
[ "$displaymode" = "$initmode" ] && displaymode="" # "normal" config
initmode="${initmode%%_*}"
cbfstool="elf/cbfstool/$tree/cbfstool"
@@ -104,7 +130,8 @@ mkcorebootbin()
if [ "$payload_uboot_i386" = "y" ] || \
[ "$payload_uboot_amd64" = "y" ]; then
- printf "'$target' has x86 U-Boot; assuming SeaBIOS=y\n" 1>&2
+ printf "'%s' has x86 U-Boot; assuming SeaBIOS=y\n" \
+ "$target" 1>&2
payload_seabios="y"
fi
@@ -122,23 +149,36 @@ mkcorebootbin()
[ "$payload_memtest" = "y" ] || payload_memtest="n"
[ "$(uname -m)" = "x86_64" ] || payload_memtest="n"
+ [ "$payload_grubsea" = "y" ] && [ "$initmode" = "normal" ] && \
+ payload_grubsea="n"
+ [ "$payload_grub" = "y" ] || payload_grubsea="n"
+
if $dry grep "CONFIG_PAYLOAD_NONE=y" "$defconfig"; then
[ "$payload_seabios" = "y" ] && pname="seabios" && \
$dry add_seabios
[ "$payload_uboot" = "y" ] && pname="uboot" && $dry add_uboot
else
- pname="custom" && $dry cprom; :
+ pname="custom"
+ $dry cprom
fi; :
}
add_seabios()
{
+ if [ "$payload_uboot_i386" = "y" ] || \
+ [ "$payload_uboot_amd64" = "y" ]; then
+ $dry add_uboot
+ fi
+
_seabioself="elf/seabios/default/$initmode/bios.bin.elf"
- cbfs "$tmprom" "$_seabioself" "fallback/payload"
+ _seaname="fallback/payload" && [ "$payload_grubsea" = "y" ] && \
+ _seaname="seabios.elf"
+ cbfs "$tmprom" "$_seabioself" "$_seaname"
x_ "$cbfstool" "$tmprom" add-int -i 3000 -n etc/ps2-keyboard-spinup
- _z="2"; [ "$initmode" = "vgarom" ] && _z="0"
+ _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" ] && \
@@ -147,30 +187,33 @@ add_seabios()
[ "$payload_memtest" = "y" ] && cbfs "$tmprom" \
"elf/memtest86plus/memtest.bin" img/memtest
- if [ "$payload_uboot_i386" = "y" ] || \
- [ "$payload_uboot_amd64" = "y" ]; then
- $dry add_uboot
- fi
-
[ "$payload_grub" = "y" ] && add_grub
- cprom
+ [ "$payload_grubsea" != "y" ] && cprom
[ "$payload_uboot_amd64" = "y" ] && [ "$displaymode" != "txtmode" ] && \
- [ "$initmode" != "normal" ] && pname="seauboot" && cprom "seauboot"
+ [ "$initmode" != "normal" ] && [ "$payload_grubsea" != "y" ] && \
+ pname="seauboot" && cprom "seauboot"
[ "$payload_grub" = "y" ] && pname="seagrub" && mkseagrub; :
}
add_grub()
{
- cbfs "$tmprom" "$grubelf" "img/grub2"
+ _grubname="img/grub2" && [ "$payload_grubsea" = "y" ] && \
+ _grubname="fallback/payload"
+ cbfs "$tmprom" "$grubelf" "$_grubname"
printf "set grub_scan_disk=\"%s\"\n" "$grub_scan_disk" \
> "$TMPDIR/tmpcfg" || $err "$target: !insert scandisk"
cbfs "$tmprom" "$TMPDIR/tmpcfg" scan.cfg raw
+ [ "$initmode" != "normal" ] && [ "$displaymode" != "txtmode" ] && \
+ cbfs "$tmprom" "$grubdata/background/background1280x800.png" \
+ "background.png" raw; :
}
mkseagrub()
{
- cbfs "$tmprom" "$grubdata/bootorder" bootorder raw
+ [ "$payload_grubsea" = "y" ] && pname="grub"
+ [ "$payload_grubsea" = "y" ] || \
+ cbfs "$tmprom" "$grubdata/bootorder" bootorder raw
for keymap in config/data/grub/keymap/*.gkb; do
[ -f "$keymap" ] && cprom "${keymap##*/}"; :
done; :
@@ -179,10 +222,12 @@ mkseagrub()
add_uboot()
{
if [ "$displaymode" = "txtmode" ]; then
- printf "cb/$target: Cannot use U-Boot in text mode\n" 1>&2
+ printf "cb/%s: Cannot use U-Boot in text mode\n" \
+ "$target" 1>&2
return 0
elif [ "$initmode" = "normal" ]; then
- printf "cb/$target: Cannot use U-Boot in normal initmode\n" 1>&2
+ printf "cb/%s: Cannot use U-Boot in normal initmode\n" \
+ "$target" 1>&2
return 0
fi
@@ -215,7 +260,8 @@ add_uboot()
ubootelf="$ubdir/u-boot-x86-with-spl.bin" # EFI-compatible
[ -f "$ubootelf" ] || $err "cb/$ubtarget: Can't find u-boot"
- cbfs "$tmprom" "$ubootelf" "$ubpath" $ubcbfsargs; cprom
+ cbfs "$tmprom" "$ubootelf" "$ubpath" $ubcbfsargs
+ [ "$payload_seabios" = "y" ] || cprom; :
}
cprom()
@@ -229,15 +275,14 @@ cprom()
x_ cp "$tmprom" "$newrom" && [ $# -gt 0 ] && [ "$1" != "seauboot" ] && \
cbfs "$newrom" "config/data/grub/keymap/$1" keymap.gkb raw
[ $# -gt 0 ] && [ "$1" = "seauboot" ] && \
- cbfs "$newrom" "config/data/grub/bootorder_uboot" "bootorder" raw
-
- [ "$XBMK_RELEASE" = "y" ] || return 0
- $dry mksha512sum "$newrom" "vendorhashes"; $dry ./vendor inject \
- -r "$newrom" -b "$target" -n nuke || $err "!nuke $newrom"
+ cbfs "$newrom" "config/data/grub/bootorder_uboot" bootorder raw; :
}
mkcoreboottar()
{
- [ "$target" = "$tree" ] && return 0; [ "$XBMK_RELEASE" = "y" ] && \
- [ "$release" != "n" ] && $dry mkrom_tarball "bin/$target"; :
+ [ "$target" = "$tree" ] && return 0
+ [ "$XBMK_RELEASE" = "y" ] || return 0
+ [ "$release" != "n" ] || return 0
+ $dry mkrom_tarball "bin/$target"
+ $dry x_ ./mk inject "bin/${relname}_${target}.tar.xz" nuke; :
}