#!/bin/bash # Originally from the Galileo port in contiki # https://github.com/otcshare/contiki-x86 set -e JOBS=5 SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) if [ "x$1" == "x" ]; then echo "Usage: $0 [i386|x86_64]" exit 1 fi TARGET_ARCH=$1 prepare() { if [[ ! -d ./src ]]; then git clone http://git.savannah.gnu.org/r/grub.git src fi pushd src git checkout grub-2.02 cat << EOF | awk ' { print $1 }' | git cherry-pick -x --stdin grub-2.02-69-gc36c2a864 yylex: Explicilty cast fprintf to void. grub-2.02-136-g563b1da6e Fix packed-not-aligned error on GCC 8 grub-2.02-100-g842c39046 x86-64: Treat R_X86_64_PLT32 as R_X86_64_PC32 EOF git clean -fdx popd } build() { pushd src ./autogen.sh ./configure --with-platform=efi --target=${TARGET_ARCH} make -j${JOBS} ./grub-mkimage -p /EFI/BOOT -d ./grub-core/ -O ${TARGET_ARCH}-efi \ -o grub_${TARGET_ARCH}.efi \ boot efifwsetup efi_gop efinet efi_uga lsefimmap lsefi lsefisystab \ exfat fat multiboot2 multiboot terminal part_msdos part_gpt normal \ all_video aout configfile echo file fixvideo fshelp gfxterm gfxmenu \ gfxterm_background gfxterm_menu legacycfg video_bochs video_cirrus \ video_colors video_fb videoinfo video net tftp popd } setup() { mkdir -p bin cp src/grub_${TARGET_ARCH}.efi bin/ } cleanup() { rm -rf ./src rm -rf ./bin } # This script will always run on its own basepath, no matter where you call it from. mkdir -p ${SCRIPT_DIR}/grub pushd ${SCRIPT_DIR}/grub case $1 in -c | --cleanup) cleanup ;; *) prepare && build && setup ;; esac popd