#!/usr/bin/make -f

include /usr/share/dpkg/architecture.mk
include /usr/share/dpkg/buildtools.mk

export DEB_BUILD_MAINT_OPTIONS = hardening=+all

platforms := k3-am62x vexpress-qemu_armv8a

# k3 platform
k3-am62x_CFLAGS   = $(shell DEB_BUILD_MAINT_OPTIONS=hardening=+all,-relro dpkg-buildflags --get CFLAGS)
k3-am62x_CPPFLAGS = $(shell DEB_BUILD_MAINT_OPTIONS=hardening=+all,-relro dpkg-buildflags --get CPPFLAGS)
k3-am62x_CXXFLAGS = $(shell DEB_BUILD_MAINT_OPTIONS=hardening=+all,-relro dpkg-buildflags --get CXXFLAGS)
k3-am62x_LDFLAGS  = $(shell DEB_BUILD_MAINT_OPTIONS=hardening=+all,-relro dpkg-buildflags --get LDFLAGS)
k3-am62x_assigns := O=out/arm-plat-k3 CFG_ARM64_core=y CFG_USER_TA_TARGETS=ta_arm64

# qemu platform
vexpress-qemu_armv8a_CFLAGS   = $(shell DEB_BUILD_MAINT_OPTIONS=hardening=+all,-relro,-stackprotector,-format dpkg-buildflags --get CFLAGS)
vexpress-qemu_armv8a_CPPFLAGS = $(shell DEB_BUILD_MAINT_OPTIONS=hardening=+all,-relro,-stackprotector,-format dpkg-buildflags --get CPPFLAGS)
vexpress-qemu_armv8a_CXXFLAGS = $(shell DEB_BUILD_MAINT_OPTIONS=hardening=+all,-relro,-stackprotector,-format dpkg-buildflags --get CXXFLAGS)
vexpress-qemu_armv8a_LDFLAGS  = $(shell DEB_BUILD_MAINT_OPTIONS=hardening=+all,-relro,-stackprotector,-format dpkg-buildflags --get LDFLAGS)
vexpress-qemu_armv8a_subplatforms := vexpress-qemu_armv8a_non-virt vexpress-qemu_armv8a_virt
vexpress-qemu_armv8a_non-virt_assigns := O=out/arm-plat-vexpress             CFG_TEE_CORE_LOG_LEVEL=3 CFG_TEE_BENCHMARK=n CFG_ARM_GICV3=y CFG_ARM64_core=y CFG_VIRTUALIZATION=n CFG_USER_TA_TARGETS=ta_arm64
vexpress-qemu_armv8a_virt_assigns     := O=out/arm-plat-vexpress-virtualized CFG_TEE_CORE_LOG_LEVEL=3 CFG_TEE_BENCHMARK=n CFG_ARM_GICV3=y CFG_ARM64_core=y CFG_VIRTUALIZATION=y CFG_USER_TA_TARGETS=ta_arm64

define build_platform
	$(eval platform := $(1))
	$(eval debug := $(if $(2), $(2), 0))
	$(eval subplatforms := $(if $($(platform)_subplatforms), $($(platform)_subplatforms), $(platform)))
	# LDFLAGS from dpkg-buildflags are prefixed with -Wl, but optee_os
	# calls ld directly; also, -f flags may not be used without -shared but
	# optee_os is built as -pie
	$(foreach subplatform, $(subplatforms), \
		CROSS_COMPILE=aarch64-linux-gnu-  \
		CFLAGS='$($(platform)_CFLAGS)' CPPFLAGS='$($(platform)_CPPFLAGS)' \
		CXXFLAGS='$($(platform)_CXXFLAGS)' LDFLAGS='$(filter-out -f% -specs=/usr/share/dpkg/elf-package-metadata.specs,$($(platform)_LDFLAGS:-Wl,%=%))' \
		make PLATFORM=$(platform) $($(subplatform)_assigns) DEBUG=$(debug) V=1; \
	)
endef

%:
	dh $@

override_dh_auto_build: $(platforms)
$(platforms):
	$(call build_platform,$@)

override_dh_auto_clean:
	rm -rf $(CURDIR)/out
