# Copyright(c) 2008 OMICRON electronics GmbH.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of
# the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

BLDDIR = build
BOARD ?= cmc256

ifneq ($(KERNELRELEASE),)
#
# Do the kbuild.
#

obj-m := michi.o
michi-objs := mic.o i2c.o led.o

# Include Xenomai driver if kernel is compiled with xenomai patches
ifeq ($(CONFIG_XENOMAI),y)
EXTRA_CFLAGS += -D__IN_XENOMAI__ -Iinclude/xenomai
michi-objs += iec_rt.o
else
michi-objs +=iec.o
endif

else
#
# This will build the user space programs and then invoke kbuild.
#

# Default with Xenomai for cmc256 board (required for build bot)
ifneq ($(BOARD),cmc256)
$(error michi can only be built for the CMC256!)
endif

# We work as long as CC or TOOLCHAIN are set
ifeq ($(origin TOOLCHAIN),undefined)
TOOLCHAIN  = $(CC:gcc=)
CC        ?= $(TOOLCHAIN)gcc
else
ifeq ($(origin CC),default)
CC        = $(TOOLCHAIN)gcc
endif
endif

XENO_ROOT ?= $(shell $(CC) -print-sysroot 2>/dev/null)/../)
KDIR      ?= $(shell cd `$(CC) -print-sysroot`/../usr/src/linux-headers-* && pwd)

IP        = 172.22.23.64
CFLAGS    = -Wall
XENO_CONF = $(XENO_ROOT)/usr/xenomai/bin/xeno-config
MODULES   = michi.ko

OBJDIR ?= $(BLDDIR)-$(shell $(CC) -dumpmachine | sed -e "s/-.*//")

CHECKFILES      = i2c.c iec_rt.c led.c mic.c michi.h private.h
CHECKFILES_USER =

all: module

module:
	@mkdir -p $(OBJDIR)
	@ln --symbolic --force --target-directory=$(OBJDIR) \
		$(addprefix ../,$(wildcard src/*.c src/*.h Makefile))
	$(MAKE) -C $(KDIR) \
		ARCH=arm \
		CROSS_COMPILE=$(TOOLCHAIN) \
		M=$(abspath $(OBJDIR)) \
		modules 

install: all
	scp -q load.sh $(OBJDIR)/michi.ko root@$(IP):

clean:
	rm -f $(OBJDIR)/*.o
	rm -f $(OBJDIR)/.*.cmd

distclean:
	rm -rf $(BLDDIR)-*
	rm -rf doc

doc:
	mkdir -p doc
	doxygen doxyfile

checkstyle:
	$(KDIR)/scripts/checkpatch.pl \
		--file $(addprefix src/,$(CHECKFILES)) \
		--no-tree --emacs --terse \
		--ignore LONG_LINE

cppcheck:
	cppcheck --version
	cppcheck --enable=all --template gcc --inline-suppr \
		--std=c89 --platform=unix32 \
		--error-exitcode=2 $(CPPCHECK_EXTRA) \
		$(addprefix src/,$(filter-out %.h, \
			$(CHECKFILES) $(CHECKFILES_USER)))

check: checkstyle cppcheck

all-with-coverage: all

runtests:
	@echo "No tests!"

coverage-report:
	@echo "No coverage report!"

.PHONY: doc

endif
