ifeq ($(DAVINCI_HIAI_DKMS),y)
    ifeq ($(Driver_Install_Mode), vnpu_guest)
        ifeq ($(filter $(TARGET_CHIP_ID), hi1980b hi1980d),)
            MODULE_NAME := asdrv_vpbl
        else
            MODULE_NAME := asdrv_pbl
        endif
    else
        MODULE_NAME := asdrv_pbl
    endif
else
    ifeq ($(PRODUCT_SIDE), host)
        ifeq ($(TARGET_TYPE), VPBL)
            MODULE_NAME := asdrv_vpbl
        else
            MODULE_NAME := asdrv_pbl
        endif
    else
        ifeq ($(TARGET_TYPE), msg_chan)
            MODULE_NAME := ascend_msg_chan
        else ifeq ($(TARGET_TYPE), msg_chan_host)
            MODULE_NAME := ascend_msg_chan_host
        else ifeq ($(TARGET_TYPE), PKICMS)
            MODULE_NAME := drv_pkicms
        else ifeq ($(TARGET_TYPE), ascend610)
            MODULE_NAME := drv_icm
        else ifeq ($(TARGET_TYPE), ascend610Lite)
            MODULE_NAME := drv_icm_v3
        else ifeq ($(TARGET_TYPE), USERCFG)
            MODULE_NAME := drv_user_cfg
        else
            MODULE_NAME := asdrv_pbl
        endif
    endif
endif
obj-m += $(MODULE_NAME).o
ifneq ($(filter $(MODULE_NAME), asdrv_pbl asdrv_vpbl),)
    $(MODULE_NAME)-objs := pbl_module.o
endif

ifeq ($(TOP_DIR),)
    EXTRA_CFLAGS += -DCFG_ENV_HOST
    ifeq ($(Driver_Install_Mode),vnpu_guest)
        ifeq ($(filter $(TARGET_CHIP_ID), hi1980b hi1980d),)
            EXTRA_CFLAGS += -DCFG_FEATURE_VPBL
            include $(HIAI_DKMS_DIR)/pbl/drv_davinci_intf_host/drv_davinci_intf.mk
            include $(HIAI_DKMS_DIR)/pbl/log_host/log_host.mk
            include $(HIAI_DKMS_DIR)/pbl/uda/uda.mk
            include $(HIAI_DKMS_DIR)/pbl/runenv_config/runenv_config.mk
            include $(HIAI_DKMS_DIR)/pbl/dev_urd/dev_urd.mk
            include $(HIAI_DKMS_DIR)/pbl/mem_ops/mem_ops.mk
            include ${HIAI_DKMS_DIR}/pbl/msg_chan/msg_chan.mk
            include ${HIAI_DKMS_DIR}/pbl/chip_config/chip_config.mk
        else
            include $(HIAI_DKMS_DIR)/pbl/drv_davinci_intf_host/drv_davinci_intf.mk
            include $(HIAI_DKMS_DIR)/pbl/log_host/log_host.mk
            include $(HIAI_DKMS_DIR)/pbl/uda/uda.mk
            include $(HIAI_DKMS_DIR)/pbl/runenv_config/runenv_config.mk
            include $(HIAI_DKMS_DIR)/pbl/dev_urd/dev_urd.mk
            include $(HIAI_DKMS_DIR)/pbl/mem_ops/mem_ops.mk
            include ${HIAI_DKMS_DIR}/pbl/soc_resmng/soc_resmng.mk
            include ${HIAI_DKMS_DIR}/pbl/msg_chan/msg_chan.mk
            include ${HIAI_DKMS_DIR}/pbl/chip_config/chip_config.mk
        endif
    else
        include $(HIAI_DKMS_DIR)/pbl/drv_davinci_intf_host/drv_davinci_intf.mk
        include $(HIAI_DKMS_DIR)/pbl/log_host/log_host.mk
        include $(HIAI_DKMS_DIR)/pbl/uda/uda.mk
        include $(HIAI_DKMS_DIR)/pbl/runenv_config/runenv_config.mk
        include $(HIAI_DKMS_DIR)/pbl/dev_urd/dev_urd.mk
        include $(HIAI_DKMS_DIR)/pbl/mem_ops/mem_ops.mk
        include ${HIAI_DKMS_DIR}/pbl/soc_resmng/soc_resmng.mk
        include ${HIAI_DKMS_DIR}/pbl/msg_chan/msg_chan.mk
        include ${HIAI_DKMS_DIR}/pbl/chip_config/chip_config.mk
    endif
else
    ifeq ($(PRODUCT_SIDE), host)
        ifeq ($(TARGET_TYPE), VPBL)
            EXTRA_CFLAGS += -DCFG_FEATURE_VPBL
            include ${DRIVER_KERNEL_DIR}/src/pbl/drv_davinci_intf/drv_davinci_intf_host/drv_davinci_intf.mk
            include ${DRIVER_KERNEL_DIR}/src/pbl/log_host/log_host.mk
            include ${DRIVER_KERNEL_DIR}/src/pbl/uda/uda.mk
            include ${DRIVER_KERNEL_DIR}/src/pbl/runenv_config/runenv_config.mk
            include ${DRIVER_KERNEL_DIR}/src/pbl/dev_urd/dev_urd.mk
            include ${DRIVER_KERNEL_DIR}/src/pbl/mem_ops/mem_ops.mk
            include ${DRIVER_KERNEL_DIR}/src/pbl/msg_chan/msg_chan.mk
            include ${DRIVER_KERNEL_DIR}/src/pbl/chip_config/chip_config.mk
        else
            include ${DRIVER_KERNEL_DIR}/src/pbl/drv_davinci_intf/drv_davinci_intf_host/drv_davinci_intf.mk
            include ${DRIVER_KERNEL_DIR}/src/pbl/log_host/log_host.mk
            include ${DRIVER_KERNEL_DIR}/src/pbl/uda/uda.mk
            include ${DRIVER_KERNEL_DIR}/src/pbl/runenv_config/runenv_config.mk
            include ${DRIVER_KERNEL_DIR}/src/pbl/dev_urd/dev_urd.mk
            include ${DRIVER_KERNEL_DIR}/src/pbl/mem_ops/mem_ops.mk
            include ${DRIVER_KERNEL_DIR}/src/pbl/soc_resmng/soc_resmng.mk
            include ${DRIVER_KERNEL_DIR}/src/pbl/msg_chan/msg_chan.mk
            include ${DRIVER_KERNEL_DIR}/src/pbl/chip_config/chip_config.mk
        endif
        EXTRA_CFLAGS += -DCFG_ENV_HOST
    else
        ifeq ($(TARGET_TYPE), msg_chan)
            include ${DRIVER_KERNEL_DIR}/src/pbl/msg_chan/msg_chan.mk
        else ifeq ($(TARGET_TYPE), msg_chan_host)
            include ${DRIVER_KERNEL_DIR}/src/pbl/msg_chan/msg_chan.mk
        else ifeq ($(TARGET_TYPE), PKICMS)
            include ${DRIVER_KERNEL_DIR}/src/pbl/pkicms/pkicms.mk
        else ifeq ($(TARGET_TYPE), ascend610)
            include ${DRIVER_KERNEL_DIR}/src/pbl/icm/icm.mk
        else ifeq ($(TARGET_TYPE), ascend610Lite)
            include ${DRIVER_KERNEL_DIR}/src/pbl/icm/icm.mk
        else ifeq ($(TARGET_TYPE), USERCFG)
            include ${DRIVER_KERNEL_DIR}/src/pbl/usr_cfg_drv/user_cfg_drv.mk
        else
            include ${DRIVER_KERNEL_DIR}/src/pbl/drv_davinci_intf/drv_davinci_intf_device/drv_davinci_intf.mk
            include ${DRIVER_KERNEL_DIR}/src/pbl/uda/uda.mk
            include ${DRIVER_KERNEL_DIR}/src/pbl/soc_resmng/soc_resmng.mk
            include ${DRIVER_KERNEL_DIR}/src/pbl/board_config/board_config.mk
            include ${DRIVER_KERNEL_DIR}/src/pbl/runenv_config/runenv_config.mk
            include ${DRIVER_KERNEL_DIR}/src/pbl/chip_config/chip_config.mk
            include ${DRIVER_KERNEL_DIR}/src/pbl/dev_urd/dev_urd.mk
            include ${DRIVER_KERNEL_DIR}/src/pbl/dfm/dfm.mk
            include ${DRIVER_KERNEL_DIR}/src/pbl/ipcdrv/ipcdrv.mk
            ifeq ($(filter $(PRODUCT), ascend910 ascend910B),)
                include ${DRIVER_KERNEL_DIR}/src/pbl/ctl/ctl_device/ctl_device.mk
            endif
            ifneq ($(filter $(PRODUCT), ascend950 ascend950esl ascend910_96 ascend910_96esl mc62cm12a mc62cm12aesl),)
                include ${DRIVER_KERNEL_DIR}/src/pbl/prof_framework/prof_framework.mk
            endif
            ifneq ($(filter $(PRODUCT), ascend950 ascend950esl ascend910_96 ascend910_96esl ascend910_55 ascend910_55),)
                include ${DRIVER_KERNEL_DIR}/src/pbl/mem_ops/mem_ops.mk
            endif
            ifneq ($(filter $(PRODUCT), ascend310Brc),)
                EXTRA_CFLAGS += -DCFG_SOC_PLATFORM_RC
            endif
            ifeq ($(filter $(PRODUCT), mc62cm12a ascend610Lite mc62cm12aesl as31xm1 ascend610Liteesl ascend310Brc),)
                include ${DRIVER_KERNEL_DIR}/src/pbl/msg_chan/msg_chan.mk
            endif
            ifeq ($(filter $(PRODUCT), mc62cm12a ascend610Lite mc62cm12aesl),)
                include ${DRIVER_KERNEL_DIR}/src/pbl/pkicms/pkicms.mk
                include ${DRIVER_KERNEL_DIR}/src/pbl/mem_ops/mem_ops.mk
                include ${DRIVER_KERNEL_DIR}/src/pbl/icm/icm.mk
                include ${DRIVER_KERNEL_DIR}/src/pbl/usr_cfg_drv/user_cfg_drv.mk
            endif
        endif
    endif
endif

EXTRA_CFLAGS += -Wfloat-equal
EXTRA_CFLAGS += -Wextra -Wno-unused-parameter -Wno-sign-compare -Wno-missing-field-initializers -Wno-format-nonliteral -Wno-empty-body
EXTRA_CFLAGS += -isystem $(shell $(CC) -print-file-name=include)

ifeq ($(use_hitest),kernel_true)
    export HITESTCC := $(CC)
    export HITESTLD := $(LD)
    CC = hitest_gcc
    LD = hitest_ld
endif

modules:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules