summaryrefslogtreecommitdiff
path: root/script/build/coreboot
diff options
context:
space:
mode:
Diffstat (limited to 'script/build/coreboot')
-rwxr-xr-xscript/build/coreboot/grub80
1 files changed, 80 insertions, 0 deletions
diff --git a/script/build/coreboot/grub b/script/build/coreboot/grub
new file mode 100755
index 00000000..7f448e24
--- /dev/null
+++ b/script/build/coreboot/grub
@@ -0,0 +1,80 @@
+#!/usr/bin/env sh
+# SPDX-License-Identifier: GPL-3.0-or-later
+# SPDX-FileCopyrightText: 2014,2015,2020,2021,2023 Leah Rowe <leah@libreboot.org>
+
+[ "x${DEBUG+set}" = 'xset' ] && set -v
+set -u -e
+
+elfdir="elf/grub"
+grubcfgsdir="config/grub"
+layoutdir="/boot/grub/layouts"
+
+. "include/err.sh"
+. "${grubcfgsdir}/modules.list"
+
+main()
+{
+ handle_dependencies
+ build_keymap_configs
+ build_grub_payload
+}
+
+handle_dependencies()
+{
+ [ -d "grub/" ] || x_ ./update project repo grub
+ [ -f "grub/grub-mkstandalone" ] || build_grub_utils
+ [ -d "${elfdir}" ] || x_ mkdir -p "${elfdir}"
+ x_ rm -f "${elfdir}/"*
+}
+
+build_grub_utils()
+{
+ (
+ x_ cd grub/
+ [ ! -d Makefile ] || x_ make distclean
+ x_ ./bootstrap --gnulib-srcdir=gnulib/ --no-git
+ x_ ./autogen.sh
+ x_ ./configure --with-platform=coreboot
+ x_ make -j$(nproc) FS_PAYLOAD_MODULES=""
+ )
+}
+
+build_keymap_configs()
+{
+ for keylayoutfile in "${grubcfgsdir}/keymap/"*.gkb; do
+ [ -f "${keylayoutfile}" ] || continue
+ keymap="${keylayoutfile##${grubcfgsdir}/keymap/}"
+ keymap="${keymap%.gkb}"
+ x_ printf "keymap %s\n" "${keymap}" > \
+ "${elfdir}/keymap_${keymap}.cfg"
+ done
+}
+
+build_grub_payload()
+{
+ grub/grub-mkstandalone \
+ --grub-mkimage="grub/grub-mkimage" \
+ -O i386-coreboot \
+ -o "${elfdir}/grub.elf" \
+ -d grub/grub-core/ \
+ --fonts= --themes= --locales= \
+ --modules="${grub_modules}" \
+ --install-modules="${grub_install_modules}" \
+ "${layoutdir}/colemak.gkb=${grubcfgsdir}/keymap/colemak.gkb" \
+ "${layoutdir}/deqwertz.gkb=${grubcfgsdir}/keymap/deqwertz.gkb" \
+ "${layoutdir}/esqwerty.gkb=${grubcfgsdir}/keymap/esqwerty.gkb" \
+ "${layoutdir}/frazerty.gkb=${grubcfgsdir}/keymap/frazerty.gkb" \
+ "${layoutdir}/frdvbepo.gkb=${grubcfgsdir}/keymap/frdvbepo.gkb" \
+ "${layoutdir}/itqwerty.gkb=${grubcfgsdir}/keymap/itqwerty.gkb" \
+ "${layoutdir}/svenska.gkb=${grubcfgsdir}/keymap/svenska.gkb" \
+ "${layoutdir}/trqwerty.gkb=${grubcfgsdir}/keymap/trqwerty.gkb" \
+ "${layoutdir}/ukdvorak.gkb=${grubcfgsdir}/keymap/ukdvorak.gkb" \
+ "${layoutdir}/ukqwerty.gkb=${grubcfgsdir}/keymap/ukqwerty.gkb" \
+ "${layoutdir}/usdvorak.gkb=${grubcfgsdir}/keymap/usdvorak.gkb" \
+ "${layoutdir}/usqwerty.gkb=${grubcfgsdir}/keymap/usqwerty.gkb" \
+ "/boot/grub/grub.cfg=${grubcfgsdir}/config/grub_memdisk.cfg" \
+ "/boot/grub/grub_default.cfg=${grubcfgsdir}/config/grub.cfg" || \
+ err "build_grub_elf: cannot build grub payload (grub-mkstandalone)"
+}
+
+main $@