#Default 32bit for non-SSSI of SOLO
ifneq ($(shell secgetspf SEC_PRODUCT_FEATURE_BUILD_SSSI_TARGET),vendor)
ifneq ($(shell secgetspf SEC_PRODUCT_FEATURE_BUILD_SSSI_TARGET),system)
ifneq ($(TEEGRIS_BUILD_MODEL), MT6877)
CONFIG_TA_ARCH    = 32
endif
endif
endif

ifeq ($(TEEGRIS_BUILD_MODEL), exynos850)
ifneq (,$(filter gthhwifi% gtmotorwifi% a13%,$(TARGET_PRODUCT)))
CONFIG_TA_ARCH    = 32
endif
endif
include ../../build/teegris_config.mk
TARGET_TA_NAME    = 00000000-0000-0000-0000-0053545354ab
OUT_DIR           = $(CURRENT_PATH)/dist/obj
OUT_DIR_OBJ_LIB   = $(CURRENT_PATH)/dist/obj-lib
OS_TYPE           = android
USE_SCRYPTO       = FALSE
#CONFIG_SW_SYSROOT = $(PLATFORM_ROOT)/swd/arch-arm # teegris_config.mk
#CONFIG_CC_SW      = ${CONFIG_SW_TOOLCHAIN_ROOT}/toolchains/arm-secureos-gnueabi-gcc_6_3-linux-x86/bin/arm*-secureos-gnueabi-gcc # teegris_config.mk
#CONFIG_STRIP_SW   = ${CONFIG_SW_TOOLCHAIN_ROOT}/toolchains/arm-secureos-gnueabi-gcc_6_3-linux-x86/bin/arm*-secureos-gnueabi-strip # teegris_config.mk
#CONFIG_LDFLAGS_SW := -Wl,-z,relro,-z,now # teegris_config.mk

UNSIGNED_TA := $(OUT_DIR)/unsigned_TA
STRIPPED_TA := $(OUT_DIR)/stripped_TA
SIGNED_TA   := $(OUT_DIR)/$(TARGET_TA_NAME)

TRUSTLET_DIR = .

$(info [ICCC] Used TEEGRIS ver $(TEEGRIS_VERSION))
#CONFIG_SIGN_TYPE  = ss_teegris_ta_rp # teegris_config.mk
#CONFIG_MODEL_NAME = TEEGRIS_$(shell echo $(TEEGRIS_BUILD_MODEL) | tr [a-z] [A-Z])_SAMSUNG_DRV # teegris_config.mk

# Build info
CFLAGS += -DTARGET_BUILD_VARIANT=\"$(TARGET_BUILD_VARIANT)\"
CFLAGS += -DTEEGRIS_VERSION=\"$(TEEGRIS_VERSION)\"
CFLAGS += -DTEEGRIS_BUILD_MODEL=\"$(TEEGRIS_BUILD_MODEL)\"

CFLAGS += \
    -Wall \
    -Wextra \
    -Wno-unused \
    -fstack-protector-all \
    -D_FORTIFY_SOURCE=2 \
    -O2 \
    -fpie

# ICCC src, header
ICCC_SRC = $(TRUSTLET_DIR)/src
INCLUDE_DIRS += -I$(TRUSTLET_DIR)/inc
SRCS := $(wildcard $(ICCC_SRC)/*.c)

# Support ICCC_v4
CFLAGS += -DICCC_v4
INCLUDE_DIRS += -I$(TRUSTLET_DIR)/../tz_iccc_common/public

# Chipset info
ifeq ($(TEEGRIS_BUILD_MODEL), exynos9830)
CFLAGS += -DEXYNOS9830
else ifeq ($(TEEGRIS_BUILD_MODEL), exynos9630)
CFLAGS += -DEXYNOS9630
CFLAGS += -DSUPPORT_ICCC_DRV
CFLAGS += -DTEEGRIS_SDK41
else ifeq ($(TEEGRIS_BUILD_MODEL), exynos3830)
CFLAGS += -DEXYNOS3830
ifneq (,$(filter gthhwifi% gtmotorwifi% a13%,$(TARGET_PRODUCT)))
CFLAGS += -DSUPPORT_ICCC_DRV
CFLAGS += -DTEEGRIS_SDK41
endif
else ifeq ($(TEEGRIS_BUILD_MODEL), exynos9810)
CFLAGS += -DEXYNOS9810
CFLAGS += -DSUPPORT_ICCC_DRV
CFLAGS += -DTEEGRIS_SDK41
else ifeq ($(TEEGRIS_BUILD_MODEL), exynos7904)
CFLAGS += -DEXYNOS7904_V4
else ifeq ($(TEEGRIS_BUILD_MODEL), exynos2100)
CFLAGS += -DEXYNOS2100
#CFLAGS += -DSUPPORT_ICCC_DRV
#CFLAGS += -DTEEGRIS_SDK42
#CFLAGS += -DTEEGRIS_DBG
else ifeq ($(TEEGRIS_BUILD_MODEL), s5e9925)
CFLAGS += -Ds5e9925
CFLAGS += -DSUPPORT_ICCC_DRV
CFLAGS += -DTEEGRIS_SDK42 
else ifeq ($(TEEGRIS_BUILD_MODEL), s5e8825)
CFLAGS += -Ds5e8825
CFLAGS += -DSUPPORT_ICCC_DRV
CFLAGS += -DTEEGRIS_SDK42
else ifeq ($(TEEGRIS_BUILD_MODEL), MT6877)
CFLAGS += -DSUPPORT_ICCC_DRV
CFLAGS += -DTEEGRIS_SDK42
CFLAGS += -DMT6877
CFLAGS += -DTZ_TAG_MTK
CFLAGS += -DTZ_OFFSET_MTK
ICCC_MTK_SRC += $(TRUSTLET_DIR)/src/mediatek
INCLUDE_DIRS += -I$(TRUSTLET_DIR)/inc/mediatek
SRCS += $(wildcard $(ICCC_MTK_SRC)/*.c)
else ifeq ($(TEEGRIS_BUILD_MODEL), MT6765)
CFLAGS += -DSUPPORT_ICCC_DRV
CFLAGS += -DTEEGRIS_SDK42
CFLAGS += -DMT6765
CFLAGS += -DTZ_TAG_MTK
CFLAGS += -DTZ_OFFSET_MTK
ICCC_MTK_SRC += $(TRUSTLET_DIR)/src/mediatek
INCLUDE_DIRS += -I$(TRUSTLET_DIR)/inc/mediatek
SRCS += $(wildcard $(ICCC_MTK_SRC)/*.c)
else ifeq ($(TEEGRIS_BUILD_MODEL), MT6853)
CFLAGS += -DMT6853
CFLAGS += -DTZ_TAG_MTK
CFLAGS += -DTZ_OFFSET_MTK
CFLAGS += -DSUPPORT_ICCC_DRV
CFLAGS += -DTEEGRIS_SDK42
ICCC_MTK_SRC += $(TRUSTLET_DIR)/src/mediatek
INCLUDE_DIRS += -I$(TRUSTLET_DIR)/inc/mediatek
SRCS += $(wildcard $(ICCC_MTK_SRC)/*.c)
else ifeq ($(TEEGRIS_BUILD_MODEL), MT6769T)
CFLAGS += -DMT6769T
CFLAGS += -DTZ_TAG_MTK
CFLAGS += -DTZ_OFFSET_MTK
CFLAGS += -DSUPPORT_ICCC_DRV
CFLAGS += -DTEEGRIS_SDK42
ICCC_MTK_SRC += $(TRUSTLET_DIR)/src/mediatek
INCLUDE_DIRS += -I$(TRUSTLET_DIR)/inc/mediatek
SRCS += $(wildcard $(ICCC_MTK_SRC)/*.c)
else ifeq ($(TEEGRIS_BUILD_MODEL), MT6833)
CFLAGS += -DSUPPORT_ICCC_DRV
CFLAGS += -DMT6833
CFLAGS += -DTZ_TAG_MTK
CFLAGS += -DTZ_OFFSET_MTK
ICCC_MTK_SRC += $(TRUSTLET_DIR)/src/mediatek
INCLUDE_DIRS += -I$(TRUSTLET_DIR)/inc/mediatek
SRCS += $(wildcard $(ICCC_MTK_SRC)/*.c)
else ifeq ($(TEEGRIS_BUILD_MODEL), MT6739)
CFLAGS += -DMT6739
# CFLAGS += -DTZ_TAG_MTK # Not supported
# ICCC_MTK_SRC += $(TRUSTLET_DIR)/src/mediatek
# INCLUDE_DIRS += -I$(TRUSTLET_DIR)/inc/mediatek
CFLAGS += -DTZ_OFFSET_MTK
SRCS += $(wildcard $(ICCC_MTK_SRC)/*.c)
endif

INCLUDE_DIRS += -I$(CONFIG_SW_SYSROOT)/usr/include
LIBS += -ltzsl -lgcc
LIB_DIRS += -L$(CONFIG_SW_SYSROOT)/usr/lib/

OBJS := $(patsubst %.c,%.o,$(SRCS))

# Generate .OL
OBJ_LIB_SRC += $(TRUSTLET_DIR)/../tz_iccc_common/tl/icccOperations.c
OBJ_LIB = $(patsubst %.cxx,%.ol,$(patsubst %.c,%.ol,$(OBJ_LIB_SRC)))
OBJ_LIB_BIN = $(addprefix $(OUT_DIR_OBJ_LIB)/,$(notdir $(OBJ_LIB)))

# Prepare Includes
ifeq ($(TEEGRIS_TA_DIST_PATH),)
	TEEGRIS_TA_DIST_PATH := dist
endif

.PHONY: all
all: make_ol_dist $(OBJ_LIB) info_ta make_dist $(STRIPPED_TA) $(SIGNED_TA) copy_dist copy_ol_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_drv)

%.o: %.c
	@echo Compiling ICCC src: $@
	@$(CONFIG_CC_SW) -c -o $*.o $(CFLAGS) $(INCLUDE_DIRS) $<

%.ol: %.c
	@echo Compiling icccOperations.ol: $@
	@$(CONFIG_CC_SW) $(CFLAGS) $(INCLUDE_DIRS) $(CONFIG_LDFLAGS_SW) -c $< -o $(addprefix $(OUT_DIR_OBJ_LIB)/,$(notdir $@))

.PHONY: make_dist
make_dist:
	@$(MKDIR) $(OUT_DIR)

.PHONY: make_ol_dist
make_ol_dist:
	@$(MKDIR) $(OUT_DIR_OBJ_LIB)

.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: copy_ol_dist
copy_ol_dist: make_ol_dist
	@echo Copy $(OUT_DIR_OBJ_LIB)/icccOperations.ol $(TEEGRIS_TA_DIST_PATH)
	@$(CP) $(OUT_DIR_OBJ_LIB)/icccOperations.ol $(TEEGRIS_TA_DIST_PATH)

.PHONY: info_ta
info_ta:
	$(info [ICCC] Building TA: $(TARGET_TA_NAME) ; $(CFLAGS))

.PHONY: clean
clean:
	@$(RM) $(OUT_DIR_OBJ_LIB)
	@$(RM) $(OUT_DIR)
	@$(RM) $(DIST_DIR)
	@echo 'Clean Done.'
