
# References: bldsys/sconstruct and base/sconscript

SCONS_CFLAGS = -Wall -Werror
SCONS_CONFIGS =
MALI_KBASE_DEP =

#
# Include project config
#
CONFIG_DIR = config

ifeq ($(CONFIG),)
$(error CONFIG is not specified)
endif

ifeq ($(KDIR),)
$(error KDIR is not specified)
endif

include $(CONFIG_DIR)/$(CONFIG).mak

#
# Set up defaults of MTK_DTV specific configs
#
mtk_dtv_platform_name = $(shell echo $(mtk_dtv_platform))

ifeq ($(os),android)
use_fixed_devid = 0
endif

enable_gpu_mfdec ?= 0

#
# Set up ARCH and CROSS_COMPILE
#
ifeq ($(arch),arm_v7)
	ARCH = arm
	toolchain ?= arm-none-linux-gnueabi-
else ifeq ($(arch),arm_v8)
	ARCH = arm64
	toolchain ?= aarch64-linux-gnu-
endif

export CROSS_COMPILE=$(toolchain)

#
# Set up ARM native flags and configs
#
SCONS_CONFIGS += CONFIG_MALI_MIDGARD=m

ifeq ($(debug),1)
SCONS_CFLAGS += -DCONFIG_MALI_DEBUG
SCONS_CONFIGS += CONFIG_MALI_DEBUG=y
endif

SCONS_CFLAGS += -DCONFIG_MALI_PLATFORM_FAKE
SCONS_CONFIGS += CONFIG_MALI_PLATFORM_FAKE=y

ifeq ($(dvfs),1)
SCONS_CFLAGS += -DCONFIG_MALI_MIDGARD_DVFS
SCONS_CONFIGS += CONFIG_MALI_MIDGARD_DVFS=y
endif

#
# Set up MTK_DTV specific flags and configs
#
SCONS_CFLAGS += -DMTK_DTV
SCONS_CFLAGS += -DMTK_DTV_$(strip $(shell echo $(mtk_dtv_platform) | tr a-z A-Z))
SCONS_CFLAGS += -DMTK_DTV_$(strip $(shell echo $(project) | tr a-z A-Z))
SCONS_CFLAGS += -DMALI_MAX_FREQ=$(shell echo $(mali_max_freq))
SCONS_CFLAGS += -DMALI_MIN_FREQ=$(shell echo $(mali_min_freq))
SCONS_CFLAGS += -DMALI_BOOST_FREQ=$(shell echo $(mali_boost_freq))

ifeq ($(dt_probe),)
# do not probe GPU from device tree, pass irq and reg assignment to platform config
SCONS_CFLAGS += -DMALI_IRQ=$(shell echo $(mali_irq))
SCONS_CFLAGS += -DMALI_REG_OFFSET=$(shell echo $(mali_reg_offset))
else
SCONS_CFLAGS += -DMTK_DTV_DEVICE_TREE_PROBE
endif

SCONS_CFLAGS += -DMTK_DTV_RIU_ENABLED
SCONS_CFLAGS += -DMTK_DTV_PM_CALLBACKS

# XXX: kernel enables CONFIG_NEED_SG_DMA_LENGTH, but dma_length is not set correctly in kernel.
#      we disable this config internally in mali driver to use length instead of dma_length.
SCONS_CFLAGS += -DMTK_DTV_DISABLE_CONFIG_NEED_SG_DMA_LENGTH
SCONS_CFLAGS += -DMTK_DTV_GPU_UTILIZATION
SCONS_CFLAGS += -DMTK_DTV_MEMORY_USAGE
SCONS_CFLAGS += -DMTK_DTV_DISABLE_SHADER_CORES

ifeq ($(use_fixed_devid),1)
SCONS_CFLAGS += -DMTK_DTV_USE_FIXED_DEVID
endif

SCONS_CFLAGS += -DMTK_DTV_UMM_EXPORT=$(umm_export)

ifeq ($(skip_jobs),1)
SCONS_CFLAGS += -DMTK_DTV_SKIP_JOBS
endif

ifeq ($(dvfs_freq_adjustable),1)
SCONS_CFLAGS += -DMTK_DTV_DVFS_FREQ_ADJUSTABLE
endif

ifeq ($(gpu_protect_mode),1)
SCONS_CFLAGS += -DMTK_DTV_ENABLE_PROTECT_MODE
endif

SCONS_CFLAGS += -DMTK_DTV_CLOCK_DEBUG_ADJUSTABLE=$(clock_debug_adjustable)

SCONS_CONFIGS += MTK_DTV_PLATFORM_NAME=$(mtk_dtv_platform_name)
SCONS_CONFIGS += MTK_DTV_UMM_EXPORT=$(umm_export)
SCONS_CONFIGS += MTK_DTV_CLOCK_DEBUG_ADJUSTABLE=$(clock_debug_adjustable)

SCONS_CFLAGS += -DMTK_DTV_SPECIFIC_IRQ_AFFINITY=$(mtk_dtv_specific_irq_affinity)

ifeq ($(enable_gpu_mfdec),1)
SCONS_CONFIGS += MTK_DTV_GPU_MFDEC=1
SCONS_CFLAGS += -DMTK_DTV_GPU_MFDEC=1
endif

ifeq ($(mtk_dtv_export_utility),1)
SCONS_CONFIGS += MTK_DTV_EXPORT_UTILITY=1
SCONS_CFLAGS += -DMTK_DTV_EXPORT_UTILITY
endif

ifeq ($(mtk_dtv_platform),mt5877)
$(info G57_WITHOUT_HYFBC for mt5877)
SCONS_CFLAGS += -DG57_WITHOUT_HYFBC=1
endif

SCONS_CONFIGS += MTK_DTV_MEMORY_PROCFS=1
SCONS_CFLAGS += -DMTK_DTV_MEMORY_PROCFS=1

#
# Targets
#

ifndef MTK_EXTMOD_OBJ
OUT_DIR = modules
MAKE_OUT_DIR = mkdir -p $(OUT_DIR)
CLEAN_OUT_DIR = rm -rf $(OUT_DIR)
endif

all: kbase

kbase: $(MALI_KBASE_DEP)
	$(MAKE_OUT_DIR)
	SCONS_CONFIGS="$(SCONS_CONFIGS)" SCONS_CFLAGS="$(SCONS_CFLAGS)" $(MAKE) -C gpu/arm/mtk_$(mtk_dtv_platform)
ifndef MTK_EXTMOD_OBJ
	cp gpu/arm/mtk_$(mtk_dtv_platform)/mali_kbase_$(mtk_dtv_platform).ko $(OUT_DIR)
endif

clean:
	@find -L \
	\( -name '*.ko' -o -name '.*.cmd' \
	-o -name '*.o' -o -name '*.mod.c' \
	-o -name '*.o.d' \
	-o -name 'modules.order' \
	-o -name 'Module.symvers' \) -type f -print | xargs rm -f
	@find -L \( -name '.tmp_versions' \) -print | xargs rm -rf {}

ifndef MTK_EXTMOD_OBJ
	$(CLEAN_OUT_DIR)
endif


