# when compile ko, you need to rename this file as Makefile, cos scripts of linux only recognize Makefile
ifneq ($(LLVM),)
CLANG_CC := aarch64-unknown-linux-ohos-clang
KERNEL_CROSS_COMPILE := CC="$(CLANG_CC)"
KERNEL_CROSS_COMPILE += LLVM=1 LLVM_IAS=1
else
export CC := $(CROSS_COMPILE)gcc
export LD := $(CROSS_COMPILE)ld
endif

# PWD := $(KERNEL_PATH)/drivers/hisi/tzdriver
PWD=$(TZDRIVER_BUILD_DIR)

obj-m := tzdriver.o
CONFIG_FFA_SUPPORT := 0

CONFIG_CLIENT_AUTH ?= y

tzdriver-objs := core/smc_smp.o core/tc_client_driver.o core/session_manager.o core/mailbox_mempool.o core/teek_app_load.o core/teek_app_read.o
tzdriver-objs += core/agent.o core/gp_ops.o core/mem.o core/cmdmonitor.o core/tzdebug.o core/tz_spi_notify.o
tzdriver-objs += auth/auth_base_impl.o auth/auth_path_impl.o tlogger/tlogger.o tlogger/log_pages_cfg.o
tzdriver-objs += src_adaptor/ko_adapt.o src_adaptor/tc_current_info.o src_adaptor/tc_device_node.o src_adaptor/tc_freeze.o
tzdriver-objs += src_adaptor/tc_mem.o src_adaptor/tc_shadow.o src_adaptor/tc_tlogger_poll.o
tzdriver-objs += core/tee_compat_check.o
tzdriver-objs += core/tee_info.o
tzdriver-objs += core/reserved_mempool.o
tzdriver-objs += core/shared_mem.o

tzdriver-$(CONFIG_CLIENT_AUTH) += auth/client_hash_auth.o

ifeq ($(CONFIG_FFA_SUPPORT), 1)
EXTRA_CFLAGS += -DCONFIG_FFA_SUPPORT
tzdriver-objs += core/ffa_abi.o
else
tzdriver-objs += core/smc_abi.o
endif

ifeq ($(CONFIG_INTERNEL_FFA_MODULE), 1)
EXTRA_CFLAGS += -DCONFIG_INTERNEL_FFA_MODULE
EXTRA_CFLAGS += -DDEFAULT_TEE_SP_ID=0x8000
EXTRA_CFLAGS += -DCURRENT_VM_ID=0x0
EXTRA_CFLAGS += -I$(PWD)/tzdriver_internal/ffa
tzdriver-objs += tzdriver_internal/ffa/inner_ffa_driver.o
endif

ifneq ($(TARGET_BUILD_VARIANT),user)
tzdriver-objs += whitelist/agent_allowed_ca.o
EXTRA_CFLAGS += -DDEF_ENG
endif

ifeq ($(CONFIG_TEE_TELEPORT_SUPPORT), y)
tzdriver-objs += core/tee_portal.o
ifeq ($(CROSS_DOMAIN_PERF), y)
tzdriver-objs += core/tee_posix_listener.o
endif
EXTRA_CFLAGS += -DCONFIG_TEE_TELEPORT_SUPPORT -DCONFIG_TEE_TELEPORT_AUTH
EXTRA_CFLAGS += -DTEE_TELEPORT_PATH_UID_AUTH_CTX=\"/vendor/bin/tee_teleport:0\"
tzdriver-objs += core/tc_cvm_driver.o
endif

ifeq ($(CONFIG_CONFIDENTIAL_CONTAINER), y)
EXTRA_CFLAGS += -DCONFIG_CONFIDENTIAL_CONTAINER -DCONFIG_TEE_AGENTD_AUTH
EXTRA_CFLAGS += -DTEE_AGENTD_PATH_UID_AUTH_CTX=\"/vendor/bin/agentd:0\"
tzdriver-objs += core/tc_cvm_driver.o
endif

ifeq ($(CONFIG_CONFIDENTIAL_TEE), y)
EXTRA_CFLAGS += -DCONFIG_CONFIDENTIAL_TEE -DCONFIG_NEW_TEE_LOADED=1
endif

RESULT := $(shell cat /proc/kallsyms | grep vsnprintf_s)

STATUS := $(findstring vsnprintf_s, $(RESULT))
ifeq ($(CONFIG_CLIENT_AUTH), y)
EXTRA_CFLAGS += -DCONFIG_CLIENT_AUTH
endif
EXTRA_CFLAGS += -fno-stack-protector -DCONFIG_TEELOG -DCONFIG_TZDRIVER_MODULE -DCONFIG_TEECD_AUTH -DCONFIG_PAGES_MEM=y -DCONFIG_LIVEPATCH_DEBUG
EXTRA_CFLAGS += -DCONFIG_NOCOPY_SHAREDMEM
EXTRA_CFLAGS += -I$(PWD)/../iTrustee/platform/libhwsecurec/include -I$(PWD) -I$(PWD)/agent_rpmb/core -I$(PWD)/auth -I$(PWD)/core -I$(PWD)/src_adaptor -I$(PWD)/include
EXTRA_CFLAGS += -I$(PWD)/tzdriver_internal/include -I$(PWD)/tlogger -I$(PWD)/tzdriver_internal/tui -I$(PWD)/tzdriver_internal/kthread_affinity -I$(PWD)/ion
EXTRA_CFLAGS += -I$(PWD)/tzdriver_internal/livepatch -I$(PWD)/tzdriver_internal/tee_trace_event -I$(PWD)/tzdriver_internal/tee_reboot
EXTRA_CFLAGS += -I$(PWD)/../../../../sdk_linux/src_tmp/platform/securec/include
EXTRA_CFLAGS += -DCONFIG_CPU_AFF_NR=0 -DCONFIG_512K_LOG_PAGES_MEM -Wframe-larger-than=4096
EXTRA_CFLAGS += -DCONFIG_TEE_LOG_ACHIVE_PATH=\"/var/log/tee/last_teemsg\"
EXTRA_CFLAGS += -DCONFIG_INT_TRACE_LOG_PATH=\"/var/log/int_trace\"
EXTRA_CFLAGS += -DCONFIG_EVENT_TRACE_LOG_PATH=\"/var/log/event_trace\"
EXTRA_CFLAGS += -DCONFIG_TA_AFFINITY=y -DCONFIG_TA_AFFINITY_CPU_NUMS=4
EXTRA_CFLAGS += -DTEECD_PATH_UID_AUTH_CTX=\"/vendor/bin/teecd:0\"
EXTRA_CFLAGS += -DMAILBOX_POOL_COUNT=4
EXTRA_CFLAGS += -lsecurec -L$(OPEN_SOURCE)/../platform/securec/lib
EXTRA_CFLAGS += -DFEIMA_TA_PATH_LOADED_BY_TZDRIVER=\"/vendor/etc/passthrough/teeos/ta\"
ifeq ($(CROSS_DOMAIN_PERF), y)
EXTRA_CFLAGS += -DCROSS_DOMAIN_PERF
endif

ifeq ($(ARCH), arm)
	EXTRA_CFLAGS += -DCONFIG_ARCH32
endif

all:
	make ARCH=$(ARCH) -C $(KDIR) M=$(PWD) $(KERNEL_CROSS_COMPILE) modules
clean:
	-rm -vrf .*.cmd *.mod tzdriver_internal/*/.*o.cmd tzdriver_internal/*/*.o src_adaptor/*.o
	-rm -vrf *.o *.ko auth/*.o core/*.o tlogger/*.o ../iTrustee/platform/libhwsecurec/src/*.o
	-rm -vrf *.order *.symvers *.mod.c .tmp_versions .*.o.cmd auth/.*.o.cmd core/.*.o.cmd tlogger/.*.o.cmd ../iTrustee/platform/libhwsecurec/src/.*.o.cmd src_adaptor/.*.o.cmd
	-rm -vrf auth/.*.o.d core/.*.o.d tlogger/.*.o.d ../iTrustee/platform/libhwsecurec/src/.*.o.d src_adaptor/.*.o.d
