#
# (C) COPYRIGHT 2012-2018 ARM Limited. All rights reserved.
#
# This program is free software and is provided to you under the terms of the
# GNU General Public License version 2 as published by the Free Software
# Foundation, and any use by you of this program is subject to the terms
# of such GNU licence.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, you can access it online at
# http://www.gnu.org/licenses/gpl-2.0.html.
#
# SPDX-License-Identifier: GPL-2.0
#
#


# Driver version string which is returned to userspace via an ioctl
MALI_RELEASE_NAME ?= "r16p0-01rel0"

# Paths required for build
KBASE_PATH = $(src)
KBASE_PLATFORM_PATH = $(KBASE_PATH)/platform_dummy
UMP_PATH = $(src)/../../../base

# Set up defaults if not defined by build system
MALI_CUSTOMER_RELEASE ?= 1
MALI_USE_CSF ?= 0
MALI_UNIT_TEST ?= 0
MALI_KERNEL_TEST_API ?= 0
MALI_COVERAGE ?= 0
CONFIG_MALI_PLATFORM_NAME ?= "devicetree"

# Set up our defines, which will be passed to gcc
DEFINES = \
	-DMALI_CUSTOMER_RELEASE=$(MALI_CUSTOMER_RELEASE) \
	-DMALI_USE_CSF=$(MALI_USE_CSF) \
	-DMALI_KERNEL_TEST_API=$(MALI_KERNEL_TEST_API) \
	-DMALI_UNIT_TEST=$(MALI_UNIT_TEST) \
	-DMALI_COVERAGE=$(MALI_COVERAGE) \
	-DMALI_RELEASE_NAME=\"$(MALI_RELEASE_NAME)\"

ifeq ($(KBUILD_EXTMOD),)
# in-tree
DEFINES +=-DMALI_KBASE_PLATFORM_PATH=../../$(src)/platform/$(CONFIG_MALI_PLATFORM_NAME)
else
# out-of-tree
DEFINES +=-DMALI_KBASE_PLATFORM_PATH=$(src)/platform/$(CONFIG_MALI_PLATFORM_NAME)
endif

DEFINES += -I$(srctree)/drivers/staging/android
ldflags-y += --strip-debug

DEFINES += -DMALI_KBASE_BUILD

# Use our defines when compiling
ccflags-y += $(DEFINES) -I$(KBASE_PATH)   -I$(KBASE_PLATFORM_PATH) -I$(UMP_PATH) -I$(srctree)/include/linux
subdir-ccflags-y += $(DEFINES) -I$(KBASE_PATH)   -I$(KBASE_PLATFORM_PATH) -I$(UMP_PATH) -I$(srctree)/include/linux

SRC := \
	mali_kbase_device.c \
	mali_kbase_cache_policy.c \
	mali_kbase_mem.c \
	mali_kbase_mmu.c \
	mali_kbase_ctx_sched.c \
	mali_kbase_jd.c \
	mali_kbase_jd_debugfs.c \
	mali_kbase_jm.c \
	mali_kbase_gpuprops.c \
	mali_kbase_js.c \
	mali_kbase_js_ctx_attr.c \
	mali_kbase_event.c \
	mali_kbase_context.c \
	mali_kbase_pm.c \
	mali_kbase_config.c \
	mali_kbase_vinstr.c \
	mali_kbase_hwcnt.c \
	mali_kbase_hwcnt_backend_gpu.c \
	mali_kbase_hwcnt_gpu.c \
	mali_kbase_hwcnt_legacy.c \
	mali_kbase_hwcnt_types.c \
	mali_kbase_hwcnt_virtualizer.c \
	mali_kbase_softjobs.c \
	mali_kbase_10969_workaround.c \
	mali_kbase_hw.c \
	mali_kbase_debug.c \
	mali_kbase_gpu_memory_debugfs.c \
	mali_kbase_mem_linux.c \
	mali_kbase_core_linux.c \
	mali_kbase_replay.c \
	mali_kbase_mem_profile_debugfs.c \
	mali_kbase_mmu_mode_lpae.c \
	mali_kbase_mmu_mode_aarch64.c \
	mali_kbase_disjoint_events.c \
	mali_kbase_gator_api.c \
	mali_kbase_debug_mem_view.c \
	mali_kbase_debug_job_fault.c \
	mali_kbase_smc.c \
	mali_kbase_mem_pool.c \
	mali_kbase_mem_pool_debugfs.c \
	mali_kbase_tlstream.c \
	mali_kbase_strings.c \
	mali_kbase_as_fault_debugfs.c \
	mali_kbase_regs_history_debugfs.c \
	thirdparty/mali_kbase_mmap.c


ifeq ($(CONFIG_MALI_CINSTR_GWT),y)
	SRC += mali_kbase_gwt.c
endif

ifeq ($(MALI_UNIT_TEST),1)
	SRC += mali_kbase_tlstream_test.c
endif

ifeq ($(MALI_CUSTOMER_RELEASE),0)
	SRC += mali_kbase_regs_dump_debugfs.c
endif


ccflags-y += -I$(KBASE_PATH)

# Tell the Linux build system from which .o file to create the kernel module
obj-$(CONFIG_MALI_MIDGARD) += mali_kbase.o

# Tell the Linux build system to enable building of our .c files
mali_kbase-y := $(SRC:.c=.o)

# Kconfig passes in the name with quotes for in-tree builds - remove them.
platform_name := $(shell echo $(CONFIG_MALI_PLATFORM_NAME))
MALI_PLATFORM_DIR := platform/$(platform_name)
ccflags-y += -I$(src)/$(MALI_PLATFORM_DIR)
include $(src)/$(MALI_PLATFORM_DIR)/Kbuild

ifeq ($(CONFIG_MALI_DEVFREQ),y)
  ifeq ($(CONFIG_DEVFREQ_THERMAL),y)
    include $(src)/ipa/Kbuild
  endif
endif

ifeq ($(MALI_USE_CSF),1)
	include $(src)/csf/Kbuild
endif

mali_kbase-$(CONFIG_MALI_DMA_FENCE) += \
	mali_kbase_dma_fence.o \
	mali_kbase_fence.o
mali_kbase-$(CONFIG_SYNC) += \
	mali_kbase_sync_android.o \
	mali_kbase_sync_common.o
mali_kbase-$(CONFIG_SYNC_FILE) += \
	mali_kbase_sync_file.o \
	mali_kbase_sync_common.o \
	mali_kbase_fence.o

include  $(src)/backend/gpu/Kbuild
mali_kbase-y += $(BACKEND:.c=.o)


ccflags-y += -I$(src)/backend/gpu
subdir-ccflags-y += -I$(src)/backend/gpu

# For kutf and mali_kutf_irq_latency_test
obj-$(CONFIG_MALI_KUTF) += tests/
