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)/dev_inc/inc/pbl
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/libc_sec/include
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/inc/driver
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/hdc/pcie/inc
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/hdc/inc
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/hdc/pcie/host
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/hdc/command/msg
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/hdc/command/ioctl
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/hdc/ub/inc
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/hdc/ub/host
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/kernel_adapt/include
    EXTRA_CFLAGS += -I$(HIAI_DKMS_DIR)/dms/command/ioctl

    EXTRA_CFLAGS += -DDRV_HOST
    ifeq ($(TARGET_PRODUCT), cloud)
        EXTRA_CFLAGS += -DCFG_FEATURE_KA_ALLOC_INTERFACE
		EXTRA_CFLAGS += -DCFG_FEATURE_HOST_LOG
        ifneq ($(filter $(TARGET_CHIP_ID), hi1980b),)
            EXTRA_CFLAGS += -DCFG_FEATURE_SRIOV
            EXTRA_CFLAGS += -DCFG_FEATURE_OPTIMIZE_CHAN_MEM
            EXTRA_CFLAGS += -DCFG_FEATURE_DISABLE_TSD_NOTIFY
	    else ifneq ($(filter $(TARGET_CHIP_ID), hi1980d),)
            EXTRA_CFLAGS += -Iinclude/linux
            EXTRA_CFLAGS += -isystem $(shell $(CC) -print-file-name=include)
            EXTRA_CFLAGS += -DCFG_FEATURE_UB_COMM
            EXTRA_CFLAGS += -DCFG_FEATURE_SRIOV
            EXTRA_CFLAGS += -DCFG_FEATURE_OPTIMIZE_CHAN_MEM
            EXTRA_CFLAGS += -DCFG_FEATURE_DISABLE_TSD_NOTIFY
        else
            EXTRA_CFLAGS += -DCFG_FEATURE_VFIO
        endif
    else
        ifeq ($(TARGET_CHIP_ID), $(ASCEND_FLORENCE_DC_V10))
            EXTRA_CFLAGS += -DCFG_FEATURE_VFIO
            EXTRA_CFLAGS += -DCFG_FEATURE_HOST_LOG
            EXTRA_CFLAGS += -DCFG_FEATURE_KA_ALLOC_INTERFACE
        else ifneq ($(filter $(TARGET_CHIP_ID), hi1910b),)
            EXTRA_CFLAGS += -DCFG_FEATURE_HOST_LOG
            EXTRA_CFLAGS += -DCFG_FEATURE_KA_ALLOC_INTERFACE
        else
            EXTRA_CFLAGS += -DCFG_FEATURE_OPTIMIZE_CHAN_MEM
            EXTRA_CFLAGS += -DCFG_FEATURE_PROCESS_NUM_LITE
            # not as31xm1 ascend610Lite ascend610Liteesl
            ifeq ($(filter $(PRODUCT), as31xm1 ascend610Lite ascend610Liteesl mc62cm12aesl mc62cm12a),)
                EXTRA_CFLAGS += -DCFG_FEATURE_NOT_SUPPORT_UDA
            endif
        endif
    endif

    PRODUCT_SIDE = host
    MODULE_NAME := drv_pcie_hdc_host
else # for non-dkms compile
    EXTRA_CFLAGS += -I$(TOP_DIR)/inc/driver
    EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/inc/pbl
    EXTRA_CFLAGS += -I$(TOP_DIR)/abl/libc_sec/include
    EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/hdc/pcie/inc
    EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/hdc/inc
    EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/hdc/command/ioctl
    EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/hdc/command/msg
    EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/kernel_adapt/include
    EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/dms/command/ioctl
    ifeq ($(PRODUCT_SIDE), host) # for host compile
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/inc
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/hdc/pcie/host
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/hdc/ub/host
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/hdc/ub/inc
        EXTRA_CFLAGS += -DDRV_HOST
        ifneq ($(filter $(PRODUCT), ascend910B),)
            EXTRA_CFLAGS += -DCFG_FEATURE_SRIOV
            EXTRA_CFLAGS += -DCFG_FEATURE_DISABLE_TSD_NOTIFY
            EXTRA_CFLAGS += -DCFG_FEATURE_OPTIMIZE_CHAN_MEM
            EXTRA_CFLAGS += -DCFG_FEATURE_HOST_LOG
            EXTRA_CFLAGS += -DCFG_FEATURE_KA_ALLOC_INTERFACE
        else ifneq ($(filter $(PRODUCT), ascend950 ascend950esl ascend910_96 ascend910_96esl),)
            EXTRA_CFLAGS += -Iinclude/linux
            EXTRA_CFLAGS += -isystem $(shell $(CC) -print-file-name=include)
            EXTRA_CFLAGS += -DCFG_FEATURE_UB_COMM
            EXTRA_CFLAGS += -DCFG_FEATURE_SRIOV
            EXTRA_CFLAGS += -DCFG_FEATURE_DISABLE_TSD_NOTIFY
            EXTRA_CFLAGS += -DCFG_FEATURE_OPTIMIZE_CHAN_MEM
            EXTRA_CFLAGS += -DCFG_FEATURE_KA_ALLOC_INTERFACE
            ifneq ($(filter $(PRODUCT), ascend950),)
                EXTRA_CFLAGS += -DCFG_FEATURE_HOST_LOG
            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), ascend910 ascend310p),)
            EXTRA_CFLAGS += -DCFG_FEATURE_VFIO
            EXTRA_CFLAGS += -DCFG_FEATURE_HOST_LOG
            EXTRA_CFLAGS += -DCFG_FEATURE_KA_ALLOC_INTERFACE
        else ifneq ($(filter $(PRODUCT),ascend310B),)
            EXTRA_CFLAGS += -DCFG_FEATURE_HOST_LOG
            EXTRA_CFLAGS += -DCFG_FEATURE_KA_ALLOC_INTERFACE
        else
            EXTRA_CFLAGS += -DCFG_FEATURE_OPTIMIZE_CHAN_MEM
            EXTRA_CFLAGS += -DCFG_FEATURE_PROCESS_NUM_LITE
            # not as31xm1 ascend610Lite ascend610Liteesl
            ifeq ($(filter $(PRODUCT), as31xm1 ascend610Lite ascend610Liteesl mc62cm12aesl mc62cm12a),)
                EXTRA_CFLAGS += -DCFG_FEATURE_NOT_SUPPORT_UDA
            endif
        endif

        ifneq ($(filter $(PRODUCT), as31xm1 ascend610Lite ascend610Liteesl),)
            EXTRA_CFLAGS += -I$(TOP_DIR)/inc/driver/
            EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/dms/devmng/include/
            EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/dms/devmng/config/
            EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/dms/devmng/event/
            EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/dms/devmng/core/
            EXTRA_CFLAGS += -DCFG_FEATURE_HDC_REG_MEM
            ifneq ($(filter $(PRODUCT), ascend610Lite),)
                EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/drv_pfstat/include
                EXTRA_CFLAGS += -DCFG_FEATURE_PFSTAT
                EXTRA_CFLAGS += -DCFG_FEATURE_SEC_COMM_L3
                EXTRA_CFLAGS += -DCFG_FEATURE_RESERVE_MEM_POOL
            endif
        endif
        ifneq ($(filter $(PRODUCT), mc62cm12aesl mc62cm12a),)
            EXTRA_CFLAGS += -DCFG_FEATURE_HDC_REG_MEM
            EXTRA_CFLAGS += -DCFG_FEATURE_SEC_COMM_L3
            EXTRA_CFLAGS += -DCFG_FEATURE_RESERVE_MEM_POOL
            EXTRA_CFLAGS += -DCFG_FEATURE_OVER_XCOM
        endif
        ifneq ($(filter $(PRODUCT),mc62cm12a mc62cm12aesl),)
            MODULE_NAME := asdrv_hdc
        else
            MODULE_NAME := drv_pcie_hdc_host
        endif
    endif # end host compile

    ifeq ($(PRODUCT_SIDE), device) # for device compile
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/inc
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/hdc/pcie/device
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/hdc/ub/device
        EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/hdc/ub/inc

        EXTRA_CFLAGS += -DHDC_ENV_DEVICE
        EXTRA_CFLAGS += -DCFG_EDGE_ENV
        EXTRA_CFLAGS += -DCFG_ENV_DEV
        ifneq ($(filter $(PRODUCT), ascend910B),)
            EXTRA_CFLAGS += -DCFG_FEATURE_SRIOV
            EXTRA_CFLAGS += -DCFG_FEATURE_OPTIMIZE_CHAN_MEM
            EXTRA_CFLAGS += -DCFG_FEATURE_SMALL_HUGE_POOL
            EXTRA_CFLAGS += -DCFG_FEATURE_KA_ALLOC_INTERFACE
        else ifneq ($(filter $(PRODUCT), ascend910 ascend310p),)
            EXTRA_CFLAGS += -DCFG_FEATURE_VFIO_DEVICE
            EXTRA_CFLAGS += -DCFG_FEATURE_KA_ALLOC_INTERFACE
        else ifneq ($(filter $(PRODUCT), ascend950 ascend950esl ascend910_96 ascend910_96esl),)
            EXTRA_CFLAGS += -isystem $(shell $(CC) -print-file-name=include)
            EXTRA_CFLAGS += -Iinclude/linux
            EXTRA_CFLAGS += -DCFG_FEATURE_UB_COMM
            EXTRA_CFLAGS += -DCFG_FEATURE_SRIOV
            EXTRA_CFLAGS += -DCFG_FEATURE_OPTIMIZE_CHAN_MEM
            EXTRA_CFLAGS += -DCFG_FEATURE_SMALL_HUGE_POOL
            EXTRA_CFLAGS += -DCFG_FEATURE_KA_ALLOC_INTERFACE
            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), ascend310B),)
            EXTRA_CFLAGS += -DCFG_FEATURE_KA_ALLOC_INTERFACE
        else
            EXTRA_CFLAGS += -DCFG_FEATURE_OPTIMIZE_CHAN_MEM
            EXTRA_CFLAGS += -DCFG_FEATURE_PROCESS_NUM_LITE
        endif

        ifneq ($(filter $(PRODUCT), as31xm1 ascend610Lite ascend610Liteesl),)
            EXTRA_CFLAGS += -I$(TOP_DIR)/inc/driver/
            EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/dms/devmng/include/
            EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/dms/devmng/config/
            EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/dms/devmng/event/
            EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/dms/devmng/core/
            EXTRA_CFLAGS += -DCFG_FEATURE_HDC_REG_MEM
            ifneq ($(filter $(PRODUCT), ascend610Lite),)
                EXTRA_CFLAGS += -I$(DRIVER_KERNEL_DIR)/src/drv_pfstat/include
                EXTRA_CFLAGS += -DCFG_FEATURE_PFSTAT
                EXTRA_CFLAGS += -DCFG_FEATURE_RESERVE_MEM_POOL
            endif
        endif

        MODULE_NAME := drv_pcie_hdc
    endif # end device compile

    ifeq ($(use_hitest), kernel_true)
        export HITESTCC := $(CC)
        export HITESTLD := $(LD)
        CC = hitest_gcc
        LD = hitest_ld
    endif
endif # end non-dkms compile

obj-m += $(MODULE_NAME).o
$(MODULE_NAME)-objs := pcie/common/hdcdrv_core.o pcie/common/hdcdrv_core_com.o pcie/common/hdcdrv_epoll.o
$(MODULE_NAME)-objs += pcie/common/hdcdrv_mem.o pcie/common/hdcdrv_mem_com.o pcie/common/hdcdrv_sysfs.o
$(MODULE_NAME)-objs += common/hdc_init.o
ifeq ($(PRODUCT_SIDE), host)
    $(MODULE_NAME)-objs += pcie/host/hdcdrv_host.o pcie/host/hdcdrv_adapt.o
    ifneq ($(filter $(PRODUCT),mc62cm12a mc62cm12aesl),)
        $(MODULE_NAME)-objs += xlink/hdcdrv_host_adapt.o
    else
        $(MODULE_NAME)-objs += pcie/host/hdcdrv_host_adapt.o
    endif
endif

ifeq ($(PRODUCT_SIDE), device)
    $(MODULE_NAME)-objs += pcie/device/hdcdrv_device.o pcie/device/hdcdrv_adapt.o
    ifneq ($(filter $(PRODUCT), as31xm1 ascend610Lite ascend610Liteesl),)
        $(MODULE_NAME)-objs += pcie/device/hdcdrv_status.o
        ifneq ($(filter $(PRODUCT), ascend610Lite),)
            $(MODULE_NAME)-objs += pcie/device/hdcdrv_pfstat.o
        endif
    endif
endif

ifeq ($(DAVINCI_HIAI_DKMS), y)
    ifneq ($(filter $(TARGET_CHIP_ID), hi1980d),)
        $(MODULE_NAME)-objs += ub/common/hdcdrv_core_ub.o ub/common/hdcdrv_proc_fs_ub.o
        $(MODULE_NAME)-objs += ub/common/hdcdrv_mem_pool_ub.o ub/common/hdcdrv_mem_com_ub.o
        $(MODULE_NAME)-objs += ub/host/hdcdrv_adapt_ub.o
    endif

    ifeq ($(TARGET_PRODUCT), cloud)
        # not hi1980b hi1980d
        ifeq ($(filter $(TARGET_CHIP_ID), hi1980b hi1980d),)
            $(MODULE_NAME)-objs += pcie/host/hdcdrv_adapter.o
        endif
    else
        ifeq ($(TARGET_CHIP_ID), $(ASCEND_FLORENCE_DC_V10))
            $(MODULE_NAME)-objs += pcie/host/hdcdrv_adapter.o
        endif
    endif
else
    ifneq ($(filter $(PRODUCT), ascend950 ascend950esl ascend910_96 ascend910_96esl),)
        $(MODULE_NAME)-objs += ub/common/hdcdrv_core_ub.o ub/common/hdcdrv_proc_fs_ub.o
        $(MODULE_NAME)-objs += ub/common/hdcdrv_mem_pool_ub.o ub/common/hdcdrv_mem_com_ub.o
        ifeq ($(PRODUCT_SIDE), host)
            $(MODULE_NAME)-objs += ub/host/hdcdrv_adapt_ub.o
        endif
        ifeq ($(PRODUCT_SIDE), device)
            $(MODULE_NAME)-objs += ub/device/hdcdrv_adapt_ub.o
        endif

    endif

    ifeq ($(PRODUCT_SIDE), host)
        ifneq ($(filter $(PRODUCT), ascend910 ascend310p),)
            $(MODULE_NAME)-objs += pcie/host/hdcdrv_adapter.o
        endif

        ifneq ($(filter $(PRODUCT), as31xm1 ascend610Lite ascend610Liteesl),)
            $(MODULE_NAME)-objs += pcie/host/hdcdrv_status.o
            ifneq ($(filter $(PRODUCT), ascend610Lite),)
                $(MODULE_NAME)-objs += pcie/host/hdcdrv_pfstat.o
            endif
        endif
    endif
endif

EXTRA_CFLAGS += -DCFG_FEATURE_SHARE_LOG

ifeq ($(TARGET_BUILD_TYPE), debug)
	EXTRA_CFLAGS += -DCFG_BUILD_DEBUG
endif

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

ifeq ($(CUSTOM_OS_CCFLAGS), )
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-format-nonliteral -Wno-empty-body
ccflags-y += -fno-common -pipe -s -Wstrict-prototypes -Wunused
else
ccflags-y += $(CUSTOM_OS_CCFLAGS)
endif