##
## Copyright 2015 Google Inc.
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; version 2 of the License.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
##

$(module_obj)/%.efi: $(module_obj)/%.elf
	@printf "    UEFIAPP    $(subst $(obj)/,,$@)\n"
	$(Q)$(OBJCOPY) --target=efi-app-x86_64 --strip-debug $< $@

.PRECIOUS: $(module_obj)/%.efi


$(module_obj)/uefi.ro.bin.o: $$(image_obj)/uefi.ro.bin $$(BIN_TO_O)
	@printf "    BIN_TO_O   $(subst $(obj)/,,$@)\n"
	$(Q)$(BIN_TO_O) $@ ro_image $(filter %.bin,$+) \

$(module_obj)/uefi_dev.ro.bin.o: $$(image_obj)/uefi_dev.ro.bin $$(BIN_TO_O)
	@printf "    BIN_TO_O   $(subst $(obj)/,,$@)\n"
	$(Q)$(BIN_TO_O) $@ ro_image $(filter %.bin,$+) \

module-y += uefi
mod-uefi-title = "UEFI chain loader"
mod-uefi-y += uefi.c fwdb.c module.c
mod-uefi-libs += $(COMMON_OBJECTS) $(VBOOT_OBJECTS) $(uefi_handoff-objs)
mod-uefi-libs += $(module_obj)/uefi.ro.bin.o
mod-uefi-ldopts += -Wl,-znocombreloc -Wl,-Bsymbolic -pie
mod-uefi-ldopts += -Wl,-Bsymbolic-functions -Wl,--undefined=_entry
mod-uefi-ldscript := $(cursrcdir)/uefi.ldscript

module-y += uefi_dev
mod-uefi_dev-title = $(mod-uefi-title)
mod-uefi_dev-y = $(mod-uefi-y)
mod-uefi_dev-libs += $(COMMON_OBJECTS) $(VBOOT_OBJECTS) $(uefi_handoff-objs)
mod-uefi_dev-libs += $(module_obj)/uefi_dev.ro.bin.o
mod-uefi_dev-ldopts = $(mod-uefi-ldopts)
mod-uefi_dev-ldscript = $(mod-uefi-ldscript)

module-y += uefi_rw
mod-uefi_rw-title = "UEFI chain loader RW"
mod-uefi_rw-y += uefi_rw.c
mod-uefi_rw-libs += $(COMMON_OBJECTS) $(VBOOT_OBJECTS)
mod-uefi_rw-libs += $(uefi_module_handoff-objs)
mod-uefi_rw-ldopts = $(mod-uefi-ldopts)
mod-uefi_rw-ldscript = $(mod-uefi-ldscript)

module-y += uefi_dev_rw
mod-uefi_dev_rw-title = $(mod-uefi_rw-title)
mod-uefi_dev_rw-y = $(mod-uefi_rw-y)
mod-uefi_dev_rw-libs += $(mod-uefi_rw-libs)
mod-uefi_dev_rw-ldopts = $(mod-uefi_rw-ldopts)
mod-uefi_dev_rw-ldscript = $(mod-uefi_rw-ldscript)

module-y += uefi_net
mod-uefi_net-title = "UEFI network boot"
mod-uefi_net-y += netboot.c fwdb.c
mod-uefi_net-libs += $(COMMON_OBJECTS) $(NET_OBJECTS) $(uefi_handoff-objs)
mod-uefi_net-ldopts += $(mod-uefi-ldopts)
mod-uefi_net-ldscript = $(mod-uefi-ldscript)
