#
# Copyright (c) 2015-2019, 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						=

all:$(RESET_PNGS) $(INT_PNGS) $(XLAT_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
