ifeq ($(DAVINCI_HIAI_DKMS), y) # for dkms compile
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/dev_inc_open/inc
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/dev_inc/inc
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/vmng/command/msg
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/vmng/inc
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/vmng/phy/host
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/vmng/phy/host/soc_adapt
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/vpc/common
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/vpc/phy
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/vmng/phy/vascend_drv_stub
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/pbl/dev_urd
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/pbl/dev_urd/dc
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/pbl/uda/command/ioctl
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/kernel_adapt/include
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/libc_sec/include
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/inc/driver
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/kernel_adapt/include
    EXTRA_CFLAGS += -isystem $(shell $(CC) -print-file-name=include)

    EXTRA_CFLAGS += -DVIRTMNG_HOST
    EXTRA_CFLAGS += -DCFG_FEATURE_HOST_LOG
    EXTRA_CFLAGS += -DCFG_FEATURE_KA_ALLOC_INTERFACE
    EXTRA_CFLAGS += -DDRV_HOST
    EXTRA_CFLAGS += -DCFG_ENV_HOST
    ifeq ($(TARGET_PRODUCT), cloud)
        ifneq ($(filter $(TARGET_CHIP_ID), hi1980b),)
            EXTRA_CFLAGS += -DCFG_SOC_PLATFORM_CLOUD_V2
        else ifneq ($(filter $(TARGET_CHIP_ID), hi1980d),)
            EXTRA_CFLAGS += -DCFG_SOC_PLATFORM_CLOUD_V4
        else
            EXTRA_CFLAGS += -DCFG_FEATURE_NOT_SUPPROT_SMP
        endif
    endif

    PRODUCT_SIDE = host
else # for non-dkms compile
    ifneq ($(filter $(PRODUCT), ascend610 bs9sx1a ascend610Lite ascend610Liteesl),)
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/pbl/dev_urd/mdc
    else
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/pbl/dev_urd/dc
    endif
    EXTRA_CFLAGS += -I$(TOP_DIR)/abl/libc_sec/include
    EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/kernel_adapt/include
    EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/pbl/dev_urd
    EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/vmng/command/msg
    EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/vmng/inc
    EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/pbl/uda/command/ioctl
    EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/kernel_adapt/include
    ifeq ($(PRODUCT_SIDE), host) # for host compile
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/inc
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/vpc/common
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/vpc/phy
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/vmng/phy/host
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/vmng/phy/host/soc_adapt
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/vmng/phy/vascend_drv_stub
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/kernel_adapt/include
        EXTRA_CFLAGS += -I$(TOP_DIR)/inc/driver
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/kernel_adapt/include
        EXTRA_CFLAGS += -isystem $(shell $(CC) -print-file-name=include)

        EXTRA_CFLAGS += -DVIRTMNG_HOST
        EXTRA_CFLAGS += -DCFG_FEATURE_KA_ALLOC_INTERFACE
        EXTRA_CFLAGS += -DDRV_HOST
        EXTRA_CFLAGS += -DCFG_ENV_HOST

        ifeq ($(filter $(PRODUCT), ascend910_96 ascend910_96esl),)
            EXTRA_CFLAGS += -DCFG_FEATURE_HOST_LOG
        endif

        ifeq ($(TARGET_BUILD_TYPE), debug)
            EXTRA_CFLAGS += -DCFG_BUILD_DEBUG
            EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/unreleased/debug
        endif

        ifneq ($(filter $(PRODUCT), ascend910B),)
            EXTRA_CFLAGS += -DCFG_SOC_PLATFORM_CLOUD_V2
        endif

        ifneq ($(filter $(PRODUCT), ascend910),)
            EXTRA_CFLAGS += -DCFG_FEATURE_NOT_SUPPROT_SMP
        endif

        ifneq ($(filter $(PRODUCT), ascend950 ascend950esl ascend910_96 ascend910_96esl),)
            EXTRA_CFLAGS += -DCFG_SOC_PLATFORM_CLOUD_V4
        endif
    endif # end host compile

    ifeq ($(PRODUCT_SIDE), device) # for device compile
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/inc
        EXTRA_CFLAGS += -I$(TOP_DIR)/inc/driver/
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/inc/pbl
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/dms/devmng/include/
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/dms/devmng/
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/dms/devmng/config/
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/vmng/phy/device/soc/common/
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/vmng/phy/device/soc/
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/vmng/phy/device/
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/vmng/phy/resmgr/

        # The changes of David are compile adaptations, cannot be used for development.
        ifneq ($(filter $(PRODUCT), ascend910B),)
            EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/vmng/phy/device/soc/adapt/
            EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/vmng/phy/device/soc/cloud_v2/
        else ifneq ($(filter $(PRODUCT), ascend950 ascend950esl),)
            EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/vmng/phy/device/soc/adapt/
            EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/vmng/phy/device/soc/cloud_v4/
        else ifneq ($(filter $(PRODUCT), ascend910_96 ascend910_96esl),)
            EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/vmng/phy/device/soc/adapt/
            EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/vmng/phy/device/soc/cloud_v5/
        else ifneq ($(filter $(PRODUCT), ascend310p),)
            EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/vmng/phy/device/soc/mini_v2/
        else ifneq ($(filter $(PRODUCT), ascend310Brc),)
            EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/vmng/phy/device/soc/adapt/
            EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/vmng/phy/device/soc/mini_v3/
        else
            EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/vmng/phy/device/soc/default/
        endif

        EXTRA_CFLAGS += -DVIRTMNG_DEV
        EXTRA_CFLAGS += -DCFG_ENV_DEV
        EXTRA_CFLAGS += -DCFG_FEATURE_KA_ALLOC_INTERFACE
        ifneq ($(filter $(PRODUCT), ascend910B ascend310Brc ascend950 ascend950esl ascend910_96 ascend910_96esl),)
            EXTRA_CFLAGS += -DCFG_FEATURE_SUPPORT_UDA
        endif

        # The changes of David are compile adaptations, cannot be used for development.
        ifneq ($(filter $(PRODUCT), ascend910 ascend910B ascend950 ascend950esl ascend910_96 ascend910_96esl),)
            EXTRA_CFLAGS += -DCFG_SOC_PLATFORM_CLOUD
            ifneq ($(filter $(PRODUCT), ascend910B),)
                EXTRA_CFLAGS += -DCFG_SOC_PLATFORM_CLOUD_V2
            endif
            ifneq ($(filter $(PRODUCT), ascend950 ascend950esl ascend910_96 ascend910_96esl),)
                EXTRA_CFLAGS += -DCFG_SOC_PLATFORM_CLOUD_V4
            endif
            ifneq ($(filter $(PRODUCT), ascend950esl ascend910_96esl),)
                EXTRA_CFLAGS += -DCFG_PLATFORM_ESL
            endif
            ifneq ($(filter $(PRODUCT), ascend910_96),)
                EXTRA_CFLAGS += -DCFG_PLATFORM_FPGA
            endif
        else ifneq ($(filter $(PRODUCT), ascend310p),)
            EXTRA_CFLAGS += -DCFG_SOC_PLATFORM_MDC_V51
        else ifneq ($(filter $(PRODUCT), ascend310Brc),)
            EXTRA_CFLAGS += -DCFG_SOC_PLATFORM_MINI_V3
            EXTRA_CFLAGS += -DCFG_SOC_PLATFORM_MINIV3
            EXTRA_CFLAGS += -DCFG_FEATURE_SOC_VIRTMNG
            EXTRA_CFLAGS += -DCFG_FEATURE_NOT_SUPPORT_RESMGR
        endif
    endif # end device compile
endif # end non-dkms compile

MODULE_NAME := asdrv_vmng
obj-m += ${MODULE_NAME}.o
ifeq ($(PRODUCT_SIDE), host)
    ${MODULE_NAME}-objs := common/module_host_init.o
    ${MODULE_NAME}-objs += host/virtmnghost_pci.o host/virtmnghost_ctrl.o host/virtmnghost_unit.o
    ${MODULE_NAME}-objs += host/virtmnghost_external.o host/virtmnghost_sysfs.o host/virtmnghost_proc_fs.o
    ${MODULE_NAME}-objs += host/soc_adapt/virtmng_res_drv.o host/soc_adapt/virtmng_res_cloud_v1.o host/soc_adapt/virtmng_res_cloud_v2.o
    ${MODULE_NAME}-objs += host/soc_adapt/virtmng_res_mini_v2.o host/soc_adapt/virtmng_res_cloud_v4.o host/soc_adapt/virtmng_res_comm.o
endif

ifeq ($(PRODUCT_SIDE), device)
    ${MODULE_NAME}-objs := common/module_dev_init.o
    ${MODULE_NAME}-objs += device/virtmngdev_pci.o device/virtmngdev_proc_fs.o device/soc/virtmngdev_res_common.o
    ${MODULE_NAME}-objs += device/soc/virtmngdev_element.o device/soc/common/virtmngdev_common_resource.o
    ${MODULE_NAME}-objs += device/soc/common/virtmngdev_res_mng.o device/soc/common/virtmngdev_client_online.o
    ${MODULE_NAME}-objs += resmgr/vmng_resource_mgr.o

    # The changes of David are compile adaptations, cannot be used for development.
    ifneq ($(filter $(PRODUCT), ascend910B ascend310Brc ascend950 ascend950esl ascend910_96 ascend910_96esl),)
        ${MODULE_NAME}-objs += device/soc/adapt/virtmngdev_resource_register.o
        ${MODULE_NAME}-objs += device/soc/adapt/virtmngdev_resource.o
        ${MODULE_NAME}-objs += device/soc/adapt/virtmngdev_mia_cfg.o
        ${MODULE_NAME}-objs += device/soc/adapt/virtmngdev_memory.o
        ${MODULE_NAME}-objs += device/soc/adapt/virtmngdev_ts.o
    else ifneq ($(filter $(PRODUCT), ascend310p),)
        ${MODULE_NAME}-objs += device/soc/mini_v2/virtmngdev_resource.o
        ${MODULE_NAME}-objs += device/soc/mini_v2/virtmngdev_memory.o
    else
        ${MODULE_NAME}-objs += device/soc/default/virtmngdev_resource.o
    endif
endif

include $(FEATURE_MK_PATH)
EXTRA_CFLAGS += $(CONFIG_DEFINES)

ifneq ($(NOT_SUPPORT_SP), y)
    EXTRA_CFLAGS += -fstack-protector-all
endif

ifeq ($(PRODUCT_SIDE), device)
    ccflags-y += -Wno-implicit-fallthrough
endif

ifeq ($(ASCEND910_93_EX), TRUE)
	EXTRA_CFLAGS += -DASCEND910_93_EX
endif
ifeq ($(ENABLE_BUILD_PRODUCT), TRUE)
	EXTRA_CFLAGS += -DENABLE_BUILD_PRODUCT
endif

ccflags-y += -Wall -Werror -Wtrampolines $(WDATE_TIME) -Wfloat-equal -Wvla -Wundef -funsigned-char -Wformat=2 -Wstack-usage=2048 -Wcast-align
ccflags-y += -Wextra -Wno-unused-parameter -Wno-sign-compare -Wno-missing-field-initializers -Wno-empty-body
ccflags-y += -fno-common -pipe -s -Wstrict-prototypes -Wunused