summaryrefslogtreecommitdiffstats
path: root/driver/Makefile.in
blob: f521460dd3cf0f04b34d0bb066584b9c3520a3e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
CONFIG_MODULE_SIG=n

obj-m := pciDriver.o
pciDriver-objs := base.o dev.o int.o umem.o kmem.o sysfs.o ioctl.o pcibus.o rdma.o

KERNELVER ?= $(shell uname -r)
KERNELDIR ?= /lib/modules/$(KERNELVER)/build
INSTALLDIR ?= /lib/modules/$(KERNELVER)/extra
MAININSTALLDIR ?= /lib/modules/$(KERNELVER)/kernel/extra
ifneq ("$(wildcard /lib/modules/$(KERNELVER)/build/include/linux)","")
HEADERDIR ?= /lib/modules/$(KERNELVER)/build/include
else ifneq ("$(wildcard /lib/modules/$(KERNELVER)/source/include/linux)","")
HEADERDIR ?= /lib/modules/$(KERNELVER)/source/include
else
HEADERDIR ?= ""
endif

PWD := $(shell pwd)

EXTRA_CFLAGS += -I$(M)/.. ${PCILIB_DYNAMIC_HEADERS_INC}

ifdef DUMMY_DEVICE
ifneq ($(DUMMY_DEVICE), 0)
    EXTRA_CFLAGS += -DPCIDRIVER_DUMMY_DEVICE
endif
endif

# Grepping in '../pcilib/build.h' is correct as we will always have this file in the releases...
default:
	@KERNEL_GCC_STRING=`cat /proc/version | head -n 1 | cut -d " " -f 7 | tr '-' '\n' | head -n 1` ;\
	KERNEL_GCC_VERSION=`echo $$KERNEL_GCC_STRING | grep -oe "[0-9]\+\.[0-9.]\+" | tail -n 1` ; \
	echo "Detected Kernel build GCC Version: $$KERNEL_GCC_VERSION" ;\
	GCC_VERSION=`$(CC) --version | head -n 1 | tr ' ' '\n' | grep -e "[0-9]\+\.[0-9.]\+" | tail -n 1` ;\
	echo "Detected installed GCC Version: $$GCC_VERSION" ;\
	if [ $$KERNEL_GCC_VERSION != $$GCC_VERSION ]; then \
	    echo "Kernel is compiled with gcc $$KERNEL_GCC_VERSION, but you are now using $$GCC_VERSION" ;\
	    GCC_MAJOR=`echo $$KERNEL_GCC_VERSION | cut -d "." -f 1-2` ;\
	    newCC=gcc-$$KERNEL_GCC_VERSION ;\
	    CC=`which $$newCC 2>/dev/null` ;\
	    if [ $$? -ne 0 ]; then \
		newCC=gcc-$$GCC_MAJOR ;\
		CC=`which $$newCC 2>/dev/null` ;\
		if [ $$? -ne 0 ]; then \
		    newCC=`compgen -ac | grep -E ^gcc-4.6 | head -n 1` ;\
		    CC=`which $$newCC 2>/dev/null` ;\
		    if [ $$? -ne 0 ]; then \
			echo "No compiler of $$GCC_MAJOR series is installed" ;\
			exit 1 ;\
		    fi ; \
		fi ;\
	    fi ;\
	    GCC_VERSION=`$$CC --version | head -n 1 | tr ' ' '\n' | grep -e "[0-9]\+\.[0-9]" | tail -n 1` ;\
	    if [ $$KERNEL_GCC_VERSION != $$GCC_VERSION -a -z "$$RELAXED_GCC_CHECK" ]; then \
		echo "The $$GCC_VERSION of $$GCC_MAJOR series is installed" ;\
		exit 1 ;\
	    fi ;\
	    echo "Setting CC to $$newCC" ;\
	else \
	    CC=$(CC) ;\
	fi ;\
	build_path=`pwd` ;\
	build_lastmod=`find . -type f -name '*.[ch]' -printf '%TY/%Tm/%Td %TH:%TM:%TS  %p\n' | grep -E -v 'build.h|mod.c' | sort -n  | tail -n 1 | cut -d ' ' -f 1-2 | cut -d '.' -f 1` ;\
	build_user=`whoami` ;\
	build_date=`date "+%Y/%m/%d %H:%M:%S"` ;\
	build="Built at $$build_date by $$build_user" ;\
	bzr=`which bzr 2>/dev/null` ;\
	if [ $$? -eq 0 -a -d ../.bzr ]; then \
	    build_revision=`bzr revno` ;\
	    build_author=`bzr log -r$$build_revision | grep committer | cut -c 12-` ;\
	    build_branch=`bzr nick` ;\
	    build_changes=`bzr status -SV | cut -c 5- | tr \\\n " "` ;\
	    revision="Revision $$build_revision from $$build_branch by $$build_author at $$build_path, last modification from $$build_lastmod" ;\
	    /bin/echo -e "#define PCIDRIVER_BUILD \"$$build\"\\n#define PCIDRIVER_REVISION \"$$revision\"\\n#define PCIDRIVER_CHANGES \"$$build_changes\"\\n" > build.h ;\
	else \
	    if [ -f ../pcilib/build.h ]; then \
		grep "#define PCILIB_RELEASE" ../pcilib/build.h &> /dev/null ;\
		res=$$? ;\
	    else \
		res=-1 ;\
	    fi ;\
	    if [ $$res -eq 0 ]; then \
		revision="Release \" PCILIB_RELEASE \" (r\" PCILIB_REVISION \") from \" PCILIB_REVISION_BRANCH \" by \" PCILIB_REVISION_AUTHOR \" at $$build_path, last modification from $$build_lastmod" ;\
		/bin/echo -e "#include \"pcilib/build.h\"\\n#define PCIDRIVER_BUILD \"$$build\"\\n#define PCIDRIVER_REVISION \"$$revision\"\\n#define PCIDRIVER_CHANGES PCILIB_REVISION_MODIFICATIONS\n" > build.h ;\
	    else \
		revision="Revision r\" PCILIB_REVISION \" from \" PCILIB_REVISION_BRANCH \" by \" PCILIB_REVISION_AUTHOR \" at $$build_path, last modification from $$build_lastmod" ;\
		/bin/echo -e "#include \"pcilib/build.h\"\\n#define PCIDRIVER_BUILD \"$$build\"\\n#define PCIDRIVER_REVISION \"$$revision\"\\n#define PCIDRIVER_CHANGES PCILIB_REVISION_MODIFICATIONS\n" > build.h ;\
	    fi ;\
	fi ;\
	$(MAKE) $(CFLAGS) -C $(KERNELDIR) M=$(PWD) CC=$$CC modules

install:
	@mkdir -p $(INSTALLDIR)
	@echo "INSTALL $(INSTALLDIR)/pciDriver.ko"
	@install -m 755 pciDriver.ko $(INSTALLDIR)
	@echo "INSTALL $(INSTALLDIR)/pciDriver.symvers"
	@install -m 644 Module.symvers $(INSTALLDIR)/pciDriver.symvers
	@if [ "$(HEADERDIR)" != "" ]; then \
	    echo "INSTALL $(HEADERDIR)/linux/pcidriver.h" ;\
	    install -m 644 pcidriver.h $(HEADERDIR)/linux/ ;\
	fi
	@echo "INSTALL /usr/include/linux/pcidriver.h"
	@mkdir -p /usr/include/linux
	@install -m 644 ioctl.h /usr/include/linux/pcidriver.h

install_symvers:
	@mkdir -p $(INSTALLDIR)
	@echo "INSTALL $(INSTALLDIR)/pciDriver.symvers"
	@install -m 644 Module.symvers $(INSTALLDIR)/pciDriver.symvers
	@echo "INSTALL $(HEADERDIR)/linux/pcidriver.h"
	@install -m 644 pcidriver.h $(HEADERDIR)/linux/


uninstall:
	@if [ -f $(INSTALLDIR)/pciDriver.ko ]; then \
	    echo "UNINSTALL $(INSTALLDIR)/pciDriver.ko" ;\
	    rm -f $(INSTALLDIR)/pciDriver.ko ;\
	fi
	@if [ -f $(MAININSTALLDIR)/pciDriver.ko ]; then \
	    echo "UNINSTALL $(MAININSTALLDIR)/pciDriver.ko" ;\
	    rm -f $(MAININSTALLDIR)/pciDriver.ko ;\
	fi
	@if [ -f $(INSTALLDIR)/pciDriver.symvers ]; then \
	    echo "UNINSTALL $(INSTALLDIR)/pciDriver.symvers" ;\
	    rm -f $(INSTALLDIR)/pciDriver.symvers ;\
	fi
	@if [ -f $(MAININSTALLDIR)/pciDriver.symvers ]; then \
	    echo "UNINSTALL $(MAININSTALLDIR)/pciDriver.symvers" ;\
	    rm -f $(MAININSTALLDIR)/pciDriver.symvers ;\
	fi
	@if [ -f /usr/include/linux/pcidriver.h ]; then \
	    echo "UNINSTALL /usr/include/linux/pcidriver.h" ;\
	    rm -rf /usr/include/linux/pcidriver.h ;\
	fi
	@if [ -d /usr/include/pciDriver/ ]; then \
	    echo "UNINSTALL /usr/include/pciDriver/" ;\
	    rm -rf /usr/include/pciDriver/ ;\
	fi
	@if [ "$(HEADERDIR)" != "" -a -f $(HEADERDIR)/linux/pcidriver.h ]; then \
	    echo "UNINSTALL $(HEADERDIR)/linux/pcidriver.h" ;\
	    rm -rf $(HEADERDIR)/linux/pcidriver.h ;\
	fi

clean:
	rm -rf *.o *.ko *.mod.c .*.o.cmd .*.o.tmp .*.ko.cmd  .*.o *.symvers modules.order .tmp_versions