1 # Makefile for the BIRD Internet Routing Daemon
2 # (c) 1999--2000 Martin Mares <mj@ucw.cz>
3 # (c) 2016 Jan Moskyto Matejka <mq@ucw.cz>
5 # Disable build-in rules
9 CPPFLAGS
=-I
$(objdir
) -I
$(srcdir) @CPPFLAGS@
10 CFLAGS
=$(CPPFLAGS
) @CFLAGS@
13 BISONFLAGS
=@BISONFLAGS@
15 DAEMON_LIBS
=@DAEMON_LIBS@
16 CLIENT_LIBS
=@CLIENT_LIBS@
23 INSTALL_PROGRAM
=@INSTALL_PROGRAM@
24 INSTALL_DATA
=@INSTALL_DATA@
26 client
=$(addprefix $(exedir
)/,@CLIENT@
)
29 PROTO_BUILD
:= $(protocols
) dev kif krt
32 exec_prefix=@
exec_prefix@
35 sysconfdir
=@sysconfdir@
36 localstatedir
=@localstatedir@
37 runstatedir
=@runstatedir@
44 git-label
:=$(strip $(shell cd
$(srcdir) && [ "$$(git rev-parse --show-toplevel)" = "$$(readlink -f .)" ] && git describe
--always
--dirty
=-x
2>/dev
/null
))
46 CFLAGS
+= -DGIT_LABEL
="$(git-label)"
50 objdir
:= $(realpath .
)
62 CFLAGS
+= -fdiagnostics-color
=always
66 docgoals
:= docs userdocs progdocs
67 testgoals
:= check test tests tests_run
68 cleangoals
:= clean distclean testsclean
69 .PHONY
: all daemon cli
$(docgoals
) $(testgoals
) $(cleangoals
) tags cscope prepare
76 $(daemon
): LIBS
+= $(DAEMON_LIBS
)
79 dirs
:= client conf doc
filter lib nest
test $(addprefix proto
/,$(protocols
)) @sysdep_dirs@
81 # conf/Makefile declarations needed for all other modules
82 conf-lex-targets
:= $(addprefix $(objdir
)/conf
/,cf-lex.o
)
83 conf-y-targets
:= $(addprefix $(objdir
)/conf
/,cf-parse.y keywords.h commands.h
)
84 cf-local
= $(conf-y-targets
): $(s
)config.Y
86 src-o-files
= $(patsubst %.c
,$(o
)%.o
,$(src
))
87 tests-target-files
= $(patsubst %.c
,$(o
)%,$(tests_src
))
89 all-daemon
= $(daemon
): $(obj
)
90 all-client
= $(client
): $(obj
)
92 s
= $(dir $(lastword
$(MAKEFILE_LIST
)))
96 o
= $(patsubst $(srcdir)%,$(objdir
)%,$(s
))
101 rm -f
$(addprefix $(o
),$(1))
104 clean = $(eval
$(call clean_in
,$(1)))
106 # Include main Makefiles of the directories
107 include $(addsuffix /Makefile
,$(addprefix $(srcdir)/,$(dirs
)))
111 $(objdir
)/%.o
: $(srcdir)/%.c | prepare
112 $(E
)echo CC
-o
$@
-c
$<
113 $(Q
)$(CC
) $(CFLAGS
) -MMD
-MP
-o
$@
-c
$<
115 $(objdir
)/%.o
: $(objdir
)/%.c | prepare
116 $(E
)echo CC
-o
$@
-c
$<
117 $(Q
)$(CC
) $(CFLAGS
) -MMD
-MP
-o
$@
-c
$<
119 # Debug: Preprocessed source rules
120 $(objdir
)/%.E
: $(srcdir)/%.c | prepare
121 $(E
)echo CC
-o
$@
-E
$<
122 $(Q
)$(CC
) $(CFLAGS
) -MMD
-MP
-o
$@
-E
$<
124 $(objdir
)/%.E
: $(objdir
)/%.c | prepare
125 $(E
)echo CC
-o
$@
-E
$<
126 $(Q
)$(CC
) $(CFLAGS
) -MMD
-MP
-o
$@
-E
$<
128 # Debug: Assembler object rules
129 $(objdir
)/%.S
: $(srcdir)/%.c | prepare
130 $(E
)echo CC
-o
$@
-S
$<
131 $(Q
)$(CC
) $(CFLAGS
) -MMD
-MP
-o
$@
-S
$<
133 $(objdir
)/%.S
: $(objdir
)/%.c | prepare
134 $(E
)echo CC
-o
$@
-S
$<
135 $(Q
)$(CC
) $(CFLAGS
) -MMD
-MP
-o
$@
-S
$<
137 # Finally include the computed dependencies:
138 DEPS
= $(shell find
$(objdir
) -name
'*.d')
140 # ## if there is at least one non-clean goal
141 ifneq ($(filter-out $(cleangoals
),$(MAKECMDGOALS
)),)
145 # ## if the implicit goal is called
146 ifeq ($(MAKECMDGOALS
),)
150 # Rule for pre-generating all generated includables
151 # before compiling any C file
152 prepare
: $(objdir
)/sysdep
/paths.h |
$(objdir
)/.dir-stamp
154 $(objdir
)/.dir-stamp
: Makefile
155 $(E
)echo MKDIR
-p
$(addprefix $(objdir
)/,$(dirs
) doc
)
156 $(Q
)mkdir
-p
$(addprefix $(objdir
)/,$(dirs
) doc
)
160 $(E
)echo LD
$(LDFLAGS
) -o
$@
$^
$(LIBS
)
161 $(Q
)$(CC
) $(LDFLAGS
) -o
$@
$^
$(LIBS
)
163 $(objdir
)/sysdep
/paths.h
: Makefile
165 $(Q
)echo
>$@
"/* Generated by Makefile, don't edit manually! */"
166 $(Q
)echo
>>$@
"#define PATH_CONFIG_FILE \"@CONFIG_FILE@\""
167 $(Q
)echo
>>$@
"#define PATH_CONTROL_SOCKET \"@CONTROL_SOCKET@\""
168 $(Q
)if
test -n
"@iproutedir@" ; then echo
>>$@
"#define PATH_IPROUTE_DIR \"@iproutedir@\"" ; fi
172 tests_targets_ok
= $(addsuffix .ok
,$(tests_targets
))
174 $(tests_targets
): %: %.o
$(tests_objs
) | prepare
175 $(E
)echo LD
$(LDFLAGS
) -o
$@
$< "..." $(LIBS
)
176 $(Q
)$(CC
) $(LDFLAGS
) -o
$@
$^
$(LIBS
)
178 # Hack to avoid problems with tests linking everything
179 $(tests_targets
): LIBS
+= $(DAEMON_LIBS
)
181 $(tests_targets_ok
): %.ok
: %
182 $(Q
)$* 2>/dev
/null
&& touch
$*.ok
184 test: testsclean
check
185 check: tests tests_run
186 tests
: $(tests_targets
)
187 tests_run
: $(tests_targets_ok
)
189 STATIC_CHECKERS_ENABLE
:= nullability.NullableDereferenced nullability.NullablePassedToNonnull nullability.NullableReturnedFromNonnull optin.portability.UnixAPI valist.CopyToSelf valist.Uninitialized valist.Unterminated
190 STATIC_CHECKERS_DISABLE
:= deadcode.DeadStores
191 STATIC_SCAN_FLAGS
:= -o
$(objdir
)/static-scan
/ $(addprefix -enable-checker
,$(STATIC_CHECKERS_ENABLE
)) $(addprefix -disable-checker
,$(STATIC_CHECKERS_DISABLE
))
194 $(E
)echo Running static code analysis
196 $(Q
)scan-build
$(STATIC_SCAN_FLAGS
) $(MAKE
) -$(MAKEFLAGS
)
199 cd
$(srcdir) ; etags
-lc
`find $(dirs) -name '*.[chY]'`
202 cd
$(srcdir) ; find
$(dirs
) -name
'*.[chY]' > cscope.files
; cscope
-b
207 $(INSTALL
) -d
$(DESTDIR
)/$(sbindir
) $(DESTDIR
)/$(sysconfdir
) $(DESTDIR
)/$(runstatedir
)
208 for BIN in bird @CLIENT@
; do \
209 $(INSTALL_PROGRAM
) $(exedir
)/$$BIN $(DESTDIR
)/$(sbindir
)/$$BIN ; \
211 if
! test -f
$(DESTDIR
)/@CONFIG_FILE@
; then \
212 $(INSTALL_DATA
) $(srcdir)/doc
/bird.conf.example
$(DESTDIR
)/@CONFIG_FILE@
; \
214 echo
"Not overwriting old bird.conf" ; \
218 $(INSTALL
) -d
$(DESTDIR
)/$(docdir
)
219 $(INSTALL_DATA
) $(objdir
)/doc
/{bird
,prog
}{,-*}.html
$(DESTDIR
)/$(docdir
)/
223 rm -f
$(objdir
)/sysdep
/paths.h
$(objdir
)/nest
/proto-build.c
224 rm -f
$(addprefix $(exedir
)/,bird birdc birdcl
)
225 find
$(objdir
) -name
"*.[od]" -exec
rm -f
'{}' '+'
228 rm -f
$(tests_targets_ok
)
233 rm -f config.log config.status configure Makefile
237 rm -f config.log config.status configure Makefile