# SPDX-License-Identifier: GPL-2.0-only

# KERNEL_SRC may not be set in all build environments; fall back to srctree
# which is always defined by the kernel build system.
KERNEL_SRC ?= $(srctree)

VIDEO_DRIVER_ABS_PATH := $(VIDEO_ROOT)/video/driver
VIDEO_DRIVER_REL_PATH := ../video/driver

UBWC_H := $(KERNEL_SRC)/include/linux/soc/qcom/ubwc.h
HAS_UBWC_HELPERS := $(shell grep -qs 'qcom_ubwc_min_acc_length_64b' $(UBWC_H) && echo yes || echo no)
ifeq ($(HAS_UBWC_HELPERS),yes)
  ccflags-y += -DMSM_VIDC_HAS_QCOM_UBWC_HELPERS=1
endif

X1P42100_VIDEOCC_H := $(KERNEL_SRC)/include/dt-bindings/clock/qcom,x1p42100-videocc.h
HAS_X1P42100_VIDEOCC := $(shell test -f $(X1P42100_VIDEOCC_H) && echo yes || echo no)
ifeq ($(HAS_X1P42100_VIDEOCC),yes)
  ccflags-y += -DMSM_VIDC_HAS_X1P42100_VIDEOCC=1
endif

MDT_LOADER_H := $(KERNEL_SRC)/include/linux/soc/qcom/mdt_loader.h

HAS_MDT_PAS_LOAD := $(shell grep -qs 'qcom_mdt_pas_load' $(MDT_LOADER_H) && echo yes || echo no)
HAS_MDT_PAS_LOAD_MEM := $(shell grep -qs 'mem_region.*reloc_base' $(MDT_LOADER_H) && echo yes || echo no)

ifeq ($(HAS_MDT_PAS_LOAD),no)
  ccflags-y += -DHAVE_QCOM_MDT_LOAD
else ifeq ($(HAS_MDT_PAS_LOAD_MEM),yes)
  ccflags-y += -DHAVE_QCOM_MDT_PAS_LOAD_MEM
else
  ccflags-y += -DHAVE_QCOM_MDT_PAS_LOAD
endif

ifeq ($(CONFIG_ARCH_NIOBE), y)
include $(VIDEO_ROOT)/config/niobe_video.conf
LINUXINCLUDE   += -include $(VIDEO_ROOT)/config/niobe_video.h

else ifeq ($(CONFIG_ARCH_PINEAPPLE), y)
include $(VIDEO_ROOT)/config/pineapple_video.conf
LINUXINCLUDE   += -include $(VIDEO_ROOT)/config/pineapple_video.h

else ifeq ($(CONFIG_ARCH_CHORA), y)
include $(VIDEO_ROOT)/config/chora_video.conf
LINUXINCLUDE   += -include $(VIDEO_ROOT)/config/chora_video.h

else ifeq ($(CONFIG_ARCH_SUN), y)
include $(VIDEO_ROOT)/config/sun_video.conf
LINUXINCLUDE   += -include $(VIDEO_ROOT)/config/sun_video.h

else ifeq ($(CONFIG_ARCH_SERAPH), y)
include $(VIDEO_ROOT)/config/seraph_video.conf
LINUXINCLUDE   += -include $(VIDEO_ROOT)/config/seraph_video.h

else ifeq ($(CONFIG_ARCH_LEMANS), y)
ifeq ($(TARGET_BOARD_PLATFORM), gen5)
KBUILD_CPPFLAGS += -DMSM_VIDC_HW_VIRT
include $(VIDEO_ROOT)/config/nordau_video.conf
LINUXINCLUDE   += -include $(VIDEO_ROOT)/config/nordau_video.h
endif

else ifeq ($(CONFIG_QLI_VIDC_SA8775P), y)
include $(VIDEO_ROOT)/config/lemans_video.conf
LINUXINCLUDE   += -include $(VIDEO_ROOT)/config/lemans_video.h

else ifeq ($(CONFIG_ARCH_X1E80100), y)
include $(VIDEO_ROOT)/config/hamoa_video.conf
LINUXINCLUDE   += -include $(VIDEO_ROOT)/config/hamoa_video.h

else
ifeq ($(wildcard $(src)/driver),)
VIDEO_ROOT := $(src)/..
VIDEO_DRIVER_ABS_PATH := $(VIDEO_ROOT)/driver
VIDEO_DRIVER_REL_PATH := ../driver
endif
include $(VIDEO_ROOT)/config/qli_video.conf
LINUXINCLUDE   += -include $(VIDEO_ROOT)/config/qli_video.h
endif

ifeq ($(CONFIG_MSM_VIDC_LEMANS), y)
LINUXINCLUDE   += -I$(VIDEO_DRIVER_ABS_PATH)/platform/lemans/inc \
                  -I$(VIDEO_DRIVER_ABS_PATH)/variant/iris3/inc
endif

ifeq ($(CONFIG_MSM_VIDC_NIOBE), y)
LINUXINCLUDE   += -I$(VIDEO_DRIVER_ABS_PATH)/platform/niobe/inc \
                  -I$(VIDEO_DRIVER_ABS_PATH)/variant/iris3/inc
endif

ifeq ($(CONFIG_MSM_VIDC_PINEAPPLE), y)
LINUXINCLUDE   += -I$(VIDEO_DRIVER_ABS_PATH)/platform/pineapple/inc \
                  -I$(VIDEO_DRIVER_ABS_PATH)/variant/iris33/inc
endif

ifeq ($(CONFIG_MSM_VIDC_CHORA), y)
LINUXINCLUDE   += -I$(VIDEO_DRIVER_ABS_PATH)/platform/chora/inc \
                  -I$(VIDEO_DRIVER_ABS_PATH)/variant/iris2/inc
endif

ifeq ($(CONFIG_MSM_VIDC_SUN), y)
LINUXINCLUDE   += -I$(VIDEO_DRIVER_ABS_PATH)/platform/sun/inc \
                  -I$(VIDEO_DRIVER_ABS_PATH)/variant/iris35/inc \
                  -I$(VIDEO_DRIVER_ABS_PATH)/platform/tuna/inc \
                  -I$(VIDEO_DRIVER_ABS_PATH)/platform/kera/inc \
                  -I$(VIDEO_DRIVER_ABS_PATH)/variant/iris33/inc
endif

ifeq ($(CONFIG_MSM_VIDC_SERAPH), y)
LINUXINCLUDE   += -I$(VIDEO_DRIVER_ABS_PATH)/platform/seraph/inc \
                  -I$(VIDEO_DRIVER_ABS_PATH)/variant/iris4/inc
endif

ifeq ($(CONFIG_MSM_VIDC_NORDAU), y)
LINUXINCLUDE   += -I$(VIDEO_DRIVER_ABS_PATH)/platform/nordau/inc \
                  -I$(VIDEO_DRIVER_ABS_PATH)/variant/iris36/inc
endif

ifeq ($(CONFIG_MSM_VIDC_HAMOA), y)
LINUXINCLUDE   += -I$(VIDEO_DRIVER_ABS_PATH)/platform/hamoa/inc \
                  -I$(VIDEO_DRIVER_ABS_PATH)/variant/iris3/inc
endif

ifeq ($(CONFIG_MSM_VIDC_QLI), y)
# Include paths
LINUXINCLUDE   += -I$(VIDEO_DRIVER_ABS_PATH)/platform/lemans/inc \
                  -I$(VIDEO_DRIVER_ABS_PATH)/platform/hamoa/inc \
                  -I$(VIDEO_DRIVER_ABS_PATH)/platform/monaco/inc \
                  -I$(VIDEO_DRIVER_ABS_PATH)/platform/kodiak/inc \
                  -I$(VIDEO_DRIVER_ABS_PATH)/platform/purwa/inc \
                  -I$(VIDEO_DRIVER_ABS_PATH)/variant/iris3/inc \
                  -I$(VIDEO_DRIVER_ABS_PATH)/variant/iris2/inc
endif

LINUXINCLUDE   += -I$(VIDEO_DRIVER_ABS_PATH)/platform/common/inc \
                  -I$(VIDEO_DRIVER_ABS_PATH)/variant/common/inc \
                  -I$(VIDEO_DRIVER_ABS_PATH)/vidc/inc \
                  -I$(VIDEO_ROOT)/include/uapi/vidc

USERINCLUDE    += -I$(VIDEO_ROOT)/include/uapi/vidc/media \
                  -I$(VIDEO_ROOT)/include/uapi/vidc

ccflags-y += ${ccflags-m}
ccflags-y += -Wmissing-prototypes
ccflags-y += -Werror
ccflags-y += -Wno-enum-conversion
obj-m += iris_vpu.o

ifeq ($(CONFIG_MSM_VIDC_LEMANS), y)
iris_vpu-objs +=  $(VIDEO_DRIVER_REL_PATH)/platform/lemans/src/lemans.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris3/src/msm_vidc_buffer_iris3.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris3/src/msm_vidc_power_iris3.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris3/src/msm_vidc_bus_iris3.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris3/src/msm_vidc_clock_iris3.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris3/src/msm_vidc_iris3.o
endif

ifeq ($(CONFIG_MSM_VIDC_NIOBE), y)
iris_vpu-objs +=  $(VIDEO_DRIVER_REL_PATH)/platform/niobe/src/niobe.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris3/src/msm_vidc_buffer_iris3.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris3/src/msm_vidc_power_iris3.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris3/src/msm_vidc_bus_iris3.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris3/src/msm_vidc_clock_iris3.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris3/src/msm_vidc_iris3.o
endif

ifeq ($(CONFIG_MSM_VIDC_PINEAPPLE), y)
iris_vpu-objs +=  $(VIDEO_DRIVER_REL_PATH)/platform/pineapple/src/pineapple.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris33/src/msm_vidc_buffer_iris33.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris33/src/msm_vidc_power_iris33.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris33/src/msm_vidc_bus_iris33.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris33/src/msm_vidc_clock_iris33.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris33/src/msm_vidc_iris33.o
endif
ifeq ($(CONFIG_MSM_VIDC_CHORA), y)
iris_vpu-objs +=  $(VIDEO_DRIVER_REL_PATH)/platform/chora/src/chora.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris2/src/msm_vidc_buffer_iris2.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris2/src/msm_vidc_power_iris2.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris2/src/msm_vidc_iris2.o
endif
ifeq ($(CONFIG_MSM_VIDC_SUN), y)
iris_vpu-objs +=  $(VIDEO_DRIVER_REL_PATH)/platform/sun/src/sun.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris35/src/msm_vidc_buffer_iris35.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris35/src/msm_vidc_power_iris35.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris35/src/msm_vidc_bus_iris35.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris35/src/msm_vidc_clock_iris35.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris35/src/msm_vidc_iris35.o \
                  $(VIDEO_DRIVER_REL_PATH)/platform/tuna/src/tuna.o \
                  $(VIDEO_DRIVER_REL_PATH)/platform/kera/src/kera.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris33/src/msm_vidc_buffer_iris33.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris33/src/msm_vidc_power_iris33.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris33/src/msm_vidc_bus_iris33.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris33/src/msm_vidc_clock_iris33.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris33/src/msm_vidc_iris33.o
endif

ifeq ($(CONFIG_MSM_VIDC_SERAPH), y)
iris_vpu-objs +=  $(VIDEO_DRIVER_REL_PATH)/platform/seraph/src/seraph.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris4/src/msm_vidc_buffer_iris4.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris4/src/msm_vidc_power_iris4.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris4/src/msm_vidc_bus_iris4.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris4/src/msm_vidc_clock_iris4.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris4/src/msm_vidc_iris4.o
endif

ifeq ($(CONFIG_MSM_VIDC_NORDAU), y)
iris_vpu-objs +=  $(VIDEO_DRIVER_REL_PATH)/platform/nordau/src/nordau.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris36/src/msm_vidc_buffer_iris36.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris36/src/msm_vidc_power_iris36.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris36/src/msm_vidc_bus_iris36.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris36/src/msm_vidc_clock_iris36.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris36/src/msm_vidc_iris36.o
endif

ifeq ($(CONFIG_MSM_VIDC_HAMOA), y)
iris_vpu-objs +=  $(VIDEO_DRIVER_REL_PATH)/platform/hamoa/src/hamoa.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris3/src/msm_vidc_buffer_iris3.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris3/src/msm_vidc_power_iris3.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris3/src/msm_vidc_bus_iris3.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris3/src/msm_vidc_clock_iris3.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris3/src/msm_vidc_iris3.o
endif

ifeq ($(CONFIG_MSM_VIDC_QLI), y)
iris_vpu-objs +=  $(VIDEO_DRIVER_REL_PATH)/platform/lemans/src/lemans.o \
                  $(VIDEO_DRIVER_REL_PATH)/platform/hamoa/src/hamoa.o \
                  $(VIDEO_DRIVER_REL_PATH)/platform/monaco/src/monaco.o \
                  $(VIDEO_DRIVER_REL_PATH)/platform/kodiak/src/kodiak.o \
                  $(VIDEO_DRIVER_REL_PATH)/platform/purwa/src/purwa.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris3/src/msm_vidc_buffer_iris3.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris3/src/msm_vidc_power_iris3.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris3/src/msm_vidc_bus_iris3.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris3/src/msm_vidc_clock_iris3.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris3/src/msm_vidc_iris3.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris2/src/msm_vidc_buffer_iris2.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris2/src/msm_vidc_power_iris2.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/iris2/src/msm_vidc_iris2.o
endif

iris_vpu-objs +=  $(VIDEO_DRIVER_REL_PATH)/platform/common/src/msm_vidc_platform.o \
                  $(VIDEO_DRIVER_REL_PATH)/platform/common/src/msm_vidc_ubwc.o \
                  $(VIDEO_DRIVER_REL_PATH)/variant/common/src/msm_vidc_variant.o \
                  $(VIDEO_DRIVER_REL_PATH)/vidc/src/msm_vidc_v4l2.o \
                  $(VIDEO_DRIVER_REL_PATH)/vidc/src/msm_vidc_vb2.o \
                  $(VIDEO_DRIVER_REL_PATH)/vidc/src/msm_vidc.o \
                  $(VIDEO_DRIVER_REL_PATH)/vidc/src/msm_vdec.o \
                  $(VIDEO_DRIVER_REL_PATH)/vidc/src/msm_venc.o \
                  $(VIDEO_DRIVER_REL_PATH)/vidc/src/msm_vidc_driver.o \
                  $(VIDEO_DRIVER_REL_PATH)/vidc/src/msm_vidc_state.o \
                  $(VIDEO_DRIVER_REL_PATH)/vidc/src/msm_vidc_control.o \
                  $(VIDEO_DRIVER_REL_PATH)/vidc/src/msm_vidc_buffer.o \
                  $(VIDEO_DRIVER_REL_PATH)/vidc/src/msm_vidc_power.o \
                  $(VIDEO_DRIVER_REL_PATH)/vidc/src/msm_vidc_probe.o \
                  $(VIDEO_DRIVER_REL_PATH)/vidc/src/resources.o \
                  $(VIDEO_DRIVER_REL_PATH)/vidc/src/firmware.o \
                  $(VIDEO_DRIVER_REL_PATH)/vidc/src/msm_vidc_debug.o \
                  $(VIDEO_DRIVER_REL_PATH)/vidc/src/msm_vidc_memory.o \
                  $(VIDEO_DRIVER_REL_PATH)/vidc/src/msm_vidc_fence.o \
                  $(VIDEO_DRIVER_REL_PATH)/vidc/src/venus_hfi.o \
                  $(VIDEO_DRIVER_REL_PATH)/vidc/src/venus_hfi_queue.o \
                  $(VIDEO_DRIVER_REL_PATH)/vidc/src/hfi_packet.o \
                  $(VIDEO_DRIVER_REL_PATH)/vidc/src/venus_hfi_response.o

ifeq ($(CONFIG_MSM_VIDC_QLI), y)
# Optional: board vendor integration (if used by your build system)
BOARD_VENDOR_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/iris_vpu.ko
endif
