##############################################################################
#
#    Copyright (c) 2016 - 2099 by LJW.  All rights reserved.
#
#    The material in this file is confidential and contains trade secrets
#    of LJW. This is proprietary information owned by LJW. No
#    part of this work may be disclosed, reproduced, copied, transmitted,
#    or used in any way for any purpose, without the express written
#    permission of LJW.
#
##############################################################################

# LINEAR_GART=1 means linear gart system for x86 and old 32bit bus fpga
EXTRA_CFLAGS += -DLINEAR_GART=0

# NOEDID mode, force HDMI on and add noedid modes, regardless of the state of HPD
EXTRA_CFLAGS += -DNOEDID=0

# enable/disable SDT config if NOEDID==0, force hardware mirror mode for all HDMIs
EXTRA_CFLAGS += -DUSE_IN_SDT=0

# enable/disable kms vblank
EXTRA_CFLAGS += -DUSE_KMS_VBLANK=1

# enable/disable DAC connector
EXTRA_CFLAGS += -DUSE_DAC_CONNECTOR=1

# enable/disable HDMI connector
EXTRA_CFLAGS += -DUSE_HDMI_CONNECTOR=1

# kver_gt function
KVER = $(shell uname -r)
KMAJ = $(shell echo $(KVER) | sed -e 's/^\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*.*/\1/')
KMIN = $(shell echo $(KVER) | sed -e 's/^[0-9][0-9]*\.\([0-9][0-9]*\)\.[0-9][0-9]*.*/\1/')
KREV = $(shell echo $(KVER) | sed -e 's/^[0-9][0-9]*\.[0-9][0-9]*\.\([0-9][0-9]*\).*/\1/')
kver_gt = $(shell echo test | awk '{if($(KMAJ) < $(1)) {print 0} else { \
	if($(KMAJ) > $(1)) {print 1} else { \
	if($(KMIN) < $(2)) {print 0} else { \
	if($(KMIN) > $(2)) {print 1} else { \
	if($(KREV) <= $(3)) {print 0} else { print 1 } \
	}}}}}' \
)

# check the kernel version and set USE_DP when USE_DP is empty
ifeq ($(USE_DP),)
#gen_src_delete_start (按kylin要求，做源码包时删除)
	ifeq ($(CROSS_COMPILE),)
#gen_src_delete_end
		# Enable DP port if KERNEL VERSION > 4.4.131, otherwise disable DP port
		ifeq ($(call kver_gt,4,4,131),1)
			USE_DP = 1
		else
			USE_DP = 0
		endif
#gen_src_delete_start
	else
		USE_DP = 1      # CROSS_COMPILE is set, default USE_DP = 1
	endif
#gen_src_delete_end
endif

# enable/disable audio globally, 1: enable audio, 0: disable audio
ENABLE_AUDIO = 1

ifeq ($(ENABLE_AUDIO), 1)
# enable/disable audio
	EXTRA_CFLAGS += -DljdENABLE_AUDIO

	# enable/disable HDMI audio, 1: enable hdmi audio interface, 0: disable hdmi audio interface
	EXTRA_CFLAGS += -DENABLE_HDMI_AUDIO=1

	ifeq ($(USE_DP), 1)
		# enable/disable DP audio, 1: enable dp audio interface, 0: disable hdmi audio interface
		EXTRA_CFLAGS += -DENABLE_DP_AUDIO=1
	else
		EXTRA_CFLAGS += -DENABLE_DP_AUDIO=0
	endif
else
	EXTRA_CFLAGS += -DENABLE_HDMI_AUDIO=0
	EXTRA_CFLAGS += -DENABLE_DP_AUDIO=0
endif

# enable/disable VIRTUAL RESOLUTION
ENABLE_VIRT_RESOLUTION=0
ifeq ($(ENABLE_VIRT_RESOLUTION), 1)
XDRV_CFLAGS += -DUSE_VIRT_RESOLUTION
endif

# enable/disable 4K delay display
DELAY_ENABLE_4K_DISPLAY=0
ifeq ($(DELAY_ENABLE_4K_DISPLAY), 1)
XDRV_CFLAGS += -DDELAY_4K_DISPLAY
EXTRA_CFLAGS += -DDELAY_4K_DISPLAY
endif

# enable/disable DP connector
ifeq ($(USE_DP), 1)
EXTRA_CFLAGS += -DUSE_DP_CONNECTOR=1
else
EXTRA_CFLAGS += -DUSE_DP_CONNECTOR=0
endif

# enable/disable break functions if _DEBUG has been defined
EXTRA_CFLAGS += -DUSE_DEBUG_BREAK=1

# enable/disable to register clock
EXTRA_CFLAGS += -DUSE_CLOCK_REGISTER=0

# auto adjust frequency test
#EXTRA_CFLAGS += -DTEST_AUTO_ADJUST_FREQ

# zoomvideo&layer enable
ZOOMVIDEO = 1

# enable/disable modeforge
MODEFORGE = 1

# if USE_DRM_ATOMIC is empty
ifeq ($(USE_DRM_ATOMIC),)
#gen_src_delete_start (按kylin要求，做源码包时删除)
	ifeq ($(CROSS_COMPILE),)
#gen_src_delete_end
		# Enable USE_DRM_ATOMIC if KERNEL VERSION > 4.20.0, otherwise disable USE_DRM_ATOMIC
		ifeq ($(call kver_gt,4,20,0),1)
			USE_DRM_ATOMIC = 0
		else
			USE_DRM_ATOMIC = 0
		endif
#gen_src_delete_start
	else
		USE_DRM_ATOMIC = 0      # CROSS_COMPILE is set, default USE_DRM_ATOMIC = 1
	endif
#gen_src_delete_end
endif

EXTRA_CFLAGS += -DLINUX -DDRIVER -DDBG=0
EXTRA_CFLAGS += -DUSE_PLATFORM_DRIVER=1
EXTRA_CFLAGS += -DLJMICRO_PROFILER=1
EXTRA_CFLAGS += -DLJMICRO_PROFILER_CONTEXT=1
EXTRA_CFLAGS += -DENABLE_GPU_CLOCK_BY_DRIVER=1
EXTRA_CFLAGS += -DUSE_NEW_LINUX_SIGNAL=0
EXTRA_CFLAGS += -DljdCACHE_FUNCTION_UNIMPLEMENTED=0
EXTRA_CFLAGS += -DljdENABLE_3D=1
EXTRA_CFLAGS += -DljdENABLE_2D=1
EXTRA_CFLAGS += -DljdENABLE_VG=0
EXTRA_CFLAGS += -DljdENABLE_VPU=1
EXTRA_CFLAGS += -DljdENABLE_VPUENC=0
EXTRA_CFLAGS += -DljdFPGA_BUILD=0
EXTRA_CFLAGS += -DljdENABLE_DRM=1
EXTRA_CFLAGS += -DLJMICRO_ENABLE_DRM=1
EXTRA_CFLAGS += -DljdENABLE_TRUST_APPLICATION=0

EXTRA_CFLAGS += -DUSE_LINUX_PCIE=1
EXTRA_CFLAGS += -DljdIRQ_SHARED
EXTRA_CFLAGS += -DljdENABLE_TTM=0

ifeq ($(CONFIG_ARM64),y)
	EXTRA_CFLAGS += -Iarch/arm/mm
endif
LJMCORE_OBJ_DIR := objs/$(shell uname -m)

ifneq ($(CONFIG_SYNC),)
#	EXTRA_CFLAGS += -DljdLINUX_SYNC_FILE=1
else
	ifneq ($(CONFIG_SYNC_FILE),)
		EXTRA_CFLAGS += -DljdLINUX_SYNC_FILE=1
	endif
endif

#EXTRA_CFLAGS += -DNEW_VIDMEM_MANAGE
EXTRA_CFLAGS += -DPCIE_EN
EXTRA_CFLAGS += -DHANTROAXIFE_SUPPORT

ifeq ($(MODEFORGE),1)
	EXTRA_CFLAGS += -DMODEFORGE
endif

ifeq ($(USE_DRM_ATOMIC),1)
	EXTRA_CFLAGS += -DDRM_ATOMIC
endif

ifeq ($(ZOOMVIDEO),1)
	EXTRA_CFLAGS += -DUSE_ZOOMVIDEO
endif

HOST := $(shell hostname)
EXTRA_CFLAGS += -DHOST=\"$(HOST)\"

EXTRA_CFLAGS += -I$(PWD)/src

#将.o.hex文件转换为.o文件
quiet_cmd_xxd = XXD     $@
      cmd_xxd = xxd -r -p $< $@

%.o: %.o.hex
	$(call cmd,xxd)
	@touch $(addsuffix .cmd, $(addprefix $(dir $@), $(addprefix ., $(notdir $@))))

OBJS := $(patsubst %.hex,%,$(wildcard $(obj)/$(LJMCORE_OBJ_DIR)/*.o.hex))
OBJS += $(patsubst %.c,%.o,$(wildcard $(obj)/src/*.c))
OBJS := $(patsubst $(obj)/%,%,$(OBJS))


ifneq ($(KERNELRELEASE),)
KERNELDIR ?= /lib/modules/$(KERNELRELEASE)/build
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
endif
obj-m := ljmgp.o
ljmgp-objs := $(OBJS)

PWD := $(shell pwd)

.PHONY: all
all: clean modules #install

.PHONY: modules
modules:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

.PHONY: clean
clean:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) clean

#.PHONY: install
#install:
#	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
