# Copyright 2018 The Fuchsia Authors
#
# Use of this source code is governed by a MIT-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/MIT

ifeq ($(PLATFORM_VID),)
$(error PLATFORM_VID not defined)
endif
ifeq ($(PLATFORM_PID),)
$(error PLATFORM_PID not defined)
endif
ifeq ($(PLATFORM_BOARD_NAME),)
$(error PLATFORM_BOARD_NAME not defined)
endif
ifeq ($(PLATFORM_MDI_SRCS),)
$(error PLATFORM_MDI_SRCS not defined)
endif

BOARD_MDI := $(BUILDDIR)/$(PLATFORM_BOARD_NAME)-mdi.bin
BOARD_PLATFORM_ID := --vid $(PLATFORM_VID) --pid $(PLATFORM_PID) --board $(PLATFORM_BOARD_NAME)
BOARD_BOOTDATA := $(BUILDDIR)/$(PLATFORM_BOARD_NAME)-bootdata.bin
BOARD_KERNEL_BOOTDATA := $(BUILDDIR)/$(PLATFORM_BOARD_NAME)-kernel-bootdata.bin

$(BOARD_MDI): PLATFORM_MDI_SRCS:=$(PLATFORM_MDI_SRCS)
$(BOARD_BOOTDATA): BOARD_MDI:=$(BOARD_MDI)
$(BOARD_BOOTDATA): BOARD_BOOTDATA:=$(BOARD_BOOTDATA)
$(BOARD_BOOTDATA): BOARD_PLATFORM_ID:=$(BOARD_PLATFORM_ID)
$(BOARD_KERNEL_BOOTDATA): BOARD_MDI:=$(BOARD_MDI)
$(BOARD_KERNEL_BOOTDATA): BOARD_BOOTDATA:=$(BOARD_BOOTDATA)
$(BOARD_KERNEL_BOOTDATA): BOARD_PLATFORM_ID:=$(BOARD_PLATFORM_ID)

# rule for building MDI binary blob
$(BOARD_MDI): $(MDIGEN) $(PLATFORM_MDI_SRCS) $(MDI_INCLUDES)
	$(call BUILDECHO,generating $@)
	@$(MKDIR)
	$(NOECHO)$(MDIGEN) -o $@ $(PLATFORM_MDI_SRCS)

GENERATED += $(BOARD_MDI)
EXTRA_BUILDDEPS += $(BOARD_MDI)

# full bootdata for standalone zircon build
$(BOARD_BOOTDATA): $(MKBOOTFS) $(USER_BOOTDATA) $(BOARD_MDI)
	$(call BUILDECHO,generating $@)
	@$(MKDIR)
	$(NOECHO)$(MKBOOTFS) -o $@ $(BOARD_PLATFORM_ID) $(USER_BOOTDATA) $(BOARD_MDI)

# kernel bootdata for fuchsia build
$(BOARD_KERNEL_BOOTDATA): $(MKBOOTFS) $(BOARD_MDI)
	$(call BUILDECHO,generating $@)
	@$(MKDIR)
	$(NOECHO)$(MKBOOTFS) -o $@ $(BOARD_PLATFORM_ID) $(BOARD_MDI)

kernel-only: $(BOARD_KERNEL_BOOTDATA)
kernel: $(KERNEL_BOOTDATA)

GENERATED += $(BOARD_BOOTDATA) $(BOARD_KERNEL_BOOTDATA)
EXTRA_BUILDDEPS += $(BOARD_BOOTDATA) $(BOARD_KERNEL_BOOTDATA)

# clear variables passed in
PLATFORM_VID :=
PLATFORM_PID :=
PLATFORM_BOARD_NAME :=
PLATFORM_MDI_SRCS :=

# clear variables we set here
BOARD_MDI :=
BOARD_BOOTDATA :=
BOARD_KERNEL_BOOTDATA :=
BOARD_PLATFORM_ID :=
