#
# Copyright (c) 2015-2022, Arm Limited and Contributors. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
#
# This Makefile generates the image files used in the Trusted Firmware-A
# document from the dia file.
#
# The PNG files in the present directory have been generated using Dia version
# 0.97.2, which can be obtained from https://wiki.gnome.org/Apps/Dia/Download
#

# generate_image use the tool dia generate png from dia file
#    $(1) = layers
#    $(2) = image file name
#    $(3) = image file format
#    $(4) = addition opts
#    $(5) = dia source file
define generate_image
	dia --show-layers=$(1) --filter=$(3) --export=$(2) $(4) $(5)
endef

RESET_DIA							= reset_code_flow.dia
RESET_PNGS							=		\
		default_reset_code.png 				\
		reset_code_no_cpu_check.png			\
		reset_code_no_boot_type_check.png 	\
		reset_code_no_checks.png			\

# The $(RESET_DIA) file is organized in several layers.
# Each image is generated by combining and exporting the appropriate set of
# layers.
default_reset_code_layers			= "Frontground,Background,cpu_type_check,boot_type_check"
reset_code_no_cpu_check_layers		= "Frontground,Background,no_cpu_type_check,boot_type_check"
reset_code_no_boot_type_check_layers= "Frontground,Background,cpu_type_check,no_boot_type_check"
reset_code_no_checks_layers			= "Frontground,Background,no_cpu_type_check,no_boot_type_check"

default_reset_code_opts          	=
reset_code_no_cpu_check_opts     	=
reset_code_no_boot_type_check_opts	=
reset_code_no_checks_opts			=

INT_DIA								= int_handling.dia
INT_PNGS							=		\
		sec-int-handling.png				\
		non-sec-int-handling.png

# The $(INT_DIA) file is organized in several layers.
# Each image is generated by combining and exporting the appropriate set of
# layers.
non-sec-int-handling_layers			= "non_sec_int_bg,legend,non_sec_int_note,non_sec_int_handling"
sec-int-handling_layers				= "sec_int_bg,legend,sec_int_note,sec_int_handling"

non-sec-int-handling_opts			= --size=1692x
sec-int-handling_opts				= --size=1570x

XLAT_DIA 							= xlat_align.dia
XLAT_PNG 							= xlat_align.png

xlat_align_layers					= "bg,translations"
xlat_align_opts						=

RMM_DIA					= rmm_cold_boot_generic.dia
RMM_PNG					= rmm_cold_boot_generic.png

rmm_cold_boot_generic_layers		= "background"
rmm_cold_boot_generic_opts		=

RMM_EL3_MANIFEST_DIA			= rmm_el3_manifest_struct.dia
RMM_EL3_MANIFEST_PNG			= rmm_el3_manifest_struct.png

rmm_el3_manifest_struct_layers		= "Background"
rmm_el3_manifest_struct_opts		=

PSA_FWU_DIA				= PSA-FWU.dia
PSA_FWU_PNG				= PSA-FWU.png

FWU-update_struct_layers		= "background"
FWU-update_struct_opts			=

all:$(RESET_PNGS) $(INT_PNGS) $(XLAT_PNG) $(RMM_PNG) $(RMM_EL3_MANIFEST_PNG) $(PSA_FWU_PNG)

$(RESET_PNGS):$(RESET_DIA)
	$(call generate_image,$($(patsubst %.png,%_layers,$@)),$@,png,$($(patsubst %.png,%_opts,$@)),$<)

$(INT_PNGS):$(INT_DIA)
	$(call generate_image,$($(patsubst %.png,%_layers,$@)),$@,png,$($(patsubst %.png,%_opts,$@)),$<)

$(XLAT_PNG):$(XLAT_DIA)
	$(call generate_image,$($(patsubst %.png,%_layers,$@)),$(patsubst %.png,%.svg,$@),svg,$($(patsubst %.png,%_opts,$@)),$<)
	inkscape -z $(patsubst %.png,%.svg,$@) -e $@ -d 45

$(RMM_PNG):$(RMM_DIA)
	$(call generate_image,$($(patsubst %.png,%_layers,$@)),$@,png,$($(patsubst %.png,%_opts,$@)),$<)

$(RMM_EL3_MANIFEST_PNG):$(RMM_EL3_MANIFEST_DIA)
	$(call generate_image,$($(patsubst %.png,%_layers,$@)),$@,png,$($(patsubst %.png,%_opts,$@)),$<)

$(PSA_FWU_PNG):$(PSA_FWU_DIA)
	$(call generate_image,$($(patsubst %.png,%_layers,$@)),$@,png,$($(patsubst %.png,%_opts,$@)),$<)
