#
# Copyright (C) 2004 - 2017 AJA Video Systems, Inc.
# Proprietary and Confidential information.
# All righs reserved
#
# Makefile for AJA Linux Video NTV2 Driver
DIR := $(strip $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST)))))

#DRIVERDIR	?= $(DIR)
KDIR		?= /lib/modules/$(shell uname -r)/build

# EXTRA_DEPS = -DNTV2_DEPRECATE_14_0 -DNTV2_DEPRECATE_14_1 

include $(DIR)/../../build/configure.mk
include $(DIR)/../../build/sdkversion.mk

CC			 = gcc

DRIVERTARGET = $(NTV2TARGET).o
INCLUDES 	 = -I$(A_LIB_NTV2_INC) -I$(A_LINUX_DRIVER_PATH) -I$(A_LIB_NTV2_SRC)
VERSIONING 	 = -DSDKVER_MAJ=$(SDKVER_MAJ) -DSDKVER_MIN=$(SDKVER_MIN) -DSDKVER_PNT=$(SDKVER_PNT) -DSDKVER_BLD=$(SDKVER_BLD) -DAJA_BETA=$(AJA_BETA) -DAJA_DEBUG=$(AJA_DEBUG) 
EXTRA_CFLAGS += -DAJALinux -DXENA2 $(DBG) -D$(NTV2TARGET) -D$(LINUX_DISTRO) -D$(A_ARCH) $(EXTRA_DEPS) $(VERSIONING) $(INCLUDES) -Wall
ifdef AJA_HEVC
  EXTRA_CFLAGS += -DAJA_HEVC=$(AJA_HEVC)
endif

DRIVERSRCS = ntv2devicefeatures.c \
			ntv2driver.c \
			ntv2driverautocirculate.c \
			ntv2driverdbgmsgctl.c \
			ntv2driverdma.c \
			ntv2driverflash.c \
			ntv2driverstatus.c \
			ntv2kona2.c \
			ntv2driverprocamp.c \
			ntv2drivertask.c \
			ntv2driverrp188.c \
			ntv2vpid.c \
			ntv2vpidfromspec.c \
			ntv2anc.c \
			registerio.c \
			ntv2serial.c \
			ntv2system.c \
			ntv2commonreg.c \
			ntv2hdmiedid.c \
			ntv2hdmiin.c \
			ntv2hdmiin4.c \
			ntv2infoframe.c

DRIVEROBJS = $(patsubst %.c,%.o,$(DRIVERSRCS))

DRIVERINCS = $(A_LIB_NTV2_INC)/audiodefines.h \
			$(A_LIB_NTV2_INC)/videodefines.h \
			$(A_LIB_NTV2_INC)/ntv2devicefeatures.hh \
			$(A_LIB_NTV2_INC)/ntv2driverprocamp.h \
			$(A_LINUX_DRIVER_PATH)/driverdbg.h \
			$(A_LINUX_DRIVER_PATH)/ntv2driver.h \
			$(A_LINUX_DRIVER_PATH)/ntv2driverautocirculate.h \
			$(A_LINUX_DRIVER_PATH)/ntv2driverdma.h \
			$(A_LINUX_DRIVER_PATH)/ntv2driverdbgmsgctl.h \
			$(A_LINUX_DRIVER_PATH)/ntv2driverflash.h \
			$(A_LINUX_DRIVER_PATH)/ntv2driverstatus.h \
			$(A_LINUX_DRIVER_PATH)/ntv2drivertask.h \
			$(A_LINUX_DRIVER_PATH)/ntv2driverrp188.h \
			$(A_LINUX_DRIVER_PATH)/ntv2vpid.h \
			$(A_LIB_NTV2_INC)/ntv2vpidfromspec.h \
			$(A_LINUX_DRIVER_PATH)/ntv2anc.h \
			$(A_LIB_NTV2_INC)/ntv2enums.h \
			$(A_LIB_NTV2_INC)/ntv2publicinterface.h \
			$(A_LIB_NTV2_INC)/ntv2linuxpublicinterface.h \
			$(A_LINUX_DRIVER_PATH)/../ntv2xptlookup.h \
			$(A_LINUX_DRIVER_PATH)/registerio.h \
			$(A_LINUX_DRIVER_PATH)/ntv2serial.h \
			$(A_LINUX_DRIVER_PATH)/ntv2system.h \
			$(A_LINUX_DRIVER_PATH)/ntv2commonreg.h \
			$(A_LINUX_DRIVER_PATH)/ntv2hdmiin.h \
			$(A_LINUX_DRIVER_PATH)/ntv2hinreg.h \
			$(A_LINUX_DRIVER_PATH)/ntv2hdmiin4.h \
			$(A_LINUX_DRIVER_PATH)/ntv2hin4reg.h \
			$(A_LINUX_DRIVER_PATH)/ntv2hdmiedid.h \
			$(A_LINUX_DRIVER_PATH)/ntv2infoframe.h \

ifdef AJA_HEVC
HEVCSRCS =	hevcdriver.c \
			hevcparams.c \
			hevcregister.c \
			hevcapi.c \
			hevcinterrupt.c \
			hevccommand.c \
			hevcstream.c

HEVCOBJS = $(patsubst %.c,%.o,$(HEVCSRCS))

HEVCINCS =	$(A_LINUX_DRIVER_PATH)/hevcpublic.h \
			$(A_LINUX_DRIVER_PATH)/hevccommon.h \
			$(A_LINUX_DRIVER_PATH)/hevcdriver.h \
			$(A_LINUX_DRIVER_PATH)/hevcparams.h \
			$(A_LINUX_DRIVER_PATH)/hevcconstants.h \
			$(A_LINUX_DRIVER_PATH)/hevcregister.h \
			$(A_LINUX_DRIVER_PATH)/hevcinterrupt.h \
			$(A_LINUX_DRIVER_PATH)/hevccommand.h \
			$(A_LINUX_DRIVER_PATH)/hevcstream.h
else
HEVCSRCS =
HEVCOBJS =
HEVCINCS =
endif


obj-m				:= $(DRIVERTARGET)
$(NTV2TARGET)-objs 	:= $(DRIVEROBJS) $(HEVCOBJS)

default: all 
	@echo linux distro: $(LINUX_DISTRO)
	@echo lib: $(LIB)
	$(MAKE) -C $(KDIR) M=$(A_LINUX_DRIVER_PATH) DRIVERDIR=$(A_LINUX_DRIVER_PATH) modules
	$(call ensure_dir_exists, $(A_UBER_BIN))
	if [ -d "$(A_LIBRARIES_PATH)/bin" ]; then cp -f $(A_LIBRARIES_PATH)/bin/*load_ajantv2 $(A_UBER_BIN); fi
	cp $(NTV2TARGET).ko $(A_UBER_BIN)

all: $(DRIVERINCS) $(DRIVERSRCS) $(HEVCINCS) $(HEVCSRCS)

# Make a symlink to the C-only CPP files we need in classes.

ntv2devicefeatures.c:
	ln -sf $(A_LIB_NTV2_SRC)/ntv2devicefeatures.cpp $(A_LINUX_DRIVER_PATH)/ntv2devicefeatures.c

ntv2driverprocamp.c: 
	ln -sf $(A_LIB_NTV2_SRC)/ntv2driverprocamp.cpp $(A_LINUX_DRIVER_PATH)/ntv2driverprocamp.c

ntv2vpidfromspec.c: 
	ln -sf $(A_LIB_NTV2_SRC)/ntv2vpidfromspec.cpp $(A_LINUX_DRIVER_PATH)/ntv2vpidfromspec.c

.PHONY: clean cleandeps realclean

clean:
	rm -f $(A_UBER_BIN)/*.ko *.ko *.o .*o.cmd *.mod.c *~ errors.txt semantic.cache
	rm -f *.markers *.symvers *.order
	rm -f ntv2devicefeatures.*
	rm -f ntv2driverprocamp.c
	rm -f ntv2vpidfromspec.c
	rm -rf .tmp_versions
	rm -rf .cache.mk

cleandeps: clean
realclean: clean

tags:
	ctags -e *.h *.c ../../ajalibraries/ajantv2/includes/*.h

