fvp: Introduce grub to the FPV setup
As a first step to update EDK2 to running latest we are introducing
grub which will be a needed component when booting UEFI without
semihosting.
This particular patch will just bulid grub, it will still not be used
when running FVP (that is enabled in later patches in this series).
Signed-off-by: Joakim Bech <joakim.bech@linaro.org>
Reviewed-by: Victor Chong <victor.chong@linaro.org>
diff --git a/fvp.mk b/fvp.mk
index b890f98..5d12d19 100644
--- a/fvp.mk
+++ b/fvp.mk
@@ -23,18 +23,28 @@
ifeq ($(wildcard $(FOUNDATION_PATH)),)
$(error $(FOUNDATION_PATH) does not exist)
endif
+GRUB_PATH ?= $(ROOT)/grub
+GRUB_CONFIG_PATH ?= $(BUILD_PATH)/fvp/grub
+OUT_PATH ?= $(ROOT)/out
+GRUB_BIN ?= $(OUT_PATH)/bootaa64.efi
################################################################################
# Targets
################################################################################
-all: arm-tf edk2 linux optee-os optee-client xtest optee-examples
-clean: arm-tf-clean busybox-clean edk2-clean optee-os-clean \
+all: arm-tf edk2 grub linux optee-os optee-client xtest optee-examples
+clean: arm-tf-clean busybox-clean edk2-clean grub-clean optee-os-clean \
optee-client-clean optee-examples-clean
include toolchain.mk
################################################################################
+# Folders
+################################################################################
+$(OUT_PATH):
+ mkdir -p $@
+
+################################################################################
# ARM Trusted Firmware
################################################################################
ARM_TF_EXPORTS ?= \
@@ -146,6 +156,45 @@
update_rootfs: update_rootfs-common
################################################################################
+# grub
+################################################################################
+grub-flags := CC="$(CCACHE)gcc" \
+ TARGET_CC="$(AARCH64_CROSS_COMPILE)gcc" \
+ TARGET_OBJCOPY="$(AARCH64_CROSS_COMPILE)objcopy" \
+ TARGET_NM="$(AARCH64_CROSS_COMPILE)nm" \
+ TARGET_RANLIB="$(AARCH64_CROSS_COMPILE)ranlib" \
+ TARGET_STRIP="$(AARCH64_CROSS_COMPILE)strip"
+
+GRUB_MODULES += boot chain configfile echo efinet eval ext2 fat font gettext \
+ gfxterm gzio help linux loadenv lsefi normal part_gpt \
+ part_msdos read regexp search search_fs_file search_fs_uuid \
+ search_label terminal terminfo test tftp time
+
+$(GRUB_PATH)/configure: $(GRUB_PATH)/configure.ac
+ cd $(GRUB_PATH) && ./autogen.sh
+
+$(GRUB_PATH)/Makefile: $(GRUB_PATH)/configure
+ cd $(GRUB_PATH) && ./configure --target=aarch64 --enable-boot-time $(grub-flags)
+
+.PHONY: grub
+grub: $(GRUB_PATH)/Makefile | $(OUT_PATH)
+ $(MAKE) -C $(GRUB_PATH) && \
+ cd $(GRUB_PATH) && ./grub-mkimage \
+ --output=$(GRUB_BIN) \
+ --config=$(GRUB_CONFIG_PATH)/grub.cfg \
+ --format=arm64-efi \
+ --directory=grub-core \
+ --prefix=/boot/grub \
+ $(GRUB_MODULES)
+
+.PHONY: grub-clean
+grub-clean:
+ @if [ -e $(GRUB_PATH)/Makefile ]; then $(MAKE) -C $(GRUB_PATH) clean; fi
+ @rm -f $(GRUB_BIN)
+ @rm -f $(GRUB_PATH)/configure
+
+
+################################################################################
# Run targets
################################################################################
# This target enforces updating root fs etc