* avoid as much code and linker information as possible
[olsrd.git] / Makefile.inc
1 # programs
2 CCACHE ?=       $(shell sh -c "type -path ccache")
3 CC ?=           $(CCACHE) gcc
4 STRIP ?=        strip
5 BISON ?=        bison
6 FLEX ?=         flex
7 TAGCMD ?=       etags
8
9 # target directories and names
10 DESTDIR ?=
11 SBINDIR ?= $(DESTDIR)/usr/sbin
12 ETCDIR  ?= $(DESTDIR)/etc
13 LIBDIR  ?= $(DESTDIR)/usr/lib
14 DOCDIR  ?= $(DESTDIR)/usr/share/doc
15 MANDIR  ?= $(DESTDIR)/usr/share/man
16 CFGFILE ?= $(ETCDIR)/olsrd.conf
17 EXENAME ?= olsrd
18
19 INCLUDES =      -Isrc -I$(TOPDIR)/src 
20
21 GCC_VERSION := $(shell v=$$($(CC) -dumpversion); echo $${v//./ })
22
23 # add gcc warnings and optimizations if CFLAGS not set
24 ifndef CFLAGS
25 CFLAGS +=       -Wall
26 # gcc-3.3.5 on Debian sarge doesn't know the following warnings
27 ifneq ("$(GCC_VERSION)","3 3 5")
28 CFLAGS +=       -Wextra
29 CFLAGS +=       -Wold-style-definition
30 CFLAGS +=       -Wdeclaration-after-statement
31 endif
32 CFLAGS +=       -Wmissing-prototypes
33 CFLAGS +=       -Wstrict-prototypes
34 CFLAGS +=       -Wmissing-declarations
35 CFLAGS +=       -Wsign-compare
36 CFLAGS +=       -Waggregate-return
37 CFLAGS +=       -Wmissing-noreturn
38 CFLAGS +=       -Wmissing-format-attribute
39 CFLAGS +=       -Wno-multichar
40 CFLAGS +=       -Wno-deprecated-declarations
41 #CFLAGS +=      -Wredundant-decls
42 CFLAGS +=       -Wnested-externs
43 #CFLAGS +=      -Wunreachable-code
44 CFLAGS +=       -Winline
45 CFLAGS +=       -Wdisabled-optimization
46 CFLAGS +=       -O2
47 CFLAGS +=       -g
48 #CFLAGS +=      -Werror
49 endif
50
51 ifdef OLSRD_PLUGIN
52 # c and ld flags for libraries (plugins)
53 CFLAGS +=       -DOLSR_PLUGIN
54 LDFLAGS +=      -shared -Wl,-soname,$(PLUGIN_NAME)
55 LDFLAGS +=      -Wl,--version-script=version-script.txt 
56 else
57 # c and ld flags for main
58 LDFLAGS +=      -Wl,-export-dynamic 
59 endif
60
61 # search sources and headers in current dir and in src/
62 SRCS =          $(wildcard src/*.c)
63 SRCS +=         $(wildcard *.c)
64 HDRS =          $(wildcard src/*.h)
65 HDRS +=         $(wildcard *.h)
66
67 all: default_target
68
69 # OS detection
70 ifeq ($(OS),)
71 OS :=           $(shell sh $(TOPDIR)/make/guess_os.sh)
72 endif
73 ifeq ($(OS),UNKNOWN)
74 all: help
75 else
76 # include OS specifics
77 include $(TOPDIR)/make/Makefile.$(OS)
78 all: default_target
79 endif
80
81 # one object for each source file
82 OBJS +=         $(patsubst %.c,%.o,$(SRCS))
83
84 # debugging or non-debugging flags
85 ifdef DEBUG
86 CFLAGS +=       -DDEBUG
87 endif
88 ifdef NODEBUG
89 CFLAGS +=       -DNODEBUG
90 endif
91
92 # let gcc generate dependency information (*.d)
93 CFLAGS +=       -MD
94
95 # we always need the includes and defines
96 CFLAGS += $(INCLUDES) $(DEFINES)
97
98 TAGFILE ?=      src/TAGS
99
100 help:
101         @echo 
102         @echo '***** olsr.org olsr daemon Make ****'
103         @echo ' Automatic detection of your OS     '
104         @echo ' failed!                            '
105         @echo ' You can provide a valid target OS  '
106         @echo ' by setting the OS variable! Valid  '
107         @echo ' target OSes are:                   '
108         @echo ' ---------------------------------  '
109         @echo ' linux - GNU/Linux                  '
110         @echo ' win32 - MS Windows                 '
111         @echo ' fbsd  - FreeBSD                    '
112         @echo ' nbsd  - NetBSD                     '
113         @echo ' obsd  - OpenBSD                    '
114         @echo ' osx   - Mac OS X                   '
115         @echo ' ---------------------------------  '
116         @echo ' Example - build for windows:       '
117         @echo ' make OS=win32                      '
118         @echo ' If you are developing olsrd code,  '
119         @echo ' exporting the OS variable might    '
120         @echo ' be a good idea :-) Have fun!       '
121         @echo '************************************'
122         @echo
123
124 # include dependencies
125 -include $(SRCS:%.c=%.d)
126
127 # Local Variables:
128 # mode: makefile
129 # End: