## called by teegris_ta_build by "make tigerfp"

#Arch
ifneq ($(filter $(TEEGRIS_BUILD_MODEL), MT6853 MT6765 s5e8825),)
    CONFIG_TA_ARCH=64
else
    CONFIG_TA_ARCH=32
endif

include ../../build/teegris_config.mk

TA_HOME := $(PWD)
#BLOWFISH_SWD_PATH=${CONFIG_SW_TOOLCHAIN_ROOT}/platforms/TEEGRIS-4.1/swd
BLOWFISH_SWD_PATH=${PLATFORM_ROOT}/swd
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}/
endif

#BLOWFISH_SW_TOOLCHAIN_PATH=${CONFIG_SW_TOOLCHAIN_ROOT}/toolchains/arm-secureos-gnueabi-gcc_6_3-linux-x86
BLOWFISH_SW_TOOLCHAIN_PATH = ${CONFIG_SW_COMPILER_PATH}
BUILD_DIR = ./out/build
BLOWFISH_TRUSTLET_UUID = 00000000-0000-0000-0000-544947455246
OUTPUT_DIR = ${TEEGRIS_TA_DIST_PATH}

$(info  ++++ TA_HOME = ${TA_HOME} ++++)
$(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  ++++ CONFIG_TA_ARCH = ${CONFIG_TA_ARCH} ++++)

#BUILD_DIR := $(TA_HOME)/buildScripts/blowfish/build

COMMIT_SHA1=6c35427f71188c229d43d2990dda9179f7bb2d81

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)/include/mediatek \
    $(TA_HOME)/src \
    $(TA_HOME)/src/tzWrappers

LOCAL_SRC_FILES += \
	$(TA_HOME)/src/TigerTci.c  \
	$(TA_HOME)/src/TigerTypeObjectId.c  \
	$(TA_HOME)/src/TigerSession.c  \
	$(TA_HOME)/src/TigerMainTeegris.c  \
	$(TA_HOME)/src/TigerAttk.c  \
	$(TA_HOME)/src/TigerLogging.c  \
	$(TA_HOME)/src/TigerCore.c  \
	$(TA_HOME)/src/TigerSignMessage.c  \
	$(TA_HOME)/src/TigerMbedTlsExt.c  \
	$(TA_HOME)/src/TigerMbedTlsHooks.c  \
	$(TA_HOME)/src/TigerStorageUtils.c  \
	$(TA_HOME)/src/TigerPemUtils.c  \
	$(TA_HOME)/src/TigerKeyDataStore.c  \
	$(TA_HOME)/src/TigerCounterDataStore.c  \
	$(TA_HOME)/src/TigerSskds.c  \
	$(TA_HOME)/src/TigerTypeDynamicBuf.c  \
	$(TA_HOME)/src/TigerVersion.c  \
	$(TA_HOME)/src/TigerDeviceConfig.c  \
	$(TA_HOME)/src/TigerJson.c  \
	$(TA_HOME)/src/TigerFingerprintIdTable.c  \
	$(TA_HOME)/src/TigerUtils.c  \
	$(TA_HOME)/src/ta_logger.c  \
	$(TA_HOME)/src/ta_banner_print.c  \
	$(TA_HOME)/src/tzWrappers/TzwString.c  \
	$(TA_HOME)/src/tzWrappers/TzwRpmb.c  \
	$(TA_HOME)/src/tzWrappers/TzwMemory.c  \
	$(TA_HOME)/src/tzWrappers/TzwHash.c  \
	$(TA_HOME)/src/tzWrappers/TzwMisc.c  \
	$(TA_HOME)/src/tzWrappers/TzwStorage.c  \
	$(TA_HOME)/src/tzWrappers/TzwAuth.c  \
	$(TA_HOME)/src/tzWrappers/TzwSerialNumber.c  \
	$(TA_HOME)/src/tzWrappers/TzwTimer.c  \
	$(TA_HOME)/src/mbedtls/asn1parse.c  \
	$(TA_HOME)/src/mbedtls/asn1write.c  \
	$(TA_HOME)/src/mbedtls/base64.c  \
	$(TA_HOME)/src/mbedtls/bignum.c  \
	$(TA_HOME)/src/mbedtls/ecp.c  \
	$(TA_HOME)/src/mbedtls/ecp_curves.c  \
	$(TA_HOME)/src/mbedtls/error.c  \
	$(TA_HOME)/src/mbedtls/md.c  \
	$(TA_HOME)/src/mbedtls/md5.c  \
	$(TA_HOME)/src/mbedtls/md_wrap.c  \
	$(TA_HOME)/src/mbedtls/oid.c  \
	$(TA_HOME)/src/mbedtls/pem.c  \
	$(TA_HOME)/src/mbedtls/pk.c  \
	$(TA_HOME)/src/mbedtls/pkparse.c  \
	$(TA_HOME)/src/mbedtls/pk_wrap.c  \
	$(TA_HOME)/src/mbedtls/pkwrite.c  \
	$(TA_HOME)/src/mbedtls/platform.c  \
	$(TA_HOME)/src/mbedtls/rsa.c  \
	$(TA_HOME)/src/mbedtls/sha1.c  \
	$(TA_HOME)/src/mbedtls/sha256.c  \
	$(TA_HOME)/src/mbedtls/sha512.c  \

LOCAL_SHARED_LIBRARIES := \
    libmath  \
    libteesl \
    libtzsl  \
    libpthread

CFLAGS_COMMON = -Wall -Wextra -std=c99 -D__USER__=\"$(USER)\"
TIGER_CFLAGS := -DTIGER_TZ_MODEL_BLOWFISH -D__BLOWFISH_TEE__ -DTZ_MODEL_BLOWFISH -D__TA_LOG_TAG__=\"TIGER\"
#    drrpmb_gp_api_32.lib
#	msee_fwk_ta_32.lib 
#ifeq ($(CHIPSET_NAME),MT6853)
ifneq (,$(filter $(TEEGRIS_BUILD_MODEL), MT6765 MT6853))
TIGER_CFLAGS += -D__USE_MTK__
ARM_ARCH=64
LOCAL_STATIC_LIBRARIES := \
    libdrrpmb_gp_api.a \
    libmsee_fwk_ta.a
else ifneq (,$(filter $(TEEGRIS_BUILD_MODEL), s5e8825))
TIGER_CFLAGS += -U__USE_MTK__
ARM_ARCH=64
LOCAL_STATIC_LIBRARIES := \
    libdrrpmb_gp_api.a \
    libmsee_fwk_ta.a
else
TIGER_CFLAGS += -U__USE_MTK__
ARM_ARCH=32
LOCAL_STATIC_LIBRARIES := \
    libmsee_fwk_ta.a
endif
ifeq ($(ARM_ARCH),64)
LOCAL_C_INCLUDES += $(BLOWFISH_SWD_PATH)/arch-arm64/usr/include 
else
LOCAL_C_INCLUDES += $(BLOWFISH_SWD_PATH)/arch-arm/usr/include 
endif

TIGER_CFLAGS +=       \
	-D__TIGER_UUID__=\"$(BLOWFISH_TRUSTLET_UUID)\"  \
	-D__CHIPSET__=\"${TEEGRIS_BUILD_MODEL}\"   \
	-D__COMMIT_SHA1__=\"${COMMIT_SHA1}\"

TIGER_CFLAGS += -U__DEV_DEBUG__
TIGER_CFLAGS += -U__SSKDS_DEBUG__
TIGER_CFLAGS += -U__BYPASS_BIO_AUTH__

TIGER_CFLAGS += -DSVTS_CMD_ID_SUPPORT

ifeq ($(TEEGRIS_VERSION),4)
LOCAL_LDFLAGS += \
    -Wl,-z,relro,-z,now 
TIGER_CFLAGS += -D__AUTH_DRIVER_V4__
else
TIGER_CFLAGS += -U__AUTH_DRIVER_V4__
endif

ifeq ($(TARGET_BUILD_VARIANT), eng)
TIGER_CFLAGS +=       \
	-UTA_RELEASE      \
	-UTIGER_RELEASE
else
TIGER_CFLAGS +=       \
	-DTA_RELEASE      \
	-DTIGER_RELEASE
endif
ifeq ($(ARM_ARCH),64)
TZLD_CO_NAME := /lib64/libtzld.so
TIGER_CFLAGS += -D__ARM_ARCH_64__
LOCAL_LDFLAGS += -L$(BLOWFISH_SWD_PATH)/arch-arm64/usr/lib
PREFIX := $(BLOWFISH_SW_TOOLCHAIN_PATH)/bin/aarch64-secureos-gnueabi-
else
TZLD_CO_NAME := bin/libtzld.so
LOCAL_LDFLAGS += -L$(BLOWFISH_SWD_PATH)/arch-arm/usr/lib 
PREFIX := $(BLOWFISH_SW_TOOLCHAIN_PATH)/bin/arm-secureos-gnueabi-
endif

ifeq ($(TIGER_BUILD_TESTS),true)
    $(info TIGER_BUILD_TESTS:$(TIGER_BUILD_TESTS))
    LOCAL_C_INCLUDES += $(TA_HOME)/tests/include
    LOCAL_SRC_FILES += $(TA_HOME)/tests/src/TigerTests.c
    TIGER_CFLAGS += -DTIGER_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) \
    $(TIGER_CFLAGS) \
    -Wl,-I,$(TZLD_CO_NAME) \
    $(SHARED_LIBRARIES) \
    $(C_INCLUDES) \
    $(LOCAL_CFLAGS) \

MKDIR := -mkdir -p
RM := rm -rf

CC := $(PREFIX)gcc
STRIP := $(PREFIX)strip

#.PHONY: all
#all : make_out $(UNSIGNED_TA)
.PHONY: tigerfp
tigerfp : 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} ${OUTPUT_DIR}/tiger/${BUILD_MODE_PATH}/
	@$(MKDIR) ${OUTPUT_DIR}/tiger/${BUILD_MODE_PATH}/
	${CP} ${SIGNED_TA} ${OUTPUT_DIR}/tiger/${BUILD_MODE_PATH}/

.PHONY:$(SIGNED_TA)
$(SIGNED_TA): ${UNSIGNED_TA}
	@echo "Signing tigerfp"
	$(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 {} \;
