#
# (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 ?= "r14p0-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_MOCK_TEST ?= 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_MOCK_TEST=$(MALI_MOCK_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

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$(OSK_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_softjobs.c \
	mali_kbase_10969_workaround.c \
	mali_kbase_hw.c \
	mali_kbase_utility.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_JOB_DUMP),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

ifeq ($(MALI_MOCK_TEST),1)
# Test functionality
mali_kbase-y += tests/internal/src/mock/mali_kbase_pm_driver_mock.o
endif

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/
