#===============================================================================
# export variables
#===============================================================================
ifeq ($(CONFIG_SOCT_KMOD_CFLAGS),)
ccflags-y += $(CONFIG_SOCT_KMOD_CFLAGS)
endif

#===============================================================================
# local variable
#===============================================================================
ccflags-y += -Idrivers/drv/ioctl_inc/keyslot
ccflags-y += -Idrivers/drv/ioctl_inc/generic
ccflags-y += -Idrivers/drv/ioctl_inc/common
ccflags-y += -Idrivers/drv/ext_inc/base
ccflags-y += -Idrivers/drv/ext_inc/cipher
ccflags-y += -Idrivers/drv/ext_inc/osal
ccflags-y += -Idrivers/drv/ext_inc/common
ccflags-y += -Idrivers/drv/ext_inc/keyslot
ccflags-y += -Idrivers/drv/ext_inc/klad
ccflags-y += -Idrivers/drv/ext_inc/dftevent
ccflags-y += -Idrivers/drv/common/include
ccflags-y += -Iinclude/klad/
ccflags-y += -Idrivers/huanglong/tee/tee_tz/tzdriver

ccflags-y += -fstack-protector-all
ccflags-y += -D_FORTIFY_SOURCE=2
ccflags-y += -Wl,-z,relro
ccflags-y += -z now
ccflags-y += -Wl,-z,noexecstack
ccflags-y += -DCONFIG_SOCT_CIPHER_FMEA_SUPPORT

MODNAME := soc_cipher

ifeq ($(CONFIG_SOCT_DRV_BUILDIN),y)
obj-$(CONFIG_SOCT_KEYSLOT_SUPPORT) += $(MODNAME).o
else
    obj-m += $(MODNAME).o
endif

CIPHER_DIR := drivers/drv/cipher/drivers
OPENSOURCE_MBEDTLS_DIR_ABSOLUTES := $(VENDOR_DIR)/open_source/mbedtls
OPENSOURCE_MBEDTLS_DIR_RELATIVE := ../../../../../open_source/mbedtls
COMMON_DIR_RELATIVE     := ../cipher_common
COMMON_DIR_IN_KERNEL    := drivers/drv/cipher/cipher_common

CIPHER_OBJS-y   :=
CIPHER_CFLAGS :=

CRYPTO_UT_TEST_ENABLE   := n
CRYPTO_DTS_TEST_ENABLE  := n

ifneq ($(findstring $(CONFIG_SOCT_CHIP_TYPE), "shaolingun" "wudangstick"),)
CRYPTO_CHIP_NAME    := shaolingun
endif

ifneq ($(findstring $(CONFIG_SOCT_CHIP_TYPE), "shaolinsword" "hi3751v811" "shaolinknive" "shaolinaxe"),)
CRYPTO_CHIP_NAME    := shaolinsword
endif

ifeq ($(CRYPTO_CHIP_NAME), shaolingun)
CRYPTO_TRNG_VERSION := v2
CRYPTO_SYMC_VERSION := v2
CRYPTO_HASH_VERSION := v2
CRYPTO_PKE_VERSION  := v2
CRYPTO_HDCP_VERSION := v2
CIPHER_CFLAGS   += -DCONFIG_CRYPTO_CHIP_SHAOLINGUN
endif

ifeq ($(CRYPTO_CHIP_NAME), shaolinsword)
CRYPTO_TRNG_VERSION := v2
CRYPTO_SYMC_VERSION := v1
CRYPTO_HASH_VERSION := v1
CRYPTO_PKE_VERSION  := v1
CRYPTO_HDCP_VERSION := v1
CIPHER_CFLAGS   += -DCONFIG_CRYPTO_CHIP_SHAOLINSWORD
endif

# Platform
CIPHER_CFLAGS   += -I$(CIPHER_DIR)

CIPHER_CFLAGS   += -I$(CIPHER_DIR)/include

# HDCP
CIPHER_OBJS-y       += hdcp/hal_hdcp_$(CRYPTO_HDCP_VERSION).o
CIPHER_OBJS-y       += hdcp/hal_hdcp_common.o
CIPHER_OBJS-y       += hdcp/drv_hdcp.o
CIPHER_OBJS-y       += hdcp/kapi_hdcp.o
CIPHER_CFLAGS   += -I$(CIPHER_DIR)/hdcp
CIPHER_CFLAGS   += -I$(COMMON_DIR_IN_KERNEL)/hal_code/spacc_$(CRYPTO_SYMC_VERSION)
CIPHER_CFLAGS   += -DCONFIG_CRYPTO_CHIP_HDCP_SUPPORT


# Crypto_OSAL-Linux
CIPHER_OBJS-y       += crypto_osal/crypto_osal_lib.o
CIPHER_OBJS-y       += crypto_osal/crypto_osal_tee.o
CIPHER_OBJS-y       += crypto_osal/crypto_drv_cipher_ext.o
CIPHER_CFLAGS   += -I$(CIPHER_DIR)/crypto_osal

# Driver-Common
CIPHER_OBJS-y       += $(COMMON_DIR_RELATIVE)/drv_code/crypto_drv_common.o
CIPHER_CFLAGS   += -I$(COMMON_DIR_IN_KERNEL)/drv_code

# Driver-Dispatch
CIPHER_OBJS-y       += $(COMMON_DIR_RELATIVE)/dispatch_code/crypto_dispatch.o
CIPHER_CFLAGS   += -I$(COMMON_DIR_IN_KERNEL)/dispatch_code

# Driver-Drv
CIPHER_OBJS-y       += $(COMMON_DIR_RELATIVE)/drv_code/drv_pbkdf2_soft.o
CIPHER_OBJS-y       += $(COMMON_DIR_RELATIVE)/drv_code/drv_hash.o
CIPHER_OBJS-y       += $(COMMON_DIR_RELATIVE)/drv_code/drv_trng.o
CIPHER_OBJS-y       += $(COMMON_DIR_RELATIVE)/drv_code/drv_symc.o
CIPHER_OBJS-y       += $(COMMON_DIR_RELATIVE)/drv_code/drv_symc_mac_soft.o
CIPHER_OBJS-y       += $(COMMON_DIR_RELATIVE)/drv_code/drv_cenc_hard.o
CIPHER_OBJS-y       += $(COMMON_DIR_RELATIVE)/drv_code/drv_pke.o
CIPHER_OBJS-y       += $(COMMON_DIR_RELATIVE)/drv_code/drv_pke_rsa.o
CIPHER_OBJS-y       += $(COMMON_DIR_RELATIVE)/drv_code/drv_pke_ecc.o
CIPHER_OBJS-y       += $(COMMON_DIR_RELATIVE)/drv_code/drv_pke_ecc_curve.o
CIPHER_OBJS-y       += $(COMMON_DIR_RELATIVE)/drv_code/fmea/fmea.o
CIPHER_CFLAGS       += -I$(COMMON_DIR_IN_KERNEL)/drv_code
CIPHER_CFLAGS       += -I$(COMMON_DIR_IN_KERNEL)/drv_code/fmea

# Driver-Init
CIPHER_OBJS-y       += init/crypto_drv_init.o
CIPHER_OBJS-y       += init/crypto_proc.o

# Driver-Kapi
CIPHER_OBJS-y       += $(COMMON_DIR_RELATIVE)/kapi_code/kapi_hash.o
CIPHER_OBJS-y       += $(COMMON_DIR_RELATIVE)/kapi_code/kapi_trng.o
CIPHER_OBJS-y       += $(COMMON_DIR_RELATIVE)/kapi_code/kapi_symc.o
CIPHER_OBJS-y       += $(COMMON_DIR_RELATIVE)/kapi_code/kapi_pke.o
CIPHER_OBJS-y       += $(COMMON_DIR_RELATIVE)/kapi_code/kapi_init.o
CIPHER_CFLAGS   += -I$(COMMON_DIR_IN_KERNEL)/kapi_code

# HAL-SPACC
CIPHER_OBJS-y       += $(COMMON_DIR_RELATIVE)/hal_code/spacc_$(CRYPTO_HASH_VERSION)/hal_hash.o
CIPHER_OBJS-y       += $(COMMON_DIR_RELATIVE)/hal_code/spacc_$(CRYPTO_SYMC_VERSION)/hal_symc.o

# HAL-TRNG
CIPHER_OBJS-y       += $(COMMON_DIR_RELATIVE)/hal_code/trng_v2/hal_trng.o

# HAL-PKE
CIPHER_OBJS-y       += $(COMMON_DIR_RELATIVE)/hal_code/pke_$(CRYPTO_PKE_VERSION)/hal_pke.o

# Include
CIPHER_CFLAGS   += -I$(COMMON_DIR_IN_KERNEL)/include/common_include
CIPHER_CFLAGS   += -I$(COMMON_DIR_IN_KERNEL)/include/hal_include
CIPHER_CFLAGS   += -I$(COMMON_DIR_IN_KERNEL)/include/kapi_include
CIPHER_CFLAGS   += -I$(COMMON_DIR_IN_KERNEL)/include/drv_include
CIPHER_CFLAGS   += -I$(COMMON_DIR_IN_KERNEL)/include/ioctl_include

# ext include
DRIVERS_DIR	:= drivers/drv
CIPHER_CFLAGS	+= -I$(DRIVERS_DIR)/include/klad
CIPHER_CFLAGS	+= -I$(DRIVERS_DIR)/include/keyslot
CIPHER_CFLAGS	+= -I$(DRIVERS_DIR)/ioctl_inc/klad
CIPHER_CFLAGS	+= -I$(DRIVERS_DIR)/ext_inc/klad
CIPHER_CFLAGS	+= -I$(DRIVERS_DIR)/ioctl_inc/keyslot
CIPHER_CFLAGS	+= -I$(DRIVERS_DIR)/ext_inc/keyslot

# Feature
CIPHER_CFLAGS   += -DCRYPTO_CTR_NON_ALIGN_SUPPORT


# Debug
# CIPHER_CFLAGS += -DCRYPTO_DISPATCH_FUNC_TRACE_ENABLE
# CIPHER_CFLAGS += -DCRYPTO_KAPI_FUNC_TRACE_ENABLE
# CIPHER_CFLAGS += -DCRYPTO_HAL_FUNC_TRACE_ENABLE
# CIPHER_CFLAGS += -DCRYPTO_SYMC_HAL_NODE_DEBUG_ENABLE
# CIPHER_CFLAGS += -DCRYPTO_DRV_FUNC_TRACE_ENABLE
# CIPHER_CFLAGS += -DCRYPTO_LOG_LEVEL=4
# CIPHER_CFLAGS   += -DCRYPTO_CTR_TRACE_ENABLE

ifeq ($(CONFIG_DEBUG_ENABLE), y)
## DISPATCH
CIPHER_CFLAGS   += -DCRYPTO_DISPATCH_FUNC_TRACE_ENABLE

## KAPI

## DRV

## HAL
CIPHER_CFLAGS   += -DCRYPTO_HAL_FUNC_TRACE_ENABLE
CIPHER_CFLAGS   += -DCRYPTO_SYMC_HAL_NODE_DEBUG_ENABLE
CIPHER_CFLAGS   += -DCRYPTO_SYMC_HAL_DEBUG_ENABLE
endif


$(MODNAME)-objs-y += $(CIPHER_OBJS-y)
ccflags-y   += $(CIPHER_CFLAGS)


$(MODNAME)-objs := $($(MODNAME)-objs-y)
