77 lines
1.6 KiB
Bash
Executable File
77 lines
1.6 KiB
Bash
Executable File
#!/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
|