#!/bin/bash
export RGX_BNC=35.V.1632.23
export RGX_BVNC=35.4.1632.23

export XDXGPU_VERSION_BUILD=512796

export SUPPORT_AGP=0
export SUPPORT_AGP4=0
export XDXGPU_SMMU_SUPPORT=1
export SUPPORT_VPU_SMMU=0
export SUPPORT_DMA_TRANSFER=1
export SUPPORT_DMA_TRANSFER_B0=1

export XDXGPU_VERSION_MAJ=1
export XDXGPU_VERSION_MIN=1

ifneq ($(KBUILD_EXTMOD),)
ifndef CONFIG_DRM
$(error CONFIG_DRM disabled, exit...)
endif

ifeq (y,$(CONFIG_DRM_XDXGPU))
$(error DRM_XDXGPU is built-in, exit...)
endif

ifndef CONFIG_KALLSYMS
$(error CONFIG_KALLSYMS disabled, kallsyms_lookup_name() is absent, exit...)
endif
endif

ifdef CONFIG_CC_IS_GCC
GCCMAJ=$(shell echo __GNUC__ | $(CC) -E -x c - | tail -n 1)
GCCMIN=$(shell echo __GNUC_MINOR__ | $(CC) -E -x c - | tail -n 1)
GCCPAT=$(shell echo __GNUC_MINOR__ | $(CC) -E -x c - | tail -n 1)
# CONFIG_GCC_VERSION returns x.xx.xx as the version format
GCCSTR=$(shell printf "%d%02d%02d" $(GCCMAJ) $(GCCMIN) $(GCCPAT))
ifeq ($(shell [ $(CONFIG_GCC_VERSION) -ne $(GCCSTR) ] && echo y), y)
#$(warning "Local GCC version $(GCCSTR) does not match kernel compiler GCC version $(CONFIG_GCC_VERSION)")
#$(warning "This may cause unexpected and hard-to-isolate compiler-related issues")
endif
endif

DRM_VER=$(shell sed -n 's/^RHEL_DRM_VERSION = \(.*\)/\1/p' $(srctree)/Makefile)
DRM_PATCH=$(shell sed -n 's/^RHEL_DRM_PATCHLEVEL = \(.*\)/\1/p' $(srctree)/Makefile)
ifeq ($(DRM_VER),)
DRM_VER = $(VERSION)
DRM_PATCH = $(PATCHLEVEL)
endif

subdir-ccflags-y += \
	-Werror \
	-DDRM_VER=$(DRM_VER) \
	-DDRM_PATCH=$(DRM_PATCH) \
	-DDRM_SUB="0"

define get_rhel_version
printf "#include <linux/version.h>\n$(1)" | $(CC) $(LINUXINCLUDE) -E -x c - | tail -n 1 | grep -v $(1)
endef
RHEL_MAJOR := $(shell $(call get_rhel_version,RHEL_MAJOR))
RHEL_MINOR := $(shell $(call get_rhel_version,RHEL_MINOR))

ifneq (,$(RHEL_MAJOR))
OS_NAME = "rhel"
OS_VERSION = "$(RHEL_MAJOR).$(RHEL_MINOR)"
else ifneq (,$(wildcard /etc/os-release))
OS_NAME = "$(shell sed -n 's/^ID=\(.*\)/\1/p' /etc/os-release | tr -d '\"')"
# On CentOS/RHEL, users could have installed a kernel not distributed from RHEL
ifeq ("centos",$(OS_NAME))
OS_NAME="custom-rhel"
else ifeq ("rhel",$(OS_NAME))
OS_NAME="custom-rhel"
else ifeq ("linuxmint",$(OS_NAME))
OS_NAME="ubuntu"
endif
OS_VERSION = $(shell sed -n 's/^VERSION_ID=\(.*\)/\1/p' /etc/os-release)
else
OS_NAME = "unknown"
OS_VERSION = "0.0"
endif

OS_VERSION_STR = $(subst .,_,$(OS_VERSION))

ifeq ("ubuntu",$(OS_NAME))
subdir-ccflags-y += -DOS_NAME_UBUNTU
else ifeq ("rhel",$(OS_NAME))
subdir-ccflags-y += -DOS_NAME_RHEL
else ifeq ("sled",$(OS_NAME))
subdir-ccflags-y += -DOS_NAME_SLE
else ifeq ("sles",$(OS_NAME))
subdir-ccflags-y += -DOS_NAME_SLE
else ifeq ("debian",$(OS_NAME))
subdir-ccflags-y += -DOS_NAME_DEBIAN
else ifeq ("kylin",$(OS_NAME))
subdir-ccflags-y += -DOS_NAME_KYLIN
else
subdir-ccflags-y += -DOS_NAME_UNKNOWN
endif

subdir-ccflags-y += \
	-DOS_VERSION_MAJOR=$(shell echo $(OS_VERSION).0 | cut -d. -f1) \
	-DOS_VERSION_MINOR=$(shell echo $(OS_VERSION).0 | cut -d. -f2)

ifeq ($(OS_NAME),"opensuse-leap")
subdir-ccflags-y += -DOS_NAME_SUSE_$(OS_VERSION_STR)
endif

ifeq ($(OS_NAME),"sled")
subdir-ccflags-y += -DOS_NAME_SUSE_$(OS_VERSION_STR)
endif

ifeq ($(OS_NAME),"sles")
subdir-ccflags-y += -DOS_NAME_SUSE_$(OS_VERSION_STR)
endif

ifeq ($(OS_NAME),"ubuntu")
OS_BUILD_NUM = $(shell echo $(KERNELRELEASE) | cut -d '-' -f 2)
subdir-ccflags-y += -DUBUNTU_BUILD_NUM=$(OS_BUILD_NUM)
OS_OEM = "$(shell echo $(KERNELRELEASE) | cut -d '-' -f 3)"
ifeq ($(OS_OEM),"oem")
subdir-ccflags-y += -DOS_NAME_UBUNTU_OEM
endif
subdir-ccflags-y += -DOS_NAME_UBUNTU_$(OS_VERSION_STR)
endif

ifeq ($(OS_NAME),"rhel")
subdir-ccflags-y += -DOS_NAME_RHEL_$(OS_VERSION_STR)

ifeq ($(RHEL_MAJOR),7)
subdir-ccflags-y += -DOS_NAME_RHEL_7_X \
	-include /usr/src/kernels/$(KERNELRELEASE)/include/drm/drm_backport.h
else ifeq ($(RHEL_MAJOR),8)
subdir-ccflags-y += -DOS_NAME_RHEL_8_X
endif
endif

export OS_NAME OS_VERSION

_XL_LINUXINCLUDE=$(subst -I ,-I,$(strip $(LINUXINCLUDE)))
LINUX_SRCTREE_INCLUDE := \
	$(filter-out -I%/uapi "-include %/kconfig.h",$(_XL_LINUXINCLUDE))
USER_INCLUDE := $(filter-out $(LINUX_SRCTREE_INCLUDE), $(_XL_LINUXINCLUDE))

LINUXINCLUDE := \
	-I$(srctree)/$(src)/include \
	$(LINUX_SRCTREE_INCLUDE) \
	-I$(srctree)/$(src)/include/uapi \
	$(USER_INCLUDE)
ARCH?=$(shell uname -m)
OS?=$(OS_NAME)
$(info "ARCH: $(ARCH)")
$(info "OS: $(OS)")
ifeq ($(ARCH), x86_64)
TARGET_PLATFORM=x86_64-linux-gnu
else ifeq ($(ARCH), arm64)
TARGET_PLATFORM=aarch64-linux-gnu
else ifeq ($(ARCH), loongarch64)
TARGET_PLATFORM=loongarch64-linux-gnu
else ifeq ($(ARCH), riscv)
TARGET_PLATFORM=riscv64-unknown-linux-gnu-
endif
KVER = $(shell uname -r)
KMAJ = $(shell echo $(KVER) | \sed -e 's/^\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*.*/\1/')
KMIN = $(shell echo $(KVER) | \sed -e 's/^[0-9][0-9]*\.\([0-9][0-9]*\)\.[0-9][0-9]*.*/\1/')
KREV = $(shell echo $(KVER) | \sed -e 's/^[0-9][0-9]*\.[0-9][0-9]*\.\([0-9][0-9]*\).*/\1/')
equal_or = $(shell [ $(KMAJ) -eq 5 ] && [ $(KMIN) -ge 16 ] && echo 1)
ifeq ($(findstring$(ARCH)$(ARCH), x86 x86_64),)
  ifeq ($(findstring$(OS)$(OS), "ubuntu" ubuntu),)
    ifeq ($(equal_or), 1)      
       LINUXINCLUDE +=-I/usr/lib/gcc/$(TARGET_PLATFORM)/$(GCCMAJ)/include
	endif
  endif
endif

export CONFIG_DRM_XDXGPU=m
export CONFIG_DRM_XDX_DC=y
export CONFIG_VERISILICON_MMU=y
export SUPPORT_PANGU_DC_HDMI=y
export SUPPORT_PANGU_DC_DP=y
export SUPPORT_XDXGPU_OVERLAY_PLANE=y
export SUPPORT_XDXGPU_RPM=n
export MXM_UOS_WORKAROUND=n

export DUMP_SCRN_BUFFER=n



subdir-ccflags-y += -include $(srctree)/$(src)/include/drm/config_kernel.h
subdir-ccflags-y += -I $(srctree)/$(src)/include/uapi/drm
 
ifeq ($(SUPPORT_PANGU_DC_HDMI)_$(SUPPORT_PANGU_DC_DP), y_y)
subdir-ccflags-y += -DSUPPORT_PANGU_DC_HDMI -DSUPPORT_PANGU_DC_DP -DCONFIG_DRM_XDX_DC -DCONFIG_DRM_XDXGPU -DCONFIG_VERISILICON_MMU -DPVR_BUILD_DIR=\"xdxgpu\" -DWINDOW_SYSTEM=\"xorg\"
$(warning "enabled HDMI&DP")
else ifeq ($(SUPPORT_PANGU_DC_HDMI), y)
subdir-ccflags-y += -DSUPPORT_PANGU_DC_HDMI -DCONFIG_DRM_XDX_DC -DCONFIG_DRM_XDXGPU -DCONFIG_VERISILICON_MMU -DPVR_BUILD_DIR=\"xdxgpu\" -DWINDOW_SYSTEM=\"xorg\"
$(warning "enabled HDMI")
else ifeq ($(SUPPORT_PANGU_DC_DP), y)
subdir-ccflags-y += -DSUPPORT_PANGU_DC_DP -DCONFIG_DRM_XDX_DC -DCONFIG_DRM_XDXGPU -DCONFIG_VERISILICON_MMU -DPVR_BUILD_DIR=\"xdxgpu\" -DWINDOW_SYSTEM=\"xorg\"
$(warning "enabled DP")
else
subdir-ccflags-y += -DCONFIG_DRM_XDX_DC -DCONFIG_DRM_XDXGPU -DCONFIG_VERISILICON_MMU -DPVR_BUILD_DIR=\"xdxgpu\" -DWINDOW_SYSTEM=\"xorg\"
$(warning "only enabled DC")
endif

ifeq ($(MXM_UOS_WORKAROUND), y)
subdir-ccflags-y += -DMXM_UOS_WORKAROUND
$(warning "Workaround for MXM UOS")
endif

ifeq ($(DUMP_SCRN_BUFFER), y)
subdir-ccflags-y += -DDUMP_DC_BUFFER
$(warning "Dump display screen buffer")
endif

ifeq ($(SUPPORT_XDXGPU_OVERLAY_PLANE), y)
subdir-ccflags-y += -DSUPPORT_XDXGPU_OVERLAY_PLANE
$(warning "Support XDXGPU OVERLAY_PLANE")
endif

ifeq ($(SUPPORT_XDXGPU_RPM), y)
subdir-ccflags-y += -DSUPPORT_XDXGPU_RPM
$(warning "Support XDXGPU runtime PM")
endif

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

subdir-ccflags-y += -DPVRSRV_MODNAME=\"xdxgpu\"

obj-m += xdxgpu/
