- malloc replacements
[sip-router] / Makefile
1 # $Id$
2 #
3 # sip_router makefile
4 #
5 # WARNING: requires gmake (GNU Make)
6 #  Arch supported: Linux, FreeBSD, SunOS (tested on Solaris 6), WinNT
7
8 auto_gen=lex.yy.c cfg.tab.c   #lexx, yacc etc
9 exclude_modules=CVS
10 sources=$(filter-out $(auto_gen), $(wildcard *.c)) $(auto_gen) 
11 objs=$(sources:.c=.o)
12 depends=$(sources:.c=.d)
13 modules=$(filter-out $(addprefix modules/, $(exclude_modules)), \
14                                                 $(wildcard modules/*))
15
16 NAME=ser
17
18 # compile-time options
19 # NOCR disables seeking for CRs -- breaks standard but is fast
20 # recommended: on (speed-up, no implementation really sends CR)
21 # MACROEATER replaces frequently called parser helper functions
22 # with macros
23 # recommanded: on (speed-up)
24 # STATS allows to print out number of packets processed on CTRL-C; 
25 # implementation still nasty and reports per-process
26 # NO_DEBUG turns off some of the debug messages (DBG(...)).
27 # NO_LOG completely turns of all the logging (and DBG(...))
28 # DEBUG compiles in some extra debugging code
29 # OLD_PARSER uses the old and stable parser (from ser 8.3.2)
30 # DNS_IP_HACK faster ip address resolver for ip strings (e.g "127.0.0.1")
31 DEFS=-DNOCR -DMACROEATER -DDNS_IP_HACK #-DNO_DEBUG#-DSTATS -DNO_DEBUG 
32 #-DNO_LOG
33
34 PROFILE=  # -pg #set this if you want profiling
35 #mode = debug
36 mode = release
37
38 # platform dependent settings
39
40 ARCH = $(shell uname -s)
41
42 #common
43 CC=gcc
44 LD=gcc
45
46 ifeq ($(mode), release)
47         CFLAGS=-O2 -Wcast-align $(PROFILE) -Winline#-Wmissing-prototypes 
48         LDFLAGS=-Wl,-O2 -Wl,-E $(PROFILE)
49 else
50         CFLAGS=-g -Wcast-align -Winline
51         LDFLAGS=-g -Wl,-E
52 endif
53
54 LEX=flex
55 YACC=bison
56 YACC_FLAGS=-d -b cfg
57 # on linux and freebsd keep it empty (e.g. LIBS= )
58 # on solaris add -lxnet (e.g. LIBS= -lxnet)
59 LIBS=-lfl -ldl
60
61
62 ifeq ($(ARCH), Linux)
63
64 endif
65 ifeq  ($(ARCH), SunOS)
66
67 MAKE=gmake
68 YACC=yacc
69 LDFLAGS=-O2 $(PROFILE)
70 LIBS+=-L/usr/local/lib -lxnet # or -lnsl -lsocket or -lglibc ?
71
72 endif
73 ifeq ($(ARCH), FreeBSD)
74
75 MAKE=gmake
76 YACC=yacc
77 LIBS= -lfl  #dlopen is in libc
78
79 endif
80 ifneq (,$(findstring CYGWIN, $(ARCH)))
81
82 #cygwin is the same as common
83
84 endif
85
86
87 MKDEP=gcc -M 
88
89 ALLDEP=Makefile
90
91 export #export all variables for the sub-makes
92
93
94 #implicit rules
95 %.o:%.c $(ALLDEP)
96         $(CC) $(CFLAGS) $(DEFS) -c $< -o $@
97
98 %.d: %.c
99         $(MKDEP) $< >$@
100
101
102 # normal rules
103 $(NAME): $(objs)
104         $(LD) $(LDFLAGS) $(objs) $(LIBS) -o $(NAME) 
105
106 lex.yy.c: cfg.lex $(ALLDEP)
107         $(LEX) $<
108
109 cfg.tab.c: cfg.y $(ALLDEP)
110         $(YACC) $(YACC_FLAGS) $<
111
112
113
114 .PHONY: all
115 all: $(NAME) modules
116
117 .PHONY: dep
118 dep: $(depends)
119
120 .PHONY: clean
121 clean:
122         -rm $(objs) $(NAME)
123         -for r in $(modules); do $(MAKE) -C $$r clean ; done
124
125 .PHONY: modules
126 modules:
127         -for r in $(modules); do \
128                 $(MAKE) -C $$r ; \
129         done
130
131
132 .PHONY: proper
133 proper: clean 
134         -rm $(depends)
135         -for r in $(modules); do $(MAKE) -C $$r proper ; done
136
137 include $(depends)
138
139 dbg: ser
140         gdb -command debug.gdb