#
# Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
#
# This Makefile generates the image files used in the ARM Trusted Firmware
# 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
