#*******************************************************************************
#The rule of make Linux kernel module
#*******************************************************************************
ifeq ($(PARAM_FILE), )
    PARAM_FILE:=../../mpp/Makefile.param
    include $(PARAM_FILE)
endif

INIT_ROOT = $(REL_DIR)/init

EXTRA_CFLAGS += $(MPP_CFLAGS)
EXTRA_CFLAGS += -I$(REL_INC)
EXTRA_CFLAGS += -I$(INIT_ROOT)/include
EXTRA_CFLAGS += -I$(OSAL_ROOT)/include
EXTRA_CFLAGS += -I$(REL_DIR)/component/gfbg/drv/include

$(KO_PREFIX)_adec-objs =  mod_adec.o ../init/src/adec_init.o
$(KO_PREFIX)_aenc-objs  = mod_aenc.o  ../init/src/aenc_init.o
$(KO_PREFIX)_ai-objs  = mod_ai.o  ../init/src/ai_init.o
$(KO_PREFIX)_aio-objs  = mod_aio.o  ../init/src/aio_init.o
$(KO_PREFIX)_ao-objs  = mod_ao.o  ../init/src/ao_init.o
$(KO_PREFIX)_base-objs = mod_base.o  ../init/src/base_init.o
$(KO_PREFIX)_chnl-objs  = mod_chnl.o  ../init/src/chnl_init.o
$(KO_PREFIX)_h264e-objs  = mod_h264e.o  ../init/src/h264e_init.o
$(KO_PREFIX)_h265e-objs = mod_h265e.o  ../init/src/h265e_init.o
$(KO_PREFIX)_hdmi-objs  = mod_hdmi.o   ../init/src/hdmi_init.o
$(KO_PREFIX)_ive-objs  = mod_ive.o    ../init/src/ive_init.o
$(KO_PREFIX)_jpegd-objs = mod_jpegd.o  ../init/src/jpegd_init.o
$(KO_PREFIX)_jpege-objs  = mod_jpege.o  ../init/src/jpege_init.o
$(KO_PREFIX)_mau-objs  = mod_mau.o   ../init/src/mau_init.o
$(KO_PREFIX)_nnie-objs = mod_nnie.o   ../init/src/nnie_init.o
$(KO_PREFIX)_rc-objs  = mod_rc.o   ../init/src/rc_init.o
$(KO_PREFIX)_rgn-objs = mod_rgn.o  ../init/src/rgn_init.o
$(KO_PREFIX)_svprt-objs = mod_svprt.o
$(KO_PREFIX)_sys-objs = mod_sys.o    ../init/src/sys_init.o
$(KO_PREFIX)_tde-objs  = mod_tde.o   ../init/src/tde_init.o
$(KO_PREFIX)_vda-objs = mod_vda.o  ../init/src/vda_init.o
$(KO_PREFIX)_vdec-objs = mod_vdec.o  ../init/src/vdec_init.o
$(KO_PREFIX)_vedu-objs  = mod_vedu.o  ../init/src/vedu_init.o
$(KO_PREFIX)_venc-objs = mod_venc.o  ../init/src/venc_init.o
$(KO_PREFIX)_vfmw-objs  = mod_vfmw.o  ../init/src/vfmw_init.o
$(KO_PREFIX)_vgs-objs = mod_vgs.o   ../init/src/vgs_init.o
$(KO_PREFIX)_vi-objs  = mod_vi.o  ../init/src/vi_init.o
$(KO_PREFIX)_vo-objs = mod_vo.o  ../init/src/vo_init.o
$(KO_PREFIX)_vpss-objs  = mod_vpss.o  ../init/src/vpss_init.o

obj-m += $(KO_PREFIX)_adec.o
obj-m += $(KO_PREFIX)_aenc.o
obj-m += $(KO_PREFIX)_ai.o
obj-m += $(KO_PREFIX)_aio.o
obj-m += $(KO_PREFIX)_ao.o
obj-m += $(KO_PREFIX)_base.o
obj-m += $(KO_PREFIX)_chnl.o
obj-m += $(KO_PREFIX)_h264e.o
obj-m += $(KO_PREFIX)_h265e.o
obj-m += $(KO_PREFIX)_hdmi.o
obj-m += $(KO_PREFIX)_ive.o
obj-m += $(KO_PREFIX)_jpegd.o
obj-m += $(KO_PREFIX)_jpege.o
obj-m += $(KO_PREFIX)_mau.o
obj-m += $(KO_PREFIX)_nnie.o
obj-m += $(KO_PREFIX)_rc.o
obj-m += $(KO_PREFIX)_rgn.o
obj-m += $(KO_PREFIX)_svprt.o
obj-m += $(KO_PREFIX)_sys.o
obj-m += $(KO_PREFIX)_tde.o
obj-m += $(KO_PREFIX)_vda.o
obj-m += $(KO_PREFIX)_vdec.o
obj-m += $(KO_PREFIX)_vedu.o
obj-m += $(KO_PREFIX)_venc.o
obj-m += $(KO_PREFIX)_vfmw.o
obj-m += $(KO_PREFIX)_vgs.o
obj-m += $(KO_PREFIX)_vi.o
obj-m += $(KO_PREFIX)_vo.o
obj-m += $(KO_PREFIX)_vpss.o

default:
	@echo -e "\e[0;32;1m--Compiling '$(TARGET)'... Configs as follow:\e[0;36;1m"
	@echo ---- CROSS=$(CROSS) REL_INC=$(REL_INC)
	@echo ---- OT_SUBARCH=$(OT_SUBARCH), CVER=$(CVER), DBG=$(OT_DBG), OT_FPGA=$(OT_FPGA)
	@echo ---- CPU_TYPE=$(CPU_TYPE) REL_KO=$(REL_KO)
	@echo ---- EXTRA_CFLAGS=$(EXTRA_CFLAGS)
	@echo ---- SDK_PATH=$(SDK_PATH) , PARAM_FILE=$(PARAM_FILE)
	@echo ---- KERNEL_ROOT=$(KERNEL_ROOT)
	@echo ---- ARCH_ROOT=$(ARCH_ROOT), ARCH_HAL=$(ARCH_HAL)
	@echo ---- obj-m=$(obj-m)
	@@echo -e "\e[0m"
	@$(MAKE) -C $(KERNEL_ROOT) M=$(PWD) V=10 modules -j 24
	@$(CROSS)strip --strip-unneeded *.ko
	@mkdir -p $(REL_KO) && cp -rf *.ko $(REL_KO)

clean:
	@rm -f *.ko
	@rm .tmp_versions  -rf
	@rm Module.symvers -f
	@rm modules.order  -f
	@rm .*.cmd  -f
	@rm *.mod.c  -f
	@rm *.mod.o  -f
	@rm $(KO_PREFIX)_*.o  -f
	@rm ../init/src/*.o  -f
	@rm ../init/src/.*.cmd  -f

