#
# Makefile for ADM-XRC series Linux 2.6.x / 3+.x monolithic driver
#
# (C) Copyright 2013-2015 Alpha Data
#
# Requires GNUMake.
#
# Available targets:
# ------------------
#
# The following targets should be run as an unprivileged user:
#
#   all     - builds the kernel module
#   clean   - removes object files including kernel module
#   tidy    - deletes emacs ~ backup files
#
# The following targets should be run as root:
#
#   install - installs the kernel module in the directory
#             under /lib/modules/<version>/kernel/drivers/addon/admxrc2,
#             runs 'depmod' and installs the service script 'admxrc2.rc'
#
# Note that the 'install' target does NOT automatically build the kernel
# module. This is intentional, in order to avoid inadvertantly compiling
# the driver as root and creating "undeletable" files when it has been
# unpacked in an unprivileged user's home directory. When root is both
# building and installing the driver, use 'make clean all install'.
#
# The '*_local' targets should not be used.
#

ifneq ($(KERNELRELEASE),)

include $(src)/../../admxrc_version.mak

OBJS_ADMXRC2 = \
	../../modules/admxrc2/clock.o \
	../../modules/admxrc2/combuf.o \
	../../modules/admxrc2/coop.o \
	../../modules/admxrc2/debugts.o \
	../../modules/admxrc2/dma.o \
	../../modules/admxrc2/event.o \
	../../modules/admxrc2/identify.o \
	../../modules/admxrc2/flash.o \
	../../modules/admxrc2/fpga.o \
	../../modules/admxrc2/info.o \
	../../modules/admxrc2/lock.o \
	../../modules/admxrc2/main.o \
	../../modules/admxrc2/model_admxrc.o \
	../../modules/admxrc2/model_admxrc2l.o \
	../../modules/admxrc2/model_admxrc2.o \
	../../modules/admxrc2/model_adpdrc2.o \
	../../modules/admxrc2/model_adpwrc2.o \
	../../modules/admxrc2/model_admxpl.o \
	../../modules/admxrc2/model_admxp.o \
	../../modules/admxrc2/model_adpxpi.o \
	../../modules/admxrc2/model_admxrc4.o \
	../../modules/admxrc2/model_adcpxrc4lx.o \
	../../modules/admxrc2/model_admxrc4fx.o \
	../../modules/admxrc2/model_adpexrc4fx.o \
	../../modules/admxrc2/model_admamc5a2.o \
	../../modules/admxrc2/model_admxrc5lx.o \
	../../modules/admxrc2/model_admxrc5t1.o \
	../../modules/admxrc2/model_admxrc5t2.o \
	../../modules/admxrc2/model_admxrc5tda1.o \
	../../modules/admxrc2/model_admxrc5tz.o \
	../../modules/admxrc2/model_adcbbp.o \
	../../modules/admxrc2/model_admpcie6s1.o \
	../../modules/admxrc2/pio.o \
	../../modules/admxrc2/sensor.o \
	../../modules/admxrc2/space.o \
	../../modules/admxrc2/vpd.o

OBJS_CORE = \
    ../../core/adb1_common.o \
    ../../core/admxpl_common.o \
    ../../core/adb1v4v5_common.o \
    ../../core/coreclock.o \
    ../../core/corecombuf.o \
    ../../core/corecoop.o \
    ../../core/coredebugts.o \
    ../../core/coredma.o \
    ../../core/coredmabus.o \
    ../../core/coreflash.o \
    ../../core/corefpga.o \
    ../../core/coremisc.o \
    ../../core/coremodule.o \
    ../../core/corenotify.o \
    ../../core/coresensor.o \
    ../../core/corevpd.o \
	../../core/corewindow.o \
    ../../core/flash.o \
    ../../core/flash_cfi.o \
    ../../core/flash_legacy.o \
    ../../core/hwmon.o \
    ../../core/i2c.o \
    ../../core/ics307.o \
    ../../core/icd2061.o \
    ../../core/ics8430_61.o \
    ../../core/ics843034_01.o \
    ../../core/identify.o \
    ../../core/interrupt.o \
    ../../core/main.o \
    ../../core/model_admxrc.o \
    ../../core/model_admxrc2l.o \
    ../../core/model_admxrc2.o \
    ../../core/model_adpdrc2.o \
    ../../core/model_admxpl.o \
    ../../core/model_admxp.o \
    ../../core/model_admxrc4.o \
    ../../core/model_adcpxrc4lx.o \
    ../../core/model_admxrc4fx.o \
    ../../core/model_adpexrc4fx.o \
    ../../core/model_admamc5a2.o \
    ../../core/model_admxrc5t1.o \
    ../../core/model_admxrc5t2.o \
    ../../core/model_admxrc5tda1.o \
    ../../core/model_admxrc5lx.o \
    ../../core/model_admxrc5lxa.o \
    ../../core/model_admxrc5tz.o \
    ../../core/model_adcbbp.o \
    ../../core/model_admpcie6s1.o \
    ../../core/pci9xxx_93x6.o \
    ../../core/pci9xxx_common.o \
    ../../core/resource.o \
    ../../core/serializer.o \
    ../../core/si5338.o \
    ../../core/v4clksynth.o

OBJS_FRAMEWORK = \
	../../framework/linux/buffer_desc.o \
	../../framework/linux/debug.o \
	../../framework/linux/directif.o \
	../../framework/linux/dma.o \
	../../framework/linux/dpc.o \
	../../framework/linux/drvparam.o \
	../../framework/linux/interrupt.o \
	../../framework/linux/mapio.o \
	../../framework/linux/mmap.o \
	../../framework/linux/pci_driver.o \
	../../framework/linux/pool.o \
	../../framework/linux/time.o \
	../../framework/linux/timer.o \
	../../framework/linux/tsbuf.o \
	../../framework/linux/userif.o

OBJS_LINUX = \
	linux-2.6.o

OBJS_MONO = \
	../main.o

OBJS = $(OBJS_ADMXRC2) $(OBJS_CORE) $(OBJS_FRAMEWORK) $(OBJS_LINUX) $(OBJS_MONO)

EXTRA_CFLAGS += \
	-DDF_DBG_BUILD=1 \
	-DADB3_MONOLITHIC=1 \
	-DADMXRC2_LOCKED_BUFFERS_GLOBAL \
	-DADMXRC2_CHECK_FLAGS \
	-DADMXRC_VERSION_0=$(VERSION_0) \
	-DADMXRC_VERSION_1=$(VERSION_1) \
	-DADMXRC_VERSION_2=$(VERSION_2) \
	-DADMXRC_VERSION_3=$(VERSION_BUILD) \
	-DADMXRC_DRIVER \
	-I$(src)/../../../include \
	-I$(src)/../../../api/modules/admxrc2 -I$(src)/../../../api/modules/admxrc2/linux \
	-I$(src)/../../../api/platform/linux \
	-I$(src)/../.. -I$(src)/../../framework/linux

include $(src)/.build_defs

obj-m := admxrc2.o

admxrc2-objs := $(OBJS)

else

.PHONY: all clean install local clean_local install_local tidy

MODULE = admxrc2

include .kernel_path
include .build_defs

all:
	make -C $(LINUX_KERNEL) SUBDIRS="`pwd`" modules

clean:
	-make -C $(LINUX_KERNEL) SUBDIRS="`pwd`" clean
	rm -f `find ../../ -name '*.o'`
	rm -f `find ../../ -name '*.o.cmd'`
	rm -rf Module.symvers

install:
	rm -f $(SYSROOT)/lib/modules/$(UTS_RELEASE)/kernel/drivers/addon/admxrc2/$(MODULE).ko
	install -D -m 644 $(MODULE).ko $(SYSROOT)/lib/modules/$(UTS_RELEASE)/kernel/drivers/addon/admxrc2/$(MODULE).ko
ifndef CROSS_COMPILE
	depmod
endif
#	./installrc admxrc2.rc admxrc2 $(SYSROOT)
	./installudev 51-admxrc2.rules $(SYSROOT)

tidy:
	rm -rf *~

endif
