M4FLAGS=@M4FLAGS@
BISONFLAGS=@BISONFLAGS@
LIBS=@LIBS@
-DAEMON_LIBS=@DAEMON_LIBS@
+COMMON_LIBS=@COMMON_LIBS@
+DAEMON_LIBS=@DAEMON_LIBS@ $(COMMON_LIBS)
CLIENT_LIBS=@CLIENT_LIBS@
CC=@CC@
M4=@M4@
client=$(addprefix $(exedir)/,@CLIENT@)
daemon=$(exedir)/bird
+common-lib=$(objdir)/libbird.o.txt
protocols=@protocols@
PROTO_BUILD := $(protocols) dev kif krt
all-daemon = $(daemon): $(obj)
all-client = $(client): $(obj)
+all-lib = $(common-lib): $(obj)
s = $(dir $(lastword $(MAKEFILE_LIST)))
ifeq ($(srcdir),.)
$(Q)mkdir -p $(addprefix $(objdir)/,$(dirs) doc)
$(Q)touch $@
+# Composing static library; older GCC's and linkers somehow fail
+# both with partial linking with LTO and also with static library creation,
+# thus we just collect all the deps and add them to the final build
+$(common-lib):
+ $(E)echo TXT $^ > $@
+ $(Q)echo $^ > $@
+# Some time in future, somebody may want to try the following recipe again
+# $(E)echo LD $(LDFLAGS) -r -o $@ $^
+# +$(Q)$(CC) $(LDFLAGS) -r -o $@ $^
+
+# The lib must be linked last
+$(daemon): $(common-lib)
+
+#$(warning $(patsubst $(common-lib),$(shell cat $(common-lib)),whatever obj/libbird.o.txt))
+
$(client) $(daemon):
$(E)echo LD $(LDFLAGS) -o $@ $^ $(LIBS)
- +$(Q)$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
+ +$(Q)$(CC) $(LDFLAGS) -o $@ $(patsubst $(common-lib),$(shell cat $(common-lib)),$^) $(LIBS)
$(objdir)/sysdep/paths.h: Makefile
$(E)echo GEN $@
tests_targets_ok = $(addsuffix .ok,$(tests_targets))
-$(tests_targets): %: %.o $(tests_objs) | prepare
+$(tests_targets): %: %.o $(tests_objs) $(common-lib) | prepare
$(E)echo LD $(LDFLAGS) -o $@ $< "..." $(LIBS)
- +$(Q)$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
+ +$(Q)$(CC) $(LDFLAGS) -o $@ $(patsubst $(common-lib),$(shell cat $(common-lib)),$^) $(LIBS)
# Hack to avoid problems with tests linking everything
$(tests_targets): LIBS += $(DAEMON_LIBS)
clean::
rm -f $(objdir)/sysdep/paths.h $(objdir)/nest/proto-build.c
rm -f $(addprefix $(exedir)/,bird birdc birdcl)
+ rm -f $(common-lib)
find $(objdir) -name "*.[od]" -exec rm -f '{}' '+'
testsclean:
if test "$bird_cv_lib_pthreads" = yes ; then
CFLAGS="$CFLAGS -pthread"
- LDFLAGS="$LDFLAGS -pthread"
+ COMMON_LIBS="$COMMON_LIBS -pthread"
else
AC_MSG_ERROR([POSIX threads not available.])
fi
AC_MSG_CHECKING([LDFLAGS])
AC_MSG_RESULT([$LDFLAGS])
+DAEMON_LIBS="${DAEMON_LIBS} ${LIBS}"
+AC_SUBST(DAEMON_LIBS)
+AC_SUBST(COMMON_LIBS)
+
AC_PROG_CPP
AC_PROG_INSTALL
-AC_PROG_RANLIB
+
AC_CHECK_PROG([FLEX], [flex], [flex])
AC_CHECK_PROG([BISON], [bison], [bison])
AC_CHECK_PROGS([M4], [gm4 m4])
AC_SUBST([iproutedir])
-DAEMON_LIBS=
-AC_SUBST(DAEMON_LIBS)
-
if test "$enable_libssh" != no ; then
AC_CHECK_HEADER([libssh/libssh.h], [true], [fail=yes], [ ])
AC_CHECK_LIB([ssh], [ssh_connect], [true], [fail=yes])
if test "$fail" != yes ; then
AC_DEFINE([HAVE_LIBSSH], [1], [Define to 1 if you have the `ssh' library (-lssh).])
- DAEMON_LIBS="-lssh $DAEMON_LIBS"
+ COMMON_LIBS="-lssh $COMMON_LIBS"
enable_libssh=yes
else
if test "$enable_libssh" = yes ; then