include config.mk
BSP_OUTPUT_DIR       := $(BSP_FLS_DIR)/output
TEMP_DIR             := $(BSP_OUTPUT_DIR)/temp
EBL_FLS              := $(BSP_FLS_DIR)/input/ebl.fls
PSI_RAM_FLS          := $(BSP_FLS_DIR)/input/psi_ram_signed.fls
PSI_FLASH_BL_FLS     := $(BSP_FLS_DIR)/input/psi_flash_signed_bl.fls
SLB_BL_FLS           := $(BSP_FLS_DIR)/input/slb_signed_bl.fls
VRL_FLS              := $(BSP_FLS_DIR)/input/vrl.fls
VRL_BIN              := $(TEMP_DIR)/vrl.bin

EBL_FLS_SIGN         := $(BSP_FLS_DIR)/input/ebl_signed.fls
PSI_FLASH_SIGN       := $(BSP_OUTPUT_DIR)/psi_flash_signed.fls
SLB_FLS_SIGN         := $(BSP_OUTPUT_DIR)/slb_signed.fls
FWU_BIN              := $(TEMP_DIR)/fwu_image.bin
FWU_TEMP_BIN         := $(TEMP_DIR)/fwu_image.temp
SECP_EXT             := *.fls_ID0_*_SecureBlock.bin
DATA_EXT             := *.fls_ID0_*_LoadMap*


.PHONY: all
all: sign_ebl sign_psislb sign_BSP sign_vrl
	@echo -e "$(ECHO_GREEN_COLOR)--- BSP Signing done ---$(ECHO_COLOR_NONE)"

SYS_INPUT_LIST := $(wildcard $(BSP_FLS_DIR)/input/system/*)
SYS_OUTPUT_LIST :=

FWU_FLS_LIST.$(1) := $(BSP_OUTPUT_DIR)/boot_signed.fls
FWU_FLS_LIST.$(1) += $(BSP_OUTPUT_DIR)/recovery_signed.fls
FWU_FLS_LIST.$(1) += $(BSP_OUTPUT_DIR)/mobilevisor_signed.fls
FWU_FLS_LIST.$(1) += $(BSP_OUTPUT_DIR)/mvconfig_smp_signed.fls
FWU_FLS_LIST.$(1) += $(BSP_OUTPUT_DIR)/psi_flash_signed.fls
FWU_FLS_LIST.$(1) += $(BSP_OUTPUT_DIR)/secvm_signed.fls
ifeq ($(wildcard $(BSP_OUTPUT_DIR)/splash_img_signed.fls),)
else
FWU_FLS_LIST.$(1) += $(BSP_OUTPUT_DIR)/splash_img_signed.fls
endif
ifeq ($(wildcard $(BSP_OUTPUT_DIR)/modem_signed.fls),)
else
FWU_FLS_LIST.$(1) += $(BSP_OUTPUT_DIR)/modem_signed.fls.fls
endif
FWU_FLS_LIST.$(1) += $(BSP_OUTPUT_DIR)/slb_signed.fls
FWU_FLS_LIST.$(1) += $(BSP_OUTPUT_DIR)/ucode_patch_signed.fls

define DO_SYS_SIGN
$(BSP_FLS_DIR)/output/$(notdir $(1)): $(1)
	@echo -e "$(ECHO_YELLOW_COLOR)"
	$(FLSTOOL) --sign $$< --script $(SYSTEM_SIGN_SCRIPT) -o $$(BSP_OUTPUT_DIR)/$$(basename $$(@F))_signed.fls --replace --psi $(PSI_RAM_FLS) --ebl-sec $(EBL_FLS_SIGN)
	@echo -e "$(ECHO_COLOR_NONE)"

SYS_OUTPUT_LIST += $(BSP_FLS_DIR)/output/$(notdir $(1))
endef

$(foreach f,$(SYS_INPUT_LIST),$(eval $(call DO_SYS_SIGN,$(f))))

sign_BSP: $(SYS_OUTPUT_LIST)
	@echo -e "$(ECHO_GREEN_COLOR)--- Sign System images Done ---$(ECHO_COLOR_NONE)"

sign_vrl:sign_BSP
	@echo -e "$(ECHO_GREEN_COLOR)--- Sign VRL start ---$(ECHO_COLOR_NONE)"
	$(foreach a, $(FWU_FLS_LIST.$(1)), $(FLSTOOL) -x $(a) -o $(TEMP_DIR)/$(basename $(notdir $(a)));)
	$(foreach a, $(FWU_FLS_LIST.$(1)), $(FWPGEN) --input $(FWU_BIN) --output $(FWU_TEMP_BIN) --secpack $(TEMP_DIR)/$(basename $(notdir $(a)))/$(SECP_EXT) --data $(TEMP_DIR)/$(basename $(notdir $(a)))/$(DATA_EXT); cp $(FWU_TEMP_BIN) $(FWU_BIN);)
	$(FLSTOOL)  -x $(VRL_FLS) -o $(TEMP_DIR)/$(basename $(notdir $(VRL_FLS)))
	$(FWPGEN) -x $(FWU_BIN) -v $(VRL_BIN)
	$(FWPGEN) --sign --input $(VRL_BIN) --output $(TEMP_DIR)/vrl_signed.bin --tool $(FLSTOOL) --script $(BINARY_SIGN_SCRIPT)
	cp -f $(TEMP_DIR)/vrl_signed.bin $(TEMP_DIR)/$(basename $(notdir $(VRL_FLS)))/$(DATA_EXT)
	cd $(TEMP_DIR) && $(FLSTOOL) --to-fls2 $(basename $(notdir $(VRL_FLS)))/ --o vrl_no_inject.fls --replace
	$(FLSTOOL) --sign $(TEMP_DIR)/vrl_no_inject.fls --script $(VRL_SIGN_SCRIPT) --psi $(PSI_RAM_FLS) --ebl-sec $(EBL_FLS_SIGN) -o $(BSP_OUTPUT_DIR)/vrl_signed.fls --replace
	rm -rf $(TEMP_DIR)
	@echo -e "$(ECHO_GREEN_COLOR)--- Sign VRL Done ---$(ECHO_COLOR_NONE)"

sign_ebl:
	@echo -e "$(ECHO_GREEN_COLOR)--- Sign ebl start ---$(ECHO_COLOR_NONE)"
	@echo -e "$(ECHO_YELLOW_COLOR)"
	$(FLSTOOL) --sign $(EBL_FLS) --script $(FLASHLOADER_SCRIPT_BSP) -o $(EBL_FLS_SIGN) --replace
	@echo ""
	@echo -e "$(ECHO_GREEN_COLOR)--- Sign ebl done ---$(ECHO_COLOR_NONE)"
sign_psislb:sign_ebl
	@echo -e "$(ECHO_GREEN_COLOR)--- Sign PSI SLB start ---$(ECHO_COLOR_NONE)"
	$(FLSTOOL) --sign $(PSI_FLASH_BL_FLS) --script $(BOOTLOADER_SCRIPT_BSP) -o $(PSI_FLASH_SIGN) --replace  --psi $(PSI_RAM_FLS) --ebl-sec $(EBL_FLS_SIGN)
	$(FLSTOOL) --sign $(SLB_BL_FLS) --script $(BOOTLOADER_SCRIPT_BSP) -o $(SLB_FLS_SIGN) --replace  --psi $(PSI_RAM_FLS) --ebl-sec $(EBL_FLS_SIGN)
	@echo -e "$(ECHO_COLOR_NONE)"
	@echo -e "$(ECHO_GREEN_COLOR)--- Sign PSI SLB done ---$(ECHO_COLOR_NONE)"

.PHONY: clean
clean:
	rm -rf $(BSP_FLS_DIR)/output
	rm -f $(BSP_FLS_DIR)/input/*_signed*.*
