aboutsummaryrefslogtreecommitdiff
path: root/m4
diff options
context:
space:
mode:
authorDmitry Eremin-Solenikov <dmitry.ereminsolenikov@linaro.org>2018-01-18 04:59:56 +0300
committerMaxim Uvarov <maxim.uvarov@linaro.org>2018-01-24 17:03:01 +0300
commit99300f9db4c368e7519c52af93c93d702790b2b4 (patch)
tree1fe70e640940ef91df35a59ff528e7dc207f83ec /m4
parent9ea61da809269644ac6332a1b0f53be68a7e26d7 (diff)
build: odp_dpdk: another fix for linking with shared libdpdk
Older toolchains won't include all shared objects from the group so file to DT_NEEDED section. So use --as-needed/--no-as-needed flags to control linking with DPDK PMD libs. Signed-off-by: Dmitry Eremin-Solenikov <dmitry.ereminsolenikov@linaro.org> Reviewed-by: Bill Fischofer <bill.fischofer@linaro.org> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
Diffstat (limited to 'm4')
-rw-r--r--m4/odp_dpdk.m421
1 files changed, 15 insertions, 6 deletions
diff --git a/m4/odp_dpdk.m4 b/m4/odp_dpdk.m4
index 1887b0431..81ace08a9 100644
--- a/m4/odp_dpdk.m4
+++ b/m4/odp_dpdk.m4
@@ -17,18 +17,29 @@ AS_VAR_APPEND([DPDK_PMDS], [--no-whole-archive])
# _ODP_DPDK_SET_LIBS
# --------------------
-# Set DPDK_LIBS/DPDK_LIBS_LT depending on DPDK setup
+# Set DPDK_LIBS/DPDK_LIBS_LT/DPDK_LIBS_LIBODP depending on DPDK setup
AC_DEFUN([_ODP_DPDK_SET_LIBS], [dnl
AS_IF([test "x$DPDK_SHARED" = "xyes"], [dnl
- DPDK_LIBS_LT=""
+ # applications don't need to be linked to anything, just rpath
+ DPDK_LIBS_LT="$DPDK_RPATH_LT"
+ # static linking flags will need -ldpdk
+ DPDK_LIBS="-Wl,--no-as-needed,-ldpdk,--as-needed,`echo $DPDK_LIBS | sed -e 's/ /,/g'`"
DPDK_LIBS="$DPDK_LDFLAGS $DPDK_RPATH $DPDK_LIBS"
+ # link libodp-linux with -ldpdk
+ DPDK_LIBS_LIBODP="$DPDK_LIBS"
], [dnl
ODP_DPDK_PMDS([$DPDK_PMD_PATH])
+ # build long list of libraries for applications, which should not be
+ # rearranged by libtool
DPDK_LIBS_LT="`echo $DPDK_LIBS | sed -e 's/^/-Wc,/' -e 's/ /,/g'`"
DPDK_LIBS_LT="$DPDK_LDFLAGS $DPDK_PMDS $DPDK_LIBS_LT $DPDK_LIBS"
+ # static linking flags follow the suite
DPDK_LIBS="$DPDK_LDFLAGS $DPDK_PMDS $DPDK_LIBS"
+ # link libodp-linux with libtool linking flags
+ DPDK_LIBS_LIBODP="$DPDK_LIBS_LT"
])
AC_SUBST([DPDK_LIBS])
+AC_SUBST([DPDK_LIBS_LIBODP])
AC_SUBST([DPDK_LIBS_LT])
])
@@ -99,7 +110,6 @@ AC_DEFUN([ODP_DPDK], [dnl
AS_IF([test "x$1" = "xsystem"], [dnl
DPDK_CPPFLAGS="-isystem/usr/include/dpdk"
DPDK_LDFLAGS=""
- DPDK_RPATH=""
DPDK_LIB_PATH="`$CC --print-file-name=libdpdk.so`"
if test "x$DPDK_LIB_PATH" = "x" ; then
DPDK_LIB_PATH="`$CC --print-file-name=libdpdk.a`"
@@ -115,10 +125,9 @@ AS_IF([test "x$1" = "xsystem"], [dnl
DPDK_LDFLAGS="-L$DPDK_LIB_PATH"
DPDK_PMD_PATH="$DPDK_LIB_PATH"
if test -r "$DPDK_LIB_PATH"/libdpdk.so ; then
- DPDK_RPATH="-R$DPDK_LIB_PATH"
+ DPDK_RPATH="-Wl,-rpath,$DPDK_LIB_PATH"
+ DPDK_RPATH_LT="-R$DPDK_LIB_PATH"
DPDK_SHARED=yes
- else
- DPDK_RPATH=
fi
])
_ODP_DPDK_CHECK([$DPDK_CPPFLAGS], [$DPDK_LDFLAGS], [$2], [$3])