summaryrefslogtreecommitdiff
path: root/script/build/fw
diff options
context:
space:
mode:
Diffstat (limited to 'script/build/fw')
-rwxr-xr-xscript/build/fw/coreboot2
-rwxr-xr-xscript/build/fw/grub81
2 files changed, 82 insertions, 1 deletions
diff --git a/script/build/fw/coreboot b/script/build/fw/coreboot
index dede12c8..7c89bb35 100755
--- a/script/build/fw/coreboot
+++ b/script/build/fw/coreboot
@@ -169,7 +169,7 @@ build_dependency_grub()
rebuild_grub="y" && break
done
[ "${rebuild_grub}" = "y" ] || return 0
- x_ ./build coreboot grub
+ x_ ./build fw grub
}
build_dependency_uboot()
diff --git a/script/build/fw/grub b/script/build/fw/grub
new file mode 100755
index 00000000..49b8b416
--- /dev/null
+++ b/script/build/fw/grub
@@ -0,0 +1,81 @@
+#!/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
+
+. "include/err.sh"
+
+elfdir="elf/grub"
+grubcfgsdir="config/grub"
+layoutdir="/boot/grub/layouts"
+
+. "${grubcfgsdir}/modules.list"
+
+main()
+{
+ handle_dependencies
+ build_keymap_configs
+ build_grub_payload
+}
+
+handle_dependencies()
+{
+ [ -d "src/grub" ] || x_ ./update project repo grub
+ [ -f "src/grub/grub-mkstandalone" ] || build_grub_utils
+ x_ mkdir -p "${elfdir}"
+ x_ rm -f "${elfdir}/"*
+}
+
+build_grub_utils()
+{
+ (
+ x_ cd "src/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()
+{
+ ./src/grub/grub-mkstandalone \
+ --grub-mkimage="src/grub/grub-mkimage" \
+ -O i386-coreboot \
+ -o "${elfdir}/grub.elf" \
+ -d "src/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 $@