ifeq ($(TOP_DIR),) # for dkms
    KERNEL_DIR :=$(srctree)
    # HIAI_DKMS_DIR = driver/kernel
    DRIVER_SRC_BASE_DIR := $(HIAI_DKMS_DIR)
    TARGET_SRC_DIR := $(HIAI_DKMS_DIR)
    EXTRA_CFLAGS += -I$(TARGET_SRC_DIR)/libc_sec/include/
    EXTRA_CFLAGS += -DDRV_HOST
else # for ci
    TARGET_SRC_DIR := $(DRIVER_KERNEL_DIR)/src
    EXTRA_CFLAGS += -I$(TOP_DIR)/abl/libc_sec/include
endif

EXTRA_CFLAGS += -I$(TARGET_SRC_DIR)/kernel_adapt/
EXTRA_CFLAGS += -I$(TARGET_SRC_DIR)/kernel_adapt/include
EXTRA_CFLAGS += -I$(TARGET_SRC_DIR)/kernel_adapt/base
EXTRA_CFLAGS += -I$(TARGET_SRC_DIR)/kernel_adapt/dfx
EXTRA_CFLAGS += -I$(TARGET_SRC_DIR)/kernel_adapt/driver
EXTRA_CFLAGS += -I$(TARGET_SRC_DIR)/kernel_adapt/fs
EXTRA_CFLAGS += -I$(TARGET_SRC_DIR)/kernel_adapt/memory
EXTRA_CFLAGS += -I$(TARGET_SRC_DIR)/kernel_adapt/net
EXTRA_CFLAGS += -I$(TARGET_SRC_DIR)/kernel_adapt/pci
EXTRA_CFLAGS += -I$(TARGET_SRC_DIR)/kernel_adapt/system
EXTRA_CFLAGS += -I$(TARGET_SRC_DIR)/kernel_adapt/task

ifeq ($(PRODUCT_SIDE), host)
    EXTRA_CFLAGS += -DDRV_HOST
endif

EXTRA_CFLAGS += -isystem $(shell $(CC) -print-file-name=include)
EXTRA_CFLAGS += -Wno-error=type-limits # for kernel 5.15
ccflags-y += -Wno-implicit-function-declaration

# check if gcc support -Wno-error=cast-function-type
CHECK_FLAG := $(shell echo "int main() { return 0; }" | ${CC} -x c -Wno-error=cast-function-type -o /dev/null - 2>/dev/null && echo supported || echo unsupported)

# add cflags -Wno-error=cast-function-type
ifeq ($(CHECK_FLAG),supported)
    EXTRA_CFLAGS += -Wno-error=cast-function-type
endif

ifeq ($(TARGET_BUILD_TYPE),debug)
    EXTRA_CFLAGS += -DCFG_BUILD_DEBUG
endif
ifneq ($(NOT_SUPPORT_SP), y)
    EXTRA_CFLAGS += -fstack-protector-all
endif

ifneq ($(filter $(ARCH), arm64 x86), )
$(info ARCH is: $(ARCH))
else
$(error NOT supported ARCH: $(ARCH))
endif

EXTRA_CFLAGS += -Wall -Werror

$(info $(EXTRA_CFLAGS))

ccflags-y += -Wall -Werror -Wtrampolines $(WDATE_TIME) -Wfloat-equal -Wvla -Wundef -funsigned-char -Wformat=2 -Wstack-usage=2048 -Wcast-align -Wextra
ccflags-y += -Wno-unused-parameter -O2 -Wno-missing-field-initializers -Wno-sign-compare -Wno-format-nonliteral

# check if gcc support -Wno-implicit-fallthrough
# -Wno-implicit-fallthrough was first added in gcc-7.
CHECK_FLAG := $(shell echo "int main() { return 0; }" | ${CC} -x c -Wno-implicit-fallthrough -o /dev/null - 2>/dev/null && echo supported || echo unsupported)
# add cflags -Wno-implicit-fallthrough
ifeq ($(CHECK_FLAG),supported)
    ccflags-y += -Wno-implicit-fallthrough
endif

obj-m += ascend_kernel_open_adapt.o

ifeq ($(PRODUCT_SIDE), device)
    ascend_kernel_open_adapt-objs := ka_module_init.o  \
                                     task/ka_task.o \
                                     fs/ka_fs.o \
                                     system/ka_system.o \
                                     base/ka_base.o \
                                     driver/ka_driver.o \
                                     memory/ka_mem.o \
                                     pci/ka_pci.o \
                                     net/ka_net.o \
                                     dfx/ka_dfx.o
else
    ascend_kernel_open_adapt-objs := ka_module_init.o  \
                                     task/ka_task.o \
                                     fs/ka_fs.o \
                                     system/ka_system.o \
                                     base/ka_base.o \
                                     driver/ka_driver.o \
                                     memory/ka_mem.o \
                                     pci/ka_pci.o \
                                     net/ka_net.o \
                                     dfx/ka_dfx.o
endif
