]> rtime.felk.cvut.cz Git - lincan.git/blob - lincan/src/Makefile.std
LinCAN version and documentation updated to 0.3.5 and build portability fixes.
[lincan.git] / lincan / src / Makefile.std
1 # Makefile for the Linux CAN-bus driver.
2 # Written by Arnaud Westenberg email:arnaud@wanadoo.nl
3 # This software is released under the GPL-License.
4 # Version lincan-0.2  9 Aug 2003
5 #
6 # This Makefile version is adapted from uLan Communication driver
7 # (C) Copyright 1999 by Pavel Pisa pisa@cmp.felk.cvut.cz
8 #
9 #*****************************************************************
10
11 # Begin of OCERA framework header
12 ifdef SUBDIRS
13 SUBDIRS =
14 endif
15 ifneq ($(wildcard ../Standalone.mk),)
16 # Standalone make outside of OCERA framework
17
18 all : default
19
20 .PHONY: kernel-pass utils-pass
21
22 kernel-pass : default
23
24 else
25 # Build in structure of OCERA framework
26
27 ifneq ($(wildcard ../../../../../ocera.mk),)
28 ifndef TOPDIR
29 include ../../../../../ocera.mk
30 else
31 LINUX_DIR = ../../../../../kernel/linux/
32 endif
33 else
34 all: 
35         @echo -e "\nTo build LinCAN driver for OCERA framework, ocera.mk file have"
36         @echo -e "to be generated first. Go to ocera/ directory and do 'make', please."
37         @echo -e "If standalone build is required, mark lincan/ by 'touch ../Standalone.mk'.\n"
38 endif
39 ifdef LINUX_DIR
40 KERNEL_LOCATION = $(LINUX_DIR)
41 endif
42 endif
43 # End of OCERA framework header
44
45 # Where to look for kernel
46 # if not defined, sources of current running kernel are found
47 #KERNEL_LOCATION=/usr/src/linux
48 #KERNEL_LOCATION=/usr/src/linux-2.2.19
49 #KERNEL_LOCATION=/usr/src/linux-2.2.22
50 #KERNEL_LOCATION=/usr/src/linux-2.6.0
51 #KERNEL_LOCATION=/usr/src/linux-2.6.18-rc4/_build/arm
52 #KERNEL_LOCATION=/home/cvs/ocera/ocera-build/kernel/linux
53
54
55 # Enable debugging messages
56 #DEBUG = y
57
58 # You can comment out the hardware you don't need. This will result in a smaller
59 # driver. By default, all hardware is supported in the driver. See the README 
60 # file for a description of the supported hardware.
61 #   pccan       Not to be confused with PCCCAN!!!
62 #   pcccan      Not to be confused with PCCAN!!!
63
64 SUPPORTED_CARDS = pip pccan smartcan nsi cc_can104 \
65                   pc_i03 pcm3680 aim104 m437 pcccan ssv \
66                   bfadcan gensja1000mm gensja1000io kv_pcican msmcan virtual template \
67                   unican unican_cl2 ems_cpcpci adlink7841 oscar \
68                   pcan_pci esdpci200
69 #                 hms30c7202_can c_can c_can_irq tscan1
70 #                 pcan_dongle
71
72 #SUPPORTED_CARDS = pcm3680 bfadcan template
73
74 #SUPPORTED_CARDS = virtual
75
76 ########## Don't change anything under this line ################
77
78 # currently running kernel
79 CURRENT=$(shell uname -r)
80 KERNEL_NEW=$(shell if [ -d /lib/modules/$(CURRENT)/build ] ; \
81                 then echo yes ; else echo no ; fi )
82
83 #KERNEL_LOCATION=/usr/src/kernel/$(CURRENT)
84 #KERNEL_LOCATION=/lib/modules/$(CURRENT)/build
85
86 ifndef KERNEL_LOCATION
87 ifeq ($(KERNEL_NEW),yes)
88 KERNEL_LOCATION=/lib/modules/$(CURRENT)/build
89 MODULE_CHAR_LOC=/lib/modules/$(CURRENT)/kernel/drivers/char
90 else
91 KERNEL_LOCATION=/usr/src/linux
92 MODULE_CHAR_LOC=/lib/modules/$(CURRENT)/misc
93 endif
94 endif
95
96 TOPDIR = $(KERNEL_LOCATION)
97 CONFIG_SHELL = TOPDIR=$(TOPDIR)
98
99 KERNEL_VERSION := $(shell awk -F\" '/REL/ {print $$2}' \
100         $(KERNEL_LOCATION)/include/linux/version.h | awk -F\- '{print $$1}')
101
102 ifeq ($(KERNEL_VERSION),)
103 KERNEL_VERSION=$(shell grep UTS_RELEASE ${KERNEL_LOCATION}/include/linux/utsrelease.h | \
104                  sed 's/[^"]*"\(.*\)\{1\}"/\1/')
105 endif
106 ifeq ($(KERNEL_VERSION),)
107 KERNEL_VERSION=$(shell grep UTS_RELEASE ${KERNEL_LOCATION}/include/generated/utsrelease.h | \
108                  sed 's/[^"]*"\(.*\)\{1\}"/\1/')
109 endif
110
111 #$(warning KERNEL_VERSION = $(KERNEL_VERSION))
112
113 PROC_FS := $(shell awk -F\  '/PROC_FS/ {print $$3}' \
114         $(KERNEL_LOCATION)/include/linux/autoconf.h)
115
116 DEVFS_FS := $(shell awk -F\  '/DEVFS_FS/ {print $$3}' \
117         $(KERNEL_LOCATION)/include/linux/autoconf.h)
118
119 KERNEL_MODULE_V26 := $(shell echo $(KERNEL_VERSION) \
120         | sed -n 's/^.*2\.[5-9]\..*$$/yes/p')
121
122 ifdef DEBUG
123         EXTRA_CFLAGS += -DCAN_DEBUG
124         EXTRA_CFLAGS += -ggdb
125 endif
126
127 ifndef MODVERSIONS
128 #       EXTRA_CFLAGS += -DNOVER
129 #else
130 #       EXTRA_CFLAGS += -DMODVERSIONS
131 endif
132
133 ifdef DEVFS_FS
134         EXTRA_CFLAGS += -DWITH_DEVFS_FS
135 endif
136
137 ifdef PROC_FS
138         O_OBJS += proc.o
139 endif
140
141 ifdef SUBDIRS
142 EXTRA_CFLAGS += -I $(SUBDIRS)
143 else
144 EXTRA_CFLAGS += -I .
145 endif
146
147 # Target object file if any
148 # this must be undefined for 2.5.xx kernels
149 ifndef KERNEL_MODULE_V26
150 O_TARGET     = lincan.o
151 endif
152 # Regular object files
153 O_OBJS       += $(SUPPORTED_CARDS:%=%.o)
154 O_OBJS       += can_queue.o can_quekern.o devcommon.o main.o modparms.o \
155                 setup.o finish.o irq.o sysdep_lnx.o boardlist.o \
156                 sja1000p.o sja1000.o i82527.o  \
157                 open.o proc.o close.o write.o read.o \
158                 ioctl.o ioctl_query.o ioctl_remote.o select.o fasync.o
159 # Objects with exported symbols (-DEXPORT_SYMTAB)
160 OX_OBJS      = 
161 # Module objects 
162 M_OBJS       = $(O_TARGET)
163 # Module only objects with exported symbols (-DEXPORT_SYMTAB)
164 MX_OBJS      = 
165 # Kernel only objects 
166 L_OBJS       =  
167 # Kernel only objects with exported symbols (-DEXPORT_SYMTAB)
168 LX_OBJS      = 
169 # Additional CFLAGS
170 EXTRA_CFLAGS +=
171
172 # Linux 2.4.2 and newer build system needs next
173 lincan-objs = $(O_OBJS)
174 ifndef KERNEL_MODULE_V26
175 obj-y = $(O_OBJS)
176 endif
177 obj-m = lincan.o
178
179 ifndef KERNEL_MODULE_V26
180 FINAL_MODULE_OBJS=$(obj-m)
181 else
182 FINAL_MODULE_OBJS=$(obj-m:%.o=%.ko)
183 endif
184
185 ########## Source/target independent build of module #############
186
187 default : make_this_module
188         cp $(FINAL_MODULE_OBJS) ../$(FINAL_MODULE_OBJS)
189
190 dep: make_this_module_dep
191
192 install : install_this_module
193
194 lincan_config.h: Makefile
195         echo >lincan_config.h
196         $(foreach card, $(SUPPORTED_CARDS), \
197           echo \#define CONFIG_OC_LINCAN_CARD_$(card) 1 >>lincan_config.h ;)
198
199 make_this_module: lincan_config.h
200         echo Linux kernel version $(KERNEL_VERSION)
201         echo Linux kernel sources $(KERNEL_LOCATION)
202         echo Module target $(obj-m)
203         echo Module objects $(lincan-objs)
204         DIR=`pwd`; (cd $(KERNEL_LOCATION); make M=$$DIR SUBDIRS=$$DIR modules)
205
206 make_this_module_dep:
207         DIR=`pwd`; (cd $(KERNEL_LOCATION); make SUBDIRS=$$DIR dep)
208
209 install_this_module: make_this_module
210         su -c "mkdir -v -p $(MODULE_CHAR_LOC) && cp -v $(FINAL_MODULE_OBJS) $(MODULE_CHAR_LOC)"
211
212 clean:
213         rm -f $(M_OBJS) $(MX_OBJS) $(O_OBJS) $(OX_OBJS) $(obj-m) \
214               .*.o.flags .*.o.cmd .*.ko.cmd .depend lincan_config.h *~ \
215               $(obj-m:%.o=%.mod.o) $(obj-m:%.o=%.mod.c) \
216               $(FINAL_MODULE_OBJS) ../$(FINAL_MODULE_OBJS)
217
218 distclean: clean
219
220
221 ifndef KERNEL_MODULE_V26
222 include $(KERNEL_LOCATION)/Rules.make
223 endif
224