## called by teegris_ta_build by "make ifbio"
#Arch
ifneq ($(filter $(TEEGRIS_BUILD_MODEL), MT6853 MT6765 s5e8825),)
    CONFIG_TA_ARCH=64
else
    CONFIG_TA_ARCH=32
endif

include ../../build/teegris_config.mk

ifeq ($(CONFIG_TA_ARCH), 64)
BLOWFISH_EXT_SWD_LIB_PATH = ./scripts/platforms/${PLATFORM_NAME}/swd/arch-arm64/usr/lib/
else
BLOWFISH_EXT_SWD_LIB_PATH = ./scripts/platforms/${PLATFORM_NAME}/swd/arch-arm/usr/lib/
endif

ifneq ($(filter $(TEEGRIS_BUILD_MODEL), MT6853 MT6765),)
	BLOWFISH_EXT_SWD_LIB_PATH = ./scripts/platforms/${PLATFORM_NAME}/swd/arch-arm64/usr/lib/${TEEGRIS_BUILD_MODEL}/
	IFAA_KM_VER = v1.2
endif

ifneq ($(filter $(TEEGRIS_BUILD_MODEL), MT6853 MT6765),)
VENDOR_NAME = MTK
else
VENDOR_NAME = EXYNOS
endif

ifeq ($(TEEGRIS_BUILD_MODEL),exynos9630)
IFAA_CHIPSET_NAME = EXYNOS9630_4.1
IFAA_KM_VER = v1.2
else ifeq ($(TEEGRIS_BUILD_MODEL),exynos3830)
IFAA_CHIPSET_NAME = EXYNOS3830_4.1
IFAA_KM_VER = v1.2
else ifeq ($(TEEGRIS_BUILD_MODEL),s5e8825)
IFAA_CHIPSET_NAME = ${TEEGRIS_BUILD_MODEL}
IFAA_KM_VER = v1.3
else
IFAA_CHIPSET_NAME = ${TEEGRIS_BUILD_MODEL}
IFAA_KM_VER ?= v1.1
endif

# IFAA_TEST_MODE := enable
IFBIO_TA_VERSION_NAME = v2

BLOWFISH_SWD_PATH=${PLATFORM_ROOT}/swd
BLOWFISH_SW_TOOLCHAIN_PATH = ${CONFIG_SW_COMPILER_PATH}
BLOWFISH_TRUSTLET_UUID = 00000000-0000-0000-0000-303049464141
TA_HOME := $(PWD)
BUILD_DIR = ./out/build
OUTPUT_DIR = ${TEEGRIS_TA_DIST_PATH}

$(info  ++++ TA_HOME = ${TA_HOME} ++++)
$(info  ++++ CONFIG_TA_ARCH = ${CONFIG_TA_ARCH} ++++)
$(info  ++++ CONFIG_SW_TOOLCHAIN_ROOT = ${CONFIG_SW_TOOLCHAIN_ROOT} ++++)
$(info  ++++ BLOWFISH_EXT_SWD_LIB_PATH = ${BLOWFISH_EXT_SWD_LIB_PATH} ++++)
$(info  ++++ BLOWFISH_SWD_PATH = ${BLOWFISH_SWD_PATH} ++++)
$(info  ++++ BLOWFISH_SW_TOOLCHAIN_PATH = ${BLOWFISH_SW_TOOLCHAIN_PATH} ++++)
$(info  ++++ OUTPUT_DIR = ${OUTPUT_DIR} ++++)
$(info  ++++ IFAA_CHIPSET_NAME = ${IFAA_CHIPSET_NAME} ++++)
$(info  ++++ IFAA_KM_VER = ${IFAA_KM_VER} ++++)
$(info  ++++ PLATFORM_NAME = ${PLATFORM_NAME} ++++)
$(info  ++++ TEEGRIS_BUILD_MODEL = ${TEEGRIS_BUILD_MODEL} ++++)

#BUILD_DIR := $(TA_HOME)/buildScripts/blowfish/build

COMMIT_SHA1=db3a7bdb95ddb1a8c2ec70a8c86938cd2f96f638

ifeq ($(TARGET_BUILD_VARIANT), eng)
	BUILD_MODE_PATH = debug
else
	BUILD_MODE_PATH = release
endif

UNSIGNED_TA := $(BUILD_DIR)/unsigned_$(BLOWFISH_TRUSTLET_UUID)
SIGNED_TA := $(BUILD_DIR)/$(BLOWFISH_TRUSTLET_UUID)

LOCAL_C_INCLUDES := \
    $(BLOWFISH_SW_TOOLCHAIN_PATH)/include \
    $(TA_HOME)/include \
    $(TA_HOME)/src \

LOCAL_SRC_FILES += \
	$(TA_HOME)/src/ifaa_teegris_main.c              \
	$(TA_HOME)/src/gp_oem.c                         \
	$(TA_HOME)/src/ifaa_device_config.c             \
	$(TA_HOME)/src/ifaa_fingerprint_id_table.c      \
	$(TA_HOME)/src/ifaa_mem_utils.c                 \
	$(TA_HOME)/src/ifaa_ta_biz.c                    \
	$(TA_HOME)/src/ifaa_ta_common.c                 \
	$(TA_HOME)/src/ifaa_ta_impl.c                   \
	$(TA_HOME)/src/ifaa_ta_vendor.c                 \
	$(TA_HOME)/src/ifaa_tlv_parser.c                \
	$(TA_HOME)/src/ta_banner_print.c                \
	$(TA_HOME)/src/ta_logger.c                      \
	$(TA_HOME)/src/tzWrappers/TzwAuth.c             \
	$(TA_HOME)/src/tzWrappers/TzwMemory.c           \
	$(TA_HOME)/src/tzWrappers/TzwSerialNumber.c     \
	$(TA_HOME)/src/tzWrappers/TzwString.c           \
	$(TA_HOME)/src/tzWrappers/TzwStorage.c          \
	$(TA_HOME)/src/tzWrappers/TzwTimer.c            \

LOCAL_SHARED_LIBRARIES := \
    libmath  \
    libteesl \
    libtzsl \
    libpthread

IFAA_KM_VER ?= v1.1
LIB_IFAA_KM:=libifaakm_$(IFAA_KM_VER)_release

LOCAL_STATIC_LIBRARIES := \
	$(LIB_IFAA_KM).a

ifeq ($(VENDOR_NAME),MTK)
LOCAL_STATIC_LIBRARIES += \
	drrpmb_gp_api.lib \
	msee_fwk_ta.lib
endif

ifeq ($(CONFIG_TA_ARCH),64)
LOCAL_LDFLAGS += -L$(BLOWFISH_SWD_PATH)/arch-arm64/usr/lib 
LOCAL_C_INCLUDES += $(BLOWFISH_SWD_PATH)/arch-arm64/usr/include
else
LOCAL_LDFLAGS += -L$(BLOWFISH_SWD_PATH)/arch-arm/usr/lib 
LOCAL_C_INCLUDES += $(BLOWFISH_SWD_PATH)/arch-arm/usr/include 
endif

CFLAGS_COMMON = -std=c99 -Wall -Wextra
IFBIO_CFLAGS := -D__BLOWFISH_TEE__ -DTZ_MODEL_BLOWFISH -D__TA_LOG_TAG__=\"IFBIO\" -D__USER__=\"$(USER)\"

IFBIO_CFLAGS +=       \
	-D__IFBIO_UUID__=\"$(BLOWFISH_TRUSTLET_UUID)\" \
	-D__CHIPSET__=\"${IFAA_CHIPSET_NAME}\"       \
	-D__COMMIT_SHA1__=\"${COMMIT_SHA1}\"

IFBIO_CFLAGS += -U__DEV_DEBUG__

ifeq ($(TEEGRIS_VERSION), 4)
LOCAL_LDFLAGS += \
    -Wl,-z,relro,-z,now
IFBIO_CFLAGS += -D__AUTH_DRIVER_V4__
else
IFBIO_CFLAGS += -U__AUTH_DRIVER_V4__
endif

ifeq ($(TARGET_BUILD_VARIANT), eng)
IFAA_TEST_MODE ?= enable
IFBIO_CFLAGS +=       \
	-UTA_RELEASE      \
	-UIFBIO_RELEASE 
else
IFBIO_CFLAGS +=       \
	-DTA_RELEASE      \
	-DIFBIO_RELEASE 
endif

ifeq ($(IFAA_TEST_MODE), enable)
IFBIO_CFLAGS += -D__IFAA_TEST_MODE
else
IFBIO_CFLAGS += -U__IFAA_TEST_MODE
endif


IFBIO_CFLAGS +=       \
	-Iinc             \
	-Isrc/tzWrappers  \

ifdef IFBIO_TA_VERSION_NAME
IFBIO_CFLAGS += -D__IFBIO_TA_VERSION_NAME__=\"$(IFBIO_TA_VERSION_NAME)\"
else
IFBIO_CFLAGS += -D__IFBIO_TA_VERSION_NAME__=\"v1\"
endif

ifeq ($(CONFIG_TA_ARCH),64)
	TZLD_CO_NAME := /lib64/libtzld.so
else
	TZLD_CO_NAME := bin/libtzld.so
endif

ifeq ($(IFBIO_BUILD_TESTS),true)
    $(info IFBIO_BUILD_TESTS:$(IFBIO_BUILD_TESTS))
    IFBIO_CFLAGS += -DIFBIO_BUILD_TESTS
endif


LOCAL_OBJ_FILES = $(patsubst %.c, %.o, $(LOCAL_SRC_FILES))

SHARED_LIBRARIES := $(subst lib, -l, $(LOCAL_SHARED_LIBRARIES))

STATIC_LIBRARIES += $(addprefix $(BLOWFISH_EXT_SWD_LIB_PATH), $(LOCAL_STATIC_LIBRARIES))

C_INCLUDES := $(LOCAL_C_INCLUDES:%=-I%)

CFLAGS_TA := \
    $(CFLAGS_COMMON) \
    $(IFBIO_CFLAGS) \
    -Wl,-I,$(TZLD_CO_NAME) \
    $(SHARED_LIBRARIES) \
    $(C_INCLUDES) \
    $(LOCAL_CFLAGS)

MKDIR := -mkdir -p
RM := rm -rf


CC := $(CONFIG_CC_SW)
STRIP := $(CONFIG_STRIP_SW)

ifdef IFBIO_TA_VERSION_NAME
SIGNED_TA_OUTPUT := ${OUTPUT_DIR}/ifaa/${IFBIO_TA_VERSION_NAME}/${BUILD_MODE_PATH}/
else
SIGNED_TA_OUTPUT := ${OUTPUT_DIR}/ifaa/${BUILD_MODE_PATH}/
endif

#.PHONY: all
#all : make_out $(UNSIGNED_TA)
.PHONY: ifbio
ifbio : make_out $(SIGNED_TA) copy_dist

%.o: %.c
	@echo $^
	$(CC) $(CFLAGS_TA) -c $< -o $@

.PHONY: copy_dist
copy_dist : ${SIGNED_TA}
	@echo Copy ${SIGNED_TA} ${SIGNED_TA_OUTPUT}
	@$(MKDIR) ${SIGNED_TA_OUTPUT}
	${CP} ${SIGNED_TA} ${SIGNED_TA_OUTPUT}

.PHONY:$(SIGNED_TA)
$(SIGNED_TA): ${UNSIGNED_TA}
	@echo "Signing ifbio"
	$(signing_command)

.PHONY: $(UNSIGNED_TA)
$(UNSIGNED_TA): $(LOCAL_OBJ_FILES)
	$(CC) $(CFLAGS_TA) $(LOCAL_OBJ_FILES) $(LOCAL_LDFLAGS) $(STATIC_LIBRARIES) -o $@.elf
	$(STRIP) -s $@.elf -o $@

.PHONY: make_out
make_out:
	@$(MKDIR) $(BUILD_DIR)

.PHONY: clean
clean:
	@$(RM) $(BUILD_DIR)
	find . -name "*.o" -exec rm -rf {} \;
