mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-16 14:34:04 +00:00

This adds the machinery for cross reference points (hence "xref") for things to be annotated with source code location or other metadata and/or to be uniquely identified and found at runtime or by dissecting executable files. The extraction tool to walk down an ELF file is done and working but needs some more cleanup and will be added in a separate commit. Signed-off-by: David Lamparter <equinox@diac24.net>
559 lines
12 KiB
Plaintext
559 lines
12 KiB
Plaintext
#
|
|
# libfrr
|
|
#
|
|
lib_LTLIBRARIES += lib/libfrr.la
|
|
lib_libfrr_la_LDFLAGS = -version-info 0:0:0 -Xlinker -e_libfrr_version
|
|
lib_libfrr_la_LIBADD = $(LIBCAP) $(UNWIND_LIBS) $(LIBYANG_LIBS) $(LUA_LIB) $(UST_LIBS) $(LIBM)
|
|
|
|
lib_libfrr_la_SOURCES = \
|
|
lib/agg_table.c \
|
|
lib/atomlist.c \
|
|
lib/bfd.c \
|
|
lib/buffer.c \
|
|
lib/checksum.c \
|
|
lib/command.c \
|
|
lib/command_graph.c \
|
|
lib/command_lex.l \
|
|
lib/command_match.c \
|
|
lib/command_parse.y \
|
|
lib/csv.c \
|
|
lib/debug.c \
|
|
lib/defaults.c \
|
|
lib/distribute.c \
|
|
lib/ferr.c \
|
|
lib/filter.c \
|
|
lib/filter_cli.c \
|
|
lib/filter_nb.c \
|
|
lib/frrcu.c \
|
|
lib/frrlua.c \
|
|
lib/frrscript.c \
|
|
lib/frr_pthread.c \
|
|
lib/frrstr.c \
|
|
lib/getopt.c \
|
|
lib/getopt1.c \
|
|
lib/grammar_sandbox.c \
|
|
lib/graph.c \
|
|
lib/hash.c \
|
|
lib/hook.c \
|
|
lib/id_alloc.c \
|
|
lib/if.c \
|
|
lib/if_rmap.c \
|
|
lib/imsg-buffer.c \
|
|
lib/imsg.c \
|
|
lib/jhash.c \
|
|
lib/json.c \
|
|
lib/keychain.c \
|
|
lib/ldp_sync.c \
|
|
lib/lib_errors.c \
|
|
lib/lib_vty.c \
|
|
lib/libfrr.c \
|
|
lib/libfrr_trace.c \
|
|
lib/linklist.c \
|
|
lib/link_state.c \
|
|
lib/log.c \
|
|
lib/log_filter.c \
|
|
lib/log_vty.c \
|
|
lib/md5.c \
|
|
lib/memory.c \
|
|
lib/mlag.c \
|
|
lib/module.c \
|
|
lib/mpls.c \
|
|
lib/srv6.c \
|
|
lib/network.c \
|
|
lib/nexthop.c \
|
|
lib/netns_linux.c \
|
|
lib/netns_other.c \
|
|
lib/nexthop_group.c \
|
|
lib/northbound.c \
|
|
lib/northbound_cli.c \
|
|
lib/northbound_db.c \
|
|
lib/ntop.c \
|
|
lib/openbsd-tree.c \
|
|
lib/pid_output.c \
|
|
lib/plist.c \
|
|
lib/prefix.c \
|
|
lib/privs.c \
|
|
lib/ptm_lib.c \
|
|
lib/pullwr.c \
|
|
lib/qobj.c \
|
|
lib/ringbuf.c \
|
|
lib/routemap.c \
|
|
lib/routemap_cli.c \
|
|
lib/routemap_northbound.c \
|
|
lib/sbuf.c \
|
|
lib/seqlock.c \
|
|
lib/sha256.c \
|
|
lib/sigevent.c \
|
|
lib/skiplist.c \
|
|
lib/sockopt.c \
|
|
lib/sockunion.c \
|
|
lib/spf_backoff.c \
|
|
lib/srcdest_table.c \
|
|
lib/stream.c \
|
|
lib/strlcat.c \
|
|
lib/strlcpy.c \
|
|
lib/systemd.c \
|
|
lib/table.c \
|
|
lib/termtable.c \
|
|
lib/thread.c \
|
|
lib/typerb.c \
|
|
lib/typesafe.c \
|
|
lib/vector.c \
|
|
lib/vrf.c \
|
|
lib/vty.c \
|
|
lib/wheel.c \
|
|
lib/workqueue.c \
|
|
lib/xref.c \
|
|
lib/yang.c \
|
|
lib/yang_translator.c \
|
|
lib/yang_wrappers.c \
|
|
lib/zclient.c \
|
|
lib/zlog.c \
|
|
lib/zlog_targets.c \
|
|
lib/printf/printf-pos.c \
|
|
lib/printf/vfprintf.c \
|
|
lib/printf/glue.c \
|
|
lib/routing_nb.c \
|
|
lib/routing_nb_config.c \
|
|
# end
|
|
|
|
nodist_lib_libfrr_la_SOURCES = \
|
|
yang/frr-filter.yang.c \
|
|
yang/frr-interface.yang.c \
|
|
yang/frr-route-map.yang.c \
|
|
yang/frr-route-types.yang.c \
|
|
yang/frr-vrf.yang.c \
|
|
yang/frr-routing.yang.c \
|
|
yang/frr-nexthop.yang.c \
|
|
yang/ietf/ietf-routing-types.yang.c \
|
|
yang/ietf/ietf-interfaces.yang.c \
|
|
yang/ietf/ietf-bgp-types.yang.c \
|
|
yang/frr-module-translator.yang.c \
|
|
yang/frr-nexthop.yang.c \
|
|
# end
|
|
|
|
vtysh_scan += \
|
|
lib/distribute.c \
|
|
lib/filter.c \
|
|
lib/filter_cli.c \
|
|
lib/if.c \
|
|
lib/if_rmap.c \
|
|
lib/keychain.c \
|
|
lib/lib_vty.c \
|
|
lib/nexthop_group.c \
|
|
lib/plist.c \
|
|
lib/routemap.c \
|
|
lib/routemap_cli.c \
|
|
lib/vrf.c \
|
|
lib/vty.c \
|
|
# end
|
|
# can be loaded as DSO - always include for vtysh
|
|
vtysh_scan += lib/agentx.c
|
|
|
|
if SQLITE3
|
|
lib_libfrr_la_LIBADD += $(SQLITE3_LIBS)
|
|
lib_libfrr_la_SOURCES += lib/db.c
|
|
endif
|
|
|
|
clippy_scan += \
|
|
lib/if.c \
|
|
lib/filter_cli.c \
|
|
lib/log_vty.c \
|
|
lib/nexthop_group.c \
|
|
lib/northbound_cli.c \
|
|
lib/plist.c \
|
|
lib/routemap_cli.c \
|
|
lib/vty.c \
|
|
# end
|
|
|
|
pkginclude_HEADERS += \
|
|
lib/agg_table.h \
|
|
lib/atomlist.h \
|
|
lib/bfd.h \
|
|
lib/bitfield.h \
|
|
lib/buffer.h \
|
|
lib/checksum.h \
|
|
lib/mlag.h \
|
|
lib/command.h \
|
|
lib/command_graph.h \
|
|
lib/command_match.h \
|
|
lib/compiler.h \
|
|
lib/csv.h \
|
|
lib/db.h \
|
|
lib/debug.h \
|
|
lib/defaults.h \
|
|
lib/distribute.h \
|
|
lib/ferr.h \
|
|
lib/filter.h \
|
|
lib/freebsd-queue.h \
|
|
lib/frrlua.h \
|
|
lib/frrscript.h \
|
|
lib/frr_pthread.h \
|
|
lib/frratomic.h \
|
|
lib/frrcu.h \
|
|
lib/frrstr.h \
|
|
lib/getopt.h \
|
|
lib/graph.h \
|
|
lib/hash.h \
|
|
lib/hook.h \
|
|
lib/iana_afi.h \
|
|
lib/id_alloc.h \
|
|
lib/if.h \
|
|
lib/if_rmap.h \
|
|
lib/imsg.h \
|
|
lib/ipaddr.h \
|
|
lib/jhash.h \
|
|
lib/json.h \
|
|
lib/keychain.h \
|
|
lib/ldp_sync.h \
|
|
lib/lib_errors.h \
|
|
lib/lib_vty.h \
|
|
lib/libfrr.h \
|
|
lib/libfrr_trace.h \
|
|
lib/libospf.h \
|
|
lib/linklist.h \
|
|
lib/link_state.h \
|
|
lib/log.h \
|
|
lib/log_vty.h \
|
|
lib/md5.h \
|
|
lib/memory.h \
|
|
lib/module.h \
|
|
lib/monotime.h \
|
|
lib/mpls.h \
|
|
lib/srv6.h \
|
|
lib/network.h \
|
|
lib/nexthop.h \
|
|
lib/nexthop_group.h \
|
|
lib/nexthop_group_private.h \
|
|
lib/northbound.h \
|
|
lib/northbound_cli.h \
|
|
lib/northbound_db.h \
|
|
lib/ns.h \
|
|
lib/openbsd-queue.h \
|
|
lib/openbsd-tree.h \
|
|
lib/plist.h \
|
|
lib/prefix.h \
|
|
lib/printfrr.h \
|
|
lib/privs.h \
|
|
lib/ptm_lib.h \
|
|
lib/pullwr.h \
|
|
lib/pw.h \
|
|
lib/qobj.h \
|
|
lib/queue.h \
|
|
lib/ringbuf.h \
|
|
lib/routemap.h \
|
|
lib/sbuf.h \
|
|
lib/seqlock.h \
|
|
lib/sha256.h \
|
|
lib/sigevent.h \
|
|
lib/skiplist.h \
|
|
lib/smux.h \
|
|
lib/sockopt.h \
|
|
lib/sockunion.h \
|
|
lib/spf_backoff.h \
|
|
lib/srcdest_table.h \
|
|
lib/srte.h \
|
|
lib/stream.h \
|
|
lib/systemd.h \
|
|
lib/table.h \
|
|
lib/termtable.h \
|
|
lib/thread.h \
|
|
lib/trace.h \
|
|
lib/typerb.h \
|
|
lib/typesafe.h \
|
|
lib/vector.h \
|
|
lib/vlan.h \
|
|
lib/vrf.h \
|
|
lib/vrf_int.h \
|
|
lib/vty.h \
|
|
lib/vxlan.h \
|
|
lib/wheel.h \
|
|
lib/workqueue.h \
|
|
lib/xref.h \
|
|
lib/yang.h \
|
|
lib/yang_translator.h \
|
|
lib/yang_wrappers.h \
|
|
lib/zassert.h \
|
|
lib/zclient.h \
|
|
lib/zebra.h \
|
|
lib/zlog.h \
|
|
lib/zlog_targets.h \
|
|
lib/pbr.h \
|
|
lib/routing_nb.h \
|
|
# end
|
|
|
|
|
|
nodist_pkginclude_HEADERS += \
|
|
lib/route_types.h \
|
|
lib/version.h \
|
|
# end
|
|
|
|
noinst_HEADERS += \
|
|
lib/clippy.h \
|
|
lib/plist_int.h \
|
|
lib/printf/printfcommon.h \
|
|
lib/printf/printflocal.h \
|
|
#end
|
|
|
|
# General note about module and module helper library (libfrrsnmp, libfrrzmq)
|
|
# linking: If we're linking libfrr statically into daemons, we *must* remove
|
|
# libfrr from modules because modules will always link it in dynamically and
|
|
# thus 2 copies of libfrr will be loaded... hilarity ensues.
|
|
#
|
|
# Not linking libfrr into modules should generally work fine because the
|
|
# executable refers to libfrr either way and the dynamic linker should make
|
|
# libfrr available to modules. If some OS platform has a dynamic linker that
|
|
# doesn't do that, libfrr needs to be readded to modules, but _only_ _if_
|
|
# it's not linked into daemons statically.
|
|
|
|
#
|
|
# SNMP support
|
|
#
|
|
if SNMP
|
|
lib_LTLIBRARIES += lib/libfrrsnmp.la
|
|
endif
|
|
|
|
lib_libfrrsnmp_la_CFLAGS = $(WERROR) $(SNMP_CFLAGS) -std=gnu99
|
|
lib_libfrrsnmp_la_LDFLAGS = -version-info 0:0:0
|
|
lib_libfrrsnmp_la_LIBADD = $(SNMP_LIBS)
|
|
lib_libfrrsnmp_la_SOURCES = \
|
|
lib/agentx.c \
|
|
lib/snmp.c \
|
|
# end
|
|
|
|
#
|
|
# c-ares support
|
|
#
|
|
if CARES
|
|
lib_LTLIBRARIES += lib/libfrrcares.la
|
|
pkginclude_HEADERS += lib/resolver.h
|
|
endif
|
|
|
|
lib_libfrrcares_la_CFLAGS = $(WERROR) $(CARES_CFLAGS)
|
|
lib_libfrrcares_la_LDFLAGS = -version-info 0:0:0
|
|
lib_libfrrcares_la_LIBADD = $(CARES_LIBS)
|
|
lib_libfrrcares_la_SOURCES = \
|
|
lib/resolver.c \
|
|
#end
|
|
|
|
#
|
|
# ZeroMQ support
|
|
#
|
|
if ZEROMQ
|
|
lib_LTLIBRARIES += lib/libfrrzmq.la
|
|
pkginclude_HEADERS += lib/frr_zmq.h
|
|
endif
|
|
|
|
lib_libfrrzmq_la_CFLAGS = $(WERROR) $(ZEROMQ_CFLAGS)
|
|
lib_libfrrzmq_la_LDFLAGS = -version-info 0:0:0
|
|
lib_libfrrzmq_la_LIBADD = $(ZEROMQ_LIBS)
|
|
lib_libfrrzmq_la_SOURCES = \
|
|
lib/frr_zmq.c \
|
|
#end
|
|
|
|
#
|
|
# Tail-f's ConfD support
|
|
#
|
|
if CONFD
|
|
module_LTLIBRARIES += lib/confd.la
|
|
endif
|
|
|
|
lib_confd_la_CFLAGS = $(WERROR) $(CONFD_CFLAGS)
|
|
lib_confd_la_LDFLAGS = -avoid-version -module -shared -export-dynamic
|
|
lib_confd_la_LIBADD = lib/libfrr.la $(CONFD_LIBS)
|
|
lib_confd_la_SOURCES = lib/northbound_confd.c
|
|
|
|
#
|
|
# Sysrepo support
|
|
#
|
|
if SYSREPO
|
|
module_LTLIBRARIES += lib/sysrepo.la
|
|
endif
|
|
|
|
lib_sysrepo_la_CFLAGS = $(WERROR) $(SYSREPO_CFLAGS)
|
|
lib_sysrepo_la_LDFLAGS = -avoid-version -module -shared -export-dynamic
|
|
lib_sysrepo_la_LIBADD = lib/libfrr.la $(SYSREPO_LIBS)
|
|
lib_sysrepo_la_SOURCES = lib/northbound_sysrepo.c
|
|
|
|
#
|
|
# gRPC northbound plugin
|
|
#
|
|
if GRPC
|
|
module_LTLIBRARIES += lib/grpc.la
|
|
endif
|
|
|
|
lib_grpc_la_CXXFLAGS = $(WERROR) $(GRPC_CFLAGS)
|
|
lib_grpc_la_LDFLAGS = -avoid-version -module -shared -export-dynamic
|
|
lib_grpc_la_LIBADD = lib/libfrr.la grpc/libfrrgrpc_pb.la $(GRPC_LIBS)
|
|
lib_grpc_la_SOURCES = lib/northbound_grpc.cpp
|
|
|
|
#
|
|
# CLI utilities
|
|
#
|
|
noinst_PROGRAMS += \
|
|
lib/grammar_sandbox \
|
|
# end
|
|
|
|
if BUILD_CLIPPY
|
|
noinst_PROGRAMS += lib/clippy
|
|
else
|
|
if HOSTTOOLS_CLIPPY
|
|
$(CLIPPY):
|
|
@$(MAKE) -C $(top_builddir)/hosttools lib/route_types.h lib/clippy
|
|
endif
|
|
endif
|
|
|
|
lib_grammar_sandbox_SOURCES = \
|
|
lib/grammar_sandbox_main.c
|
|
lib_grammar_sandbox_LDADD = \
|
|
lib/libfrr.la
|
|
|
|
lib_clippy_CPPFLAGS = $(AM_CPPFLAGS) -D_GNU_SOURCE -DBUILDING_CLIPPY
|
|
lib_clippy_CFLAGS = $(PYTHON_CFLAGS)
|
|
lib_clippy_LDADD = $(PYTHON_LIBS) $(UST_LIBS)
|
|
lib_clippy_LDFLAGS = -export-dynamic
|
|
lib_clippy_SOURCES = \
|
|
lib/jhash.c \
|
|
lib/clippy.c \
|
|
lib/command_graph.c \
|
|
lib/command_lex.l \
|
|
lib/command_parse.y \
|
|
lib/command_py.c \
|
|
lib/defun_lex.l \
|
|
lib/graph.c \
|
|
lib/libfrr_trace.c \
|
|
lib/memory.c \
|
|
lib/vector.c \
|
|
# end
|
|
|
|
# (global) clippy rules for all directories
|
|
|
|
AM_V_CLIPPY = $(am__v_CLIPPY_$(V))
|
|
am__v_CLIPPY_ = $(am__v_CLIPPY_$(AM_DEFAULT_VERBOSITY))
|
|
am__v_CLIPPY_0 = @echo " CLIPPY " $@;
|
|
am__v_CLIPPY_1 =
|
|
|
|
CLIPPY_DEPS = $(CLIPPY) $(top_srcdir)/python/clidef.py
|
|
|
|
SUFFIXES += _clippy.c
|
|
.c_clippy.c:
|
|
$(AM_V_CLIPPY) $(CLIPPY) $(top_srcdir)/python/clidef.py -o $@ $<
|
|
|
|
## automake's "ylwrap" is a great piece of GNU software... not.
|
|
.l.c:
|
|
$(AM_V_LEX)$(am__skiplex) $(LEXCOMPILE) $<
|
|
.y.c:
|
|
$(AM_V_YACC)$(am__skipyacc) $(YACCCOMPILE) $<
|
|
|
|
#
|
|
# generated sources & extra foo
|
|
#
|
|
EXTRA_DIST += \
|
|
lib/command_lex.h \
|
|
lib/command_parse.h \
|
|
lib/gitversion.pl \
|
|
lib/route_types.pl \
|
|
lib/route_types.txt \
|
|
# end
|
|
|
|
BUILT_SOURCES += \
|
|
lib/gitversion.h \
|
|
lib/route_types.h \
|
|
# end
|
|
|
|
## force route_types.h
|
|
$(lib_clippy_OBJECTS): lib/route_types.h
|
|
$(lib_libfrr_la_OBJECTS): lib/route_types.h
|
|
|
|
AM_YFLAGS = -d -Dapi.prefix=@BISON_OPENBRACE@cmd_yy@BISON_CLOSEBRACE@ @BISON_VERBOSE@
|
|
|
|
lib/command_lex.h: lib/command_lex.c
|
|
@if test ! -f $@; then rm -f "lib/command_lex.c"; else :; fi
|
|
@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) "lib/command_lex.c"; else :; fi
|
|
lib/command_lex.lo: lib/command_parse.h
|
|
lib/command_parse.lo: lib/command_lex.h
|
|
lib/clippy-command_lex.$(OBJEXT): lib/command_parse.h
|
|
lib/clippy-command_parse.$(OBJEXT): lib/command_lex.h
|
|
lib/lib_clippy-command_lex.$(OBJEXT): lib/command_parse.h
|
|
lib/lib_clippy-command_parse.$(OBJEXT): lib/command_lex.h
|
|
|
|
rt_enabled =
|
|
|
|
if BABELD
|
|
rt_enabled += --enabled babeld
|
|
endif
|
|
if BFDD
|
|
rt_enabled += --enabled bfdd
|
|
endif
|
|
if BGPD
|
|
rt_enabled += --enabled bgpd
|
|
if ENABLE_BGP_VNC
|
|
rt_enabled += --enabled bgpd-vnc
|
|
endif
|
|
endif
|
|
if EIGRPD
|
|
rt_enabled += --enabled eigrpd
|
|
endif
|
|
if ISISD
|
|
rt_enabled += --enabled isisd
|
|
endif
|
|
if FABRICD
|
|
rt_enabled += --enabled fabricd
|
|
endif
|
|
if LDPD
|
|
rt_enabled += --enabled ldpd
|
|
endif
|
|
if NHRPD
|
|
rt_enabled += --enabled nhrpd
|
|
endif
|
|
if OSPFD
|
|
rt_enabled += --enabled ospfd
|
|
endif
|
|
if OSPF6D
|
|
rt_enabled += --enabled ospf6d
|
|
endif
|
|
if PBRD
|
|
rt_enabled += --enabled pbrd
|
|
endif
|
|
if PIMD
|
|
rt_enabled += --enabled pimd
|
|
endif
|
|
if RIPD
|
|
rt_enabled += --enabled ripd
|
|
endif
|
|
if RIPNGD
|
|
rt_enabled += --enabled ripngd
|
|
endif
|
|
if SHARPD
|
|
rt_enabled += --enabled sharpd
|
|
endif
|
|
if ZEBRA
|
|
rt_enabled += --enabled zebra
|
|
endif
|
|
|
|
lib/route_types.h: $(top_srcdir)/lib/route_types.txt $(top_srcdir)/lib/route_types.pl
|
|
$(PERL) $(top_srcdir)/lib/route_types.pl $(rt_enabled) < $(top_srcdir)/lib/route_types.txt > $@
|
|
DISTCLEANFILES += lib/route_types.h
|
|
|
|
if GIT_VERSION
|
|
# bit of a trick here to always have up-to-date git stamps without triggering
|
|
# unneccessary rebuilds. .PHONY causes the .tmp file to be rebuilt always,
|
|
# but if we use that on gitversion.h it'll ripple through the .c file deps.
|
|
# (even if gitversion.h's file timestamp doesn't change, make will think it
|
|
# did, because of .PHONY...)
|
|
|
|
PHONY_GITVERSION=lib/gitversion.h.tmp
|
|
.SILENT: lib/gitversion.h lib/gitversion.h.tmp
|
|
GITH=lib/gitversion.h
|
|
lib/gitversion.h.tmp: $(top_srcdir)/.git
|
|
$(PERL) $(top_srcdir)/lib/gitversion.pl $(top_srcdir) > ${GITH}.tmp
|
|
lib/gitversion.h: lib/gitversion.h.tmp
|
|
{ test -f ${GITH} && diff -s -q ${GITH}.tmp ${GITH}; } || cp ${GITH}.tmp ${GITH}
|
|
|
|
else
|
|
PHONY_GITVERSION=lib/gitversion.h
|
|
lib/gitversion.h:
|
|
true
|
|
endif
|
|
.PHONY: $(PHONY_GITVERSION)
|