#!/usr/bin/env sh # SPDX-License-Identifier: GPL-3.0-or-later # Copyright (c) 2014-2016,2020-2021,2023-2024 Leah Rowe # Copyright (c) 2021-2022 Ferass El Hafidi # Copyright (c) 2022 Caleb La Grange # Copyright (c) 2022-2023 Alper Nebi Yasak # Copyright (c) 2023 Riku Viitanen mkpayload_grub() { 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" \ -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 } mkvendorfiles() { [ -z "$mode" ] && $dry cook_coreboot_config check_cbfstool "$tree"; printf "69\n" > "$srcdir/.coreboot-version" \ || $err "!cbver $srcdir"; [ -z "$mode" ] && \ [ "$target" != "$tree" ] && x_ ./vendor download $target; return 0 } cook_coreboot_config() { [ -f "$srcdir/.config" ] || return 0 printf "CONFIG_CCACHE=y\n" >> "$srcdir/.config" || \ $err "$srcdir/.config: Could not enable ccache" make -C "$srcdir" oldconfig || $err "Could not cook $srcdir/.config"; : } check_cbfstool() { [ "$badhash" = "n" ] || rm -f "elf/cbfstool/$1/cbfstool" || \ $err "!rm badelf elf/cbfstool/$1/cbfstool" e "elf/cbfstool/$1/cbfstool" f && return 0 utilelfdir="elf/cbfstool/$1" utilsrcdir="src/coreboot/$1/util/cbfstool" utilmode="" && [ -n "$mode" ] && utilmode="clean" x_ make -C "$utilsrcdir" $utilmode -j$XBMK_THREADS $makeargs [ -z "$mode" ] && [ ! -f "$utilelfdir/cbfstool" ] && \ x_ mkdir -p "$utilelfdir" && \ x_ cp "$utilsrcdir/cbfstool" "elf/cbfstool/$1" [ -z "$mode" ] || x_ rm -Rf "$utilelfdir"; : } mkcorebootbin() { [ "$target" = "$tree" ] && return 0 tmprom="$srcdir/build/coreboot.rom"; initmode="${defconfig##*/}"; displaymode="${initmode##*_}"; initmode="${initmode%%_*}" [ -n "$displaymode" ] && displaymode="_$displaymode" cbfstool="elf/cbfstool/$tree/cbfstool" [ -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" pname="custom" && grep "CONFIG_PAYLOAD_NONE=y" "$defconfig" && \ pname="seabios"; $dry add_seabios newrom="bin/$target/${pname}_${target}_$initmode$displaymode.rom" $dry x_ mkdir -p "${newrom%/*}"; $dry x_ mv "$tmprom" "$newrom" } add_seabios() { _seabioself="elf/seabios/default/$initmode/bios.bin.elf" 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 [ "$payload_memtest" = "y" ] && cbfs "$tmprom" \ "elf/memtest86plus/memtest.bin" img/memtest [ "$payload_grub" = "y" ] && pname="seagrub" && add_grub; return 0 } add_grub() { cbfs "$tmprom" "$grubelf" "img/grub2" printf "set grub_scan_disk=\"%s\"\n" "$grub_scan_disk" \ > "$TMPDIR/tmpcfg" || $err "$target: !insert scandisk" cbfs "$tmprom" "$TMPDIR/tmpcfg" scan.cfg raw cbfs "$tmprom" "$grubdata/bootorder" bootorder raw }