mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-11-08 04:08:42 +00:00
8d186b2a22
User can specify list of route attributes in the configuration file and run route aggregation on the export side of the pipe protocol. Routes are sorted and for every group of equivalent routes new route is created and exported to the routing table. It is also possible to specify filter which will run for every route before aggregation. Furthermore, it will be possible to set attributes of new routes according to attributes of the aggregated routes. This is a work in progress.
252 lines
6.8 KiB
Makefile
252 lines
6.8 KiB
Makefile
# Makefile for the BIRD Internet Routing Daemon
|
|
# (c) 1999--2000 Martin Mares <mj@ucw.cz>
|
|
# (c) 2016 Jan Moskyto Matejka <mq@ucw.cz>
|
|
|
|
# Disable build-in rules
|
|
MAKEFLAGS += -r
|
|
|
|
# Variable definitions
|
|
CPPFLAGS=-I$(objdir) -I$(srcdir) @CPPFLAGS@
|
|
CFLAGS=$(CPPFLAGS) @CFLAGS@
|
|
LDFLAGS=@LDFLAGS@
|
|
M4FLAGS=@M4FLAGS@
|
|
BISONFLAGS=@BISONFLAGS@
|
|
LIBS=@LIBS@
|
|
DAEMON_LIBS=@DAEMON_LIBS@
|
|
CLIENT_LIBS=@CLIENT_LIBS@
|
|
CC=@CC@
|
|
M4=@M4@
|
|
BISON=@BISON@
|
|
FLEX=@FLEX@
|
|
RANLIB=@RANLIB@
|
|
INSTALL=@INSTALL@
|
|
INSTALL_PROGRAM=@INSTALL_PROGRAM@
|
|
INSTALL_DATA=@INSTALL_DATA@
|
|
|
|
STAYRTR_BINARY=@STAYRTR_BINARY@
|
|
NETLAB_DATA_SUFFIX=v2
|
|
|
|
client=$(addprefix $(exedir)/,@CLIENT@)
|
|
daemon=$(exedir)/bird
|
|
protocols=@protocols@
|
|
PROTO_BUILD := $(protocols) dev kif krt
|
|
|
|
prefix=@prefix@
|
|
exec_prefix=@exec_prefix@
|
|
bindir=@bindir@
|
|
sbindir=@sbindir@
|
|
sysconfdir=@sysconfdir@
|
|
localstatedir=@localstatedir@
|
|
runstatedir=@runstatedir@
|
|
docdir=@prefix@/doc
|
|
|
|
srcdir := @srcdir@
|
|
objdir := @objdir@
|
|
exedir := @exedir@
|
|
|
|
git-label:=$(strip $(shell cd $(srcdir) && [ "$$(git rev-parse --show-toplevel)" = "$$(readlink -f .)" ] && git describe --always --dirty=-x 2>/dev/null))
|
|
ifneq ($(git-label),)
|
|
CFLAGS += -DGIT_LABEL="$(git-label)"
|
|
endif
|
|
|
|
ifeq ($(objdir),.)
|
|
objdir := $(realpath .)
|
|
endif
|
|
|
|
ifeq ($(VERBOSE),)
|
|
E:=@
|
|
Q:=@
|
|
else
|
|
E:=@\#
|
|
Q:=
|
|
endif
|
|
|
|
ifneq ($(COLOR),)
|
|
CFLAGS += -fdiagnostics-color=always
|
|
endif
|
|
|
|
# Meta rules
|
|
docgoals := docs userdocs progdocs
|
|
testgoals := check test tests tests_run
|
|
cleangoals := clean distclean testsclean
|
|
.PHONY: all daemon cli $(docgoals) $(testgoals) $(cleangoals) tags cscope prepare
|
|
|
|
all: daemon cli
|
|
|
|
daemon: $(daemon)
|
|
cli: $(client)
|
|
|
|
$(daemon): LIBS += $(DAEMON_LIBS)
|
|
|
|
# Include directories
|
|
dirs := client conf doc filter lib nest test $(addprefix proto/,$(protocols)) @sysdep_dirs@
|
|
|
|
# conf/Makefile declarations needed for all other modules
|
|
conf-lex-targets := $(addprefix $(objdir)/conf/,cf-lex.o)
|
|
conf-y-targets := $(addprefix $(objdir)/conf/,cf-parse.y keywords.h commands.h)
|
|
cf-local = $(conf-y-targets): $(s)config.Y
|
|
|
|
src-o-files = $(patsubst %.c,$(o)%.o,$(src))
|
|
tests-target-files = $(patsubst %.c,$(o)%,$(tests_src))
|
|
|
|
all-daemon = $(daemon): $(obj)
|
|
all-client = $(client): $(obj)
|
|
|
|
s = $(dir $(lastword $(MAKEFILE_LIST)))
|
|
ifeq ($(srcdir),.)
|
|
o = $(objdir)/$(s)
|
|
else
|
|
o = $(patsubst $(srcdir)%,$(objdir)%,$(s))
|
|
endif
|
|
|
|
define clean_in =
|
|
clean::
|
|
rm -f $(addprefix $(o),$(1))
|
|
endef
|
|
|
|
clean = $(eval $(call clean_in,$(1)))
|
|
|
|
# Include main Makefiles of the directories
|
|
include $(addsuffix /Makefile,$(addprefix $(srcdir)/,$(dirs)))
|
|
|
|
# Generic rules
|
|
# Object file rules
|
|
$(objdir)/%.o: $(srcdir)/%.c | prepare
|
|
$(E)echo CC -o $@ -c $<
|
|
$(Q)$(CC) $(CFLAGS) -MMD -MP -o $@ -c $<
|
|
|
|
$(objdir)/%.o: $(objdir)/%.c | prepare
|
|
$(E)echo CC -o $@ -c $<
|
|
$(Q)$(CC) $(CFLAGS) -MMD -MP -o $@ -c $<
|
|
|
|
# Debug: Preprocessed source rules
|
|
$(objdir)/%.E: $(srcdir)/%.c | prepare
|
|
$(E)echo CC -o $@ -E $<
|
|
$(Q)$(CC) $(CFLAGS) -MMD -MP -o $@ -E $<
|
|
|
|
$(objdir)/%.E: $(objdir)/%.c | prepare
|
|
$(E)echo CC -o $@ -E $<
|
|
$(Q)$(CC) $(CFLAGS) -MMD -MP -o $@ -E $<
|
|
|
|
# Debug: Assembler object rules
|
|
$(objdir)/%.S: $(srcdir)/%.c | prepare
|
|
$(E)echo CC -o $@ -S $<
|
|
$(Q)$(CC) $(CFLAGS) -MMD -MP -o $@ -S $<
|
|
|
|
$(objdir)/%.S: $(objdir)/%.c | prepare
|
|
$(E)echo CC -o $@ -S $<
|
|
$(Q)$(CC) $(CFLAGS) -MMD -MP -o $@ -S $<
|
|
|
|
# Finally include the computed dependencies:
|
|
DEPS = $(shell find $(objdir) -name '*.d')
|
|
|
|
# ## if there is at least one non-clean goal
|
|
ifneq ($(filter-out $(cleangoals),$(MAKECMDGOALS)),)
|
|
-include $(DEPS)
|
|
endif
|
|
|
|
# ## if the implicit goal is called
|
|
ifeq ($(MAKECMDGOALS),)
|
|
-include $(DEPS)
|
|
endif
|
|
|
|
# Rule for pre-generating all generated includables
|
|
# before compiling any C file
|
|
prepare: $(objdir)/sysdep/paths.h | $(objdir)/.dir-stamp
|
|
|
|
$(objdir)/.dir-stamp: Makefile
|
|
$(E)echo MKDIR -p $(addprefix $(objdir)/,$(dirs) doc)
|
|
$(Q)mkdir -p $(addprefix $(objdir)/,$(dirs) doc)
|
|
$(Q)touch $@
|
|
|
|
$(client) $(daemon):
|
|
$(E)echo LD $(LDFLAGS) -o $@ $^ $(LIBS)
|
|
$(Q)$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
|
|
|
|
$(objdir)/sysdep/paths.h: Makefile
|
|
$(E)echo GEN $@
|
|
$(Q)echo >$@ "/* Generated by Makefile, don't edit manually! */"
|
|
$(Q)echo >>$@ "#define PATH_CONFIG_FILE \"@CONFIG_FILE@\""
|
|
$(Q)echo >>$@ "#define PATH_CONTROL_SOCKET \"@CONTROL_SOCKET@\""
|
|
$(Q)if test -n "@iproutedir@" ; then echo >>$@ "#define PATH_IPROUTE_DIR \"@iproutedir@\"" ; fi
|
|
|
|
# Unit tests rules
|
|
|
|
tests_targets_ok = $(addsuffix .ok,$(tests_targets))
|
|
|
|
$(tests_targets): %: %.o $(tests_objs) | prepare
|
|
$(E)echo LD $(LDFLAGS) -o $@ $< "..." $(LIBS)
|
|
$(Q)$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
|
|
|
|
# Hack to avoid problems with tests linking everything
|
|
$(tests_targets): LIBS += $(DAEMON_LIBS)
|
|
|
|
$(tests_targets_ok): %.ok: %
|
|
$(Q)$* 2>/dev/null && touch $*.ok
|
|
|
|
test: testsclean check
|
|
check: tests tests_run
|
|
tests: $(tests_targets)
|
|
tests_run: $(tests_targets_ok)
|
|
|
|
aux-test-prepare: all
|
|
$(E)echo Preparing netlab test suite ...
|
|
$(Q)cd $(srcdir) && git submodule update --init --force --checkout aux-tools
|
|
$(Q)cd $(srcdir)/aux-tools && git clean -fxdq || true
|
|
$(Q)cd $(srcdir)/aux-tools/netlab/common && ln $(shell readlink -f $(exedir)/bird) && ln $(shell readlink -f $(exedir)/birdc)
|
|
$(Q)cd $(srcdir)/aux-tools/netlab/common && ln -s $(STAYRTR_BINARY) stayrtr
|
|
$(E)echo Netlab test suite prepared.
|
|
|
|
-include $(srcdir)/aux-tools/netlab/tests-$(NETLAB_DATA_SUFFIX).mk
|
|
|
|
STATIC_CHECKERS_ENABLE := nullability.NullableDereferenced nullability.NullablePassedToNonnull nullability.NullableReturnedFromNonnull optin.portability.UnixAPI valist.CopyToSelf valist.Uninitialized valist.Unterminated
|
|
STATIC_CHECKERS_DISABLE := deadcode.DeadStores
|
|
STATIC_SCAN_FLAGS := -o $(objdir)/static-scan/ $(addprefix -enable-checker ,$(STATIC_CHECKERS_ENABLE)) $(addprefix -disable-checker ,$(STATIC_CHECKERS_DISABLE))
|
|
|
|
static-scan:
|
|
$(E)echo Running static code analysis
|
|
$(Q)$(MAKE) clean
|
|
$(Q)scan-build $(STATIC_SCAN_FLAGS) $(MAKE) -$(MAKEFLAGS)
|
|
|
|
tags:
|
|
cd $(srcdir) ; etags -lc `find $(dirs) -name '*.[chY]'`
|
|
|
|
cscope:
|
|
cd $(srcdir) ; find $(dirs) -name '*.[chY]' > cscope.files ; cscope -b
|
|
|
|
# Install
|
|
|
|
install: all
|
|
$(INSTALL) -d $(DESTDIR)/$(sbindir) $(DESTDIR)/$(sysconfdir) $(DESTDIR)/$(runstatedir)
|
|
for BIN in bird @CLIENT@ ; do \
|
|
$(INSTALL_PROGRAM) $(exedir)/$$BIN $(DESTDIR)/$(sbindir)/$$BIN ; \
|
|
done
|
|
if ! test -f $(DESTDIR)/@CONFIG_FILE@ ; then \
|
|
$(INSTALL_DATA) $(srcdir)/doc/bird.conf.example $(DESTDIR)/@CONFIG_FILE@ ; \
|
|
else \
|
|
echo "Not overwriting old bird.conf" ; \
|
|
fi
|
|
|
|
install-docs:
|
|
$(INSTALL) -d $(DESTDIR)/$(docdir)
|
|
$(INSTALL_DATA) $(objdir)/doc/{bird,prog}{,-*}.html $(DESTDIR)/$(docdir)/
|
|
|
|
# Cleanup
|
|
clean::
|
|
rm -f $(objdir)/sysdep/paths.h $(objdir)/nest/proto-build.c
|
|
rm -f $(addprefix $(exedir)/,bird birdc birdcl)
|
|
find $(objdir) -name "*.[od]" -exec rm -f '{}' '+'
|
|
|
|
testsclean:
|
|
rm -f $(tests_targets_ok)
|
|
|
|
ifeq ($(objdir),obj)
|
|
distclean: clean
|
|
rm -rf $(objdir)
|
|
rm -f config.log config.status configure Makefile
|
|
else
|
|
distclean: clean
|
|
rm -rf * .dir-stamp
|
|
rm -f config.log config.status configure Makefile
|
|
endif
|