diff options
author | Dmitry Eremin-Solenikov <dmitry.ereminsolenikov@linaro.org> | 2018-01-18 04:59:56 +0300 |
---|---|---|
committer | Maxim Uvarov <maxim.uvarov@linaro.org> | 2018-01-24 17:03:01 +0300 |
commit | 99300f9db4c368e7519c52af93c93d702790b2b4 (patch) | |
tree | 1fe70e640940ef91df35a59ff528e7dc207f83ec /m4 | |
parent | 9ea61da809269644ac6332a1b0f53be68a7e26d7 (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.m4 | 21 |
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]) |