$(warning *****************************)
$(warning TZ_PROVIDER : $(TZ_PROVIDER))
$(warning TZ_CHIPSET : $(TZ_CHIPSET))
$(warning PLATFORM_VER : $(PLATFORM_VER))
$(warning USE_SCRYPTO : $(USE_SCRYPTO))
$(warning SCRYPTO_VER : $(SCRYPTO_VER))
$(warning SUPPORT_GUARDIAN_M : $(SUPPORT_GUARDIAN_M))
$(warning USE_QUICKBUILD_RBS : $(USE_QUICKBUILD_RBS))
$(warning SUPPORT_NEW_TA_BUILD : $(SUPPORT_NEW_TA_BUILD))
$(warning *****************************)

TARGET_TA_NAME = 00000000-0000-0000-0000-0000534b504d

ifneq ($(USE_QUICKBUILD_RBS),True)
include ./Locals/Code/config.mk
OBJ_DIR := ./dist/$(MODE)/obj
DIST_DIR := ./dist/$(MODE)
TA_DIR := ./Locals/Code
else
ifneq ($(SKPM_TA_ARCH),64)
CONFIG_TA_ARCH := 32
endif
include ../../build/teegris_config.mk
OBJ_DIR := ./dist/obj
DIST_DIR := ./dist
TA_DIR := .
endif

#CONFIG_CFLAGS_SW += -DDEBUG_LOW

CONFIG_CFLAGS_SW += -ggdb -std=gnu99 -fstack-protector -fstack-protector-all

CONFIG_CFLAGS_SW += \
	-DSWD \
	-DBLOWFISH \
	-DUSE_BLOWFISH \
	-DUSE_TEEGRIS \
    -DUSE_SCRYPTO

CONFIG_CFLAGS_SW += -Wno-error -lscrypto
ifeq ($(TZ_PROVIDER),teegris_v4)
CONFIG_CFLAGS_SW += -DUSE_TEEGRIS_V4
CONFIG_LDFLAGS_SW += -Wl,-z,relro,-z,now
endif

UPPER_TZ_CHIPSET := $(shell echo $(TZ_CHIPSET) | tr [a-z] [A-Z])

CONFIG_CFLAGS_SW += \
    -D$(UPPER_TZ_CHIPSET)

CONFIG_CFLAGS_SW += \
    -DTZ_CHIPSET=\"$(TZ_CHIPSET)\"

CONFIG_CFLAGS_SW += -s

ifeq ($(PLATFORM_VER),T)
CONFIG_CFLAGS_SW += -DTIZEN
endif

ifeq ($(SUPPORT_GUARDIAN_M),True)
$(warning ########### SUPPORT GUARDIAN M ########### )
CONFIG_CFLAGS_SW += -DSUPPORT_GUARDIAN_M

INCLUDE_DIRS += \
    -I$(TA_DIR)/include/guardianM
endif

#-------------------------------------------------------------------------------
# CRYPTO
#-------------------------------------------------------------------------------
INCLUDE_DIRS += \
    -I$(TA_DIR)/include/crypto \
    -I$(TA_DIR)/include/crypto/scrypto \
    -I$(CONFIG_SW_SYSROOT)/usr/include \
    -I$(TA_DIR)/src/common

SRC_TA += \
    $(TA_DIR)/src/common/crypto/platform/blowfish.c \
    $(TA_DIR)/src/common/crypto/crypto_module.c \
    $(TA_DIR)/src/common/crypto/openssl/aes/aes_ccm.c \
    $(TA_DIR)/src/common/crypto/openssl/ec/ec_print.c

#-------------------------------------------------------------------------------
# SWBC
#-------------------------------------------------------------------------------
INCLUDE_DIRS += \
    -I$(TA_DIR)/include/swbc

SRC_TA += \
    $(TA_DIR)/src/common/swbc/aes128-swbc-layer1-cbc.c \
    $(TA_DIR)/src/common/swbc/swbc-aes.c \
    $(TA_DIR)/src/common/swbc/swbc-utils.c

#-------------------------------------------------------------------------------
# SKPM
#-------------------------------------------------------------------------------
INCLUDE_DIRS += \
    -I$(TA_DIR)/include \
    -I$(TA_DIR)/include/skpm

SRC_TA += \
    $(TA_DIR)/src/tlSkpm.c \
    $(TA_DIR)/src/common/skpm/debug.c \
    $(TA_DIR)/src/common/skpm/skpm.c \
    $(TA_DIR)/src/common/skpm/skpm_tls.c \
    $(TA_DIR)/src/common/skpm/skpm_util.c \
    $(TA_DIR)/src/common/skpm/skpm_test.c \
    $(TA_DIR)/src/common/skpm/skpm_crypto_util.c \
    $(TA_DIR)/src/common/skpm/skpm_cmd_handler.c \
    $(TA_DIR)/src/common/skpm/skpm_service_key.c

#-------------------------------------------------------------------------------
# Add library
#-------------------------------------------------------------------------------
LIBS :=

ifeq ($(SUPPORT_GUARDIAN_M),True)
LIBS += $(GUARDIANM_LIB)
endif

#-------------------------------------------------------------------------------
TA := $(OBJ_DIR)/unsigned_TA
SIGNED_TA := $(OBJ_DIR)/$(TARGET_TA_NAME)
#-------------------------------------------------------------------------------

.PHONY: all
all : make_dist $(SIGNED_TA) copy_dist build_done

.PHONY: make_dist
make_dist:
	@$(MKDIR) $(OBJ_DIR)

$(SIGNED_TA): $(TA) $(test_TA_with_keys)
	@$(signing_command)

.PHONY: copy_dist
copy_dist: $(SIGNED_TA)
ifneq ($(USE_QUICKBUILD_RBS),True)
	@echo 'Copy dist.'
	@$(CP) $(SIGNED_TA) $(DIST_DIR)
else
	@echo 'Copy $(SIGNED_TA) to $(TEEGRIS_TA_DIST_PATH)'
	@$(CP) $(SIGNED_TA) $(TEEGRIS_TA_DIST_PATH)
endif

.PHONY: build_done
build_done:
	@echo 'Build Done.'

.PHONY: info_ta
info_ta:
	@echo 'Building TA: $(TARGET_TA_NAME)'

.PHONY: clean
clean:
	@echo 'Clean Done.'
	@$(RM) $(DIST_DIR)

$(TA) : info_ta $(SRC_TA)
	@$(CONFIG_CC_SW) $(CONFIG_CFLAGS_SW) $(CONFIG_LDFLAGS_SW) $(INCLUDE_DIRS) $(LIBS) -o $@ $(SRC_TA) $(LIBS)

$(OBJ_DIR)/%.o : $(TA_DIR)/%.c
	@$(CONFIG_CC_SW) $(CONFIG_CFLAGS_SW) $(CONFIG_LDFLAGS_SW) $(INCLUDE_DIRS) $(LIBS) -c -o $@ $<
