#Arch
CONFIG_TA_ARCH=32
ifneq ($(filter MT6853 MT6765 MT6769T MT8768T MT6833 MT6739 MT6877 s5e9925 s5e8825, $(TA_TARGET_SOC)), )
CONFIG_TA_ARCH=64
endif

include ../../build/teegris_config.mk
TARGET_TA_NAME    = 00000000-0000-0000-0000-564c544b5052
OUT_DIR           = $(CURRENT_PATH)/dist/obj

UNSIGNED_TA := $(OUT_DIR)/unsigned_TA
STRIPPED_TA := $(OUT_DIR)/stripped_TA
SIGNED_TA   := $(OUT_DIR)/$(TARGET_TA_NAME)

TRUSTLET_DIR = .
LDFLAGS += $(CONFIG_LDFLAGS_SW)
CFLAGS += $(CONFIG_CFLAGS_SW)

# PRODUCT_SHIPPING_API_LEVEL
ifeq ($(PRODUCT_SHIPPING_API_LEVEL), 28)
CFLAGS += -DVK_SHIPPING_API_LEVEL_P
endif
ifeq ($(PRODUCT_SHIPPING_API_LEVEL), 29)
CFLAGS += -DVK_SHIPPING_API_LEVEL_Q
endif
ifeq ($(PRODUCT_SHIPPING_API_LEVEL), 30)
CFLAGS += -DVK_SHIPPING_API_LEVEL_R
endif
ifeq ($(PRODUCT_SHIPPING_API_LEVEL), 31)
CFLAGS += -DVK_SHIPPING_API_LEVEL_S
endif
ifeq ($(PRODUCT_SHIPPING_API_LEVEL), 32)
CFLAGS += -DVK_SHIPPING_API_LEVEL_T
endif
ifeq ($(PRODUCT_SHIPPING_API_LEVEL), 33)
CFLAGS += -DVK_SHIPPING_API_LEVEL_U
endif

# PLATFORM_SDK_VERSION
ifeq ($(PLATFORM_SDK_VERSION), 30)
CFLAGS += -DVK_PLATFORM_SDK_VERSION_30
endif
ifeq ($(PLATFORM_SDK_VERSION), 31)
CFLAGS += -DVK_PLATFORM_SDK_VERSION_31
endif
ifeq ($(PLATFORM_SDK_VERSION), 32)
CFLAGS += -DVK_PLATFORM_SDK_VERSION_32
endif
ifeq ($(PLATFORM_SDK_VERSION), 33)
CFLAGS += -DVK_PLATFORM_SDK_VERSION_33
endif

# TARGET_BUILD_VARIANT
ifeq ($(TARGET_BUILD_VARIANT), eng)
CFLAGS += -DVK_TARGET_BUILD_VARIANT_ENG
endif

# TA_BUILD_FACTORY
ifeq ($(TA_BUILD_FACTORY), TRUE)
CFLAGS += -DVK_BUILD_FACTORY_BIN
endif

#PROCA
ifeq ($(VK_PROCA_ENABLE),TRUE)
CFLAGS += -DVK_PROCA_ENABLE
INCLUDE_DIRS += -I$(TZ_PROCA_HEADER_PATH)
LIB_DIRS += -L$(TZ_PROCA_LIB_PATH)
ifeq ($(CONFIG_TA_ARCH),32)
LIBS += -l:./armeabi-v7a/pa_tz_api.a
else
LIBS += -l:./arm64-v8a/pa_tz_api.a
endif
endif

# FEATURED_BY_MODEL
ifneq ($(filter d2xks d1xks, $(TARGET_PRODUCT)), )
CFLAGS += -DVK_AID_FORCE_RESET
endif

CFLAGS += \
	-DNO_SYS_TYPES_H \
	-DVK_SWD_TEEGRIS \
	-DVK_SWD_TEEGRIS_V3 \
	-DVK_RPMB_TRANSFER_MLT_BLK \
	-DVK_TEEGRIS_$(TEEGRIS_BUILD_MODEL) \
	-fvisibility=hidden \


ifneq ($(TA_TARGET_SOC), MT6739)
CFLAGS += -DUSE_VK_DRIVER
endif

# Set variable if teegris sdk version is specified as 4.0 or higher
ifeq ($(TEEGRIS_VERSION),4)
CFLAGS += -DVK_SWD_TEEGRIS_V4 -DNO_NEED_TO_MIGRATION01
else
ifeq ($(filter exynos9610 exynos9820 exynos7904, $(TEEGRIS_BUILD_MODEL)),)
CFLAGS += -DVK_SWD_TEEGRIS_V4 -DNO_NEED_TO_MIGRATION01
endif
endif

# TEST
ifneq ($(TARGET_BUILD_VARIANT), user)
ifeq ($(SEC_QUICKBUILD_BUILD_TYPE), PBS)
CFLAGS += -D__VK_TEST__
endif
endif

ifeq ($(VKBUILD_MODE), no_key)
CFLAGS += -D__NO_RPMB_KEY__ -D__DEBUG__
endif

LIB_DIRS += \
	-L$(CONFIG_SW_SYSROOT)/usr/lib

LIBS += -l:libscrypto.so

### Add MTK drv for RPMB
ifneq ($(filter MT6853 MT6765 MT6769T MT8768T MT6833 MT6877, $(TA_TARGET_SOC)), )
LIB_DIRS += \
	-L$(TRUSTLET_DIR)/libs/$(CONFIG_SW_TARGET)/$(TA_TARGET_SOC)
CFLAGS += -DVK_SWD_MTK_RPMB -D__TEEGRIS_TEE__
ifneq ($(filter MT6765, $(TA_TARGET_SOC)), )
LIBS += \
	-l:drrpmb_gp_api.lib
else
LIBS += \
	-l:drrpmb_gp_api.teegris.lib
endif
LIBS += \
	-l:msee_fwk_ta.lib \
	-lpthread
endif

INCLUDE_DIRS += \
	-I$(TRUSTLET_DIR)/inc \
	-I$(TRUSTLET_DIR)/inc/vk_client_worker \
	-I$(CONFIG_SW_SYSROOT)/usr/include

SRC += \
	$(wildcard $(TRUSTLET_DIR)/src/*.c) \
	$(wildcard $(TRUSTLET_DIR)/src/crypto/*.c) \
	$(wildcard $(TRUSTLET_DIR)/src/vk_client_worker/*.c)

OBJS := $(patsubst %.c,%.o,$(SRC))

# Prepare Includes
ifeq ($(TEEGRIS_TA_DIST_PATH),)
	TEEGRIS_TA_DIST_PATH := dist
endif

.PHONY:all
all : info_ta make_dist $(STRIPPED_TA) $(SIGNED_TA) copy_dist build_done

.PHONY: build_done
build_done: make_dist $(SIGNED_TA) copy_dist
	$(info Build Done.)

$(STRIPPED_TA): $(UNSIGNED_TA) make_dist
	@$(CONFIG_STRIP_SW) $(STRIP_FLAGS_SW) $(UNSIGNED_TA) -o $(STRIPPED_TA)

$(SIGNED_TA): $(STRIPPED_TA) make_dist $(test_TA_with_keys)
	@$(signing_command)

$(UNSIGNED_TA): $(OBJS)
	@$(CONFIG_CC_SW) $(CFLAGS) $(LDFLAGS) -o $(UNSIGNED_TA) $(OBJS) $(LIBS) $(INCLUDE_DIRS) $(LIB_DIRS)

%.o: %.c
	@echo Compiling: $@
	@$(CONFIG_CC_SW) -c -o $*.o $(CFLAGS) $(INCLUDE_DIRS) $<

.PHONY: make_dist
make_dist:
	@$(MKDIR) $(OUT_DIR)

.PHONY: copy_dist
copy_dist: make_dist $(SIGNED_TA)
	@echo Copy $(SIGNED_TA) $(TEEGRIS_TA_DIST_PATH)
	@$(CP) $(SIGNED_TA) $(TEEGRIS_TA_DIST_PATH)

.PHONY: info_ta
info_ta:
	$(info Building TA: $(TARGET_TA_NAME) ; $(CFLAGS) ; $(LDFLAGS))

.PHONY: clean
clean:
	@$(RM) $(OUT_DIR)
	@$(RM) $(DIST_DIR)
	@echo 'Clean Done.'
