#CONFIG_TA_ARCH:=32

include ../../build/teegris_config.mk
TARGET_TA_NAME    = 00000000-0000-0000-0000-6b6e78677564
OUT_DIR           = $(CURRENT_PATH)/dist/obj
OS_TYPE           = android
USE_SCRYPTO       = FALSE

UNSIGNED_TA := $(OUT_DIR)/unsigned_TA
STRIPPED_TA := $(OUT_DIR)/stripped_TA
SIGNED_TA   := $(OUT_DIR)/$(TARGET_TA_NAME)

TRUSTLET_DIR = .
CONFIG_LDFLAGS_SW = 

$(info Used TEEGRIS ver $(TEEGRIS_PLATFORM_VERSION_MAJOR))
ifneq ($(filter $(TEEGRIS_PLATFORM_VERSION_MAJOR), 3 4),)
    TEEGRIS_SDK_VER = $(TEEGRIS_PLATFORM_VERSION_MAJOR)
    CFLAGS += -DTEEGRIS_SDK_VER=$(TEEGRIS_PLATFORM_VERSION_MAJOR)
    ifneq ($(filter $(TEEGRIS_PLATFORM_VERSION_MAJOR), 4),)
        CONFIG_LDFLAGS_SW := -Wl,-z,relro,-z,now
    endif
    CONFIG_SIGN_TYPE = ss_teegris_ta_rp
    ifneq ($(filter $(TEEGRIS_BUILD_MODEL), exynos9820 exynos9610 exynos9630 exynos9830 exynos9810),)
        ifeq ($(CONFIG_MODEL_NAME),)
    CONFIG_MODEL_NAME = TEEGRIS_$(shell echo $(TEEGRIS_BUILD_MODEL) | tr [a-z] [A-Z])_SAMSUNG_TA
        endif
    endif
else 
    CFLAGS += -DTEEGRIS_SDK_VER=2
    CONFIG_SIGN_TYPE = ss_bf_ta
    CONFIG_MODEL_NAME = BF_SAMSUNG_TA
endif

#CONFIG_CFLAGS_SW += -ggdb -std=gnu99
CFLAGS += \
	-DVK_SWD_TEEGRIS \
	-DNO_SYS_TYPES_H

CFLAGS += \
	-Wall \
	-Wextra \
	-Wno-unused \
	-fstack-protector-all \
	-D_FORTIFY_SOURCE=2	\
	-O2 \
	-fpie

ifeq ($(TARGET_BUILD_VARIANT),eng)
CFLAGS += -D__DEBUG__
else
CFLAGS += -s
endif

ifeq ($(VKBUILD_MODE), no_key)
CFLAGS += -D__NO_RPMB_KEY__ -D__DEBUG__
endif

ifeq ($(KG_CHECK_HDM_SUPPORTED), yes)
CFLAGS += -DKG_CHECK_HDM_SUPPORTED
endif

ifeq ($(KG_ENG_MODE), yes)
CFLAGS += -DKG_ENG_MODE
endif

ifeq ($(TA_TARGET_SOC), $(filter MT6853 MT6769T MT8768T MT6833 MT6877 MT6765,$(TA_TARGET_SOC)))
CFLAGS += -DTEEGRIS_USE_MTK_RPMB_DRV -D__BLOWFISH_TEE__
endif

LIB_DIRS += \
	-L$(TRUSTLET_DIR)/libs 

LIBS += -ltzsl -lgcc

ifeq ($(TA_TARGET_SOC), $(filter MT6853 MT6769T,$(TA_TARGET_SOC)))
LINCLUDE_DIRS += -I$(CONFIG_SW_SYSROOT)/usr/include
LIBS += -l:libpthread.so

LIBS += $(TRUSTLET_DIR)/libs/drrpmb_gp_api.teegris.lib \
        $(TRUSTLET_DIR)/libs/msee_fwk_ta.lib
endif

ifeq ($(TA_TARGET_SOC), $(filter MT8768T,$(TA_TARGET_SOC)))
LINCLUDE_DIRS += -I$(CONFIG_SW_SYSROOT)/usr/include
LIBS += -l:libpthread.so

LIBS += $(TRUSTLET_DIR)/libs/MT8768T/drrpmb_gp_api.teegris.lib \
        $(TRUSTLET_DIR)/libs/MT8768T/msee_fwk_ta.lib
endif

ifeq ($(TA_TARGET_SOC), $(filter MT6833,$(TA_TARGET_SOC)))
LINCLUDE_DIRS += -I$(CONFIG_SW_SYSROOT)/usr/include
LIBS += -l:libpthread.so

LIBS += $(TRUSTLET_DIR)/libs/MT6833/drrpmb_gp_api.teegris.lib \
        $(TRUSTLET_DIR)/libs/MT6833/msee_fwk_ta.lib
endif

ifeq ($(TA_TARGET_SOC), $(filter MT6877,$(TA_TARGET_SOC)))
LINCLUDE_DIRS += -I$(CONFIG_SW_SYSROOT)/usr/include
LIBS += -l:libpthread.so

LIBS += $(TRUSTLET_DIR)/libs/MT6877/drrpmb_gp_api.teegris.lib \
        $(TRUSTLET_DIR)/libs/MT6877/msee_fwk_ta.lib
endif

ifeq ($(TA_TARGET_SOC), $(filter MT6765,$(TA_TARGET_SOC)))
LINCLUDE_DIRS += -I$(CONFIG_SW_SYSROOT)/usr/include
LIBS += -l:libpthread.so

LIBS += $(TRUSTLET_DIR)/libs/MT6765/drrpmb_gp_api.teegris.lib \
        $(TRUSTLET_DIR)/libs/MT6765/msee_fwk_ta.lib
endif

INCLUDE_DIRS += -I$(CONFIG_SW_SYSROOT)/usr/include
LIBS += -l:libscrypto.so

INCLUDE_DIRS += \
	-I$(TRUSTLET_DIR)/inc \
	-I$(TRUSTLET_DIR)/inc/scrypto 

#PROCA
ifeq ($(KG_CHECK_PROCA_SUPPORTED),TRUE)
CFLAGS += -DKG_CHECK_PROCA_SUPPORTED
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

SRC += \
    $(wildcard $(TRUSTLET_DIR)/src/*.c $(TRUSTLET_DIR)/src/*.cxx)

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) $(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 Building TA: $(TARGET_TA_NAME) ; $(CFLAGS))

.PHONY: clean
clean:
	@$(RM) $(OUT_DIR)
	@$(RM) $(DIST_DIR)
	@echo 'Clean Done.'

