784143cdeec6f8dd61d752a05fa97094354b307d
[olsrd.git] / Makefile.inc
1 # programs
2 CCACHE ?=       $(shell which ccache 2> /dev/null)
3 ifeq ($(origin CC),default)
4 CC =            $(CCACHE) gcc
5 else
6 CC ?=           $(CCACHE) gcc
7 endif
8 STRIP ?=        strip
9 BISON ?=        bison
10 FLEX ?=         flex
11 TAGCMD ?=       etags
12
13 # target directories and names
14 DESTDIR ?=
15 SBINDIR ?= $(DESTDIR)/usr/sbin
16 ETCDIR  ?= $(DESTDIR)/etc
17 LIBDIR  ?= $(DESTDIR)/usr/lib
18 DOCDIR  ?= $(DESTDIR)/usr/share/doc
19 MANDIR  ?= $(DESTDIR)/usr/share/man
20 EXENAME ?= olsrd
21 CFGNAME ?= $(EXENAME).conf
22 CFGFILE ?= $(ETCDIR)/$(CFGNAME)
23
24 CPPFLAGS =      -Isrc -I$(TOPDIR)/src
25
26 # add gcc warnings and optimizations if CFLAGS not set
27 ifndef CFLAGS
28 ifndef WARNINGS
29 WARNINGS +=     -Wall
30 WARNINGS +=     -Wextra
31 WARNINGS +=     -Wold-style-definition
32 WARNINGS +=     -Wdeclaration-after-statement
33 WARNINGS +=     -Wmissing-prototypes
34 WARNINGS +=     -Wstrict-prototypes
35 WARNINGS +=     -Wmissing-declarations
36 WARNINGS +=     -Wsign-compare
37 WARNINGS +=     -Waggregate-return
38 WARNINGS +=     -Wmissing-noreturn
39 WARNINGS +=     -Wmissing-format-attribute
40 WARNINGS +=     -Wno-multichar
41 WARNINGS +=     -Wno-deprecated-declarations
42 #WARNINGS +=    -Wredundant-decls
43 WARNINGS +=     -Wnested-externs
44 # Alas, htons() triggers this so we can't seriously activate it.
45 #WARNINGS +=    -Wunreachable-code
46 WARNINGS +=     -Winline
47 WARNINGS +=     -Wdisabled-optimization
48 #WARNINGS +=    -Werror
49 WARNINGS +=     -finline-functions-called-once
50 WARNINGS +=     -fearly-inlining
51 # we have small inline functions in src/lq_route.c which should always be inlined
52 WARNINGS +=     -finline-limit=50
53 WARNINGS :=     $(shell CC="$(CC)" $(TOPDIR)/gcc-warnings $(WARNINGS))
54 endif
55 CFLAGS +=       $(WARNINGS)
56 CFLAGS +=       -O2
57 #CFLAGS +=      -g
58 CFLAGS +=       $(EXTRA_CFLAGS)
59
60 # Must be specified along with -lpthread on linux
61 CPPFLAGS +=     $(OS_CFLAG_PTHREAD)
62 endif
63
64 ifdef OLSRD_PLUGIN
65 # c and ld flags for libraries (plugins)
66 CPPFLAGS +=     -DOLSR_PLUGIN
67 LDFLAGS +=      -shared -Wl,-soname,$(PLUGIN_NAME)
68 LDFLAGS +=      -Wl,--version-script=version-script.txt 
69 else
70 # c and ld flags for main
71 LDFLAGS +=      -Wl,-export-dynamic 
72 endif
73
74 ###################################
75 #
76 # options to save space on small systems
77
78 # we have plugins with the old interface
79 CPPFLAGS +=     -DSUPPORT_OLD_PLUGIN_VERSIONS=1
80
81 # search sources and headers in current dir and in src/
82 SRCS +=         $(wildcard src/*.c *.c)
83 HDRS +=         $(wildcard src/*.h *.h)
84
85 # OS detection
86 ifeq ($(OS),Windows_NT)
87 OS := win32
88 endif
89 ifeq ($(OS),)
90 OS := $(shell sh $(TOPDIR)/make/guess_os.sh)
91 endif
92 ifeq ($(OS),UNKNOWN)
93 all: help
94 else
95 # include OS specifics
96 all: default_target
97 include $(TOPDIR)/make/Makefile.$(OS)
98 endif
99
100 # one object for each source file
101 OBJS +=         $(SRCS:%.c=%.o)
102
103 # debugging or non-debugging flags
104 ifdef DEBUG
105 CPPFLAGS +=     -DDEBUG
106 endif
107 ifdef NODEBUG
108 CPPFLAGS +=     -DNODEBUG
109 endif
110
111 # fully automatic and working dependency generation
112 %.d: %.c
113         @$(CC) -M $(CPPFLAGS) "$<" | sed -e '1s|\($(*F)\)\.o[ :]*|$(*D)/\1.o $@: Makefile $(TOPDIR)$(if $(TOPDIR),/)Makefile.inc |g' >"$@"
114
115 # we always need the includes and defines
116 # for legacy since now
117 CPPFLAGS += $(INCLUDES) $(DEFINES)
118 ifneq ($(INCLUDES),)
119 $(warning Use CPPFLAGS instead of INCLUDES for -I)
120 endif
121 ifneq ($(DEFINES),)
122 $(warning Use CPPFLAGS instead of DEFINES for -D)
123 endif
124
125 TAGFILE ?=      src/TAGS
126
127 help:
128         @echo 
129         @echo '***** olsr.org olsr daemon Make ****'
130         @echo ' Automatic detection of your OS     '
131         @echo ' failed!                            '
132         @echo ' You can provide a valid target OS  '
133         @echo ' by setting the OS variable! Valid  '
134         @echo ' target OSes are:                   '
135         @echo ' ---------------------------------  '
136         @echo ' linux - GNU/Linux                  '
137         @echo ' win32 - MS Windows                 '
138         @echo ' fbsd  - FreeBSD                    '
139         @echo ' nbsd  - NetBSD                     '
140         @echo ' obsd  - OpenBSD                    '
141         @echo ' osx   - Mac OS X                   '
142         @echo ' ---------------------------------  '
143         @echo ' Example - build for windows:       '
144         @echo ' make OS=win32                      '
145         @echo ' If you are developing olsrd code,  '
146         @echo ' exporting the OS variable might    '
147         @echo ' be a good idea :-) Have fun!       '
148         @echo '************************************'
149         @echo
150
151 ifeq ($(filter clean% %clean, $(MAKECMDGOALS)),)
152 # include dependencies
153 -include $(SRCS:%.c=%.d)
154 endif
155
156 # Local Variables:
157 # mode: makefile
158 # End: