ifeq ($(KBUILD_EXTMOD),)
FULL_XDX_PATH := $(srctree)/$(src)
else
FULL_XDX_PATH := $(src)
endif

DISPLAY_FOLDER_NAME := display
AUDIO_FOLDER_NAME := audio
VPU_FOLDER_NAME := vpu
GFX_FOLDER_NAME := gfx
DMA_FOLDER_NAME := dma
ACPU_FOLDER_NAME := acpu
PM_FOLDER_NAME := pm
FULL_XDX_DISPLAY_PATH := $(FULL_XDX_PATH)/$(DISPLAY_FOLDER_NAME)
FULL_XDX_AUDIO_PATH := $(FULL_XDX_PATH)/$(AUDIO_FOLDER_NAME)
FULL_XDX_VPU_PATH := $(FULL_XDX_PATH)/$(VPU_FOLDER_NAME)
FULL_XDX_GFX_PATH := $(FULL_XDX_PATH)/$(GFX_FOLDER_NAME)
FULL_XDX_DMA_PATH := $(FULL_XDX_PATH)/$(DMA_FOLDER_NAME)
FULL_XDX_ACPU_PATH := $(FULL_XDX_PATH)/$(ACPU_FOLDER_NAME)
FULL_XDX_PM_PATH := $(FULL_XDX_PATH)/$(PM_FOLDER_NAME)
FULL_XDX_PLATEFORM_PATH := $(FULL_XDX_PATH)/platform
FULL_XDX_VKMS_PATH := $(FULL_XDX_PATH)/vkms
FULL_XDX_MMU_PATH := $(FULL_XDX_PATH)/mmu
FULL_XDX_SMMU_PATH := $(FULL_XDX_PATH)/smmu

# PVR GFX Config
XDX_WA_ARM_POWEROFF := 1
SUPPORT_PERF_IMPROVE := 1
SUPPORT_NATIVE_FENCE_SYNC := 1
SUPPORT_DMA_FENCE := 1
SUPPORT_PANGU_ACPU := 1
SUPPORT_PANGU_PM := 1
SUPPORT_AUDIO := 1
ifneq ($(SUPPORT_PANGU_ACPU), 1)
SUPPORT_AUDIO := 0
$(info "SUPPORT_AUDIO depends on SUPPORT_PANGU_ACPU!")
endif
SUPPORT_VPU := 1
SUPPORT_BUFFER_SYNC := 1
SUPPORT_RGX := 1
PVR_ARCH := volcanic
SUPPORT_PDVFS :=
SUPPORT_WORKLOAD_ESTIMATION :=
SUPPORT_DI_BRG_IMPL := 1
PVR_HANDLE_BACKEND := idr
SUPPORT_PHYSMEM_TEST := 1

SUPPORT_LINUX_DVFS := 1

ifeq ($(ARCH), riscv)
SUPPORT_LINUX_DVFS := 0
$(info "RISCV NOT SUPPORT DVFS!")
endif

ifeq ($(REDHAT_83), 1)
SUPPORT_LINUX_DVFS := 0
$(info "REDHAT_83 NOT SUPPORT DVFS!")
endif

ifeq ($(KYLIN_SERVER), 1)
SUPPORT_LINUX_DVFS := 0
$(info "KYLIN_SERVER NOT SUPPORT DVFS!")
endif

# don't modify these build options here, please update them in setup_ddk_config.sh
SUPPORT_AGP ?= 0
SUPPORT_AGP4 ?= 0
SUPPORT_DMA_TRANSFER ?= 0
SUPPORT_DMA_TRANSFER_B0 ?= 0
XDXGPU_SMMU_SUPPORT ?= 0
SUPPORT_VPU_SMMU ?= 0
XDXGPU_CCCB_HOST_DDR ?= 0
XDXGPU_KCCB_HOST_DDR ?= 0
XDXGPU_SYNC_HOST_DDR ?= 0
XDXGPU_DUMP_CCB ?= 0
SUPPORT_DISPLAY_DUMP_REG ?= 0
XDXGPU_ENABLE_MTS_KICK_IN_VSYNC_IRQ ?= 0
CONFIG_FW_MAIN_ON_SYSMEM := 0
CONFIG_FORCE_WC_TO_UNCACHED := 0

ccflags-y := -I$(FULL_XDX_PATH) \
	-I$(FULL_XDX_PATH)/include \
	-I$(FULL_XDX_DISPLAY_PATH) \
	-I$(FULL_XDX_AUDIO_PATH) \
	-I$(FULL_XDX_PLATEFORM_PATH) \
	-I$(FULL_XDX_GFX_PATH) \
	-I$(FULL_XDX_VPU_PATH) \
	-I$(FULL_XDX_DMA_PATH) \
	-I$(FULL_XDX_VKMS_PATH) \
	-I$(FULL_XDX_DMA_PATH)/hal \
	-I$(FULL_XDX_MMU_PATH) \
	-I$(FULL_XDX_SMMU_PATH) \
	-I$(FULL_XDX_ACPU_PATH)

ifndef RGX_BVNC
$(error "XDXGPU -- RGX_BVNC is not defined")
endif

ifndef RGX_BNC
$(error "XDXGPU -- RGX_BNC is not defined")
endif

ifndef XDXGPU_VERSION_MAJ
$(error "XDXGPU -- XDXGPU_VERSION_MAJ is not defined")
endif

ifndef XDXGPU_VERSION_MIN
$(error "XDXGPU -- XDXGPU_VERSION_MIN is not defined")
endif

# XDXGPU_VERSION_BUILD from running "git describe --abbrev=5 --always"
ifndef XDXGPU_VERSION_BUILD
$(error "XDXGPU -- XDXGPU_VERSION_BUILD is not defined")
endif

ifeq ($(XDXGPU_DUMP_CCB), 1)
ccflags-y += -DXDXGPU_DUMP_CCB
endif

ccflags-y += -DXDXGPU
ccflags-y += -DRGX_BVNC_CORE_KM_HEADER=\"cores/rgxcore_km_$(RGX_BVNC).h\"
ccflags-y += -DRGX_BNC_CONFIG_KM_HEADER=\"configs/rgxconfig_km_$(RGX_BNC).h\"
ccflags-y += -DPVRVERSION_MAJ=$(XDXGPU_VERSION_MAJ) -DPVRVERSION_MIN=$(XDXGPU_VERSION_MIN) -DPVRVERSION_BUILD=$(XDXGPU_VERSION_BUILD)
$(info "XDXGPU -- RGX_BVNC: $(RGX_BVNC), RGX_BNC: $(RGX_BNC)")

ifeq ($(NO_HARDWARE), 1)
ccflags-y += -DNO_HARDWARE
endif

ifeq ($(PDUMP), 1)
ccflags-y += -DPDUMP_PARAM_INIT_STREAM_SIZE=0x800000
ccflags-y += -DPDUMP_PARAM_MAIN_STREAM_SIZE=0x1000000
ccflags-y += -DPDUMP_PARAM_DEINIT_STREAM_SIZE=0x10000
ccflags-y += -DPDUMP_PARAM_BLOCK_STREAM_SIZE=0
ccflags-y += -DPDUMP_SCRIPT_INIT_STREAM_SIZE=0x800000
ccflags-y += -DPDUMP_SCRIPT_MAIN_STREAM_SIZE=0x800000
ccflags-y += -DPDUMP_SCRIPT_DEINIT_STREAM_SIZE=0x10000
ccflags-y += -DPDUMP_SCRIPT_BLOCK_STREAM_SIZE=0x800000
ccflags-y += -DPDUMP_SPLIT_64BIT_REGISTER_ACCESS
endif

ifeq ($(SUPPORT_PERF_IMPROVE), 1)
ccflags-y += -DSUPPORT_PERF_IMPROVE
endif

ifeq ($(SUPPORT_AGP), 1)
ccflags-y += -DSUPPORT_AGP
endif

ifeq ($(SUPPORT_AGP4), 1)
ccflags-y += -DSUPPORT_AGP4
endif

ifeq ($(CONFIG_FW_MAIN_ON_SYSMEM), 1)
ccflags-y += -DCONFIG_FW_MAIN_ON_SYSMEM
endif

ifeq ($(CONFIG_FORCE_WC_TO_UNCACHED), 1)
ccflags-y += -DCONFIG_FORCE_WC_TO_UNCACHED
endif

ifeq ($(SUPPORT_NATIVE_FENCE_SYNC), 1)
ccflags-y += -DSUPPORT_NATIVE_FENCE_SYNC
endif

ifeq ($(SUPPORT_DMA_TRANSFER), 1)
ccflags-y += -DSUPPORT_DMA_TRANSFER
endif

ifeq ($(SUPPORT_DMA_TRANSFER_B0), 1)
ccflags-y += -DSUPPORT_DMA_TRANSFER_B0
endif

ifeq ($(XDXGPU_SMMU_SUPPORT), 1)
ccflags-y += -DXDXGPU_SMMU_SUPPORT
endif

ifeq ($(SUPPORT_VPU_SMMU), 1)
ccflags-y += -DSUPPORT_VPU_SMMU
endif

ifeq ($(XDXGPU_CCCB_HOST_DDR), 1)
ccflags-y += -DXDXGPU_CCCB_HOST_DDR
endif

ifeq ($(XDXGPU_KCCB_HOST_DDR), 1)
ccflags-y += -DXDXGPU_KCCB_HOST_DDR
endif

ifeq ($(XDXGPU_SYNC_HOST_DDR), 1)
ccflags-y += -DXDXGPU_SYNC_HOST_DDR
endif

ifeq ($(XDXGPU_ENABLE_MTS_KICK_IN_VSYNC_IRQ), 1)
ccflags-y += -DXDXGPU_ENABLE_MTS_KICK_IN_VSYNC_IRQ
endif

ifeq ($(SUPPORT_PANGU_ACPU), 1)
ccflags-y += -DSUPPORT_PANGU_ACPU
endif

ifeq ($(SUPPORT_PANGU_PM), 1)
ccflags-y += -DSUPPORT_PANGU_PM
endif

ifeq ($(SUPPORT_PANGU_DOORBELL_MEMSET), 1)
ccflags-y += -DSUPPORT_PANGU_DOORBELL_MEMSET
endif

ifeq ($(SUPPORT_AUDIO), 1)
ccflags-y += -DSUPPORT_AUDIO
endif

ifeq ($(XDX_WA_ARM_POWEROFF), 1)
ccflags-y += -DXDX_WA_ARM_POWEROFF
endif

ifeq ($(SUPPORT_VPU), 1)
ccflags-y += -DSUPPORT_VPU
endif

ifeq ($(SUPPORT_DI_BRG_IMPL), 1)
ccflags-y += -DSUPPORT_DI_BRG_IMPL
endif

ifeq ($(SUPPORT_DISPLAY_DUMP_REG), 1)
ccflags-y += -DSUPPORT_DISPLAY_DUMP_REG
endif


ifeq ($(PVR_BUILD_TYPE), debug)
ccflags-y += -g -DDEBUG -DPVR_BUILD_TYPE=\"debug\"
else
ifeq ($(SUPPORT_PERF_IMPROVE), 1)
ccflags-y += -O2 -DPVR_BUILD_TYPE=\"release\"
$(warning $(ccflags-y))
else
ccflags-y += -DPVR_BUILD_TYPE=\"release\"
endif
endif

ifeq ($(SUPPORT_PHYSMEM_TEST), 1)
ccflags-y += -DSUPPORT_PHYSMEM_TEST
endif

ifeq ($(SUPPORT_LINUX_DVFS), 1)
ccflags-y += -DSUPPORT_LINUX_DVFS
endif

xdxgpu-y :=

# add gfx driver
include $(FULL_XDX_GFX_PATH)/Makefile
xdxgpu-y += $(XDX_GFX_FILES)

# add bridge
include $(FULL_XDX_PLATEFORM_PATH)/Makefile
xdxgpu-y += $(XDX_BR_FILES)

# add dc driver
include $(FULL_XDX_DISPLAY_PATH)/Makefile
xdxgpu-y += $(XDX_DC_FILES)

include $(FULL_XDX_VKMS_PATH)/Makefile
xdxgpu-y += $(XDX_VKMS_FILES)

# add vpu driver
ifeq ($(SUPPORT_VPU), 1)
include $(FULL_XDX_VPU_PATH)/Makefile
xdxgpu-y += $(XDX_VPU_FILES)
endif

# add audio driver
ifeq ($(SUPPORT_AUDIO), 1)
include $(FULL_XDX_AUDIO_PATH)/Makefile
xdxgpu-y += $(XDX_AUDIO_FILES)
endif

# add dma driver
ifeq ($(SUPPORT_DMA_TRANSFER), 1)
include $(FULL_XDX_DMA_PATH)/Makefile
xdxgpu-y += $(XDX_DMA_FILES)
endif

# add acpu driver
ifeq ($(SUPPORT_PANGU_ACPU), 1)
include $(FULL_XDX_ACPU_PATH)/Makefile
xdxgpu-y += $(XDX_ACPU_FILES)
endif

# add pm function
# pm features heavily depend on acpu/cmcu
ifeq ($(SUPPORT_PANGU_PM), 1)
include $(FULL_XDX_PM_PATH)/Makefile
xdxgpu-y += $(XDX_PM_FILES)
endif

include $(FULL_XDX_MMU_PATH)/Makefile
xdxgpu-y += $(XDX_MMU_FILES)

include $(FULL_XDX_SMMU_PATH)/Makefile
xdxgpu-y += $(XDX_SMMU_FILES)

# add pci driver
xdxgpu-y += xdx_drv.o

# add drm driver
xdxgpu-y += xdx_device.o xdx_fdinfo.o xdx_gem.o xdx_debugfs.o xdx_irq.o xdx_sysfs.o \
	    pangu_a0.o pangu_b0.o xdx_vmm.o

ifeq ($(SUPPORT_VPU), 1)
xdxgpu-y += xdx_vpu.o
endif

ifeq ($(SUPPORT_PANGU_ACPU), 1)
xdxgpu-y += xdx_acpu.o
endif

ifeq ($(SUPPORT_PANGU_PM), 1)
xdxgpu-y += pm/xdx_pm.o
endif

ifeq ($(SUPPORT_AUDIO), 1)
xdxgpu-y += xdx_audio.o
endif

ifeq ($(REDHAT_83), 1)
ccflags-y += -DREDHAT_83
$(info "NOW WE BUILDING FOR REDHAT_83!")
endif

ifeq ($(KYLIN_SERVER), 1)
ccflags-y += -DKYLIN_SERVER
$(info "NOW WE BUILDING FOR KYLIN_SERVER!")
endif


#$(warning $(xdxgpu-y))
obj-$(CONFIG_GPU_XDX_XDXGPU) += xdxgpu.o
