Makefile 9.18 KB
Newer Older
greg@kroah.com's avatar
greg@kroah.com committed
1
# Makefile for udev
Greg KH's avatar
Greg KH committed
2
#
greg@kroah.com's avatar
greg@kroah.com committed
3
# Copyright (C) 2003  Greg Kroah-Hartman <greg@kroah.com>
Greg KH's avatar
Greg KH committed
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#
# 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; version 2 of the License.
#
# 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
#

# Set the following to `true' to make a debuggable build.
# Leave this set to `false' for production use.
21
DEBUG = false
Greg KH's avatar
Greg KH committed
22

23
24
# Set the following to `true' to make udev emit a D-BUS signal when a
# new node is created.
25
USE_DBUS = false
26

Greg KH's avatar
Greg KH committed
27
28

ROOT =		udev
greg@kroah.com's avatar
greg@kroah.com committed
29
VERSION =	009
Greg KH's avatar
Greg KH committed
30
INSTALL_DIR =	/usr/local/bin
31
RELEASE_NAME =	$(ROOT)-$(VERSION)
Greg KH's avatar
Greg KH committed
32

olh@suse.de's avatar
olh@suse.de committed
33
DESTDIR =
34
# override this to make udev look in a different location for it's config files
35
36
37
38
39
40
prefix =
exec_prefix =	${prefix}
etcdir =	${prefix}/etc
sbindir =	${exec_prefix}/sbin
mandir =	${prefix}/usr/share/man
hotplugdir =	${etcdir}/hotplug.d/default
41
dbusdir =	${etcdir}/dbus-1/system.d
42
configdir =	${etcdir}/udev/
43
initdir = 	${etcdir}/init.d/
44
45
46
47
48
49
50
srcdir = .

INSTALL = /usr/bin/install -c
INSTALL_PROGRAM = ${INSTALL}
INSTALL_DATA  = ${INSTALL} -m 644
INSTALL_SCRIPT = ${INSTALL_PROGRAM}

51
52
53
# To build any of the extras programs, run with:
# 	make EXTRAS="extras/a extras/b" 
EXTRAS=
54
55

# place to put our device nodes
olh@suse.de's avatar
olh@suse.de committed
56
udevdir = ${prefix}/udev
Greg KH's avatar
Greg KH committed
57
58
59

# Comment out this line to build with something other 
# than the local version of klibc
60
#USE_KLIBC = true
Greg KH's avatar
Greg KH committed
61
62
63
64
65
66

# If you are running a cross compiler, you may want to set this
# to something more interesting, like "arm-linux-".  I you want
# to compile vs uClibc, that can be done here as well.
CROSS = #/usr/i386-linux-uclibc/usr/bin/i386-uclibc-
CC = $(CROSS)gcc
arnd@arndb.de's avatar
arnd@arndb.de committed
67
LD = $(CROSS)gcc
Greg KH's avatar
Greg KH committed
68
69
AR = $(CROSS)ar
STRIP = $(CROSS)strip
70
RANLIB = $(CROSS)ranlib
Greg KH's avatar
Greg KH committed
71

72
export CROSS CC AR STRIP RANLIB CFLAGS LDFLAGS LIB_OBJS ARCH_LIB_OBJS CRT0
Greg KH's avatar
Greg KH committed
73
74
75

# code taken from uClibc to determine the current arch
ARCH := ${shell $(CC) -dumpmachine | sed -e s'/-.*//' -e 's/i.86/i386/' -e 's/sparc.*/sparc/' \
olh@suse.de's avatar
olh@suse.de committed
76
	-e 's/arm.*/arm/g' -e 's/m68k.*/m68k/' -e 's/powerpc/ppc/g'}
Greg KH's avatar
Greg KH committed
77
78
79
80
81
82
83
84
85
86
87

# code taken from uClibc to determine the gcc include dir
GCCINCDIR := ${shell $(CC) -print-search-dirs | sed -ne "s/install: \(.*\)/\1include/gp"}

# code taken from uClibc to determine the libgcc.a filename
GCC_LIB := $(shell $(CC) -print-libgcc-file-name )

# use '-Os' optimization if available, else use -O2
OPTIMIZATION := ${shell if $(CC) -Os -S -o /dev/null -xc /dev/null >/dev/null 2>&1; \
		then echo "-Os"; else echo "-O2" ; fi}

88
89
# add -Wredundant-decls when libsysfs gets cleaned up
WARNINGS := -Wall -Wshadow -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations
Greg KH's avatar
Greg KH committed
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

# Some nice architecture specific optimizations
ifeq ($(strip $(TARGET_ARCH)),arm)
	OPTIMIZATION+=-fstrict-aliasing
endif
ifeq ($(strip $(TARGET_ARCH)),i386)
	OPTIMIZATION+=-march=i386
	OPTIMIZATION += ${shell if $(CC) -mpreferred-stack-boundary=2 -S -o /dev/null -xc \
		/dev/null >/dev/null 2>&1; then echo "-mpreferred-stack-boundary=2"; fi}
	OPTIMIZATION += ${shell if $(CC) -malign-functions=0 -malign-jumps=0 -S -o /dev/null -xc \
		/dev/null >/dev/null 2>&1; then echo "-malign-functions=0 -malign-jumps=0"; fi}
	CFLAGS+=-pipe
else
	CFLAGS+=-pipe
endif

# if DEBUG is enabled, then we do not strip or optimize
ifeq ($(strip $(DEBUG)),true)
	CFLAGS  += $(WARNINGS) -O1 -g -DDEBUG -D_GNU_SOURCE
	LDFLAGS += -Wl,-warn-common
	STRIPCMD = /bin/true -Since_we_are_debugging
else
	CFLAGS  += $(WARNINGS) $(OPTIMIZATION) -fomit-frame-pointer -D_GNU_SOURCE
	LDFLAGS += -s -Wl,-warn-common
	STRIPCMD = $(STRIP) -s --remove-section=.note --remove-section=.comment
endif

# If we are using our version of klibc, then we need to build and link it.
# Otherwise, use glibc and link statically.
119
ifeq ($(strip $(USE_KLIBC)),true)
120
121
	KLIBC_BASE	= $(PWD)/klibc
	KLIBC_DIR	= $(KLIBC_BASE)/klibc
Greg KH's avatar
Greg KH committed
122
	INCLUDE_DIR	:= $(KLIBC_DIR)/include
123
	LINUX_INCLUDE_DIR	:= $(KLIBC_BASE)/linux/include
arnd@arndb.de's avatar
arnd@arndb.de committed
124
	include $(KLIBC_DIR)/arch/$(ARCH)/MCONFIG
Greg KH's avatar
Greg KH committed
125
126
	# arch specific objects
	ARCH_LIB_OBJS =	\
127
			$(KLIBC_DIR)/libc.a
Greg KH's avatar
Greg KH committed
128
129


130
	CRT0 = $(KLIBC_DIR)/crt0.o
arnd@arndb.de's avatar
arnd@arndb.de committed
131
132
	LIBC =	$(ARCH_LIB_OBJS) $(LIB_OBJS) $(CRT0)
	CFLAGS += -nostdinc -I$(INCLUDE_DIR) -I$(KLIBC_DIR)/arch/$(ARCH)/include \
133
		-I$(INCLUDE_DIR)/bits$(BITSIZE) -I$(GCCINCDIR) -I$(LINUX_INCLUDE_DIR) \
arnd@arndb.de's avatar
arnd@arndb.de committed
134
		-D__KLIBC__
135
	LIB_OBJS =
136
	LDFLAGS = --static --nostdlib -nostartfiles -nodefaultlibs
Greg KH's avatar
Greg KH committed
137
else
138
	CRT0 =
Greg KH's avatar
Greg KH committed
139
140
141
142
143
144
	LIBC = 
	CFLAGS += -I$(GCCINCDIR)
	LIB_OBJS = -lc
	LDFLAGS = --static 
endif

145
146
CFLAGS += -I$(PWD)/libsysfs

147
all: $(ROOT)
148
149
150
151
152
	@for target in $(EXTRAS) ; do \
		echo $$target ; \
		$(MAKE) prefix=$(prefix) LD="$(LD)" SYSFS="$(SYSFS)" \
			-C $$target $@ ; \
	done ; \
Greg KH's avatar
Greg KH committed
153

154
155
156
157
158
$(ROOT): $(LIBC)

$(ARCH_LIB_OBJS) : $(CRT0)

$(CRT0):
Greg KH's avatar
Greg KH committed
159
160
	$(MAKE) -C klibc

161
162
163
TDB =	tdb/tdb.o	\
	tdb/spinlock.o

164
165
166
167
168
169
170
SYSFS =	$(PWD)/libsysfs/sysfs_bus.o	\
	$(PWD)/libsysfs/sysfs_class.o	\
	$(PWD)/libsysfs/sysfs_device.o	\
	$(PWD)/libsysfs/sysfs_dir.o	\
	$(PWD)/libsysfs/sysfs_driver.o	\
	$(PWD)/libsysfs/sysfs_utils.o	\
	$(PWD)/libsysfs/dlist.o
171

Greg KH's avatar
Greg KH committed
172
OBJS =	udev.o		\
173
	udev_config.o	\
174
175
	udev-add.o	\
	udev-remove.o	\
176
	udevdb.o	\
177
	logging.o	\
178
	namedev.o	\
179
	namedev_parse.o	\
180
	$(SYSFS)	\
181
	$(TDB)
182

183
ifeq ($(strip $(USE_KLIBC)),true)
184
185
186
	OBJS += klibc_fixups.o
endif

187
ifeq ($(USE_DBUS), true)
188
189
	CFLAGS += -DUSE_DBUS
	CFLAGS += $(shell pkg-config --cflags dbus-1)
190
	LDFLAGS += $(shell pkg-config --libs dbus-1)
191
192
193
	OBJS += udev_dbus.o
endif

Greg KH's avatar
Greg KH committed
194
195
196
197
198
# header files automatically generated
GEN_HEADERS =	udev_version.h

# Rules on how to create the generated header files
udev_version.h:
199
	@echo \#define UDEV_VERSION	\"$(VERSION)\" > $@
olh@suse.de's avatar
olh@suse.de committed
200
201
	@echo \#define UDEV_ROOT	\"$(udevdir)/\" >> $@
	@echo \#define UDEV_DB		\"$(udevdir)/\.udev.tdb\" >> $@
202
203
204
205
	@echo \#define UDEV_CONFIG_DIR	\"$(configdir)\" >> $@
	@echo \#define UDEV_CONFIG_FILE	\"$(configdir)\udev.conf\" >> $@
	@echo \#define UDEV_RULES_FILE	\"$(configdir)\udev.rules\" >> $@
	@echo \#define UDEV_PERMISSION_FILE	\"$(configdir)\udev.permissions\" >> $@
Greg KH's avatar
Greg KH committed
206

207
208
209
210
211
212
213
214
# config files automatically generated
GEN_CONFIGS =	udev.conf

# Rules on how to create the generated config files
udev.conf:
	sed -e "s-@udevdir@-$(udevdir)-" < udev.conf.in > $@


215
$(OBJS): $(GEN_HEADERS)
Greg KH's avatar
Greg KH committed
216

217
$(ROOT): $(OBJS)
arnd@arndb.de's avatar
arnd@arndb.de committed
218
	$(LD) $(LDFLAGS) -o $(ROOT) $(CRT0) $(OBJS) $(LIB_OBJS) $(ARCH_LIB_OBJS)
Greg KH's avatar
Greg KH committed
219
220
221
222
223
	$(STRIPCMD) $(ROOT)

clean:
	-find . \( -not -type d \) -and \( -name '*~' -o -name '*.[oas]' \) -type f -print \
	 | xargs rm -f 
224
	-rm -f core $(ROOT) $(GEN_HEADERS) $(GEN_CONFIGS)
Greg KH's avatar
Greg KH committed
225
	$(MAKE) -C klibc clean
226
227
228
229
230
	@for target in $(EXTRAS) ; do \
		echo $$target ; \
		$(MAKE) prefix=$(prefix) LD="$(LD)" SYSFS="$(SYSFS)" \
			-C $$target $@ ; \
	done ; \
Greg KH's avatar
Greg KH committed
231

greg@kroah.com's avatar
greg@kroah.com committed
232
DISTFILES = $(shell find . \( -not -name '.' \) -print | grep -v CVS | grep -v "\.tar\.gz" | grep -v "\/\." | grep -v releases | grep -v BitKeeper | grep -v SCCS | grep -v "\.tdb" | grep -v "test\/sys" | sort )
Greg KH's avatar
Greg KH committed
233
234
DISTDIR := $(RELEASE_NAME)
srcdir = .
235
236
237
238
239
240
241
242
243
244
245
246
247
release: clean
	@echo "--------------------------cut here------------------------"
	@echo "cd .."
	@echo "rm -rf $(DISTDIR)"
	@echo "mkdir $(DISTDIR)"
	@echo "chmod 777 $(DISTDIR)"
	@echo "cp -avr udev/* $(DISTDIR)"
	@echo "tar -c $(DISTDIR) | gzip -9 > $(RELEASE_NAME).tar.gz"
	@echo "rm -rf $(DISTDIR)"
	@echo "--------------------------cut here------------------------"


small_release: $(DISTFILES) clean
Greg KH's avatar
Greg KH committed
248
249
250
251
252
253
254
255
256
257
258
259
260
261
#	@echo $(DISTFILES)
	@-rm -rf $(DISTDIR)
	@mkdir $(DISTDIR)
	@-chmod 777 $(DISTDIR)
	@for file in $(DISTFILES); do			\
		if test -d $$file; then			\
		  	mkdir $(DISTDIR)/$$file;	\
		else					\
			cp -p $$file $(DISTDIR)/$$file;	\
		fi;					\
	done
	@tar -c $(DISTDIR) | gzip -9 > $(RELEASE_NAME).tar.gz
	@rm -rf $(DISTDIR)
	@echo "Built $(RELEASE_NAME).tar.gz"
262
263


264
ifeq ($(USE_DBUS), true)
265
266
267
268
269
270
271
272
273
274
275
276
install-dbus-policy:
	$(INSTALL) -d $(DESTDIR)$(dbusdir)
	$(INSTALL_DATA) udev_sysbus_policy.conf $(DESTDIR)$(dbusdir)
uninstall-dbus-policy:
	- rm $(DESTDIR)$(dbusdir)/udev_sysbus_policy.conf
else
install-dbus-policy:
	-
uninstall-dbus-policy:
	-
endif

277
install: install-dbus-policy all $(GEN_CONFIGS)
olh@suse.de's avatar
olh@suse.de committed
278
279
280
281
	$(INSTALL) -d $(DESTDIR)$(udevdir)
	$(INSTALL) -d $(DESTDIR)$(configdir)
	$(INSTALL) -d $(DESTDIR)$(hotplugdir)
	$(INSTALL_PROGRAM) -D $(ROOT) $(DESTDIR)$(sbindir)/$(ROOT)
282
	$(INSTALL_PROGRAM) -D etc/init.d/udev $(DESTDIR)$(initdir)/udev
olh@suse.de's avatar
olh@suse.de committed
283
	$(INSTALL_DATA) -D udev.8 $(DESTDIR)$(mandir)/man8/udev.8
284
285
	$(INSTALL_DATA) udev.conf $(DESTDIR)$(configdir)
	$(INSTALL_DATA) udev.rules $(DESTDIR)$(configdir)
olh@suse.de's avatar
olh@suse.de committed
286
	$(INSTALL_DATA) udev.permissions $(DESTDIR)$(configdir)
287
	- rm -f $(DESTDIR)$(hotplugdir)/udev.hotplug
olh@suse.de's avatar
olh@suse.de committed
288
	- ln -s $(sbindir)/$(ROOT) $(DESTDIR)$(hotplugdir)/udev.hotplug
289
290
291
292
293
	@for target in $(EXTRAS) ; do \
		echo $$target ; \
		$(MAKE) prefix=$(prefix) LD="$(LD)" SYSFS="$(SYSFS)" \
			-C $$target $@ ; \
	done ; \
294

295
uninstall: uninstall-dbus-policy
296
	- rm $(hotplugdir)/udev.hotplug
297
	- rm $(configdir)/udev.permissions
298
299
	- rm $(configdir)/udev.rules
	- rm $(configdir)/udev.conf
300
	- rm $(initdir)/udev
301
302
303
304
305
	- rm $(mandir)/man8/udev.8
	- rm $(sbindir)/$(ROOT)
	- rmdir $(hotplugdir)
	- rmdir $(configdir)
	- rmdir $(udevdir)
306
307
308
309
310
	@for target in $(EXTRAS) ; do \
		echo $$target ; \
		$(MAKE) prefix=$(prefix) LD="$(LD)" SYSFS="$(SYSFS)" \
			-C $$target $@ ; \
	done ; \
311
312