ifeq ($(USE_GRDM),y)
USE_GRDM = True
endif

$(warning *****************************)
$(warning TZ_PROVIDER : $(TZ_PROVIDER))
$(warning TZ_CHIPSET : $(TZ_CHIPSET))
$(warning CHIP_VENDOR : $(CHIP_VENDOR))
$(warning USE_SCRYPTO : $(USE_SCRYPTO))
$(warning SCRYPTO_VER : $(SCRYPTO_VER))
$(warning USE_GRDM : $(USE_GRDM))
$(warning USE_QUICKBUILD_RBS : $(USE_QUICKBUILD_RBS))
$(warning SUPPORT_NEW_TA_BUILD : $(SUPPORT_NEW_TA_BUILD))
$(warning *****************************)

TARGET_TA_NAME = 00000000-0000-0000-0000-53454d655345

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 ($(SEM_TA_ARCH),64)
CONFIG_TA_ARCH := 32
endif
include ../../build/teegris_config.mk
OBJ_DIR := ./dist/obj
DIST_DIR := ./dist
TA_DIR := .
CONFIG_AR_SW := $(CONFIG_SW_TOOLCHAIN_PREFIX)ar
endif

#CONFIG_CFLAGS_SW += -DDEBUG_LOW
#CONFIG_CFLAGS_SW += -DSCP11_ENABLE
#CONFIG_CFLAGS_SW += -DLOW_SPI_TEST
#CONFIG_CFLAGS_SW += -DEXTENDED_APDU

CONFIG_CFLAGS_SW += -ggdb -std=gnu99 -fstack-protector -fstack-protector-all
CONFIG_CFLAGS_SW += \
	-DSWD \
	-DBLOWFISH \
	-DUSE_BLOWFISH \
	-DUSE_TEEGRIS \
    -DUSE_SCRYPTO

ifeq ($(USE_GRDM),True)
CONFIG_CFLAGS_SW += -DUSE_GRDM
endif

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 += -s

ifeq ($(PLATFORM_VER),T)
CONFIG_CFLAGS_SW += -DTIZEN
endif

ifeq ($(CHIP_VENDOR),gem)
CONFIG_CFLAGS_SW += \
    -DGEM
endif

ifeq ($(CHIP_VENDOR),gem51)
CONFIG_CFLAGS_SW += \
    -DGEM \
    -DGEM51
endif

ifeq ($(CHIP_VENDOR),gem60)
CONFIG_CFLAGS_SW += \
    -DGEM \
    -DGEM60
endif

ifeq ($(CHIP_VENDOR),nxpV4)
CONFIG_CFLAGS_SW += \
    -DNXP \
    -DNXPV4
endif

ifeq ($(CHIP_VENDOR),common)
CONFIG_CFLAGS_SW += \
    -DNXP \
    -DNXPV4 \
    -DGEM \
    -DCOMMON_VENDOR
endif

CONFIG_CFLAGS_SW += -DLCCM_SPI
#-------------------------------------------------------------------------------
# ISO7816
#-------------------------------------------------------------------------------
# Common
INCLUDE_DIRS += \
    -I$(TA_DIR)/include/iso7816

SRC_TA += \
    $(TA_DIR)/src/common/iso7816/sec_apdu.c \
    $(TA_DIR)/src/common/iso7816/iso7816_self_test.c

ifneq ($(USE_QUICKBUILD_RBS),True)
ISO7816_LIB_C += \
    $(TA_DIR)/src/common/iso7816/sec_apdu.c
endif

# Exynos7580 CHIPSET dependency
ifeq ($(TZ_CHIPSET),exynos7580)
CC_OPTS += -DSPI_PORT_NUM_1
    $(warning DEFINED SPI_PORT_NUM_1)
endif

# mt6757 CHIPSET dependency
ifeq ($(TZ_CHIPSET),mt6757)
CC_OPTS += -DSPI_PORT_NUM_1
    $(warning DEFINED SPI_PORT_NUM_1)
endif

# exynos9610 CHIPSET dependency
ifeq ($(TZ_CHIPSET),exynos9610)
CONFIG_CFLAGS_SW += -DSPI_PORT_NUM_3
    $(warning DEFINED SPI_PORT_NUM_3)
endif

# exynos9630 CHIPSET dependency
ifeq ($(TZ_CHIPSET),exynos9630)
CONFIG_CFLAGS_SW += -DSPI_PORT_NUM_0
    $(warning DEFINED SPI_PORT_NUM_0)
endif

# exynos9810 CHIPSET dependency
ifeq ($(TZ_CHIPSET),exynos9810)
CONFIG_CFLAGS_SW += -DSPI_PORT_NUM_1
    $(warning DEFINED SPI_PORT_NUM_1)
endif

# exynos9820 CHIPSET dependency
ifeq ($(TZ_CHIPSET),exynos9820)
CONFIG_CFLAGS_SW += -DSPI_PORT_NUM_2
    $(warning DEFINED SPI_PORT_NUM_2)
endif

# exynos9830 CHIPSET dependency
ifeq ($(TZ_CHIPSET),exynos9830)
CONFIG_CFLAGS_SW += -DSPI_PORT_NUM_1
    $(warning DEFINED SPI_PORT_NUM_1)
    
    CONFIG_CFLAGS_SW += \
    -DFACTORY_RESET
    $(warning DEFINED FACTORY_RESET)
endif

# exynos2100 CHIPSET dependency
ifeq ($(TZ_CHIPSET),exynos2100)
CONFIG_CFLAGS_SW += -DSPI_PORT_NUM_1
    $(warning DEFINED SPI_PORT_NUM_1)
    
    CONFIG_CFLAGS_SW += \
    -DFACTORY_RESET
    $(warning DEFINED FACTORY_RESET)
endif

# exynos9110 CHIPSET dependency
ifeq ($(TZ_CHIPSET),exynos9110)
CONFIG_CFLAGS_SW += -DSPI_PORT_NUM_0
    $(warning DEFINED SPI_PORT_NUM_0)

    CONFIG_CFLAGS_SW += \
    -DFACTORY_RESET
    $(warning DEFINED FACTORY_RESET)
endif

# exynos5515 CHIPSET dependency
ifeq ($(TZ_CHIPSET),s5e5515)
CONFIG_CFLAGS_SW += -DSPI_PORT_NUM_0
    $(warning DEFINED SPI_PORT_NUM_0)

    CONFIG_CFLAGS_SW += \
    -DFACTORY_RESET
    $(warning DEFINED FACTORY_RESET)
endif

# s5e8825 CHIPSET dependency
ifeq ($(TZ_CHIPSET),s5e8825)
CONFIG_CFLAGS_SW += -DSPI_PORT_NUM_1
    $(warning DEFINED SPI_PORT_NUM_1)
    
    CONFIG_CFLAGS_SW += \
    -DFACTORY_RESET
    $(warning DEFINED FACTORY_RESET)
endif

# s5e9925 CHIPSET dependency
ifeq ($(TZ_CHIPSET),s5e9925)
CONFIG_CFLAGS_SW += -DSPI_PORT_NUM_1
    $(warning DEFINED SPI_PORT_NUM_1)
    
    CONFIG_CFLAGS_SW += \
    -DFACTORY_RESET
    $(warning DEFINED FACTORY_RESET)
endif

# NXP V4 dependencies
ifeq ($(CHIP_VENDOR),nxpV4)
INCLUDE_DIRS += \
    -I$(TA_DIR)/include/iso7816/nxpV4/common \
    -I$(TA_DIR)/include/iso7816/nxpV4/inc \
    -I$(TA_DIR)/include/iso7816/nxpV4/include \
    -I$(TA_DIR)/include/iso7816/nxpV4/lib \
    -I$(TA_DIR)/include/iso7816/nxpV4/log \
    -I$(TA_DIR)/include/iso7816/nxpV4/pal \
    -I$(TA_DIR)/include/iso7816/nxpV4/pal/spi

SRC_TA += \
    ${TA_DIR}/src/common/iso7816/nxpV4/lib/phNxpEse_Apdu_Api.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/lib/phNxpEse_Api.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/lib/phNxpEseDataMgr.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/lib/phNxpEseProto7816_3.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/log/phNxpLog.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/pal/phNxpEsePal.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/pal/spi/phNxpEsePal_spi.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/sec_mw.c

ifneq ($(USE_QUICKBUILD_RBS),True)
ISO7816_LIB_C += \
    ${TA_DIR}/src/common/iso7816/nxpV4/lib/phNxpEse_Apdu_Api.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/lib/phNxpEse_Api.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/lib/phNxpEseDataMgr.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/lib/phNxpEseProto7816_3.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/log/phNxpLog.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/pal/phNxpEsePal.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/pal/spi/phNxpEsePal_spi.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/sec_mw.c
endif
endif

# GEMALTO dependencies
ifeq ($(CHIP_VENDOR),$(filter $(CHIP_VENDOR),gem gem51 gem60))
INCLUDE_DIRS += \
    -I$(TA_DIR)/include/iso7816/gem \
    -I$(TA_DIR)/src/common/iso7816/gem

SRC_TA += \
    $(TA_DIR)/src/common/iso7816/gem/checksum.c \
    $(TA_DIR)/src/common/iso7816/gem/gto-secese.c \
    $(TA_DIR)/src/common/iso7816/gem/iso7816_t1.c \
    $(TA_DIR)/src/common/iso7816/gem/transport.c \
    $(TA_DIR)/src/common/iso7816/gem/sec_mw.c

ifneq ($(USE_QUICKBUILD_RBS),True)
ISO7816_LIB_C += \
    $(TA_DIR)/src/common/iso7816/gem/checksum.c \
    $(TA_DIR)/src/common/iso7816/gem/gto-secese.c \
    $(TA_DIR)/src/common/iso7816/gem/iso7816_t1.c \
    $(TA_DIR)/src/common/iso7816/gem/transport.c \
    $(TA_DIR)/src/common/iso7816/gem/sec_mw.c
endif
endif

# COMMON ISO7816
ifeq ($(CHIP_VENDOR),common)
INCLUDE_DIRS += \
    -I$(TA_DIR)/include/iso7816/nxpV4/common \
    -I$(TA_DIR)/include/iso7816/nxpV4/inc \
    -I$(TA_DIR)/include/iso7816/nxpV4/include \
    -I$(TA_DIR)/include/iso7816/nxpV4/lib \
    -I$(TA_DIR)/include/iso7816/nxpV4/log \
    -I$(TA_DIR)/include/iso7816/nxpV4/pal \
    -I$(TA_DIR)/include/iso7816/nxpV4/pal/spi \
    -I$(TA_DIR)/include/iso7816/gem \
    -I$(TA_DIR)/src/common/iso7816/gem

SRC_TA += \
    ${TA_DIR}/src/common/iso7816/nxpV4/lib/phNxpEse_Apdu_Api.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/lib/phNxpEse_Api.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/lib/phNxpEseDataMgr.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/lib/phNxpEseProto7816_3.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/log/phNxpLog.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/pal/phNxpEsePal.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/pal/spi/phNxpEsePal_spi.c \
    $(TA_DIR)/src/common/iso7816/gem/checksum.c \
    $(TA_DIR)/src/common/iso7816/gem/gto-secese.c \
    $(TA_DIR)/src/common/iso7816/gem/iso7816_t1.c \
    $(TA_DIR)/src/common/iso7816/gem/transport.c \
    $(TA_DIR)/src/common/iso7816/common/sec_mw.c

ifneq ($(USE_QUICKBUILD_RBS),True)
ISO7816_LIB_C += \
    ${TA_DIR}/src/common/iso7816/nxpV4/lib/phNxpEse_Apdu_Api.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/lib/phNxpEse_Api.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/lib/phNxpEseDataMgr.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/lib/phNxpEseProto7816_3.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/log/phNxpLog.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/pal/phNxpEsePal.c \
    ${TA_DIR}/src/common/iso7816/nxpV4/pal/spi/phNxpEsePal_spi.c \
    $(TA_DIR)/src/common/iso7816/gem/checksum.c \
    $(TA_DIR)/src/common/iso7816/gem/gto-secese.c \
    $(TA_DIR)/src/common/iso7816/gem/iso7816_t1.c \
    $(TA_DIR)/src/common/iso7816/gem/transport.c \
    $(TA_DIR)/src/common/iso7816/common/sec_mw.c
endif
endif

ifneq ($(USE_QUICKBUILD_RBS),True)
ISO7816_LIB_C += \
    $(TA_DIR)/src/common/sem/debug.c \
    $(TA_DIR)/src/common/sem/tz_utils.c
endif

#-------------------------------------------------------------------------------
# CRYPTO
#-------------------------------------------------------------------------------
INCLUDE_DIRS += \
    -I$(TA_DIR)/include/crypto \
    -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/ec/ec_print.c

ifneq ($(USE_QUICKBUILD_RBS),True)
CRYPTO_LIB_C += \
    $(TA_DIR)/src/common/crypto/platform/blowfish.c \
    $(TA_DIR)/src/common/crypto/crypto_module.c \
    $(TA_DIR)/src/common/crypto/openssl/ec/ec_print.c \
    $(TA_DIR)/src/common/sem/debug.c \
    $(TA_DIR)/src/common/sem/tz_utils.c
endif

#-------------------------------------------------------------------------------
# SSPM
#-------------------------------------------------------------------------------
INCLUDE_DIRS += \
    -I$(TA_DIR)/include/sspm

SRC_TA += \
    $(TA_DIR)/src/common/sspm/ssp_apdu.c \
    $(TA_DIR)/src/common/sspm/ssp_service.c \
    $(TA_DIR)/src/common/sspm/ssp_session.c \
    $(TA_DIR)/src/common/sspm/ssp_util.c \
    $(TA_DIR)/src/common/sspm/ssp.c \
    $(TA_DIR)/src/common/sspm/ssp_self_test.c

ifneq ($(USE_QUICKBUILD_RBS),True)
SSPM_LIB_C += \
    $(TA_DIR)/src/common/sspm/ssp_apdu.c \
    $(TA_DIR)/src/common/sspm/ssp_util.c \
    $(TA_DIR)/src/common/sem/debug.c \
    $(TA_DIR)/src/common/sem/tz_utils.c
endif

#-------------------------------------------------------------------------------
# SSEM
#-------------------------------------------------------------------------------
INCLUDE_DIRS += \
    -I$(TA_DIR)/include/ssem

SRC_TA += \
    $(TA_DIR)/src/common/ssem/sse_entry_manage.c \
    $(TA_DIR)/src/common/ssem/sse_entry_manage_util.c \
    $(TA_DIR)/src/common/ssem/sse.c

ifneq ($(USE_QUICKBUILD_RBS),True)
SSEM_LIB_C += \
    $(TA_DIR)/src/common/ssem/sse_entry_manage.c \
    $(TA_DIR)/src/common/ssem/sse_entry_manage_util.c
endif

#-------------------------------------------------------------------------------
# SCP03
#-------------------------------------------------------------------------------
INCLUDE_DIRS += \
    -I$(TA_DIR)/include/scp03 \

SRC_TA += \
    $(TA_DIR)/src/common/scp03/GPCmd.c \
    $(TA_DIR)/src/common/scp03/SCP03_cmdGenerator.c \
    $(TA_DIR)/src/common/scp03/SCP03_crypto.c \
    $(TA_DIR)/src/common/scp03/SCP03_kdf.c \
    $(TA_DIR)/src/common/scp03/SCP03_rspParser.c \
    $(TA_DIR)/src/common/scp03/SCP03_tools.c \
    $(TA_DIR)/src/common/scp03/SCP03_transceive.c

ifneq ($(USE_QUICKBUILD_RBS),True)
SCP03_LIB_C += \
    $(TA_DIR)/src/common/scp03/GPCmd.c \
    $(TA_DIR)/src/common/scp03/SCP03_cmdGenerator.c \
    $(TA_DIR)/src/common/scp03/SCP03_crypto.c \
    $(TA_DIR)/src/common/scp03/SCP03_kdf.c \
    $(TA_DIR)/src/common/scp03/SCP03_rspParser.c \
    $(TA_DIR)/src/common/scp03/SCP03_tools.c \
    $(TA_DIR)/src/common/scp03/SCP03_transceive.c \
    $(TA_DIR)/src/common/sem/debug.c \
    $(TA_DIR)/src/common/sem/tz_utils.c
endif

#SCP03_TEST_FEATURE = true
SCP03_TEST_FEATURE = false
ifeq ($(SCP03_TEST_FEATURE),true)
$(warning ########### SCP03_TEST_FEATURE enabled ########### )
CONFIG_CFLAGS_SW += -DSCP03_TEST
SRC_TA += $(TA_DIR)/src/common/scp03/SCP03_test.c
else
$(warning SCP03_TEST_FEATURE disabled)
endif
#-------------------------------------------------------------------------------
# SCP11
#-------------------------------------------------------------------------------
INCLUDE_DIRS += \
    -I$(TA_DIR)/include/scp11 \

SRC_TA += \
    $(TA_DIR)/src/common/scp11/SCP11_main.c \
    $(TA_DIR)/src/common/scp11/SCP11_crypto.c \
    $(TA_DIR)/src/common/scp11/SCP11_transceive.c \
    $(TA_DIR)/src/common/scp11/SCP11_tool.c \
    $(TA_DIR)/src/common/scp11/SCP11_test.c

ifneq ($(USE_QUICKBUILD_RBS),True)
SCP11_LIB_C += \
    $(TA_DIR)/src/common/scp11/SCP11_main.c \
    $(TA_DIR)/src/common/scp11/SCP11_crypto.c \
    $(TA_DIR)/src/common/scp11/SCP11_transceive.c \
    $(TA_DIR)/src/common/scp11/SCP11_tool.c \
    $(TA_DIR)/src/common/scp11/SCP11_test.c \
    $(TA_DIR)/src/common/sem/debug.c \
    $(TA_DIR)/src/common/sem/tz_utils.c
endif

#-------------------------------------------------------------------------------
# GRDM
#-------------------------------------------------------------------------------
ifeq ($(USE_GRDM),True)
INCLUDE_DIRS += \
    -I$(TA_DIR)/include/grdm \
    -I$(TA_DIR)/include/grdm/common/hal \
    -I$(TA_DIR)/include/grdm/common/inc \
    -I$(TA_DIR)/include/grdm/common/src \
    -I$(TA_DIR)/include/grdm/vendor/common/star/inc \
    -I$(TA_DIR)/include/grdm/vendor/common/star/src \
    -I$(TA_DIR)/include/grdm/vendor/guardianM/inc \
    -I$(TA_DIR)/include/grdm/vendor/guardianM/src

SRC_TA += \
    ${TA_DIR}/src/common/grdm/grdm.c \
    ${TA_DIR}/src/common/grdm/common/hal/ese_hal.c \
    ${TA_DIR}/src/common/grdm/common/src/ese_api.c \
    ${TA_DIR}/src/common/grdm/common/src/ese_data.c \
    ${TA_DIR}/src/common/grdm/common/src/ese_protocol.c \
    ${TA_DIR}/src/common/grdm/common/src/ese_util.c \
    ${TA_DIR}/src/common/grdm/vendor/common/star/src/star_apdu.c \
    ${TA_DIR}/src/common/grdm/vendor/common/star/src/star_authentication.c \
    ${TA_DIR}/src/common/grdm/vendor/common/star/src/star_credential.c \
    ${TA_DIR}/src/common/grdm/vendor/common/star/src/star_certificate.c \
    ${TA_DIR}/src/common/grdm/vendor/common/star/src/star_firmware.c \
    ${TA_DIR}/src/common/grdm/vendor/common/star/src/star_signature.c \
    ${TA_DIR}/src/common/grdm/vendor/guardianM/src/grdm_app.c \
    ${TA_DIR}/src/common/grdm/vendor/guardianM/src/grdm_internal.c \
    ${TA_DIR}/src/common/grdm/vendor/guardianM/src/grdm_transport.c \
    ${TA_DIR}/src/common/grdm/vendor/guardianM/src/grdm_fw.c \
    ${TA_DIR}/src/common/grdm/vendor/guardianM/src/grdm_common.c \
    ${TA_DIR}/src/common/grdm/vendor/guardianM/src/grdm_crypto.c \
    ${TA_DIR}/src/common/grdm/vendor/guardianM/src/grdm_boringssl.c \
    ${TA_DIR}/src/common/grdm/vendor/guardianM/src/grdm_log.c

ifeq ($(findstring -DDEBUG_LOW,$(CONFIG_CFLAGS_SW)),-DDEBUG_LOW)
$(warning GRDM_TEST ON)
SRC_TA += \
    ${TA_DIR}/src/common/grdm/grdm_test.c \
    ${TA_DIR}/src/common/grdm/vendor/guardianM/src/grdm_bl.c

CONFIG_CFLAGS_SW += -DGRDM_TEST
endif

ifneq ($(USE_QUICKBUILD_RBS),True)
GRDM_LIB_C += \
    ${TA_DIR}/src/common/grdm/grdm.c \
    ${TA_DIR}/src/common/grdm/common/hal/ese_hal.c \
    ${TA_DIR}/src/common/grdm/common/src/ese_api.c \
    ${TA_DIR}/src/common/grdm/common/src/ese_data.c \
    ${TA_DIR}/src/common/grdm/common/src/ese_protocol.c \
    ${TA_DIR}/src/common/grdm/common/src/ese_util.c \
    ${TA_DIR}/src/common/grdm/vendor/common/star/src/star_apdu.c \
    ${TA_DIR}/src/common/grdm/vendor/common/star/src/star_authentication.c \
    ${TA_DIR}/src/common/grdm/vendor/common/star/src/star_credential.c \
    ${TA_DIR}/src/common/grdm/vendor/common/star/src/star_certificate.c \
    ${TA_DIR}/src/common/grdm/vendor/common/star/src/star_firmware.c \
    ${TA_DIR}/src/common/grdm/vendor/common/star/src/star_signature.c \
    ${TA_DIR}/src/common/grdm/vendor/guardianM/src/grdm_app.c \
    ${TA_DIR}/src/common/grdm/vendor/guardianM/src/grdm_internal.c \
    ${TA_DIR}/src/common/grdm/vendor/guardianM/src/grdm_transport.c \
    ${TA_DIR}/src/common/grdm/vendor/guardianM/src/grdm_fw.c \
    ${TA_DIR}/src/common/grdm/vendor/guardianM/src/grdm_common.c \
    ${TA_DIR}/src/common/grdm/vendor/guardianM/src/grdm_crypto.c \
    ${TA_DIR}/src/common/grdm/vendor/guardianM/src/grdm_boringssl.c \
    ${TA_DIR}/src/common/grdm/vendor/guardianM/src/grdm_log.c \
    $(TA_DIR)/src/common/sem/debug.c \
    $(TA_DIR)/src/common/sem/tz_utils.c
endif
endif
#-------------------------------------------------------------------------------
# SEM
#-------------------------------------------------------------------------------
INCLUDE_DIRS += \
    -I$(TA_DIR)/include \
    -I$(TA_DIR)/include/sem \

SRC_TA += \
    $(TA_DIR)/src/tlSem.c \
    $(TA_DIR)/src/common/sem/cmd_handler.c \
    $(TA_DIR)/src/common/sem/sem.c \
    $(TA_DIR)/src/common/sem/scpkm.c \
    $(TA_DIR)/src/common/sem/service_key.c \
    $(TA_DIR)/src/common/sem/scrs.c \
    $(TA_DIR)/src/common/sem/factory.c \
    $(TA_DIR)/src/common/sem/ccm.c \
    $(TA_DIR)/src/common/sem/fra.c \
    $(TA_DIR)/src/common/sem/debug.c \
    $(TA_DIR)/src/common/sem/tz_utils.c

$(warning *****************************)
#-------------------------------------------------------------------------------
# Add library
#-------------------------------------------------------------------------------

#-------------------------------------------------------------------------------
TA := $(OBJ_DIR)/unsigned_TA
SIGNED_TA := $(OBJ_DIR)/$(TARGET_TA_NAME)

ifneq ($(USE_QUICKBUILD_RBS),True)
OBJECTS_ISO7816_LIB=$(ISO7816_LIB_C:.c=.o)
ISO7816_LIB := $(DIST_DIR)/iso7816_$(CHIP_VENDOR).lib

OBJECTS_CRYPTO_LIB=$(CRYPTO_LIB_C:.c=.o)
CRYPTO_LIB := $(DIST_DIR)/crypto_$(CHIP_VENDOR).lib

OBJECTS_SSPM_LIB=$(SSPM_LIB_C:.c=.o)
SSPM_LIB := $(DIST_DIR)/sspm_$(CHIP_VENDOR).lib

OBJECTS_SSEM_LIB=$(SSEM_LIB_C:.c=.o)
SSEM_LIB := $(DIST_DIR)/ssem_$(CHIP_VENDOR).lib

OBJECTS_SCP03_LIB=$(SCP03_LIB_C:.c=.o)
SCP03_LIB := $(DIST_DIR)/scp03_$(CHIP_VENDOR).lib

OBJECTS_SCP11_LIB=$(SCP11_LIB_C:.c=.o)
SCP11_LIB := $(DIST_DIR)/scp11_$(CHIP_VENDOR).lib

ifeq ($(USE_GRDM),True)
OBJECTS_GRDM_LIB=$(GRDM_LIB_C:.c=.o)
GRDM_LIB := $(DIST_DIR)/grdm.lib
endif

endif
#-------------------------------------------------------------------------------

.PHONY: all
ifneq ($(USE_QUICKBUILD_RBS),True)
all : make_dist make_libs $(SIGNED_TA) copy_dist build_done
else
all : make_dist $(SIGNED_TA) copy_dist build_done
endif
.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)

$(OBJ_DIR)/%.o : $(TA_DIR)/%.c
	@$(CONFIG_CC_SW) $(CONFIG_CFLAGS_SW) $(CONFIG_LDFLAGS_SW) $(INCLUDE_DIRS) $(LIBS) -c -o $@ $<

#-------------------------------------------------------------------------------
ifneq ($(USE_QUICKBUILD_RBS),True)
ifeq ($(USE_GRDM),True)
.PHONY: make_libs
make_libs: make_iso7816_libs make_crypto_libs make_sspm_libs make_ssem_libs make_scp03_libs make_scp11_libs make_grdm_libs
	@echo 'Make libraries'
else
.PHONY: make_libs
make_libs: make_iso7816_libs make_crypto_libs make_sspm_libs make_ssem_libs make_scp03_libs make_scp11_libs
	@echo 'Make libraries'
endif

.PHONY: make_iso7816_libs
make_iso7816_libs: $(ISO7816_LIB_C) $(OBJECTS_ISO7816_LIB) $(ISO7816_LIB)
	@echo 'Make ISO7816 libraries'

.PHONY: make_crypto_libs
make_crypto_libs: $(CRYPTO_LIB_C) $(OBJECTS_CRYPTO_LIB) $(CRYPTO_LIB)
	@echo 'Make CRYPTO libraries'

.PHONY: make_sspm_libs
make_sspm_libs: $(SSPM_LIB_C) $(OBJECTS_SSPM_LIB) $(SSPM_LIB)
	@echo 'Make SSPM libraries'

.PHONY: make_ssem_libs
make_ssem_libs: $(SSEM_LIB_C) $(OBJECTS_SSEM_LIB) $(SSEM_LIB)
	@echo 'Make SSEM libraries'

.PHONY: make_scp03_libs
make_scp03_libs: $(SCP03_LIB_C) $(OBJECTS_SCP03_LIB) $(SCP03_LIB)
	@echo 'Make SCP03 libraries'

.PHONY: make_scp11_libs
make_scp11_libs: $(SCP11_LIB_C) $(OBJECTS_SCP11_LIB) $(SCP11_LIB)
	@echo 'Make SCP11 libraries'

ifeq ($(USE_GRDM),True)
.PHONY: make_grdm_libs
make_grdm_libs: $(GRDM_LIB_C) $(OBJECTS_GRDM_LIB) $(GRDM_LIB)
	@echo 'Make GRDM libraries'
endif

$(ISO7816_LIB) : $(OBJECTS_ISO7816_LIB)
	@$(CONFIG_AR_SW) rcv $@ $(addprefix $(TA_DIR)/, $(notdir $(OBJECTS_ISO7816_LIB)))

$(CRYPTO_LIB) : $(OBJECTS_CRYPTO_LIB)
	@$(CONFIG_AR_SW) rcv $@ $(addprefix $(TA_DIR)/, $(notdir $(OBJECTS_CRYPTO_LIB)))

$(SSPM_LIB) : $(OBJECTS_SSPM_LIB)
	@$(CONFIG_AR_SW) rcv $@ $(addprefix $(TA_DIR)/, $(notdir $(OBJECTS_ISO7816_LIB) $(OBJECTS_CRYPTO_LIB) $(OBJECTS_SSPM_LIB)))

$(SSEM_LIB) : $(OBJECTS_SSEM_LIB)
	@$(CONFIG_AR_SW) rcv $@ $(addprefix $(TA_DIR)/, $(notdir $(OBJECTS_ISO7816_LIB) $(OBJECTS_CRYPTO_LIB) $(OBJECTS_SSPM_LIB) $(OBJECTS_SSEM_LIB)))

$(SCP03_LIB) : $(OBJECTS_SCP03_LIB)
	@$(CONFIG_AR_SW) rcv $@ $(addprefix $(TA_DIR)/, $(notdir $(OBJECTS_SCP03_LIB)))

$(SCP11_LIB) : $(OBJECTS_SCP11_LIB)
	@$(CONFIG_AR_SW) rcv $@ $(addprefix $(TA_DIR)/, $(notdir $(OBJECTS_SCP11_LIB) $(OBJECTS_SCP03_LIB) $(OBJECTS_CRYPTO_LIB)))

ifeq ($(USE_GRDM),True)
$(GRDM_LIB) : $(OBJECTS_GRDM_LIB)
	@$(CONFIG_AR_SW) rcv $@ $(addprefix $(TA_DIR)/, $(notdir $(OBJECTS_GRDM_LIB)))
endif

.c.o:
	@$(CONFIG_CC_SW) $(CONFIG_CFLAGS_SW) $(CONFIG_LDFLAGS_SW) $(INCLUDE_DIRS) -w -c $< -o $(addprefix $(TA_DIR)/, $(notdir $@))

endif
