CONFIG_TA_ARCH    = 32
include ../../build/teegris_config.mk

TARGET_TA_NAME    = 00000000-0000-0000-0000-4d7073617574
OUT_DIR           = $(CURRENT_PATH)/dist/obj
OUT_DIR_OBJ_LIB   = $(CURRENT_PATH)/dist/obj-lib
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 [MPOS_AUTH] Used TEEGRIS ver $(TEEGRIS_PLATFORM_VERSION_MAJOR))
CONFIG_LDFLAGS_SW := -Wl,-z,relro,-z,now
CONFIG_SIGN_TYPE = ss_teegris_ta_rp
CONFIG_MODEL_NAME = TEEGRIS_$(shell echo $(TEEGRIS_BUILD_MODEL) | tr [a-z] [A-Z])_SAMSUNG_TA

# Build info
CFLAGS += -DTARGET_BUILD_VARIANT=\"$(TARGET_BUILD_VARIANT)\"
CFLAGS += -DTEEGRIS_PLATFORM_VERSION_MAJOR=\"$(TEEGRIS_PLATFORM_VERSION_MAJOR)\"
CFLAGS += -DTEEGRIS_BUILD_MODEL=\"$(TEEGRIS_BUILD_MODEL)\"

CFLAGS += \
    -Wall \
    -Wextra \
    -Wno-unused \
    -fstack-protector-all \
    -D_FORTIFY_SOURCE=2	\
    -O2 \
    -fpie

# DEBUG for AUTH TA
# CFLAGS += -DCONFIG_EP2_TEST
CFLAGS += -DDEBUG_AUTH

CFLAGS += -DUSE_BF
AUTH_INC = $(TRUSTLET_DIR)/inc
AUTH_EP2_INC = $(TRUSTLET_DIR)/inc/ep2
AUTH_EP2_ASN_INC = $(PWD)/inc/asn
AUTH_EP2_GKLP_INC = $(PWD)/inc/gklp
AUTH_EP2_OTHER_INC = $(PWD)/inc/other
AUTH_EP2_PERSO_INC = $(PWD)/inc/personalization
AUTH_EP2_STANDARD_INC = $(PWD)/inc/standard
AUTH_INC_SHARED = $(AUTH_INC)/shared
TIMA_COMMON_INC_SHARED = $(AUTH_INC)/tima_common/inc

AUTH_SRC = $(TRUSTLET_DIR)/src
AUTH_EP2_SRC = $(TRUSTLET_DIR)/src/ep2
AUTH_EP2_ASN_SRC = $(PWD)/src/asn
AUTH_EP2_GKLP_SRC = $(PWD)/src/gklp
AUTH_EP2_OTHER_SRC = $(PWD)/src/other
AUTH_EP2_PERSO_SRC = $(PWD)/src/personalization
AUTH_EP2_STANDARD_SRC = $(PWD)/src/standard
AUTH_SRC_SHARED = $(AUTH_SRC)/shared
TIMA_COMMON_SRC_SHARED = $(AUTH_SRC)/tima_common/src

#TZ_INC = $(PWD)/../tz_common/public
MPOS_TATA_INC = $(TRUSTLET_DIR)/../tz_mpos_common/public
MPOS_TATA_SRC = $(TRUSTLET_DIR)/../tz_mpos_common/tl

INCLUDE_DIRS = -I$(AUTH_INC) -I$(AUTH_INC_SHARED) -I$(TIMA_COMMON_INC_SHARED)
INCLUDE_DIRS += -I$(MPOS_TATA_INC)

# Support ICCC_v4
include ../tz_iccc_common/iccc_config.mk

INCLUDE_DIRS += -I$(CONFIG_SW_SYSROOT)/usr/include
LIBS += -ltzsl -lgcc -lteesl -lpthread -lscrypto
LIB_DIRS += -L$(CONFIG_SW_SYSROOT)/usr/lib/

SRCS += $(wildcard $(AUTH_SRC)/*.c)
SRCS += $(wildcard $(AUTH_SRC_SHARED)/*.c)
SRCS += $(wildcard $(TIMA_COMMON_SRC_SHARED)/*.c)
SRCS += $(wildcard $(MPOS_TATA_SRC)/*.c)

SUPPORT_EP2 = 1
ifeq ($(SUPPORT_EP2), 1)
$(info [MPOS_AUTH] CONFIG_SUPPORT_EP2 is enabled!)
	CFLAGS += -DCONFIG_SUPPORT_EP2
	CFLAGS += -DASN_DISABLE_XER_SUPPORT
	INCLUDE_DIRS += -I$(AUTH_EP2_INC) 
    INCLUDE_DIRS += -I$(AUTH_EP2_ASN_INC)
	INCLUDE_DIRS += -I$(AUTH_EP2_GKLP_INC)
	INCLUDE_DIRS += -I$(AUTH_EP2_OTHER_INC) 
	INCLUDE_DIRS += -I$(AUTH_EP2_PERSO_INC) 
	INCLUDE_DIRS += -I$(AUTH_EP2_STANDARD_INC)
	SRCS += $(wildcard $(AUTH_EP2_SRC)/*.c $(AUTH_EP2_SRC)/*.cxx)
	SRCS += $(wildcard $(AUTH_EP2_ASN_SRC)/*.c)
	SRCS += $(wildcard $(AUTH_EP2_GKLP_SRC)/*.c)
	SRCS += $(wildcard $(AUTH_EP2_OTHER_SRC)/*.c)
	SRCS += $(wildcard $(AUTH_EP2_PERSO_SRC)/*.c)
	SRCS += $(wildcard $(AUTH_EP2_STANDARD_SRC)/*.c)
endif

#SRCS += $(PWD)/../tz_common/tl/buffer_utils.c
OBJS := $(patsubst %.cxx,%.o,$(patsubst %.c,%.o,$(SRCS)))

# 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.)

$(UNSIGNED_TA): $(OBJS)
	@$(CONFIG_CC_SW) $(CFLAGS) $(CONFIG_LDFLAGS_SW) -o $(UNSIGNED_TA) $(OBJS) $(LIBS) $(INCLUDE_DIRS) $(LIB_DIRS)

$(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)

%.o: %.c
	@echo Compiling MPOS_AUTH src: $@
	@$(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 [MPOS_AUTH] Building TA: $(TARGET_TA_NAME) ; $(CFLAGS))

.PHONY: clean
clean:
	@$(RM) $(OUT_DIR_OBJ_LIB)
	@$(RM) $(OUT_DIR)
	@$(RM) $(DIST_DIR)
	@echo 'Clean Done.'
