When using DPDK datapath, the OVS configure script requires the DPDK build directory passed on --with-dpdk. This can be avoided if DPDK library, headers are in standard compiler search paths.
This patch fixes the problem by searching for DPDK libraries in standard locations and configures OVS sources for dpdk datapath. If the install location is manually specified in "--with-dpdk" autodiscovery shall be skipped Signed-off-by: Bhanuprakash Bodireddy <bhanuprakash.bodire...@intel.com> --- acinclude.m4 | 61 ++++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 37 insertions(+), 24 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index f345c31..edb9563 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -163,22 +163,32 @@ AC_DEFUN([OVS_CHECK_DPDK], [ [AC_HELP_STRING([--with-dpdk=/path/to/dpdk], [Specify the DPDK build directory])]) - if test X"$with_dpdk" != X; then - RTE_SDK=$with_dpdk + AC_MSG_CHECKING([whether dpdk datapath is enabled]) + if test -z "$with_dpdk" || test "$with_dpdk" == no; then + AC_MSG_RESULT([no]) + DPDKLIB_FOUND=false + elif test -n "$with_dpdk"; then + AC_MSG_RESULT([yes]) + case "$with_dpdk" in + yes) + DPDK_AUTO_DISCOVER="true" + ;; + *) + DPDK_AUTO_DISCOVER="false" + ;; + esac - DPDK_INCLUDE=$RTE_SDK/include - DPDK_LIB_DIR=$RTE_SDK/lib + if $DPDK_AUTO_DISCOVER; then + DPDK_INCLUDE="/usr/local/include/dpdk -I/usr/include/dpdk" + DPDK_LIB_DIR="/usr/local/lib -L/usr/lib64 -L/usr/lib" + else + DPDK_INCLUDE="$with_dpdk/include" + # If 'with_dpdk' is passed install directory, point to headers + # installed in $DESTDIR/$prefix/include/dpdk + AC_CHECK_FILE([$DPDK_INCLUDE/rte_config.h],,[AC_CHECK_FILE([$DPDK_INCLUDE/dpdk/rte_config.h],[DPDK_INCLUDE=$DPDK_INCLUDE/dpdk],[])]) + DPDK_LIB_DIR="$with_dpdk/lib" + fi DPDK_LIB="-ldpdk" - DPDK_EXTRA_LIB="" - RTE_SDK_FULL=`readlink -f $RTE_SDK` - - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([#include <$RTE_SDK_FULL/include/rte_config.h> -#if !RTE_LIBRTE_VHOST_USER -#error -#endif], [])], - [], [AC_DEFINE([VHOST_CUSE], [1], [DPDK vhost-cuse support enabled, vhost-user disabled.]) - DPDK_EXTRA_LIB="-lfuse"]) ovs_save_CFLAGS="$CFLAGS" ovs_save_LDFLAGS="$LDFLAGS" @@ -192,22 +202,28 @@ AC_DEFUN([OVS_CHECK_DPDK], [ # Before each attempt the search cache must be unset, # otherwise autoconf will stick with the old result - found=false + DPDKLIB_FOUND=false save_LIBS=$LIBS for extras in "" "-ldl"; do - LIBS="$DPDK_LIB $extras $save_LIBS $DPDK_EXTRA_LIB" + LIBS="$DPDK_LIB $extras $save_LIBS" AC_LINK_IFELSE( [AC_LANG_PROGRAM([#include <rte_config.h> #include <rte_eal.h>], [int rte_argc; char ** rte_argv; rte_eal_init(rte_argc, rte_argv);])], - [found=true]) - if $found; then + [DPDKLIB_FOUND=true]) + if $DPDKLIB_FOUND; then break fi done - if $found; then :; else - AC_MSG_ERROR([cannot link with dpdk]) + + # If linking unsuccessful + if test "$DPDKLIB_FOUND" = "false" ; then + if $DPDK_AUTO_DISCOVER; then + AC_MSG_ERROR([Could not find DPDK library in default search path, Use --with-dpdk to specify the DPDK library installed in non-standard location]) + else + AC_MSG_ERROR([Could not find DPDK libraries in $DPDK_LIB_DIR]) + fi fi CFLAGS="$ovs_save_CFLAGS" LDFLAGS="$ovs_save_LDFLAGS" @@ -226,12 +242,9 @@ AC_DEFUN([OVS_CHECK_DPDK], [ DPDK_vswitchd_LDFLAGS=-Wl,--whole-archive,$DPDK_LIB,--no-whole-archive AC_SUBST([DPDK_vswitchd_LDFLAGS]) AC_DEFINE([DPDK_NETDEV], [1], [System uses the DPDK module.]) - - else - RTE_SDK= fi - AM_CONDITIONAL([DPDK_NETDEV], test -n "$RTE_SDK") + AM_CONDITIONAL([DPDK_NETDEV], test "$DPDKLIB_FOUND" = true) ]) dnl OVS_GREP_IFELSE(FILE, REGEX, [IF-MATCH], [IF-NO-MATCH]) -- 2.4.3 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev