CONFIG_TA_ARCH=32
ifneq ($(filter MT6853 MT6769T s5e9925 s5e8825 MT6877, $(TA_TARGET_SOC)), )
CONFIG_TA_ARCH=64
endif

ifeq ($(EM_TA_LOCAL), TRUE)
include ./teegris_config.mk
OUT_DIR           = ../../Bin/TA/Teegris/dist/obj
DIST_DIR          = ../../Bin/TA/Teegris/dist
TRUSTLET_DIR      = .
else
include ../../build/teegris_config.mk
OUT_DIR           = $(CURRENT_PATH)/dist/obj
TRUSTLET_DIR      = ./swd/Teegris
endif

TARGET_TA_NAME    = 00000000-0000-0000-0000-656e676d6f64
OS_TYPE           = android

UNSIGNED_TA := $(OUT_DIR)/unsigned_TA
STRIPPED_TA := $(OUT_DIR)/stripped_TA
SIGNED_TA   := $(OUT_DIR)/$(TARGET_TA_NAME)

CFLAGS += \
	-DEMAS \
	-DEM_SWD_TEEGRIS \
	-DEM_SWD

CFLAGS += \
	-Wall \
	-Wextra \
	-Wno-unused \
	-fstack-protector-all \
	-O2 \
	-D_FORTIFY_SOURCE=2 \
	-fpie

INCLUDE_DIRS += \
	-I$(TRUSTLET_DIR)/include \
	-I$(TRUSTLET_DIR)/../../common/include/ \
	-I$(TRUSTLET_DIR)/../ta_common/include/ \
	-I$(TRUSTLET_DIR)/../ta_common/include/openssl/ \
	-I$(CONFIG_SW_TOOLCHAIN_ROOT)/platforms/TEEGRIS-4.1/swd/arch-arm/usr/include/

LIB_DIRS += \
	-L$(TRUSTLET_DIR)/lib/

LIBS += -ltzsl \
	-lgcc \
	-lscrypto \
	-lteesl

### Add MTK drv for RPMB
ifneq ($(filter MT6853 MT6769T MT6877, $(TA_TARGET_SOC)), )
LIB_DIRS += \
	-L$(TRUSTLET_DIR)/libs/$(CONFIG_SW_TARGET)/$(TA_TARGET_SOC)
CFLAGS += -DUSE_MTK_RPMB -D__TEEGRIS_TEE__
LIBS += \
	-l:drrpmb_gp_api.teegris.lib \
	-l:msee_fwk_ta.lib \
	-lpthread
endif

SRC += \
	$(TRUSTLET_DIR)/src/em_ta_main.c \
	$(TRUSTLET_DIR)/src/em_memory_teegris.c \
	$(TRUSTLET_DIR)/src/em_crypto_teegris.c \
	$(TRUSTLET_DIR)/src/em_teegris_rpmb.c \
	$(TRUSTLET_DIR)/../ta_common/src/em_crypto.c \
	$(TRUSTLET_DIR)/../ta_common/src/em_ta_utils.c \
	$(TRUSTLET_DIR)/../../common/src/em_cmd_handler.c \
	$(TRUSTLET_DIR)/../../common/src/em_context.c \
	$(TRUSTLET_DIR)/../../common/src/em_client_manager.c \
	$(TRUSTLET_DIR)/../../common/src/em_esi_manager.c \
	$(TRUSTLET_DIR)/../../common/src/em_utils.c \
	$(TRUSTLET_DIR)/../../common/src/em_token_manager.c \
	$(TRUSTLET_DIR)/../../common/src/em_init_manager.c \
	$(TRUSTLET_DIR)/../../common/src/em_ess_manager.c \
	$(TRUSTLET_DIR)/../../common/src/em_wb_aes_ctr.c \
	$(TRUSTLET_DIR)/../../common/src/em_request.c \
	$(TRUSTLET_DIR)/../../common/src/em_ess_command.c \
	$(TRUSTLET_DIR)/../../common/src/em_extension_manager.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)
	@$(info $(signing_command))
	@$(signing_command)

$(UNSIGNED_TA): $(OBJS)
	@$(CONFIG_CC_SW) $(CFLAGS) $(CONFIG_LDFLAGS_SW) -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 [engmode] Building TA: $(TARGET_TA_NAME) ; $(CFLAGS))

.PHONY: clean
clean:
	@$(RM) $(OUT_DIR)
	@$(RM) $(DIST_DIR)
	@echo 'Clean Done.'
