Makefile revision 145519
1#
2# Copyright (C) 1993-2001 by Darren Reed.
3#
4# Redistribution and use in source and binary forms are permitted
5# provided that this notice is preserved and due credit is given
6# to the original author and the contributors.
7#
8# $FreeBSD: head/contrib/ipfilter/Makefile 145519 2005-04-25 18:20:15Z darrenr $
9# Id: Makefile,v 2.76.2.13 2004/11/08 18:42:40 darrenr Exp
10#
11SHELL=/bin/sh
12BINDEST=/usr/local/bin
13SBINDEST=/sbin
14MANDIR=/usr/local/man
15#To test prototyping
16#CC=gcc -Wstrict-prototypes -Wmissing-prototypes
17# -Wunused -Wuninitialized
18#CC=gcc
19#CC=cc -Dconst=
20DEBUG=-g
21# -O
22CFLAGS=-I$$(TOP) -D_BSD_SOURCE
23CPU=`uname -m`
24CPUDIR=`uname -s|sed -e 's@/@@g'`-`uname -r`-`uname -m`
25OBJ=.
26#
27# To enable this to work as a Loadable Kernel Module...
28#
29IPFLKM=-DIPFILTER_LKM
30#
31# To enable logging of blocked/passed packets...
32#
33IPFLOG=-DIPFILTER_LOG
34#
35# To enable loading filter rules compiled to C code...
36#
37#COMPIPF=-DIPFILTER_COMPILED
38#
39# To enable synchronisation between IPFilter hosts
40#
41#SYNC=-DIPFILTER_SYNC
42#
43# To enable extended IPFilter functionality
44#
45LOOKUP=-DIPFILTER_LOOKUP -DIPFILTER_SCAN
46#
47# The facility you wish to log messages from ipmon to syslogd with.
48#
49LOGFAC=-DLOGFAC=LOG_SECURITY
50#
51# To enable rules to be written with BPF syntax, uncomment these two lines.
52#
53# WARNING: If you're building a commercial product based on IPFilter, using
54#          this options *may* infringe at least one patent held by CheckPoint
55#          (5,606,668.)
56#
57#IPFBPF=-DIPFILTER_BPF -I/usr/local/include
58#LIBBPF=-L/usr/local/lib -lpcap
59#
60# HP-UX and Solaris require this uncommented for BPF.
61#
62#BPFILTER=bpf_filter.o
63#
64# LINUXKERNEL is the path to the top of your Linux kernel source tree.
65# By default IPFilter looks for /usr/src/linux, but you may have to change
66# it to /usr/src/linux-2.4 or similar.
67#
68LINUXKERNEL=/usr/src/linux
69LINUX=`uname -r | awk -F. ' { printf"%d",$$1;for(i=1;i<NF&&i<3;i++){printf("%02d",$$(i+1));}}'`
70
71#
72# All of the compile-time options are here, used for compiling the userland
73# tools for regression testing.  Well, all except for IPFILTER_LKM, of course.
74#
75ALLOPTS=-DIPFILTER_LOG -DIPFILTER_LOOKUP \
76        -DIPFILTER_SCAN -DIPFILTER_SYNC -DIPFILTER_CKSUM
77
78#
79# Uncomment the next 3 lines if you want to view the state table a la top(1)
80# (requires that you have installed ncurses).
81#STATETOP_CFLAGS=-DSTATETOP
82#
83# Where to find the ncurses include files (if not in default path), 
84#
85#STATETOP_INC=
86#STATETOP_INC=-I/usr/local/include
87#
88# How to link the ncurses library
89#
90#STATETOP_LIB=-lncurses
91#STATETOP_LIB=-L/usr/local/lib -lncurses
92
93#
94# Uncomment this when building IPv6 capability.
95#
96#INET6=-DUSE_INET6
97#
98# For packets which don't match any pass rules or any block rules, set either
99# FR_PASS or FR_BLOCK (respectively).  It defaults to FR_PASS if left
100# undefined.  This is ignored for ipftest, which can thus return three
101# results: pass, block and nomatch.  This is the sort of "block unless
102# explicitly allowed" type #define switch.
103#
104POLICY=-DIPF_DEFAULT_PASS=FR_PASS
105#
106MFLAGS1='CFLAGS=$(CFLAGS) $(ARCHINC) $(SOLARIS2) $(SGIREV) $(INET6)' \
107	"IPFLOG=$(IPFLOG)" "LOGFAC=$(LOGFAC)" "POLICY=$(POLICY)" \
108	"SOLARIS2=$(SOLARIS2)" "DEBUG=$(DEBUG)" "DCPU=$(CPU)" \
109        "LIBBPF=$(LIBBPF)" "CPUDIR=$(CPUDIR)" "IPFBPF=$(IPFBPF)" \
110        'STATETOP_CFLAGS=$(STATETOP_CFLAGS)' "BPFILTER=$(BPFILTER)" \
111        'STATETOP_INC=$(STATETOP_INC)' 'STATETOP_LIB=$(STATETOP_LIB)' \
112	"BITS=$(BITS)" "OBJ=$(OBJ)" "LOOKUP=$(LOOKUP)" "COMPIPF=$(COMPIPF)" \
113	'SYNC=$(SYNC)' 'ALLOPTS=$(ALLOPTS)' 'LIBBPF=$(LIBBPF)'
114MFLAGS=$(MFLAGS1) "IPFLKM=$(IPFLKM)"
115MACHASSERT=`/bin/ls -1 /usr/sys/*/mach_assert.h | head -1`
116#
117SHELL=/bin/sh
118#
119########## ########## ########## ########## ########## ########## ##########
120#
121CP=/bin/cp
122RM=/bin/rm
123CHMOD=/bin/chmod
124INSTALL=install
125#
126
127all:
128	@echo "Chose one of the following targets for making IP filter:"
129	@echo ""
130	@echo "solaris	- auto-selects SunOS4.1.x/Solaris 2.3-6/Solaris2.4-6x86"
131	@echo "netbsd	- compile for NetBSD"
132	@echo "openbsd	- compile for OpenBSD"
133	@echo "freebsd20	- compile for FreeBSD 2.0, 2.1 or earlier"
134	@echo "freebsd22	- compile for FreeBSD-2.2 or greater"
135	@echo "freebsd3	- compile for FreeBSD-3.x"
136	@echo "freebsd4	- compile for FreeBSD-4.x"
137	@echo "freebsd5 - compile for FreeBSD-5.x"
138	@echo "bsd	- compile for generic 4.4BSD systems"
139	@echo "bsdi	- compile for BSD/OS"
140	@echo "irix	- compile for SGI IRIX"
141	@echo "hpux	- compile for HP-UX 11.00"
142	@echo "osf	- compile for OSF/Tru64 5.1"
143	@echo ""
144
145tests:
146	@if [ -d test ]; then (cd test; make) \
147	else echo test directory not present, sorry; fi
148
149retest:
150	@if [ -d test ]; then (cd test; make clean && make) \
151	else echo test directory not present, sorry; fi
152
153include:
154	if [ ! -f netinet/done ] ; then \
155		(cd netinet; ln -s ../*.h .; ln -s ../ip_*_pxy.c .;); \
156		(cd netinet; ln -s ../ipsend/tcpip.h tcpip.h); \
157		touch netinet/done; \
158	fi
159	-(cd netinet; ln -s ../ip_rules.h ip_rules.h)
160	if [ ! -f net/done ] ; then \
161		(cd net; ln -s ../radix_ipf.h .; ); \
162		touch net/done; \
163	fi
164
165sunos solaris: include
166	MAKE="$(MAKE)" MAKEFLAGS="$(MAKEFLAGS)" BPFILTER=$(BPFILTER) \
167		CC="$(CC)" DEBUG="$(DEBUG)" ./buildsunos
168
169freebsd22: include
170	make setup "TARGOS=BSD" "CPUDIR=$(CPUDIR)"
171	-rm -f BSD/$(CPUDIR)/ioconf.h
172	-if [ x$(IPFILKERN) != x ] ; then \
173		if [ -f /sys/compile/$(IPFILKERN)/ioconf.h ] ; then \
174			ln -s /sys/compile/$(IPFILKERN)/ioconf.h BSD/$$y; \
175		else \
176			ln -s /sys/$(IPFILKERN)/ioconf.h BSD/$$y; \
177		fi \
178	else \
179		x=`uname -v|sed -e 's@^.*:\(/[^: ]*\).*$$@\1/ioconf.h@'`; \
180		y=`uname -s|sed -e 's@/@@g'`-`uname -r`-`uname -m`; \
181		if [ ! -f $$x ] ; then \
182			echo -n "Can't find ioconf.h at $$x "; \
183			exit 1;\
184		else \
185			ln -s $$x BSD/$$y ; \
186		fi \
187	fi
188	make freebsd20
189
190freebsd5: include
191	if [ x$(INET6) = x ] ; then \
192		echo "#undef INET6" > opt_inet6.h; \
193	else \
194		echo "#define INET6" > opt_inet6.h; \
195	fi
196	if [ x$(ENABLE_PFIL) = x ] ; then \
197		echo "#undef PFIL_HOOKS" > opt_pfil.h; \
198	else \
199		echo "#define PFIL_HOOKS" > opt_pfil.h; \
200	fi
201
202	make setup "TARGOS=BSD" "CPUDIR=$(CPUDIR)"
203	(cd BSD/$(CPUDIR); make build TOP=../.. $(MFLAGS) "ML=mlfk_ipl.c" "MLD=mlfk_ipl.c" "LKM=ipf.ko.5" "LKMR=ipfrule.ko.5" "DLKM=-DKLD_MODULE" "MLR=mlfk_rule.o"; cd ..)
204	(cd BSD/$(CPUDIR); make -f Makefile.ipsend build TOP=../.. $(MFLAGS1); cd ..)
205
206freebsd4 : include
207	if [ x$(INET6) = x ] ; then \
208		echo "#undef INET6" > opt_inet6.h; \
209	else \
210		echo "#define INET6" > opt_inet6.h; \
211	fi
212	make setup "TARGOS=BSD" "CPUDIR=$(CPUDIR)"
213	(cd BSD/$(CPUDIR); make build TOP=../.. $(MFLAGS) "ML=mlfk_ipl.c" "MLD=mlfk_ipl.c" "LKM=ipf.ko" "LKMR=ipfrule.ko" "DLKM=-DKLD_MODULE" "MLR=mlfk_rule.o"; cd ..)
214	(cd BSD/$(CPUDIR); make -f Makefile.ipsend build TOP=../.. $(MFLAGS1); cd ..)
215
216freebsd3 freebsd30: include
217	make setup "TARGOS=BSD" "CPUDIR=$(CPUDIR)"
218	(cd BSD/$(CPUDIR); make build TOP=../.. $(MFLAGS1) "ML=mlf_ipl.c" "MLR=mlf_rule.o" LKM= LKMR=; cd ..)
219	(cd BSD/$(CPUDIR); make -f Makefile.ipsend build TOP=../.. $(MFLAGS1); cd ..)
220
221netbsd: include
222	make setup "TARGOS=BSD" "CPUDIR=$(CPUDIR)"
223	(cd BSD/$(CPUDIR); make build TOP=../.. $(MFLAGS) 'DLKM=-D_LKM' "ML=mln_ipl.c" LKMR= "MLR=mln_rule.o"; cd ..)
224	(cd BSD/$(CPUDIR); make -f Makefile.ipsend build TOP=../.. $(MFLAGS); cd ..)
225
226openbsd: include
227	make setup "TARGOS=BSD" "CPUDIR=$(CPUDIR)"
228	(cd BSD/$(CPUDIR); make build TOP=../.. $(MFLAGS) 'DLKM=-D_LKM' "ML=mlo_ipl.c" LKMR= "MLR=mlo_rule.o"; cd ..)
229	(cd BSD/$(CPUDIR); make -f Makefile.ipsend build TOP=../.. $(MFLAGS); cd ..)
230
231freebsd20 freebsd21: include
232	make setup "TARGOS=BSD" "CPUDIR=$(CPUDIR)"
233	(cd BSD/$(CPUDIR); make build TOP=../.. $(MFLAGS) "ML=mlf_ipl.c" "MLR=mlf_rule.o"; cd ..)
234	(cd BSD/$(CPUDIR); make -f Makefile.ipsend build TOP=../.. $(MFLAGS); cd ..)
235
236osf tru64: null include
237	make setup "TARGOS=OSF" "CPUDIR=`OSF/cpurev`"
238	(cd OSF/`OSF/cpurev`; make build TRU64=`uname -v` TOP=../.. "DEBUG=-g" $(MFLAGS) "MACHASSERT=$(MACHASSERT)" "OSREV=`../cpurev`"; cd ..)
239	(cd OSF/`OSF/cpurev`; make -f Makefile.ipsend build TRU64=`uname -v` TOP=../.. $(MFLAGS) "OSREV=`../cpurev`"; cd ..)
240
241bsd: include
242	make setup "TARGOS=BSD" "CPUDIR=$(CPUDIR)"
243	(cd BSD/$(CPUDIR); make build TOP=../.. $(MFLAGS) 'DLKM=-D_LKM' "ML=mln_ipl.c" "MLR=mln_rule.o"; cd ..)
244	(cd BSD/$(CPUDIR); make -f Makefile.ipsend build TOP=../.. $(MFLAGS); cd ..)
245
246bsdi bsdos: include
247	make setup "TARGOS=BSD" "CPUDIR=$(CPUDIR)"
248	(cd BSD/$(CPUDIR); make build "CC=$(CC)" TOP=../.. $(MFLAGS) LKM= LKMR= ; cd ..)
249	(cd BSD/$(CPUDIR); make -f Makefile.ipsend build "CC=$(CC)" TOP=../.. $(MFLAGS); cd ..)
250
251irix IRIX: include
252	make setup TARGOS=IRIX CPUDIR=`IRIX/cpurev`
253	if [ "x${SGIREV}" = "x" ] ; then \
254		make irix "SGIREV=-D_KMEMUSER -DIRIX=`IRIX/getrev`"; \
255	else \
256		(cd IRIX/`IRIX/cpurev`; smake -l -J 1 build TOP=../.. $(DEST) $(MFLAGS) IRIX=`../getrev` SGI=$$(IRIX) CPUDIR=`../cpurev`; cd ..); \
257		(cd IRIX/`IRIX/cpurev`; make -f Makefile.ipsend build TOP=../.. $(DEST) $(MFLAGS) IRIX=`../getrev` SGI=$$(IRIX) CPUDIR=`../cpurev`; cd ..); \
258	fi
259
260setup:
261	-if [ ! -d $(TARGOS)/$(CPUDIR) ] ; then mkdir $(TARGOS)/$(CPUDIR); fi
262	-rm -f $(TARGOS)/$(CPUDIR)/Makefile $(TARGOS)/$(CPUDIR)/Makefile.ipsend
263	-ln -s ../Makefile $(TARGOS)/$(CPUDIR)/Makefile
264	-ln -s ../Makefile.ipsend $(TARGOS)/$(CPUDIR)/Makefile.ipsend
265	-if [ -f $(TARGOS)/Makefile.common ] ; then \
266		rm -f $(TARGOS)/$(CPUDIR)/Makefile.common; \
267		ln -s ../Makefile.common $(TARGOS)/$(CPUDIR)/Makefile.common;\
268	fi
269
270clean: clean-include
271	/bin/rm -rf h y.output
272	${RM} -f core *.o ipt fils ipf ipfstat ipftest ipmon if_ipl \
273	vnode_if.h $(LKM) *~
274	/bin/rm -rf sparcv7 sparcv9 mdbgen_build
275	(cd SunOS4; $(MAKE) TOP=.. clean)
276	-(cd SunOS5; $(MAKE) TOP=.. clean)
277	(cd BSD; $(MAKE) TOP=.. clean)
278	(cd HPUX; $(MAKE) BITS=32 TOP=.. clean)
279	(cd Linux; $(MAKE) TOP=.. clean)
280	(cd OSF; $(MAKE) TOP=.. clean)
281	if [ "`uname -s`" = "IRIX" ]; then (cd IRIX; $(MAKE) clean); fi
282	[ -d test ] && (cd test; $(MAKE) clean)
283	(cd ipsend; $(MAKE) clean)
284
285clean-include:
286	sh -c 'if [ -d netinet ] ; then cd netinet; for i in *; do if [ -h $$i ] ; then /bin/rm -f $$i; fi; done fi'
287	sh -c 'if [ -d net ] ; then cd net; for i in *; do if [ -h $$i ] ; then /bin/rm -f $$i; fi; done fi'
288	${RM} -f netinet/done net/done
289
290clean-bsd: clean-include
291	(cd BSD; make TOP=.. clean)
292
293clean-hpux: clean-include
294	(cd HPUX; $(MAKE) BITS=32 clean)
295
296clean-osf: clean-include
297	(cd OSF; make clean)
298
299clean-linux: clean-include
300	(cd Linux; make clean)
301
302clean-sunos4: clean-include
303	(cd SunOS4; make clean)
304
305clean-sunos5: clean-include
306	(cd SunOS5; $(MAKE) clean)
307	/bin/rm -rf sparcv?
308
309clean-irix: clean-include
310	(cd IRIX; $(MAKE) clean)
311
312h/xti.h:
313	mkdir -p h
314	ln -s /usr/include/sys/xti.h h
315
316hpux: include h/xti.h
317	make setup CPUDIR=`HPUX/cpurev` TARGOS=HPUX
318	(cd HPUX/`HPUX/cpurev`; $(MAKE) build TOP=../.. $(DEST) $(MFLAGS) "BITS=`getconf KERNEL_BITS`" `../makeargs`; cd ..)
319	(cd HPUX/`HPUX/cpurev`; $(MAKE) -f Makefile.ipsend build TOP=../.. $(DEST) $(MFLAGS) "BITS=`getconf KERNEL_BITS`" `../makeargs`; cd ..)
320
321sunos4 solaris1:
322	(cd SunOS4; make build TOP=.. "CC=$(CC)" $(DEST) $(MFLAGS); cd ..)
323	(cd SunOS4; make -f Makefile.ipsend build "CC=$(CC)" TOP=.. $(DEST) $(MFLAGS); cd ..)
324
325sunos5 solaris2: null
326	(cd SunOS5/$(CPUDIR); $(MAKE) build TOP=../.. "CC=$(CC)" $(DEST) $(MFLAGS) "SOLARIS2=$(SOLARIS2)" "CPU=-Dsparc -D__sparc__"; cd ..)
327	(cd SunOS5/$(CPUDIR); $(MAKE) -f Makefile.ipsend build TOP=../.. "CC=$(CC)" $(DEST) $(MFLAGS); cd ..)
328
329sunos5x86 solaris2x86: null
330	(cd SunOS5/$(CPUDIR); make build TOP=../.. "CC=$(CC)" $(DEST) $(MFLAGS) "SOLARIS2=$(SOLARIS2)" "CPU=-Di86pc -Di386 -D__i386__"; cd ..)
331	(cd SunOS5/$(CPUDIR); make -f Makefile.ipsend build TOP=../.. "CC=$(CC)" $(DEST) $(MFLAGS); cd ..)
332
333linux: include
334	(cd Linux; make build LINUX=$(LINUX) TOP=.. "DEBUG=-g" "CC=$(CC)" $(MFLAGS) OBJ=$(CPUDIR) LINUXKERNEL=$(LINUXKERNEL); cd ..)
335	(cd Linux; make ipflkm LINUX=$(LINUX) TOP=.. "DEBUG=-g" "CC=$(CC)" $(MFLAGS) OBJ=$(CPUDIR) LINUXKERNEL=$(LINUXKERNEL) WORKDIR=`pwd`; cd ..)
336#	(cd Linux; make -f Makefile.ipsend build LINUX=$(LINUX) TOP=.. "CC=$(CC)" $(MFLAGS); cd ..)
337
338install-linux: linux
339	(cd Linux/; make LINUX=$(LINUX) TOP=.. "DEBUG=-g" "CC=$(CC)" $(MFLAGS) OBJ=$(CPUDIR) install ; cd ..)
340
341install-bsd:
342	(cd BSD/$(CPUDIR); make install "TOP=../.." $(MFLAGS); cd ..)
343	(cd BSD/$(CPUDIR); make -f Makefile.ipsend INSTALL=$(INSTALL) install "TOP=../.." $(MFLAGS); cd ..)
344
345install-sunos4: solaris
346	(cd SunOS4; $(MAKE) CPU=$(CPU) TOP=.. install)
347
348install-sunos5: solaris null
349	(cd SunOS5; $(MAKE) CPU=$(CPU) TOP=.. install)
350
351install-hpux: hpux
352	(cd HPUX/`HPUX/cpurev`; $(MAKE) CPU=$(CPU) TOP=../.. "BITS=`getconf KERNEL_BITS`" install)
353
354install-irix: irix
355	(cd IRIX; smake install CPU=$(CPU) TOP=.. $(DEST) $(MFLAGS) CPUDIR=`./cpurev`)
356
357install-osf install-tru64:
358	(cd OSF/`OSF/cpurev`; make install "TOP=../.." $(MFLAGS); cd ..)
359	(cd OSF/`OSF/cpurev`; make -f Makefile.ipsend INSTALL=$(INSTALL) install "TOP=../.." $(MFLAGS); cd ..)
360
361do-cvs:
362	find . -type d -name CVS -print | xargs /bin/rm -rf
363	find . -type f -name .cvsignore -print | xargs /bin/rm -f
364	/bin/rm -f ip_msnrpc_pxy.c ip_sunrpc_pxy.c
365
366ip_rules.c ip_rules.h: rules/ip_rules tools/ipfcomp.c
367	-./ipf -n -cc -f rules/ip_rules 2>/dev/null 1>&2
368
369null:
370	@if [ "`$(MAKE) -v 2>&1 | sed -ne 's/GNU.*/GNU/p'`" = "GNU" ] ; then \
371		echo 'Do not use GNU make (gmake) to compile IPFilter'; \
372		exit 1; \
373	fi
374	-@echo make ok
375
376mdb:
377	/bin/rm -rf mdbgen_build
378	mdbgen -D_KERNEL -DIPFILTER_LOG -DIPFILTER_LOOKUP -DSUNDDI \
379	       -DIPFILTER_SCAN -DIPFILTER_LKM -DSOLARIS2=10 -n ipf_mdb -k \
380	       -I/home/dr146992/pfil -I/home/dr146992/ipf -f \
381	       /usr/include/netinet/in_systm.h,/usr/include/sys/ethernet.h,/usr/include/netinet/in.h,/usr/include/netinet/ip.h,/usr/include/netinet/ip_var.h,/usr/include/netinet/tcp.h,/usr/include/netinet/tcpip.h,/usr/include/netinet/ip_icmp.h,/usr/include/netinet/udp.h,ip_compat.h,ip_fil.h,ip_nat.h,ip_state.h,ip_proxy.h,ip_scan.h
382