SUFFIX_STR := 

#folder path define

COMMON_DIR:=./PCIE/core
MHCCIF_DIR:=./ext_drv/mhccif
PCIE_PLT_DIR:=./PCIE/platform
CCCI_DIR:=./ext_drv/ccci
PCI_DRV_DIR:=./pcie_drv
UTIL_DIR:=./util
MTK_PLAT:=M8X75

define clean_ops
	@make -C $(KDIR) M=$(shell pwd) clean
	@rm -rf $(shell pwd)/*.o
	@rm -rf $(shell pwd)/.*.o.cmd
	@rm -rf $(shell pwd)/*.o.ur-safe
endef

ifeq ($(MTK_PLAT),$(EMPTY_STR))
	MTK_PLAT := M7X
	PLATDIR=$(PCIE_PLT_DIR)/M7X
	MICRO_DEF += -DM7X
	MICRO_DEF += -DFT_PORT_ENUM
else ifeq ($(MTK_PLAT),M7X)
	PLATDIR=$(PCIE_PLT_DIR)/M7X
	MICRO_DEF += -DM7X
	MICRO_DEF += -DFT_PORT_ENUM
	#echo "MTK_PLAT match M7X"
else ifeq ($(MTK_PLAT),M8X75)
	#MICRO_DEF += -DMTK_PCIE_MSIX
	#MICRO_DEF += -DMTK_PCIE_ASPM_DISABLE
	MICRO_DEF += -DFT_PORT_ENUM
	PLATDIR=$(PCIE_PLT_DIR)/M8X/75
	MICRO_DEF += -DM8X75
	SUFFIX_STR := _m80
endif
ifeq ($(SUFFIX_STR),$(EMPTY_STR))
	MODULENAME := mtk_pcie_wwan_m70
else 
	MODULENAME := mtk_pcie_wwan$(SUFFIX_STR)
endif
obj-m += $(MODULENAME).o
#pcie folder files
ifneq ($(KERNELRELEASE),)

$(MODULENAME)-objs += \
	$(COMMON_DIR)/mtk-pcie.o \
	$(COMMON_DIR)/mtk-pci.o \
	$(COMMON_DIR)/mtk-isr.o \
	$(COMMON_DIR)/mtk-pci-ext.o \
	$(PCI_DRV_DIR)/mtk-pci-drv.o \
	$(PCI_DRV_DIR)/mtk-pci-rescan.o \
	$(PCI_DRV_DIR)/mtk-pcie-drv-test.o\
	$(MHCCIF_DIR)/mhccif.o \
	$(PLATDIR)/mtk-pcie-mac.o

#ccci folder files

# ccci_util objects
$(MODULENAME)-objs += $(CCCI_DIR)/ccci_util/ccci_util_lib_main.o \
						$(CCCI_DIR)/ccci_util/ccci_util_lib_sys.o \
						$(CCCI_DIR)/ccci_util/ccci_private_log.o

# ccmni objects
$(MODULENAME)-objs += $(CCCI_DIR)/ccmni/ccmni$(SUFFIX_STR).o


# ccci_core
$(MODULENAME)-objs += $(CCCI_DIR)/eccci/ccci_core/ccci_bm.o \
						$(CCCI_DIR)/eccci/ccci_core/ccci_core.o \
						$(CCCI_DIR)/eccci/ccci_core/modem_sys.o \
						$(CCCI_DIR)/eccci/ccci_core/modem_sys_1.o\
						$(CCCI_DIR)/eccci/ccci_core/md_sys1_platform.o

# fsm
$(MODULENAME)-objs += $(CCCI_DIR)/eccci/fsm/ccci_fsm.o \
						$(CCCI_DIR)/eccci/fsm/ccci_fsm_ee.o \
						$(CCCI_DIR)/eccci/fsm/ccci_fsm_ioctl.o \
						$(CCCI_DIR)/eccci/fsm/ccci_fsm_monitor.o \
						$(CCCI_DIR)/eccci/fsm/ccci_fsm_poller.o \
						$(CCCI_DIR)/eccci/fsm/mdee_dumper_v3.o
# hif
$(MODULENAME)-objs +=  $(CCCI_DIR)/eccci/hif/ccci_hif.o \
						$(CCCI_DIR)/eccci/hif/ccci_hif_cldma.o \
						$(CCCI_DIR)/eccci/hif/ccci_hw_driver/ccci_driver.o \
						$(CCCI_DIR)/eccci/hif/ccci_hif_dpmaif$(SUFFIX_STR).o \
						$(CCCI_DIR)/eccci/hif/ccci_hif_dpmaif_ut$(SUFFIX_STR).o \
						$(CCCI_DIR)/eccci/hif/ccci_hw_driver/dpmaif_drv$(SUFFIX_STR).o \
						$(CCCI_DIR)/eccci/hif/ccci_hw_driver/ccci_driver_cldma.o \
						$(CCCI_DIR)/eccci/hif/ccci_hif_mhccif.o \
						$(CCCI_DIR)/eccci/hif/ccci_hw_driver/ccci_driver_mhccif.o
						
# port
$(MODULENAME)-objs += $(CCCI_DIR)/eccci/port/port_cfg.o \
						$(CCCI_DIR)/eccci/port/port_char.o \
						$(CCCI_DIR)/eccci/port/port_ctlmsg.o \
						$(CCCI_DIR)/eccci/port/port_proxy.o \
						$(CCCI_DIR)/eccci/port/port_sysmsg.o \
						$(CCCI_DIR)/eccci/port/port_poller.o \
						$(CCCI_DIR)/eccci/port/port_tty.o

# ccci_tty
$(MODULENAME)-objs += $(CCCI_DIR)/ccci_tty/ccci_tty.o

# util
$(MODULENAME)-objs += $(UTIL_DIR)/mtk_util_log.o

ifeq ($(MTK_PLAT),M7X)
$(MODULENAME)-objs += $(CCCI_DIR)/eccci/port/port_net.o \
						$(CCCI_DIR)/eccci/hif/ccci_hw_driver/dpmaif_hisr.o \
						$(CCCI_DIR)/eccci/hif/ccci_hw_driver/ccci_driver_dpmaif.o
endif

else  #KERNELRELEASE


#
# include folders
#
INCLUDE_DIRS += -I$(shell pwd)/$(MHCCIF_DIR)/
INCLUDE_DIRS += -I$(shell pwd)/$(COMMON_DIR)/
INCLUDE_DIRS += -I$(shell pwd)/$(PCI_DRV_DIR)/
INCLUDE_DIRS += -I$(shell pwd)/$(PCIE_PLT_DIR)/
INCLUDE_DIRS += -I$(shell pwd)/$(PLATDIR)/
INCLUDE_DIRS += -I$(shell pwd)/$(CCCI_DIR)/include
INCLUDE_DIRS += -I$(shell pwd)/$(CCCI_DIR)/include/mt-plat/
INCLUDE_DIRS += -I$(shell pwd)/$(CCCI_DIR)/ccci_util/
INCLUDE_DIRS += -I$(shell pwd)/$(CCCI_DIR)/ccci_tty/
INCLUDE_DIRS += -I$(shell pwd)/$(CCCI_DIR)/ccmni/
INCLUDE_DIRS += -I$(shell pwd)/$(CCCI_DIR)/eccci/ccci_core/
INCLUDE_DIRS += -I$(shell pwd)/$(CCCI_DIR)/eccci/ccci_core/inc/
INCLUDE_DIRS += -I$(shell pwd)/$(CCCI_DIR)/eccci/fsm/inc/
INCLUDE_DIRS += -I$(shell pwd)/$(CCCI_DIR)/eccci/hif/inc/
INCLUDE_DIRS += -I$(shell pwd)/$(CCCI_DIR)/eccci/hif/ccci_hw_driver/inc/
INCLUDE_DIRS += -I$(shell pwd)/$(CCCI_DIR)/eccci/port/inc/
INCLUDE_DIRS += -I$(shell pwd)/$(UTIL_DIR)/
#
# micro define 
#
MICRO_DEF += -DCONFIG_MTK_ECCCI_CLDMA
MICRO_DEF += -DCONFIG_MTK_MD1_ENABLE
MICRO_DEF += -DDATA_PATH_CHECKSUM_OFFLOAD
MICRO_DEF += -DCONFIG_MTK_NET_CCMNI
MICRO_DEF += -DCONFIG_MTK_ECCCI_MHCCIF
#MICRO_DEF += -DMTK_ALLOC_REMAP_BUF
#MICRO_DEF += -DENABLE_CCCI_DRI_UT
MICRO_DEF += -DDPMAIFQ_ASSERT_EN
#MICRO_DEF += -DDATA_PATH_TP_CALC
#MICRO_DEF += -DDATA_PATH_UT_LOOPBACK
MICRO_DEF += -DDPMA_FTRACE_DEBUG
MICRO_DEF += -DMODEM_MANAGER_SUPPORT

#add for PCIE performance profiling
ifeq ($(TIME_PROF),y)
	MICRO_DEF += -DPCIE_TIME_PROF
endif

ifeq ($(MTK_PLAT),M8X80)
	MICRO_DEF += -DDATA_PATH_UT_HW_LOOPBACK
	MICRO_DEF += -DDATA_PATH_UT_HW_HANDLE
#	MICRO_DEF += -DDPMAIF_HW_FRAG_IT
#	MICRO_DEF += -DDISABLE_BOOTUP_HS
#	MICRO_DEF += -DDPMAIF_DEBUG_DUMP
endif

# supports alternative linux kernel version
EMPTY_STR :=
ifeq ($(KERN_VER),$(EMPTY_STR))
	KDIR=/lib/modules/$(shell uname -r)/build
else ifeq ($(KERN_VER),5.4.0-26-generic)
	KDIR=~/linux-source-5.4.0/
else
	KDIR=/lib/modules/$(KERN_VER)/build
endif

#KDIR=/media/data1/andy/compile/mt6890/xs-dev/mtk/ext_kernel-4.19

#
# compile parameter
#
COMPILE_FLAGS := -g
#COMPILE_FLAGS += -Werror
COMPILE_FLAGS += $(INCLUDE_DIRS)
COMPILE_FLAGS += $(MICRO_DEF) 
COMPILE_FLAGS += -Wno-date-time 
COMPILER = "gcc"
#COMPILER = "/media/data1/andy/compile/mtk_sdk/xsquare-sdk-19.07.7-mt6890-xs5g01_cpe_gcc-7.5.0_musl.Linux-x86_64/staging_dir/toolchain-aarch64_cortex-a55+neon-vfpv4_gcc-7.5.0_musl/bin/aarch64-openwrt-linux-gcc"
LINKER = "ld"
#LINKER = "/media/data1/andy/compile/mtk_sdk/xsquare-sdk-19.07.7-mt6890-xs5g01_cpe_gcc-7.5.0_musl.Linux-x86_64/staging_dir/toolchain-aarch64_cortex-a55+neon-vfpv4_gcc-7.5.0_musl/bin/aarch64-openwrt-linux-ld"
TARGET_ARCH := x86_64
#TARGET_ARCH := arm64
COMPILE_FLAGS += -D__$(TARGET_ARCH)__
DATE = "BUILD_TIME="
LABEL = "LABEL="
all:
	mkdir -p $(shell pwd)/out
	make -C $(KDIR) M=$(shell pwd) modules CC=$(COMPILER) LD=$(LINKER) ARCH=$(TARGET_ARCH) EXTRA_CFLAGS="$(COMPILE_FLAGS)"  2>&1 | tee $(shell pwd)/out/build_driver.log
	md5sum $(shell pwd)/*.ko >> $(shell pwd)/out/build_driver.log
	cp -rf $(shell pwd)/*.ko $(shell pwd)/out/
	cp -rf $(shell pwd)/tools/script $(shell pwd)/out/
	@rm -rf $(shell pwd)/out/script/get_label.sh
	@echo $(DATE)$(shell date +%Y-%m-%d,%H:%m:%S) >> $(shell pwd)/out/build_driver.log
	@echo $(LABEL)$(shell ./tools/script/get_label.sh) >> $(shell pwd)/out/build_driver.log
.PHONY clean:
	@echo "clean tmp file"
	$(clean_ops)
	rm -rf $(shell pwd)/out/
endif
