summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--payloads/external/GRUB2/Makefile.inc43
-rw-r--r--src/Kconfig26
-rw-r--r--src/arch/x86/Makefile.inc16
4 files changed, 85 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
index c172244bd3..65bd9fbedf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,7 @@
build/
coreboot-builds/
payloads/external/FILO/filo/
+payloads/external/GRUB2/grub2/
payloads/external/SeaBIOS/seabios/
util/crossgcc/acpica-unix-*/
util/crossgcc/binutils-*/
diff --git a/payloads/external/GRUB2/Makefile.inc b/payloads/external/GRUB2/Makefile.inc
new file mode 100644
index 0000000000..888151dc9f
--- /dev/null
+++ b/payloads/external/GRUB2/Makefile.inc
@@ -0,0 +1,43 @@
+TAG-$(CONFIG_GRUB2_MASTER)=
+NAME-$(CONFIG_GRUB2_MASTER)=HEAD
+
+unexport KCONFIG_AUTOCONFIG
+
+all: grub2
+
+checkout:
+ echo " GIT GRUB2 $(NAME-y)"
+ test -d grub2 || \
+ git clone git://git.sv.gnu.org/grub.git grub2
+ cd grub2 && \
+ git checkout master && \
+ git pull; \
+ test -n "$(TAG-y)" && \
+ git branch -f $(NAME-y) $(TAG-y) && \
+ git checkout $(NAME-y) || true
+
+config: checkout
+ echo " CONFIG GRUB2 $(NAME-y)"
+ rm -rf grub2/build
+ mkdir grub2/build
+ cd grub2 && ./autogen.sh
+ cd grub2/build && ../configure BUILD_CC="$(HOSTCC)" CC="$(HOSTCC)" \
+ TARGET_CC="$(CC)" \
+ TARGET_OBJCOPY="$(OBJCOPY)" TARGET_STRIP="$(STRIP)" CFLAGS=-O2 TARGET_CFLAGS=-Os --with-platform=coreboot
+
+grub2: config
+ echo " MAKE GRUB2 $(NAME-y)"
+ $(MAKE) -C grub2/build BUILD_CC="$(HOSTCC)" CC="$(HOSTCC)" \
+ TARGET_CC="$(CC)" TARGET_OBJCOPY="$(OBJCOPY)" \
+ TARGET_STRIP="$(STRIP)" CFLAGS=-O2 TARGET_CFLAGS=-Os \
+ && $(MAKE) -C grub2/build BUILD_CC="$(HOSTCC)" CC="$(HOSTCC)" \
+ TARGET_CC="$(CC)" TARGET_OBJCOPY="$(OBJCOPY)" TARGET_STRIP="$(STRIP)" \
+ CFLAGS=-O2 TARGET_CFLAGS=-Os default_payload.elf
+
+clean:
+ test -d grub2 && $(MAKE) -C grub2 clean || exit 0
+
+distclean:
+ rm -rf grub2
+
+.PHONY: checkout config grub2 clean distclean
diff --git a/src/Kconfig b/src/Kconfig
index 10f8c185fe..1c80b8c194 100644
--- a/src/Kconfig
+++ b/src/Kconfig
@@ -569,6 +569,15 @@ config PAYLOAD_FILO
See http://coreboot.org/Payloads for more information.
+config PAYLOAD_GRUB2
+ bool "GRUB2"
+ help
+ Select this option if you want to build a coreboot image
+ with a GRUB2 payload. If you don't know what this is
+ about, just leave it enabled.
+
+ See http://coreboot.org/Payloads for more information.
+
config PAYLOAD_TIANOCORE
bool "Tiano Core"
help
@@ -606,6 +615,17 @@ config SEABIOS_PS2_TIMEOUT
keyboard controller to become ready before giving up.
choice
+ prompt "GRUB2 version"
+ default GRUB2_MASTER
+ depends on PAYLOAD_GRUB2
+
+config GRUB2_MASTER
+ bool "HEAD"
+ help
+ Newest GRUB2 version
+endchoice
+
+choice
prompt "FILO version"
default FILO_STABLE
depends on PAYLOAD_FILO
@@ -643,6 +663,10 @@ config PAYLOAD_FILE
default "payloads/external/FILO/filo/build/filo.elf"
config PAYLOAD_FILE
+ depends on PAYLOAD_GRUB2
+ default "payloads/external/GRUB2/grub2/build/default_payload.elf"
+
+config PAYLOAD_FILE
string "Tianocore firmware volume"
depends on PAYLOAD_TIANOCORE
default "COREBOOT.fd"
@@ -653,7 +677,7 @@ config PAYLOAD_FILE
config COMPRESSED_PAYLOAD_LZMA
bool "Use LZMA compression for payloads"
default y
- depends on PAYLOAD_ELF || PAYLOAD_SEABIOS || PAYLOAD_FILO || PAYLOAD_TIANOCORE
+ depends on PAYLOAD_ELF || PAYLOAD_SEABIOS || PAYLOAD_FILO || PAYLOAD_TIANOCORE || PAYLOAD_GRUB2
help
In order to reduce the size payloads take up in the ROM chip
coreboot can compress them using the LZMA algorithm.
diff --git a/src/arch/x86/Makefile.inc b/src/arch/x86/Makefile.inc
index dee56c5345..b90bbe7670 100644
--- a/src/arch/x86/Makefile.inc
+++ b/src/arch/x86/Makefile.inc
@@ -48,6 +48,9 @@ endif
ifeq ($(CONFIG_PAYLOAD_FILO),y)
COREBOOT_ROM_DEPENDENCIES+=filo
endif
+ifeq ($(CONFIG_PAYLOAD_GRUB2),y)
+COREBOOT_ROM_DEPENDENCIES+=grub2
+endif
extract_nth=$(word $(1), $(subst |, ,$(2)))
@@ -113,6 +116,12 @@ ifeq ($(CONFIG_PAYLOAD_FILO),y)
@printf " PAYLOAD FILO (internal, compression: $(CBFS_PAYLOAD_COMPRESS_FLAG))\n"
$(CBFSTOOL) $@.tmp add-payload -f $(CONFIG_PAYLOAD_FILE) -n $(CONFIG_CBFS_PREFIX)/payload -c $(CBFS_PAYLOAD_COMPRESS_FLAG)
endif
+
+ifeq ($(CONFIG_PAYLOAD_GRUB2),y)
+ @printf " PAYLOAD GRUB2 (internal, compression: $(CBFS_PAYLOAD_COMPRESS_FLAG))\n"
+ $(CBFSTOOL) $@.tmp add-payload -f $(CONFIG_PAYLOAD_FILE) -n $(CONFIG_CBFS_PREFIX)/payload -c $(CBFS_PAYLOAD_COMPRESS_FLAG)
+endif
+
ifeq ($(CONFIG_PAYLOAD_TIANOCORE),y)
@printf " PAYLOAD Tiano Core (compression: $(CBFS_PAYLOAD_COMPRESS_FLAG))\n"
$(CBFSTOOL) $@.tmp add-payload -f $(CONFIG_PAYLOAD_FILE) -n $(CONFIG_CBFS_PREFIX)/payload -c $(CBFS_PAYLOAD_COMPRESS_FLAG)
@@ -440,3 +449,10 @@ filo:
CONFIG_FILO_MASTER=$(CONFIG_FILO_MASTER) \
CONFIG_FILO_STABLE=$(CONFIG_FILO_STABLE)
+
+grub2:
+ $(MAKE) -C payloads/external/GRUB2 -f Makefile.inc \
+ HOSTCC="$(HOSTCC)" \
+ CC="$(CC)" LD="$(LD)" OBJDUMP="$(OBJDUMP)" \
+ OBJCOPY="$(OBJCOPY)" STRIP="$(STRIP)" \
+ CONFIG_GRUB2_MASTER=$(CONFIG_GRUB2_MASTER)