########################################################################### ###
#@File           Makefile
#@Title
#@Copyright     Copyright (c) Innosilicon Technology Ltd. All Rights Reserved
#@Description
#@License       Dual MIT/GPLv2
#
# The contents of this file are subject to the MIT license as set out below.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# Alternatively, the contents of this file may be used under the terms of
# the GNU General Public License Version 2 ("GPL") in which case the provisions
# of GPL are applicable instead of those above.
#
# If you wish to allow use of your version of this file only under the terms of
# GPL, and not to allow others to use your version of this file under the terms
# of the MIT license, indicate your decision by deleting the provisions above
# and replace them with the notice and other provisions required by GPL as set
# out in the file called "GPL-COPYING" included in this distribution. If you do
# not delete the provisions above, a recipient may use your version of this file
# under the terms of either the MIT license or GPL.
#
# This License is also included in this distribution in the file called
# "MIT-COPYING".
#
# EXCEPT AS OTHERWISE STATED IN A NEGOTIATED AGREEMENT: (A) THE SOFTWARE IS
# PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
# BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
# PURPOSE AND NONINFRINGEMENT; AND (B) IN NO EVENT SHALL THE AUTHORS OR
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
### ###########################################################################

INNOSRVKM_INCLUDE := \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/include \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/include/public \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/include/volcanic \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/include/drm \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/hwdefs \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/hwdefs/volcanic \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/hwdefs/volcanic/km \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/hwdefs/volcanic/km/configs \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/services/server \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/services/server/include \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/services/server/common \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/services/server/devices \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/services/server/devices/volcanic \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/services/server/env/linux \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/services/include \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/services/include/volcanic \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/services/shared \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/services/shared/include \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/services/shared/common \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/services/system \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/services/system/include \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/services/system/volcanic/include \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/kernel_compatibility \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/cache_bridge \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/cmm_bridge \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/devicememhistory_bridge \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/di_bridge \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/dma_bridge \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/dmabuf_bridge \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/htbuffer_bridge \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/mm_bridge \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/pvrtl_bridge \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/rgxcmp_bridge \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/rgxfwdbg_bridge \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/rgxhwperf_bridge \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/rgxkicksync_bridge \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/rgxray_bridge \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/rgxregconfig_bridge \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/rgxta3d_bridge \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/rgxtimerquery_bridge \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/rgxtq2_bridge \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/srvcore_bridge \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/sync_bridge \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/synctracking_bridge \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/services/server/include
# generated/volcanic
INNOSRVKM_OBJS := \
	bridge/cache_bridge/client_cache_direct_bridge.o \
	bridge/cache_bridge/server_cache_bridge.o \
	bridge/cmm_bridge/server_cmm_bridge.o \
	bridge/devicememhistory_bridge/client_devicememhistory_direct_bridge.o \
	bridge/devicememhistory_bridge/server_devicememhistory_bridge.o \
	bridge/di_bridge/server_di_bridge.o \
	bridge/dma_bridge/server_dma_bridge.o \
	bridge/dmabuf_bridge/server_dmabuf_bridge.o \
	bridge/htbuffer_bridge/client_htbuffer_direct_bridge.o \
	bridge/htbuffer_bridge/server_htbuffer_bridge.o \
	bridge/mm_bridge/client_mm_direct_bridge.o \
	bridge/mm_bridge/server_mm_bridge.o \
	bridge/pvrtl_bridge/client_pvrtl_direct_bridge.o \
	bridge/pvrtl_bridge/server_pvrtl_bridge.o \
	bridge/rgxcmp_bridge/server_rgxcmp_bridge.o \
	bridge/rgxfwdbg_bridge/server_rgxfwdbg_bridge.o \
	bridge/rgxhwperf_bridge/server_rgxhwperf_bridge.o \
	bridge/rgxkicksync_bridge/server_rgxkicksync_bridge.o \
	bridge/rgxray_bridge/server_rgxray_bridge.o \
	bridge/rgxregconfig_bridge/server_rgxregconfig_bridge.o \
	bridge/rgxta3d_bridge/server_rgxta3d_bridge.o \
	bridge/rgxtimerquery_bridge/server_rgxtimerquery_bridge.o \
	bridge/rgxtq2_bridge/server_rgxtq2_bridge.o \
	bridge/srvcore_bridge/server_srvcore_bridge.o \
	bridge/sync_bridge/client_sync_direct_bridge.o \
	bridge/sync_bridge/server_sync_bridge.o \
	bridge/synctracking_bridge/client_synctracking_direct_bridge.o \
	bridge/synctracking_bridge/server_synctracking_bridge.o \
	services/server/common/cache_km.o \
	services/server/common/connection_server.o \
	services/server/common/debug_common.o \
	services/server/common/devicemem_heapcfg.o \
	services/server/common/devicemem_history_server.o \
	services/server/common/devicemem_server.o \
	services/server/common/di_impl_brg.o \
	services/server/common/di_server.o \
	services/server/common/dma_km.o \
	services/server/common/handle.o \
	services/server/common/htb_debug.o \
	services/server/common/htbserver.o \
	services/server/common/info_page_km.o \
	services/server/common/lists.o \
	services/server/common/mmu_common.o \
	services/server/common/physheap.o \
	services/server/common/physmem.o \
	services/server/common/physmem_hostmem.o \
	services/server/common/physmem_invlma.o \
	services/server/common/physmem_lma.o \
	services/server/common/physmem_osgtt_linux.o \
	services/server/common/pmr.o \
	services/server/common/power.o \
	services/server/common/process_stats.o \
	services/server/common/pvr_notifier.o \
	services/server/common/pvrsrv_bridge_init.o \
	services/server/common/pvrsrv.o \
	services/server/common/pvrsrv_pool.o \
	services/server/common/srvcore.o \
	services/server/common/sync_checkpoint.o \
	services/server/common/sync_server.o \
	services/server/common/tlintern.o \
	services/server/common/tlserver.o \
	services/server/common/tlstream.o \
	services/server/common/vmm_pvz_client.o \
	services/server/common/vmm_pvz_server.o \
	services/server/common/vz_vmm_pvz.o \
	services/server/common/vz_vmm_vm.o \
	services/server/devices/volcanic/rgxcompute.o \
	services/server/devices/volcanic/rgxdebug.o \
	services/server/devices/volcanic/rgxfwutils.o \
	services/server/devices/volcanic/rgxhwperf.o \
	services/server/devices/volcanic/rgxinit.o \
	services/server/devices/volcanic/rgxlayer_impl.o \
	services/server/devices/volcanic/rgxmmuinit.o \
	services/server/devices/volcanic/rgxmulticore.o \
	services/server/devices/volcanic/rgxpower.o \
	services/server/devices/volcanic/rgxray.o \
	services/server/devices/volcanic/rgxsrvinit.o \
	services/server/devices/volcanic/rgxstartstop.o \
	services/server/devices/volcanic/rgxta3d.o \
	services/server/devices/volcanic/rgxtdmtransfer.o \
	services/server/devices/rgxbreakpoint.o \
	services/server/devices/rgxbvnc.o \
	services/server/devices/rgxccb.o \
	services/server/devices/rgxfwdbg.o \
	services/server/devices/rgxfwimageutils.o \
	services/server/devices/rgxfwtrace_strings.o \
	services/server/devices/rgxhwperf_common.o \
	services/server/devices/rgxkicksync.o \
	services/server/devices/rgxmem.o \
	services/server/devices/rgxregconfig.o \
	services/server/devices/rgxshader.o \
	services/server/devices/rgxsyncutils.o \
	services/server/devices/rgxtimecorr.o \
	services/server/devices/rgx_bridge_init.o \
	services/server/devices/rgxtimerquery.o \
	services/server/devices/rgxutils.o \
	services/server/env/linux/inno_trace.o \
	services/server/env/linux/inno_srvkm.o \
	services/server/env/linux/allocmem.o \
	services/server/env/linux/event.o \
	services/server/env/linux/fwload.o \
	services/server/env/linux/handle_idr.o \
	services/server/env/linux/km_apphint.o \
	services/server/env/linux/module_common.o \
	services/server/env/linux/osconnection_server.o \
	services/server/env/linux/osfunc.o \
	services/server/env/linux/osmmap_stub.o \
	services/server/env/linux/inno_dma_buf.o \
	services/server/env/linux/physmem_dmabuf.o \
	services/server/env/linux/physmem_osmem_linux.o \
	services/server/env/linux/physmem_test.o \
	services/server/env/linux/inno_pmr.o \
	services/server/env/linux/pmr_os.o \
	services/server/env/linux/pvr_bridge_k.o \
	services/server/env/linux/pvr_buffer_sync.o \
	services/server/env/linux/pvr_counting_timeline.o \
	services/server/env/linux/pvr_debug.o \
	services/server/env/linux/inno_debugfs.o \
	services/server/env/linux/pvr_debugfs.o \
	services/server/env/linux/pvr_drm.o \
	services/server/env/linux/pvr_fence.o \
	services/server/env/linux/pvr_gputrace.o \
	services/server/env/linux/pvr_platform_drv.o \
	services/server/env/linux/pvr_sw_fence.o \
	services/server/env/linux/pvr_sync_file.o \
	services/server/env/linux/pvr_sync_ioctl_common.o \
	services/shared/common/devicemem.o \
	services/shared/common/devicemem_utils.o \
	services/shared/common/hash.o \
	services/shared/common/htbuffer.o \
	services/shared/common/mem_utils.o \
	services/shared/common/pvrsrv_error.o \
	services/shared/common/ra.o \
	services/shared/common/sync.o \
	services/shared/common/tlclient.o \
	services/shared/common/uniq_key_splay_tree.o \
	services/system/common/sysconfig_cmn.o \
	services/system/common/env/linux/interrupt_support.o \
	services/system/common/env/linux/pci_support.o \
	services/system/volcanic/common/vmm_type_stub.o \
	services/system/volcanic/common/env/linux/dma_support.o \

ifeq ($(CONFIG_DRM_INNO_POWER),y)
INNOSRVKM_OBJS += \
	services/server/env/linux/pvr_dvfs_device.o
endif

ifeq ($(PVR_BUILD_DIR),android_container)
INNOSRVKM_INCLUDE += \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/innoion
INNOSRVKM_OBJS += \
	services/server/env/linux/pvr_sync_ioctl_dev.o
else
INNOSRVKM_OBJS += \
	services/server/env/linux/pvr_sync_ioctl_drm.o
endif

ifeq ($(PVRSRV_ENABLE_GPU_MEMORY_INFO),1)
INNOSRVKM_INCLUDE += -I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/ri_bridge
INNOSRVKM_OBJS += bridge/ri_bridge/server_ri_bridge.o \
	bridge/ri_bridge/client_ri_direct_bridge.o \
	services/server/common/ri_server.o
endif

ifeq ($(PDUMP),1)
INNOSRVKM_INCLUDE += \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/pdumpmm_bridge \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/pdumpctrl_bridge \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/pdump_bridge \
	-I$(INNOGPU_PRO_PATH)/innosrvkm/bridge/rgxpdump_bridge

INNOSRVKM_OBJS += \
	bridge/pdump_bridge/client_pdump_direct_bridge.o \
	bridge/pdump_bridge/server_pdump_bridge.o \
	bridge/pdumpctrl_bridge/client_pdumpctrl_direct_bridge.o \
	bridge/pdumpctrl_bridge/server_pdumpctrl_bridge.o \
	bridge/pdumpmm_bridge/client_pdumpmm_direct_bridge.o \
	bridge/pdumpmm_bridge/server_pdumpmm_bridge.o \
	bridge/rgxpdump_bridge/client_rgxpdump_direct_bridge.o \
	bridge/rgxpdump_bridge/server_rgxpdump_bridge.o \
	services/server/common/pdump_mmu.o \
	services/server/common/pdump_physmem.o \
	services/server/common/pdump_server.o \
	services/server/devices/volcanic/rgxpdump.o \
	services/shared/common/devicemem_pdump.o
endif

ifeq ($(DISPLAY_CONTROLLER),drm_nulldisp)
INNOSRVKM_OBJS += \
	 services/shared/common/mem_utils.o
endif

ifeq ($(CONFIG_EVENT_TRACING), y)
	INNOSRVKM_OBJS += services/server/env/linux/trace_events.o
endif


ifeq ($(CONFIG_X86),y)
	INNOSRVKM_OBJS += services/server/env/linux/osfunc_x86.o
else ifeq ($(CONFIG_ARM),y)
	INNOSRVKM_OBJS += services/server/env/linux/osfunc_arm.o
else ifeq ($(CONFIG_ARM64),y)
	INNOSRVKM_OBJS += services/server/env/linux/osfunc_arm64.o
else ifeq ($(CONFIG_LOONGARCH),y)
	INNOSRVKM_OBJS += services/server/env/linux/osfunc_loongarch.o
else ifeq ($(CONFIG_RISCV),y)
	INNOSRVKM_OBJS += services/server/env/linux/osfunc_riscv.o
else ifeq ($(CONFIG_SW64),y)
	INNOSRVKM_OBJS += services/server/env/linux/osfunc_sw_64.o
else ifeq ($(CONFIG_MIPS),y)
	INNOSRVKM_OBJS += services/server/env/linux/osfunc_mips.o
endif

#	-I$(src)/generated/volcanic/syncfallback_bridge \
#	generated/volcanic/syncfallback_bridge/server_syncfallback_bridge.o \
#	services/server/common/sync_fallback_server.o \
#	services/server/devices/rgxworkest.o \
#	services/server/devices/rgxpdvfs.o \
#	services/shared/common/devicememx_pdump.o \
#	services/system/volcanic/rgx_innogpu/fpga.o \

ifeq ($(PVR_BUILD_DIR),nohw_linux)
  INNOSRVKM_INCLUDE += -I$(INNOGPU_PRO_PATH)/innosrvkm/services/system/volcanic/rgx_nohw
  INNOSRVKM_OBJS += services/system/volcanic/rgx_nohw/sysconfig.o
  innosrvkm_nohw-y := $(addprefix innosrvkm/, $(INNOSRVKM_OBJS))
  innosrvkm_nohw-y += innogpu/osfunc/inno_task.o
  innosrvkm_nohw-y += innogpu/osfunc/inno_mm.o
  innosrvkm_nohw-y += innogpu/osfunc/inno_misc.o
  innosrvkm_nohw-y += innogpu/osfunc/inno_timer.o
  innosrvkm_nohw-y += innogpu/osfunc/inno_lock.o
  innosrvkm_nohw-y += innogpu/osfunc/inno_dma.o
  innosrvkm_nohw-y += innogpu/osfunc/inno_drm.o
  innosrvkm_nohw-y += innogpu/osfunc/inno_idr.o
  innosrvkm_nohw-y += innogpu/osfunc/inno_firmware.o
  innosrvkm_nohw-y += innogpu/osfunc/inno_uaccess.o
  innosrvkm_nohw-y += innogpu/osfunc/inno_pci.o
  innosrvkm_nohw-y += innogpu/osfunc/inno_mtrr.o
  innosrvkm_nohw-y += innogpu/osfunc/inno_fence.o
  innosrvkm_nohw-y += innogpu/osfunc/inno_interrupt.o
  innosrvkm_nohw-y += innogpu/osfunc/inno_fs.o
  innosrvkm_nohw-y += innogpu/osfunc/inno_plat_dev.o
  innosrvkm_nohw-y += innogpu/osfunc/inno_debug.o
  obj-m += innosrvkm_nohw.o
else
  INNOSRVKM_INCLUDE += -I$(INNOGPU_PRO_PATH)/innosrvkm/services/system/volcanic/rgx_innogpu
  INNOSRVKM_OBJS += services/system/volcanic/rgx_innogpu/sysconfig.o
  INNOSRVKM_OBJS := $(addprefix innosrvkm/, $(INNOSRVKM_OBJS))
  ifeq ($(SEPARATE_BUILD),y)
	innosrvkm-y := $(INNOSRVKM_OBJS)
	obj-m += innosrvkm.o
  else ifeq ($(CONFIG_DRM_INNO_SRVKM),y)
    INNOSRVKM := $(INNOSRVKM_OBJS)
  endif
endif
