diff --git a/core/grub/build b/core/grub/build new file mode 100755 index 00000000..2523f402 --- /dev/null +++ b/core/grub/build @@ -0,0 +1,49 @@ +#!/bin/sh -e + +(cd grub + patch -p1 < 0008-Fix-packed-not-aligned-error-on-GCC-8.patch + patch -p1 < grub-2.02-relocation_fix-1.patch) + +# Grub is built in a function so the script argument needs to be stored. +pkg_dir=$1 + +# Change naming from GNU/Linux to Linux. +sed 's|GNU/Linux|Linux|' -i grub/util/grub.d/10_linux.in + +build_grub() ( + cp -R grub "grub-${1##*=}" + cd "grub-${1##*=}" + + autoreconf -fi + + ./configure \ + --prefix=/usr \ + --sbindir=/usr/bin \ + --sysconfdir=/etc \ + --disable-nls \ + --disable-werror \ + "$@" + + make + make DESTDIR="$pkg_dir" install +) + +build_grub --with-platform=pc +build_grub --with-platform=efi --disable-efiemu + +# Install /etc/default/grub (used by grub-mkconfig). +install -Dm0644 grub.default "$1/etc/default/grub" + +# Remove gdb debugging files. +( + cd "$pkg_dir" + rm -f usr/lib/grub/*/*.module + rm -f usr/lib/grub/*/*.image + rm -f usr/lib/grub/*/kernel.exec + rm -f usr/lib/grub/*/gdb_grub + rm -f usr/lib/grub/*/gmodule.pl + rm -f usr/lib/charset.alias +) ||: + +# Remove unneedded file by musl +rm -f "$1/usr/lib/charset.alias" diff --git a/core/grub/checksums b/core/grub/checksums new file mode 100644 index 00000000..c7af5291 --- /dev/null +++ b/core/grub/checksums @@ -0,0 +1,4 @@ +810b3798d316394f94096ec2797909dbf23c858e48f7b3830826b8daa06b7b0f grub-2.02.tar.xz +dd64709462eb8218e88c1c4298fb6c0f3c5a741438509226c641b60cbd7818bd 0008-Fix-packed-not-aligned-error-on-GCC-8.patch +55802405cfd186ce9a0f4f166c82538dbd71fb2526af2217e023789c208f26d3 grub-2.02-relocation_fix-1.patch +93cde7ed22280bf1bf205d1e2c9700c64d8d32bd759569f6e00913ec001389c5 grub.default diff --git a/core/grub/depends b/core/grub/depends new file mode 100644 index 00000000..9e6524b5 --- /dev/null +++ b/core/grub/depends @@ -0,0 +1,7 @@ +autoconf make +automake make +binutils make +bison make +flex make +linux-headers make +python make diff --git a/core/grub/files/grub.default b/core/grub/files/grub.default new file mode 100644 index 00000000..762f3384 --- /dev/null +++ b/core/grub/files/grub.default @@ -0,0 +1,53 @@ +# GRUB boot loader configuration + +GRUB_DEFAULT=0 +GRUB_TIMEOUT=5 +GRUB_DISTRIBUTOR="KISS" +GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet" + +# Preload both GPT and MBR modules so that they are not missed +GRUB_PRELOAD_MODULES="part_gpt part_msdos" + +# Uncomment to enable booting from LUKS encrypted devices +#GRUB_ENABLE_CRYPTODISK=y + +# Set to 'countdown' or 'hidden' to change timeout behavior, +# press ESC key to display menu. +#GRUB_TIMEOUT_STYLE=menu + +# Uncomment to use basic console +#GRUB_TERMINAL_INPUT=console + +# Uncomment to disable graphical terminal +#GRUB_TERMINAL_OUTPUT=console + +# The resolution used on graphical terminal +# note that you can use only modes which your graphic card supports via VBE +# you can see them in real GRUB with the command `vbeinfo' +#GRUB_GFXMODE=auto + +# Uncomment to allow the kernel use the same resolution used by grub +#GRUB_GFXPAYLOAD_LINUX=keep + +# Uncomment if you want GRUB to pass to the Linux kernel the old parameter +# format "root=/dev/xxx" instead of "root=/dev/disk/by-uuid/xxx" +#GRUB_DISABLE_LINUX_UUID=true + +# Uncomment to disable generation of recovery mode menu entries +#GRUB_DISABLE_RECOVERY=true + +# Uncomment and set to the desired menu colors. Used by normal and wallpaper +# modes only. Entries specified as foreground/background. +#GRUB_COLOR_NORMAL="light-blue/black" +#GRUB_COLOR_HIGHLIGHT="light-cyan/blue" + +# Uncomment one of them for the gfx desired, a image background or a gfxtheme +#GRUB_BACKGROUND="/path/to/wallpaper" +#GRUB_THEME="/path/to/gfxtheme" + +# Uncomment to get a beep at GRUB start +#GRUB_INIT_TUNE="480 440 1" + +# Uncomment to make GRUB remember the last selection. This requires to +# set 'GRUB_DEFAULT=saved' above. +#GRUB_SAVEDEFAULT="true" diff --git a/core/grub/patches/0008-Fix-packed-not-aligned-error-on-GCC-8.patch b/core/grub/patches/0008-Fix-packed-not-aligned-error-on-GCC-8.patch new file mode 100644 index 00000000..ac0ba56f --- /dev/null +++ b/core/grub/patches/0008-Fix-packed-not-aligned-error-on-GCC-8.patch @@ -0,0 +1,71 @@ +From 563b1da6e6ae7af46cc8354cadb5dab416989f0a Mon Sep 17 00:00:00 2001 +From: Michael Chang +Date: Mon, 26 Mar 2018 16:52:34 +0800 +Subject: Fix packed-not-aligned error on GCC 8 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When building with GCC 8, there are several errors regarding packed-not-aligned. + +./include/grub/gpt_partition.h:79:1: error: alignment 1 of ‘struct grub_gpt_partentry’ is less than 8 [-Werror=packed-not-aligned] + +This patch fixes the build error by cleaning up the ambiguity of placing +aligned structure in a packed one. In "struct grub_btrfs_time" and "struct +grub_gpt_part_type", the aligned attribute seems to be superfluous, and also +has to be packed, to ensure the structure is bit-to-bit mapped to the format +laid on disk. I think we could blame to copy and paste error here for the +mistake. In "struct efi_variable", we have to use grub_efi_packed_guid_t, as +the name suggests. :) + +Signed-off-by: Michael Chang +Tested-by: Michael Chang +Tested-by: Paul Menzel +Reviewed-by: Daniel Kiper +--- + grub-core/fs/btrfs.c | 2 +- + include/grub/efiemu/runtime.h | 2 +- + include/grub/gpt_partition.h | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/grub-core/fs/btrfs.c b/grub-core/fs/btrfs.c +index 4849c1ceb..be195448d 100644 +--- a/grub-core/fs/btrfs.c ++++ b/grub-core/fs/btrfs.c +@@ -175,7 +175,7 @@ struct grub_btrfs_time + { + grub_int64_t sec; + grub_uint32_t nanosec; +-} __attribute__ ((aligned (4))); ++} GRUB_PACKED; + + struct grub_btrfs_inode + { +diff --git a/include/grub/efiemu/runtime.h b/include/grub/efiemu/runtime.h +index 9b6b729f4..36d2dedf4 100644 +--- a/include/grub/efiemu/runtime.h ++++ b/include/grub/efiemu/runtime.h +@@ -29,7 +29,7 @@ struct grub_efiemu_ptv_rel + + struct efi_variable + { +- grub_efi_guid_t guid; ++ grub_efi_packed_guid_t guid; + grub_uint32_t namelen; + grub_uint32_t size; + grub_efi_uint32_t attributes; +diff --git a/include/grub/gpt_partition.h b/include/grub/gpt_partition.h +index 1b32f6725..9668a68c3 100644 +--- a/include/grub/gpt_partition.h ++++ b/include/grub/gpt_partition.h +@@ -28,7 +28,7 @@ struct grub_gpt_part_type + grub_uint16_t data2; + grub_uint16_t data3; + grub_uint8_t data4[8]; +-} __attribute__ ((aligned(8))); ++} GRUB_PACKED; + typedef struct grub_gpt_part_type grub_gpt_part_type_t; + + #define GRUB_GPT_PARTITION_TYPE_EMPTY \ +-- +cgit v1.1-33-g03f6 diff --git a/core/grub/patches/grub-2.02-relocation_fix-1.patch b/core/grub/patches/grub-2.02-relocation_fix-1.patch new file mode 100644 index 00000000..daf45e47 --- /dev/null +++ b/core/grub/patches/grub-2.02-relocation_fix-1.patch @@ -0,0 +1,31 @@ +Submitted By: Xi Ruoyao +Date: 2019-01-10 +Initial Package Version: 2.02 +Upstream Status: Comitted +Origin: Upstream git repository +Description: x86_64 assembler in binutils-2.31 generates + R_X86_64_PLT32. Grub2 should treat it as + R_X86_64_PC32. + +diff -Naur grub-2.02.old/util/grub-mkimagexx.c grub-2.02.new/util/grub-mkimagexx.c +--- grub-2.02.old/util/grub-mkimagexx.c 2017-04-24 17:16:00.000000000 +0800 ++++ grub-2.02.new/util/grub-mkimagexx.c 2019-01-10 01:09:53.027377424 +0800 +@@ -832,6 +832,7 @@ + break; + + case R_X86_64_PC32: ++ case R_X86_64_PLT32: + { + grub_uint32_t *t32 = (grub_uint32_t *) target; + *t32 = grub_host_to_target64 (grub_target_to_host32 (*t32) +diff -Naur grub-2.02.old/util/grub-module-verifier.c grub-2.02.new/util/grub-module-verifier.c +--- grub-2.02.old/util/grub-module-verifier.c 2017-04-24 17:16:00.000000000 +0800 ++++ grub-2.02.new/util/grub-module-verifier.c 2019-01-10 01:10:07.617378227 +0800 +@@ -19,6 +19,7 @@ + -1 + }, (int[]){ + R_X86_64_PC32, ++ R_X86_64_PLT32, + -1 + } + }, diff --git a/core/grub/sources b/core/grub/sources new file mode 100644 index 00000000..1d62c642 --- /dev/null +++ b/core/grub/sources @@ -0,0 +1,4 @@ +ftp://ftp.gnu.org/gnu/grub/grub-2.02.tar.xz grub/ +patches/0008-Fix-packed-not-aligned-error-on-GCC-8.patch grub/ +patches/grub-2.02-relocation_fix-1.patch grub/ +files/grub.default diff --git a/core/grub/version b/core/grub/version new file mode 100644 index 00000000..281c6ef9 --- /dev/null +++ b/core/grub/version @@ -0,0 +1 @@ +2.02 2