################################################################################
#
# MobiCore Makefile Template
#
################################################################################

### this is our home dir
DRIVER_DIR ?= ../Code
DRLIB_DIR := $(DRIVER_DIR)/api

# Define platform for this driver
# This sets compiler option and selects the DrApi binary.
# Also common MobiCore defines are set.
ifeq ($(SEC_PRODUCT), exynos5410)
PLATFORM ?= EXYNOS_5410_STD
else ifeq ($(SEC_PRODUCT), exynos5420)
PLATFORM ?= EXYNOS_5420_STD
else ifeq ($(SEC_PRODUCT), exynos4x12)
PLATFORM ?= EXYNOS_4X12_STD
else ifeq ($(SEC_PRODUCT), exynos5260)
PLATFORM ?= EXYNOS_5260_STD
else ifeq ($(SEC_PRODUCT), exynos5430)
PLATFORM ?= EXYNOS_5430_STD
else ifeq ($(SEC_PRODUCT), exynos5422)
PLATFORM ?= EXYNOS_5422_STD
else ifeq ($(SEC_PRODUCT), exynos3470)
PLATFORM ?= EXYNOS_3470_STD
else ifeq ($(SEC_PRODUCT), exynos3472)
PLATFORM ?= EXYNOS_3472_STD
else ifeq ($(SEC_PRODUCT), exynos3250)
PLATFORM ?= EXYNOS_3250_STD
else ifeq ($(SEC_PRODUCT), exynos4415)
PLATFORM ?= EXYNOS_4415_STD
else ifeq ($(SEC_PRODUCT), exynos5433)
PLATFORM ?= EXYNOS_5433_STD
else ifeq ($(SEC_PRODUCT), tblte)
PLATFORM ?= EXYNOS_5433_STD
else ifeq ($(SEC_PRODUCT), exynos7420)
PLATFORM ?= EXYNOS_7420_STD
else ifeq ($(SEC_PRODUCT), exynos7580)
PLATFORM ?= EXYNOS_7580_STD
else ifeq ($(SEC_PRODUCT), exynos3475)
PLATFORM ?= EXYNOS_3475_STD
else ifeq ($(SEC_PRODUCT), exynos8890)
PLATFORM ?= EXYNOS_8890_STD
else ifeq ($(SEC_PRODUCT), exynos7870)
PLATFORM ?= EXYNOS_7870_STD
else ifeq ($(SEC_PRODUCT), exynos7880)
PLATFORM ?= EXYNOS_7880_STD
else ifeq ($(SEC_PRODUCT), exynos7570)
PLATFORM ?= EXYNOS_7570_STD
else ifeq ($(SEC_PRODUCT), exynos8895)
PLATFORM ?= EXYNOS_8895_STD
else ifeq ($(SEC_PRODUCT), exynos9810)
PLATFORM ?= EXYNOS_9810_STD
else ifeq ($(SEC_PRODUCT), exynos7885)
PLATFORM ?= EXYNOS_7885_STD
endif

#-------------------------------------------------------------------------------
# Output
#-------------------------------------------------------------------------------
### output name without path or extension
OUTPUT_NAME := fcdrv

### Mobiconvert parameters
DRIVER_UUID := FFFFFFFF000000000000000000000002
DRIVER_MEMTYPE := 2 # 0: iram preferred; 1: iram; 2: eram
DRIVER_NO_OF_THREADS := 6 # min =1; max =8
DRIVER_SERVICE_TYPE := 1 # 1: driver; 2: service provider trustlet; 3: system trustlet
DRIVER_KEYFILE := $(DRIVER_DIR)/../Build/pairVendorTltSig.pem
DRIVER_FLAGS:= 1 # 0: no flag; 1: permanent; 2: service has no WSM control interface; 3: both (permanent and service has not WSM control interface)
DRIVER_ID := 262149 # >100
DRIVER_INTERFACE_VERSION := 0.0

ifeq ($(TBASE), T301)
SIGN_RUNTYPE := gd_mobicore31_trustlet
SIGN_MODEL := EXYNOS$(strip $(subst exynos, ,$(SEC_PRODUCT)))_MOBICORE
else ifeq ($(TBASE), T302)
ifeq ($(SEC_PRODUCT), exynos3250)
SIGN_RUNTYPE := gd_mobicore32_trustlet
SIGN_MODEL := EXYNOS$(strip $(subst exynos, ,$(SEC_PRODUCT)))_MOBICORE_T
else
SIGN_RUNTYPE := gd_mobicore32_trustlet
SIGN_MODEL := EXYNOS$(strip $(subst exynos, ,$(SEC_PRODUCT)))_MOBICORE
endif
else ifeq ($(TBASE), T310)
SIGN_RUNTYPE := gd_mobicore310_trustlet
SIGN_MODEL := EXYNOS$(strip $(subst exynos, ,$(SEC_PRODUCT)))_MOBICORE
else ifeq ($(TBASE), T311)
SIGN_RUNTYPE := gd_mobicore311_trustlet
SIGN_MODEL := EXYNOS$(strip $(subst exynos, ,$(SEC_PRODUCT)))_MOBICORE
else ifeq ($(TBASE), T400)
SIGN_RUNTYPE := gd_mobicore400_trustlet
SIGN_MODEL := EXYNOS$(strip $(subst exynos, ,$(SEC_PRODUCT)))_MOBICORE
else ifeq ($(TBASE), T300)
SIGN_RUNTYPE := gd_mobicore30_trustlet
SIGN_MODEL := EXYNOS$(strip $(subst exynos, ,$(SEC_PRODUCT)))_MOBICORE
else ifeq ($(TBASE), T200)
ifeq ($(SEC_PRODUCT), exynos5260)
SIGN_RUNTYPE := gd_mobicore20_trustlet
SIGN_MODEL := EXYNOS$(strip $(subst exynos, ,$(SEC_PRODUCT)))_MOBICORE
else
SIGN_RUNTYPE := gd_mobicore20_trustlet
SIGN_MODEL := mobicore
endif
else
$(error invalid TBASE = $(TBASE))
endif

ifneq ($(filter exynos7885 exynos8895 exynos9810, $(SEC_PRODUCT)), )
DR_PROPERTY := "-s 1 -n 3 -m 2 -f 9 -d 262149 -iv $(DRIVER_INTERFACE_VERSION)"
ifneq ($(filter exynos9810, $(SEC_PRODUCT)), )
TBASE_API_LEVEL := 8
else
TBASE_API_LEVEL := 5
endif
else ifneq ($(filter exynos8890 exynos7870 exynos7880 exynos7570, $(SEC_PRODUCT)), )
DR_PROPERTY := "-s 1 -n 3 -m 2 -f 9 -d 262149 -iv 1.2"
TBASE_API_LEVEL := 5
else
DR_PROPERTY := "-s 1 -n 3 -m 2 -f 1 -d 262149 -iv 1.2"
TBASE_API_LEVEL := 3
endif

#-------------------------------------------------------------------------------
# Files and include paths - Add your files here
#-------------------------------------------------------------------------------

### A simple scatter file and set SCATTER_FILE.
### Uncomment this to use a custom scatter file $(OUTPUT_NAME).sct
#SCATTER_FILE := $(COMP_PATH_ROOT)/$(COMP_PATH_DrSdk)/dr.sct

### Add include path here
INCLUDE_DIRS += \
	$(DRIVER_DIR) \
	$(DRIVER_DIR)/public \
	$(DRIVER_DIR)/inc \
	$(DRIVER_DIR)/drivers \
	$(DRIVER_DIR)/api

SRC_LIB_C += #nothing

### Add source code files for C++ compiler here
SRC_CPP += \
	$(DRIVER_DIR)/drMain.c \
	$(DRIVER_DIR)/drMobicore.c \
	$(DRIVER_DIR)/drIpcHandler.c \
	$(DRIVER_DIR)/drExcHandler.c \
	$(DRIVER_DIR)/drUtils.c \
	$(DRIVER_DIR)/fcMain.c \
	$(DRIVER_DIR)/fcUART.c \
	$(DRIVER_DIR)/whitelist.c \

BUILD_DATE := \"`date '+%Y.%m.%d'`\"
ARMCC_COMPILATION_FLAGS := -D_BUILD_DATE=$(BUILD_DATE)

#Jenkins build info
ifneq ($(BUILD_NUMBER), )
ARMCC_COMPILATION_FLAGS += -D_BUILD_INFO=\"$(BUILD_NUMBER)\"
else
ARMCC_COMPILATION_FLAGS += -D_BUILD_INFO=\"0\"
endif

ifeq ($(TBASE), T302)
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_TBASE302
endif

ifeq ($(SEC_PRODUCT), exynos5410)
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_EXYNOS5410
else ifeq ($(SEC_PRODUCT), exynos5420)
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_EXYNOS5420

SRC_LIB_C += \
        $(DRLIB_DIR)/tlapi_fchandler.c

else ifeq ($(SEC_PRODUCT), exynos4x12)
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_4X12
else ifeq ($(SEC_PRODUCT), exynos5260)
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_EXYNOS5260

SRC_CPP += \
	$(DRIVER_DIR)/drivers/efusewriter.c

SRC_LIB_C += \
	$(DRLIB_DIR)/tlapi_fchandler.c

else ifeq ($(SEC_PRODUCT), exynos5430)
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_EXYNOS5430

SRC_CPP += \
	$(DRIVER_DIR)/drivers/efusewriter.c

### For Fingerprint SPI Protection
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_FP_TZ_CONTROL

SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-fp.c
### For Fingerprint SPI Protection

SRC_LIB_C += \
        $(DRLIB_DIR)/tlapi_fchandler.c
else ifeq ($(SEC_PRODUCT), exynos5422)
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_EXYNOS5422

SRC_LIB_C += \
        $(DRLIB_DIR)/tlapi_fchandler.c
else ifeq ($(SEC_PRODUCT), exynos3470)
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_EXYNOS3470

SRC_LIB_C += \
        $(DRLIB_DIR)/tlapi_fchandler.c

else ifeq ($(SEC_PRODUCT), exynos3475)
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_EXYNOS3475

SRC_LIB_C += \
        $(DRLIB_DIR)/tlapi_fchandler.c

SRC_CPP += \
	$(DRIVER_DIR)/drivers/efusewriter.c \
	$(DRIVER_DIR)/drivers/trng.c

else ifeq ($(SEC_PRODUCT), exynos3472)
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_EXYNOS3472

SRC_LIB_C += \
        $(DRLIB_DIR)/tlapi_fchandler.c
else ifeq ($(SEC_PRODUCT), exynos3250)
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_EXYNOS3250 -DCONFIG_KNOX_GEARPAY

SRC_LIB_C += \
        $(DRLIB_DIR)/tlapi_fchandler.c
else ifeq ($(SEC_PRODUCT), exynos4415)
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_EXYNOS4415

SRC_LIB_C += \
        $(DRLIB_DIR)/tlapi_fchandler.c

SRC_CPP += \
	$(DRIVER_DIR)/drivers/efusewriter.c
else ifeq ($(SEC_PRODUCT), exynos5433)
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_EXYNOS5433 -D__AARCH32__ -DARM_LPAE

SRC_CPP += \
	$(DRIVER_DIR)/drivers/otp.c	\
	$(DRIVER_DIR)/drivers/trng.c

### For Fingerprint SPI Protection
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_FP_TZ_CONTROL

SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-fp.c
### For Fingerprint SPI Protection

SRC_LIB_C += \
	$(DRLIB_DIR)/tlapi_fchandler.c
else ifeq ($(SEC_PRODUCT), exynos7420)
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_EXYNOS7420 -D__AARCH32__ -DARM_LPAE

SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-mst.c \
	$(DRIVER_DIR)/drivers/mstdrv.c

### For Fingerprint SPI Protection
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_FP_TZ_CONTROL

SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-fp.c
### For Fingerprint SPI Protection

ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_ESE_TZ_CONTROL -DCONFIG_ESE_GPIO_PROTECTION
SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-ese.c \
	$(DRIVER_DIR)/drivers/gpio-ese-platform.c

SRC_LIB_C += \
	$(DRLIB_DIR)/tlapi_fchandler.c	
	
SRC_ASM += \
	$(DRIVER_DIR)/drivers/delay.s

else ifeq ($(SEC_PRODUCT), exynos7580)
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_EXYNOS7580 -D__AARCH32__ -DARM_LPAE

SRC_CPP += \
	$(DRIVER_DIR)/drivers/otp.c \
	$(DRIVER_DIR)/drivers/trng.c \

### For Fingerprint SPI Protection
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_FP_TZ_CONTROL

SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-fp.c
### For Fingerprint SPI Protection

SRC_LIB_C += \
	$(DRLIB_DIR)/tlapi_fchandler.c

### For MST driver
SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-mst.c \
	$(DRIVER_DIR)/drivers/mstdrv.c

SRC_ASM += \
	$(DRIVER_DIR)/drivers/delay.s

### for eSE
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_ESE_TZ_CONTROL
SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-ese.c \
	$(DRIVER_DIR)/drivers/gpio-ese-platform.c

else ifeq ($(SEC_PRODUCT), exynos8890)
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_EXYNOS8890 -D__AARCH32__ -DARM_LPAE

SRC_LIB_C += \
	$(DRLIB_DIR)/tlapi_fchandler.c

### For MST driver
SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-mst.c \
	$(DRIVER_DIR)/drivers/mstdrv.c

SRC_ASM += \
	$(DRIVER_DIR)/drivers/delay.s

### For Fingerprint SPI Protection
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_FP_TZ_CONTROL

SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-fp.c
### For Fingerprint SPI Protection

### for eSE
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_ESE_TZ_CONTROL -DCONFIG_ESE_GPIO_PROTECTION
SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-ese.c \
	$(DRIVER_DIR)/drivers/gpio-ese-platform.c

### For Secure Camera
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_SECURE_CAMERA \

SRC_CPP += \
	$(DRIVER_DIR)/drivers/sec_cam.c
### For Secure Camera

else ifeq ($(SEC_PRODUCT), exynos7870)
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_EXYNOS7870 -D__AARCH32__ -DARM_LPAE

SRC_LIB_C += \
	$(DRLIB_DIR)/tlapi_fchandler.c

### For MST driver
SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-mst.c \
	$(DRIVER_DIR)/drivers/mstdrv.c

SRC_ASM += \
	$(DRIVER_DIR)/drivers/delay.s

### For Fingerprint SPI Protection
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_FP_TZ_CONTROL

SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-fp.c
### For Fingerprint SPI Protection

ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_ESE_TZ_CONTROL
SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-ese.c \
	$(DRIVER_DIR)/drivers/gpio-ese-platform.c

else ifeq ($(SEC_PRODUCT), exynos7880)
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_EXYNOS7880 -D__AARCH32__ -DARM_LPAE

SRC_LIB_C += \
	$(DRLIB_DIR)/tlapi_fchandler.c

### For MST driver
SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-mst.c \
	$(DRIVER_DIR)/drivers/mstdrv.c

SRC_ASM += \
	$(DRIVER_DIR)/drivers/delay.s

ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_ESE_TZ_CONTROL
SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-ese.c \
	$(DRIVER_DIR)/drivers/gpio-ese-platform.c

### For Fingerprint SPI Protection
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_FP_TZ_CONTROL

SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-fp.c
### For Fingerprint SPI Protection

else ifeq ($(SEC_PRODUCT), exynos7570)
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_EXYNOS7570 -D__AARCH32__ -DARM_LPAE

SRC_LIB_C += \
	$(DRLIB_DIR)/tlapi_fchandler.c

### For Fingerprint SPI Protection
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_FP_TZ_CONTROL

SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-fp.c
### For Fingerprint SPI Protection

else ifeq ($(SEC_PRODUCT), exynos8895)
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_EXYNOS8895 -D__AARCH32__ -DARM_LPAE

SRC_LIB_C += \
	$(DRLIB_DIR)/tlapi_fchandler.c
	
SRC_ASM += \
	$(DRIVER_DIR)/drivers/delay.s \
	$(DRIVER_DIR)/drivers/smc.s	

### For MST driver
SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-mst.c \
	$(DRIVER_DIR)/drivers/mstdrv.c

SRC_ASM += \
	$(DRIVER_DIR)/drivers/delay.s

### For Fingerprint SPI Protection
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_FP_TZ_CONTROL

SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-fp.c
### For Fingerprint SPI Protection

### for eSE
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_ESE_TZ_CONTROL -DCONFIG_ESE_GPIO_PROTECTION
SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-ese.c \
	$(DRIVER_DIR)/drivers/gpio-ese-platform.c

### For Secure Camera
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_SECURE_CAMERA \

SRC_CPP += \
	$(DRIVER_DIR)/drivers/sec_cam_8895.c
### For Secure Camera
	
else ifeq ($(SEC_PRODUCT), exynos9810)
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_EXYNOS9810 -D__AARCH32__ -DARM_LPAE

### For MST driver
SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-mst.c \
	$(DRIVER_DIR)/drivers/mstdrv.c

SRC_ASM += \
	$(DRIVER_DIR)/drivers/delay.s

### for eSE
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_ESE_TZ_CONTROL -DCONFIG_ESE_GPIO_PROTECTION
SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-ese.c \
	$(DRIVER_DIR)/drivers/gpio-ese-platform.c

SRC_LIB_C += \
	$(DRLIB_DIR)/tlapi_fchandler.c

SRC_ASM += \
	$(DRIVER_DIR)/drivers/delay.s \
	$(DRIVER_DIR)/drivers/smc.s		


### For Secure Camera
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_SECURE_CAMERA \

SRC_CPP += \
	$(DRIVER_DIR)/drivers/sec_cam_9810.c
### For Secure Camera



ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_FP_TZ_CONTROL

SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-fp.c
### For Fingerprint SPI Protection

else ifeq ($(SEC_PRODUCT), exynos7885)
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_EXYNOS7885 -D__AARCH32__ -DARM_LPAE
	
SRC_LIB_C += \
	$(DRLIB_DIR)/tlapi_fchandler.c

### For Fingerprint SPI Protection
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_FP_TZ_CONTROL

SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-fp.c
### For Fingerprint SPI Protection

### For MST driver
SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-mst.c \
	$(DRIVER_DIR)/drivers/mstdrv.c

SRC_ASM += \
	$(DRIVER_DIR)/drivers/delay.s

### for eSE
ARMCC_COMPILATION_FLAGS += \
	-DCONFIG_ESE_TZ_CONTROL
SRC_CPP += \
	$(DRIVER_DIR)/drivers/gpio-ese.c \
	$(DRIVER_DIR)/drivers/gpio-ese-platform.c
endif
### Add source code files for C compiler here
SRC_C += #nothing

### Add source code files for assembler here
SRC_S += # nothing

SRC_ASM += $(DRIVER_DIR)/fcCrt.s

#-------------------------------------------------------------------------------
# use generic make file
include $(DRSDK_DIR_SRC)/driver.mk

