|  | #!/bin/bash | 
|  |  | 
|  | # Originally from the Galileo port in contiki | 
|  | # https://github.com/otcshare/contiki-x86 | 
|  |  | 
|  | set -e | 
|  | unset CFLAGS | 
|  |  | 
|  | 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 | 
|  |  | 
|  | export PYTHON=python3 | 
|  |  | 
|  | prepare() { | 
|  | if [[ ! -d ./src ]]; then | 
|  | git clone http://git.savannah.gnu.org/r/grub.git src | 
|  | fi | 
|  |  | 
|  | pushd src | 
|  | git checkout grub-2.04 | 
|  | git clean -fdx | 
|  | popd | 
|  | } | 
|  |  | 
|  | build() { | 
|  | pushd src | 
|  |  | 
|  | ./bootstrap | 
|  | ./autogen.sh | 
|  | ./configure --with-platform=efi --target=${TARGET_ARCH} --disable-werror | 
|  |  | 
|  | 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 |