diff --git a/.gitignore b/.gitignore index 78585e0e26..0f8a69e4d6 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ xml html/ doc/latex/ sanity-out/ +scripts/grub diff --git a/scripts/build_grub.sh b/scripts/build_grub.sh new file mode 100755 index 0000000000..53c128f271 --- /dev/null +++ b/scripts/build_grub.sh @@ -0,0 +1,64 @@ +#!/bin/bash + +# Originally from the Galileo port in contiki +# https://github.com/otcshare/contiki-x86 + +set -e + +JOBS=5 +HEAD="bac5d1a64ab4191058a8fd4c05f6b3b339e249e7" +SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) + +prepare() { + if [[ ! -d ./src ]]; then + git clone git://git.savannah.gnu.org/grub.git src + fi + + pushd src + git checkout $HEAD + git clean -fdx + popd +} + +build() { + pushd src + + ./autogen.sh + ./configure --with-platform=efi --target=i386 + + make -j${JOBS} + + ./grub-mkimage -p /EFI/BOOT -d ./grub-core/ -O i386-efi -o grub.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 + + popd +} + +setup() { + mkdir -p bin + cp src/grub.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