mdns: remove PLUGIN_AUTHOR, Git shows who worked on it
[olsrd.git] / Makefile.inc
1 ######################
2 #
3 # Highlevel configuration options for all
4 #
5 #
6
7 # activate debugging with 1 or deactivate with 0
8 DEBUG ?= 1
9
10 # set NOSTRIP to non-zero to inhibit stripping the binaries
11 NOSTRIP ?= 0
12
13 # compile OLSR_PRINTF out
14 NO_DEBUG_MESSAGES ?= 0
15
16 # the optimize option to be set for gcc
17 OPTIMIZE ?= 
18
19 # enable mudflap with 1 or deactivate with 0
20 # you need a recent enough gcc and the libmudflap installed
21 MUDFLAP ?= 0
22
23 # shows full compiler/linker calls if activated
24 VERBOSE ?= 0
25
26 SANITIZE_ADDRESS ?= 0
27
28 ifeq ($(VERBOSE),0)
29 MAKECMDPREFIX = @
30 else
31 MAKECMDPREFIX =
32 endif
33
34 # OS detection
35 ifeq ($(OS),Windows_NT)
36 OS := win32
37 endif
38 ifeq ($(OS),)
39 OS := $(shell sh $(TOPDIR)/make/guess_os.sh)
40 endif
41
42 ######################
43 #
44 # Lowlevel options and rules
45 #
46
47 # programs
48 CCACHE ?=       $(shell IFS=:; for i in $$PATH;do test -x "$$i/ccache" && echo "$$i/ccache" && break; done)
49 ifeq ($(origin CC),default)
50 CC =            $(CCACHE) gcc
51 else
52 CC ?=           $(CCACHE) gcc
53 endif
54 ifeq ($(DEBUG),0)
55   ifeq ($(NOSTRIP),0)
56   STRIP ?=  strip
57   else
58   STRIP ?=  :
59   endif
60 else
61 STRIP ?=  :
62 endif
63 BISON ?=        bison
64 FLEX ?=         flex
65 TAGCMD ?=       etags
66
67 # target directories and names
68 DESTDIR  ?=
69 ETCDIR   ?= $(DESTDIR)/etc/olsrd
70 USRDIR   ?= $(DESTDIR)/usr
71 INCLUDEDIR ?= $(DESTDIR)/usr/include
72 LIBDIR   ?= $(USRDIR)/lib
73 SBINDIR  ?= $(USRDIR)/sbin
74 SHAREDIR ?= $(USRDIR)/share
75 DOCDIR   ?= $(SHAREDIR)/doc
76 MANDIR   ?= $(SHAREDIR)/man
77 EXENAME  ?= olsrd
78 CFGNAME  ?= $(EXENAME).conf
79 CFGFILE  ?= $(ETCDIR)/$(CFGNAME)
80 SGW_POLICY_SCRIPT ?= sgw_policy_routing_setup.sh
81
82 DOCDIR_OLSRD ?= $(DOCDIR)/$(EXENAME)
83
84
85 CPPFLAGS =      -Isrc
86 ifneq ($(TOPDIR),.)
87 CPPFLAGS +=     -I$(TOPDIR)/src
88 endif
89
90 # include OS specific compiler settings
91 -include $(TOPDIR)/make/Makefile.$(OS).compiler
92
93 # add gcc warnings and optimizations if CFLAGS not set
94 ifndef CFLAGS
95 ifndef WARNINGS
96 #
97 # warning flags to add if supported (sorted)
98 #
99 WARNINGS += -fearly-inlining
100 WARNINGS += -finline-functions-called-once
101 WARNINGS += -funit-at-a-time
102 WARNINGS += -Waggregate-return
103 WARNINGS += -Wall
104 WARNINGS += -Wbad-function-cast
105 WARNINGS += -Wcast-align
106 WARNINGS += -Wdeclaration-after-statement
107 WARNINGS += -Wdisabled-optimization
108 WARNINGS += -Wendif-labels
109 #WARNINGS += -Werror
110 WARNINGS += -Werror=format-security
111 WARNINGS += -Wextra
112 WARNINGS += -Wformat
113 WARNINGS += -Wformat-security
114 WARNINGS += -Wformat-y2k
115 WARNINGS += -Winit-self
116 WARNINGS += -Winline
117 WARNINGS += -Wmissing-declarations
118 WARNINGS += -Wmissing-format-attribute
119 WARNINGS += -Wmissing-noreturn
120 WARNINGS += -Wmissing-prototypes
121 WARNINGS += -Wno-deprecated-declarations
122 WARNINGS += -Wno-multichar
123 WARNINGS += -Wnull-dereference
124 WARNINGS += -Wold-style-definition
125 WARNINGS += -Wpointer-arith
126 WARNINGS += -Wsequence-point
127 WARNINGS += -Wshadow
128 WARNINGS += -Wshift-negative-value
129 WARNINGS += -Wshift-overflow
130 WARNINGS += -Wsign-compare
131 WARNINGS += -Wstrict-prototypes
132 WARNINGS += -Wswitch-default
133 WARNINGS += -Wtautological-compare
134 WARNINGS += -Wundef
135 WARNINGS += -Wunused-parameter
136 WARNINGS += -Wwrite-strings
137
138 ifneq ($(CC),clang)
139 # clang doesn't report these as errors or warnings in the gcc-warnings script
140 WARNINGS += -Wdouble-promotion
141 WARNINGS += -Wduplicated-cond
142 WARNINGS += -Wjump-misses-init
143 WARNINGS += -Wlogical-op
144 WARNINGS += -Wmisleading-indentation
145 WARNINGS += -Wsync-nand
146 WARNINGS += -Wtrampolines
147 endif
148
149 ifneq ($(OS),win32)
150 # triggers many warnings for inet_ntop in src/win32/compat.h
151 WARNINGS += -Wcast-qual
152 endif
153
154 # we have small inline functions in src/lq_route.h which should always be inlined
155 WARNINGS += -finline-limit=350
156
157 # only in non-debug builds
158 ifeq ($(DEBUG),0)
159 WARNINGS += -fomit-frame-pointer
160 endif
161
162 # the following 2 do not work yet and need more work on it
163 #WARNINGS += -Wconversion
164 #WARNINGS += -Wredundant-decls
165
166 # Alas, htons() triggers this so we can't seriously activate it.
167 #WARNINGS += -Wunreachable-code
168
169 # These tell gcc to put each function and global variable in a separate section.
170 # The linker can then remove all unreferenced sections. But in the olsrd binary
171 # unused doesn't imply unused at all since the function may be used by plugins,
172 # e.g. the ones in src/plugin_utils.c.
173 # So we can use that featuer at most to identify unused functions and remove
174 # them from the source by hand.
175 #WARNINGS += -ffunction-sections
176 #WARNINGS += -fdata-sections
177
178 ifeq ($(MUDFLAP),0)
179 # work around a bug in gcc-4.*
180 WARNINGS += -Wnested-externs
181 endif
182
183 WARNINGS :=     $(shell CC="$(CC)" "$(TOPDIR)/gcc-warnings" $(WARNINGS))
184 endif
185 CFLAGS +=       $(WARNINGS)
186 CFLAGS +=       $(OPTIMIZE)
187 CFLAGS +=       $(EXTRA_CFLAGS)
188
189 endif
190 ifneq ($(MUDFLAP),0)
191 CFLAGS +=       -fmudflapth
192 endif
193
194 ifdef OLSRD_PLUGIN
195 # c and ld flags for libraries (plugins)
196 CPPFLAGS +=     -DOLSR_PLUGIN
197 ifeq ($(OS),win32)
198   LDFLAGS +=    -Wl,-export-all-symbols,--enable-auto-import
199 endif
200 LDFLAGS +=      -shared
201 LDFLAGS +=      -Wl,-soname,$(PLUGIN_SONAME)
202 LDFLAGS +=      -Wl,--version-script=version-script.txt 
203 else
204 # c and ld flags for main
205 ifeq ($(OS),win32)
206   LDFLAGS +=    -Wl,-export-all-symbols
207 else 
208   LDFLAGS +=    -Wl,-export-dynamic 
209 endif
210 LDFLAGS +=      -Wl,-rpath,$(LIBDIR)
211 endif
212 # LDFLAGS for all 
213 LDFLAGS +=      -Wl,--warn-common
214 # See above at "-ffunction-sections" for an explanation (and why it is disabled).
215 #LDOPTS +=      -Wl,--gc-sections
216 #LDOPTS +=      -Wl,--print-gc-sections
217 #LDFLAGS +=     $(shell CC="$(CC)" $(TOPDIR)/ld-warnings $(LDOPTS))
218 ifneq ($(MUDFLAP),0)
219 LIBS +=         -lmudflapth
220 endif
221
222 ifeq ($(OS),linux)
223   ifneq ($(SANITIZE_ADDRESS),0)
224     CFLAGS  += -fsanitize=address -fno-omit-frame-pointer
225     LDFLAGS += -fsanitize=address -static-libasan
226   endif
227 endif
228
229 # extra options from the outside
230 CPPFLAGS +=     $(EXTRA_CPPFLAGS)
231
232
233 # 32/64 cross compilation
234 ifdef M32
235 CFLAGS +=       -m32
236 LDFLAGS +=      -m32
237 endif
238 ifdef M64
239 CFLAGS +=       -m64
240 LDFLAGS +=      -m64
241 endif
242
243
244 ###################################
245 #
246 # options to save space on small systems
247
248 # we have plugins with the old interface
249 #CPPFLAGS +=    -DSUPPORT_OLD_PLUGIN_VERSIONS=1
250
251 # use the new fixed point math stuff
252 CPPFLAGS +=     -DUSE_FPM
253
254 # search sources and headers in current dir and in src/
255 SRCS +=         $(wildcard src/common/*.c src/*.c *.c)
256 HDRS +=         $(wildcard src/common/*.h src/*.h *.h)
257
258 ifeq ($(OS),UNKNOWN)
259 all: help
260 else
261 # include OS specifics
262 all: default_target
263 include $(TOPDIR)/make/Makefile.$(OS)
264 endif
265
266 # one object for each source file
267 OBJS +=         $(SRCS:%.c=%.o)
268
269 # debugging or non-debugging flags
270 ifeq ($(DEBUG),1)
271 CPPFLAGS +=     -DDEBUG
272 CFLAGS +=       -ggdb
273 ifeq ($(OS),linux)
274 LDFLAGS  += -rdynamic
275 endif
276 else
277 CPPFLAGS +=     -DNDEBUG
278 ifeq ($(OPTIMIZE),)
279 OPTIMIZE += -O2 -D_FORTIFY_SOURCE=2 
280 endif
281 endif
282 ifeq ($(NO_DEBUG_MESSAGES),1)
283 CPPFLAGS +=     -DNODEBUG
284 endif
285
286 # preserve debugging info when NOSTRIP is set
287 ifneq ($(NOSTRIP),0)
288 CFLAGS +=       -ggdb
289 endif
290
291 ifeq ($(OS),linux)
292 CPPFLAGS+=-DHTTPINFO_PUD -I$(TOPDIR)/lib -I$(TOPDIR)/lib/pud/nmealib/include -I$(TOPDIR)/lib/pud/wireformat/include
293 endif
294
295 # a make function to quote "/" and "."
296 quote = $(subst .,\.,$(subst /,\/,$1))
297
298 # fully automatic and working dependency generation
299 %.d: %.c
300         $(MAKECMDPREFIX)$(filter-out $(CCACHE),$(CC)) -M $(strip $(CPPFLAGS)) "$<" | sed -e '1s/\($(call quote,$(*F))\.o\)[ :]*/$(call quote,$(*D)/\1 $@: Makefile $(TOPDIR)$(if $(TOPDIR),/)Makefile.inc) /g' >"$@"
301
302 %.o: %.c
303 ifeq ($(VERBOSE),0)
304         @echo "[CC] $<"
305 endif
306         $(MAKECMDPREFIX)$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
307
308 # we always need the includes and defines
309 # for legacy since now
310 CPPFLAGS += $(INCLUDES) $(DEFINES)
311 ifneq ($(INCLUDES),)
312 $(warning Use CPPFLAGS instead of INCLUDES for -I)
313 endif
314 ifneq ($(DEFINES),)
315 $(warning Use CPPFLAGS instead of DEFINES for -D)
316 endif
317
318 TAGFILE ?=      src/TAGS
319
320 help:
321         @echo 
322         @echo '***** olsr.org olsr daemon Make ****'
323         @echo ' Automatic detection of your OS     '
324         @echo ' failed!                            '
325         @echo ' You can provide a valid target OS  '
326         @echo ' by setting the OS variable! Valid  '
327         @echo ' target OSes are:                   '
328         @echo ' ---------------------------------  '
329         @echo ' linux   - GNU/Linux                '
330         @echo ' win32   - MS Windows               '
331         @echo ' fbsd    - FreeBSD                  '
332         @echo ' nbsd    - NetBSD                   '
333         @echo ' obsd    - OpenBSD                  '
334         @echo ' osx     - Mac OS X                 '
335         @echo ' android - Android                  '
336         @echo ' ---------------------------------  '
337         @echo ' Example - build for windows:       '
338         @echo ' make OS=win32                      '
339         @echo ' If you are developing olsrd code,  '
340         @echo ' exporting the OS variable might    '
341         @echo ' be a good idea :-) Have fun!       '
342         @echo '************************************'
343         @echo
344
345 ifeq ($(filter clean% %clean, $(MAKECMDGOALS)),)
346 # include dependencies - we don't need any dependency for a everytime generated files
347 -include $(filter-out src/builddata.%,$(SRCS:%.c=%.d))
348 endif
349
350 # Local Variables:
351 # mode: makefile
352 # End: