diff --git a/configure.ac b/configure.ac
index 82ea4bb265a118e77c5b9dce8f34da859e74097f..42e558839ce831ca89e093134758683f64594a9c 100644 (file)
--- a/configure.ac
+++ b/configure.ac
@@ -2416,56 +2416,70 @@ AC_ARG_WITH(libdpdk, [AS_HELP_STRING([--with-libdpdk@<:@=PREFIX@:>@], [Path to t
[
if test "x$withval" != "xno" && test "x$withval" != "xyes"
then
- with_dpdk_path="$withval"
+ RTE_BUILD="$withval"
with_libdpdk="yes"
else
- if test "x$withval" = "xno"
- then
- with_libdpdk="no (disabled)"
- fi
+ RTE_BUILD="/usr"
+ with_libdpdk="$withval"
fi
+ DPDK_INCLUDE="$RTE_BUILD/include"
+ DPDK_LIB_DIR="$RTE_BUILD/lib"
+ FOUND_DPDK=yes
], [with_libdpdk="no"])
if test "x$with_libdpdk" = "xyes"
then
- RTE_BUILD="$with_dpdk_path"
- DPDK_INCLUDE="$RTE_BUILD/include"
- AC_CHECK_FILE([$DPDK_INCLUDE/rte_config.h], [LOCAL_DPDK_INSTALL=true],
- [AC_CHECK_FILE([$DPDK_INCLUDE/dpdk/rte_config.h],
- [DPDK_INCLUDE=$DPDK_INCLUDE/dpdk], [])])
- DPDK_LIB_DIR="$RTE_BUILD/lib"
- DPDK_EXTRA_LIB=""
+ LOCAL_DPDK_INSTALL="no"
+ AC_CHECK_HEADER([$DPDK_INCLUDE/rte_config.h], [LOCAL_DPDK_INSTALL=yes],
+ [AC_CHECK_HEADER([$DPDK_INCLUDE/dpdk/rte_config.h],
+ [],
+ [FOUND_DPDK=no], [])], [])
- SAVE_CFLAGS="$CFLAGS"
+ if test "x$LOCAL_DPDK_INSTALL" = "xno"
+ then
+ DPDK_INCLUDE=$DPDK_INCLUDE/dpdk
+ fi
+
+ if test "x$FOUND_DPDK" = "xno"
+ then
+ AC_MSG_ERROR([libdpdk error: rte_config.h not found])
+ fi
+fi
+
+if test "x$with_libdpdk" = "xyes"
+then
SAVE_LDFLAGS="$LDFLAGS"
- CFLAGS="$CFLAGS -I$DPDK_INCLUDE"
- if test "x$LOCAL_DPDK_INSTALL" != "xtrue"
- then
- LDFLAGS="$LDFLAGS -L$DPDK_LIB_DIR"
+
+ if test "x$LOCAL_DPDK_INSTALL" != "xyes"
+ then
+ LDFLAGS="$LDFLAGS -L$DPDK_LIB_DIR"
fi
- FOUND_DPDK=false
- SAVE_LIBS="$LIBS"
- LIBS="$DPDK_LIB $LIBS"
+
AC_CHECK_LIB(dpdk, rte_eal_init,
- [FOUND_DPDK=true],
- [AC_MSG_ERROR([did not find dpdk libs ])])
+ [BUILD_WITH_DPDK_LIBS="-Wl,-ldpdk"],
+ [FOUND_DPDK=no])
- CFLAGS="$SAVE_CFLAGS"
LDFLAGS="$SAVE_LDFLAGS"
- LIBS="$SAVE_LIBS"
- if test "x$FOUND_DPDK" != "xtrue"
- then
- AC_MSG_ERROR([cannot link with dpdk in $DPDK_LIB_DIR])
+ if test "x$FOUND_DPDK" = "xno"
+ then
+ AC_MSG_ERROR([libdpdk error: cannot link with dpdk in $DPDK_LIB_DIR])
fi
+fi
- BUILD_WITH_DPDK_CFLAGS+="-fPIC -I$DPDK_INCLUDE"
- if test "x$LOCAL_DPDK_INSTALL" != "xtrue"
- then
+#
+# Note: An issue on Ubuntu 14.04 necessitates the use of -Wl,--no-as-needed:
+# If you try compile with the older linker, the dpdk symbols will be undefined.
+# This workaround should be removed when no longer necessary.
+#
+if test "x$with_libdpdk" = "xyes"
+then
+ BUILD_WITH_DPDK_CFLAGS+="-I$DPDK_INCLUDE"
+ if test "x$LOCAL_DPDK_INSTALL" != "xyes"
+ then
BUILD_WITH_DPDK_LDFLAGS="-Wl,--no-as-needed"
else
BUILD_WITH_DPDK_LDFLAGS="-L$DPDK_LIB_DIR -Wl,--no-as-needed"
fi
- BUILD_WITH_DPDK_LIBS="-Wl,-ldpdk"
AC_SUBST(BUILD_WITH_DPDK_CFLAGS)
AC_SUBST(BUILD_WITH_DPDK_LDFLAGS)
AC_SUBST(BUILD_WITH_DPDK_LIBS)