heads/modules/linuxboot
2018-03-15 11:49:02 -04:00

78 lines
2.4 KiB
Plaintext

modules-$(CONFIG_LINUXBOOT) += linuxboot
linuxboot_version := git
linuxboot_repo := https://github.com/osresearch/linuxboot
linuxboot_dir := linuxboot-$(linuxboot_version)
# linuxboot builds are specialized on a per-target basis.
# They can be specialized by defining $(CONFIG_LINUXBOOT_BOARD)
# otherwise it is assumed that it will have the same name
# as the Heads BOARD.
linuxboot_board := $(or $(CONFIG_LINUXBOOT_BOARD),$(BOARD))
linuxboot_configure := \
echo >&2 "Pre-building edk2" ; \
$(MAKE) \
BOARD=$(linuxboot_board) \
edk2.force \
|| exit 1 ; \
if [ "$(linuxboot_board)" = "qemu" ]; then \
echo >&2 "Pre-building edk2 OVMF" ; \
( cd edk2/OvmfPkg ; ./build.sh -n `nproc` ) \
|| exit 1 ; \
fi ; \
touch .config ; \
linuxboot_target := \
BOARD=$(linuxboot_board) \
KERNEL=$(build)/$(BOARD)/bzImage \
INITRD=$(build)/$(BOARD)/initrd.cpio.xz \
$(if $(CONFIG_LINUXBOOT_ROM), ROM=$(pwd)/$(CONFIG_LINUXBOOT_ROM)) \
all
#
# Most mainboards will define a ROM file that contains the vendor ROM
# for the image. Provide a reasonable error if the ROM file doesn't exist.
#
ifneq "$(CONFIG_LINUXBOOT_ROM)" ""
ifneq "y" "$(shell [ -r '$(CONFIG_LINUXBOOT_ROM)' ] && echo y)"
$(error $(CONFIG_LINUXBOOT_ROM): you must provide a ROM file)
endif
# Force a rebuild of the LinuxBoot ROM if the vendor ROM changes
linuxboot.intermediate: $(CONFIG_LINUXBOOT_ROM)
endif
# The output file from the LinuxBoot build is a full ROM
# ready to flash onto the mainboard. There might be partial
# firmware volumes as well, but that depends on the board
# so this only retrieves the final one
linuxboot_output := $(build)/$(linuxboot_dir)/build/$(linuxboot_board)/linuxboot.rom
$(linuxboot_output): linuxboot.intermediate
$(build)/$(BOARD)/linuxboot.rom: $(linuxboot_output)
$(call do-copy,$<,$@)
# The Linux kernel and Heads initrd must be built before linuxboot
# unless the user has specified "FAST=1" on the make command line,
# which will assume that the kernel and initrd are fresh
#
# There is not an explicit dependency of linuxboot on linux
# or initrd so that the configuration can pre-build all of edk2
# overlapping with the other builds.
ifneq "$(FAST)" "1"
linuxboot.intermediate: $(build)/$(BOARD)/bzImage
linuxboot.intermediate: $(build)/$(BOARD)/initrd.cpio.xz
endif
linuxboot.run: $(build)/$(BOARD)/linuxboot.rom
$(MAKE) -C $(build)/$(linuxboot_dir) \
BOARD:=$(linuxboot_board) \
KERNEL=$(build)/$(BOARD)/bzImage \
INITRD=$(build)/$(BOARD)/initrd.cpio.xz \
run