Message ID | 20190219071228.4572-3-i.maximets@samsung.com |
---|---|
State | Superseded |
Headers | show |
Series | acinclude: User/reader-friendly checking for DPDK dependencies. | expand |
On Tue, Feb 19, 2019 at 10:12:28AM +0300, Ilya Maximets wrote: > DPDK uses dlopen to load plugins and we need to search for > library containing this function. But we should not do this > in a loop because 'AC_SEARCH_LIBS' could do this for us. > Also, 'AC_SEARCH_LIBS' prints user-visible messages that are > useful for debuging. > Also added the new 'checking' message and code normalized to > be more readable. > > With this change we'll have following additional messages: I think -ldl is only needed if MLX PMDs are enabled, right? After this patch a library providing dlopen becomes mandatory, then embedded folks might not like this new dependency. Otherwise the patch looks good to me. fbl > > checking for library containing dlopen... -ldl > checking whether linking with dpdk works... yes > > Signed-off-by: Ilya Maximets <i.maximets@samsung.com> > --- > acinclude.m4 | 50 +++++++++++++++++++++----------------------------- > 1 file changed, 21 insertions(+), 29 deletions(-) > > diff --git a/acinclude.m4 b/acinclude.m4 > index 2bb82b9c2..e4aed4690 100644 > --- a/acinclude.m4 > +++ b/acinclude.m4 > @@ -294,36 +294,28 @@ AC_DEFUN([OVS_CHECK_DPDK], [ > ], [[#include <rte_config.h>]]) > ], [], [[#include <rte_config.h>]]) > > - # On some systems we have to add -ldl to link with dpdk > - # > - # This code, at first, tries to link without -ldl (""), > - # then adds it and tries again. > - # Before each attempt the search cache must be unset, > - # otherwise autoconf will stick with the old result > + # DPDK uses dlopen to load plugins. > + OVS_FIND_DEPENDENCY([dlopen], [dl], [libdl]) > + > + AC_MSG_CHECKING([whether linking with dpdk works]) > + LIBS="$DPDK_LIB $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);])], > + [AC_MSG_RESULT([yes]) > + DPDKLIB_FOUND=true], > + [AC_MSG_RESULT([no]) > + if test "$DPDK_AUTO_DISCOVER" = "true"; then > + AC_MSG_ERROR(m4_normalize([ > + 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 > + ]) > > - DPDKLIB_FOUND=false > - save_LIBS=$LIBS > - for extras in "" "-ldl"; do > - 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);])], > - [DPDKLIB_FOUND=true]) > - if $DPDKLIB_FOUND; then > - break > - fi > - done > - > - # 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" > if test "$DPDK_AUTO_DISCOVER" = "false"; then > -- > 2.17.1 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
On 21.02.2019 16:48, Flavio Leitner wrote: > On Tue, Feb 19, 2019 at 10:12:28AM +0300, Ilya Maximets wrote: >> DPDK uses dlopen to load plugins and we need to search for >> library containing this function. But we should not do this >> in a loop because 'AC_SEARCH_LIBS' could do this for us. >> Also, 'AC_SEARCH_LIBS' prints user-visible messages that are >> useful for debuging. >> Also added the new 'checking' message and code normalized to >> be more readable. >> >> With this change we'll have following additional messages: > > > I think -ldl is only needed if MLX PMDs are enabled, right? Unfortunately, not. It's used in 'eal_plugins_init()' inside lib/librte_eal/common/eal_common_options.c. And it's not guarded by any CONFIG. So, we have to look for library with 'dlopen' in any configuration. > After this patch a library providing dlopen becomes mandatory, then > embedded folks might not like this new dependency. > > Otherwise the patch looks good to me. > fbl > >> >> checking for library containing dlopen... -ldl >> checking whether linking with dpdk works... yes >> >> Signed-off-by: Ilya Maximets <i.maximets@samsung.com> >> --- >> acinclude.m4 | 50 +++++++++++++++++++++----------------------------- >> 1 file changed, 21 insertions(+), 29 deletions(-) >> >> diff --git a/acinclude.m4 b/acinclude.m4 >> index 2bb82b9c2..e4aed4690 100644 >> --- a/acinclude.m4 >> +++ b/acinclude.m4 >> @@ -294,36 +294,28 @@ AC_DEFUN([OVS_CHECK_DPDK], [ >> ], [[#include <rte_config.h>]]) >> ], [], [[#include <rte_config.h>]]) >> >> - # On some systems we have to add -ldl to link with dpdk >> - # >> - # This code, at first, tries to link without -ldl (""), >> - # then adds it and tries again. >> - # Before each attempt the search cache must be unset, >> - # otherwise autoconf will stick with the old result >> + # DPDK uses dlopen to load plugins. >> + OVS_FIND_DEPENDENCY([dlopen], [dl], [libdl]) >> + >> + AC_MSG_CHECKING([whether linking with dpdk works]) >> + LIBS="$DPDK_LIB $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);])], >> + [AC_MSG_RESULT([yes]) >> + DPDKLIB_FOUND=true], >> + [AC_MSG_RESULT([no]) >> + if test "$DPDK_AUTO_DISCOVER" = "true"; then >> + AC_MSG_ERROR(m4_normalize([ >> + 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 >> + ]) >> >> - DPDKLIB_FOUND=false >> - save_LIBS=$LIBS >> - for extras in "" "-ldl"; do >> - 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);])], >> - [DPDKLIB_FOUND=true]) >> - if $DPDKLIB_FOUND; then >> - break >> - fi >> - done >> - >> - # 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" >> if test "$DPDK_AUTO_DISCOVER" = "false"; then >> -- >> 2.17.1 >> >> _______________________________________________ >> dev mailing list >> dev@openvswitch.org >> https://mail.openvswitch.org/mailman/listinfo/ovs-dev > > >
On Thu, Feb 21, 2019 at 04:54:39PM +0300, Ilya Maximets wrote: > On 21.02.2019 16:48, Flavio Leitner wrote: > > On Tue, Feb 19, 2019 at 10:12:28AM +0300, Ilya Maximets wrote: > >> DPDK uses dlopen to load plugins and we need to search for > >> library containing this function. But we should not do this > >> in a loop because 'AC_SEARCH_LIBS' could do this for us. > >> Also, 'AC_SEARCH_LIBS' prints user-visible messages that are > >> useful for debuging. > >> Also added the new 'checking' message and code normalized to > >> be more readable. > >> > >> With this change we'll have following additional messages: > > > > > > I think -ldl is only needed if MLX PMDs are enabled, right? > > Unfortunately, not. It's used in 'eal_plugins_init()' inside > lib/librte_eal/common/eal_common_options.c. > And it's not guarded by any CONFIG. So, we have to look for library > with 'dlopen' in any configuration. True, I missed that when I grep'ed. Acked-by: Flavio Leitner <fbl@sysclose.org> > > After this patch a library providing dlopen becomes mandatory, then > > embedded folks might not like this new dependency. > > > > Otherwise the patch looks good to me. > > fbl > > > >> > >> checking for library containing dlopen... -ldl > >> checking whether linking with dpdk works... yes > >> > >> Signed-off-by: Ilya Maximets <i.maximets@samsung.com> > >> --- > >> acinclude.m4 | 50 +++++++++++++++++++++----------------------------- > >> 1 file changed, 21 insertions(+), 29 deletions(-) > >> > >> diff --git a/acinclude.m4 b/acinclude.m4 > >> index 2bb82b9c2..e4aed4690 100644 > >> --- a/acinclude.m4 > >> +++ b/acinclude.m4 > >> @@ -294,36 +294,28 @@ AC_DEFUN([OVS_CHECK_DPDK], [ > >> ], [[#include <rte_config.h>]]) > >> ], [], [[#include <rte_config.h>]]) > >> > >> - # On some systems we have to add -ldl to link with dpdk > >> - # > >> - # This code, at first, tries to link without -ldl (""), > >> - # then adds it and tries again. > >> - # Before each attempt the search cache must be unset, > >> - # otherwise autoconf will stick with the old result > >> + # DPDK uses dlopen to load plugins. > >> + OVS_FIND_DEPENDENCY([dlopen], [dl], [libdl]) > >> + > >> + AC_MSG_CHECKING([whether linking with dpdk works]) > >> + LIBS="$DPDK_LIB $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);])], > >> + [AC_MSG_RESULT([yes]) > >> + DPDKLIB_FOUND=true], > >> + [AC_MSG_RESULT([no]) > >> + if test "$DPDK_AUTO_DISCOVER" = "true"; then > >> + AC_MSG_ERROR(m4_normalize([ > >> + 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 > >> + ]) > >> > >> - DPDKLIB_FOUND=false > >> - save_LIBS=$LIBS > >> - for extras in "" "-ldl"; do > >> - 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);])], > >> - [DPDKLIB_FOUND=true]) > >> - if $DPDKLIB_FOUND; then > >> - break > >> - fi > >> - done > >> - > >> - # 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" > >> if test "$DPDK_AUTO_DISCOVER" = "false"; then > >> -- > >> 2.17.1 > >> > >> _______________________________________________ > >> dev mailing list > >> dev@openvswitch.org > >> https://mail.openvswitch.org/mailman/listinfo/ovs-dev > > > > > >
diff --git a/acinclude.m4 b/acinclude.m4 index 2bb82b9c2..e4aed4690 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -294,36 +294,28 @@ AC_DEFUN([OVS_CHECK_DPDK], [ ], [[#include <rte_config.h>]]) ], [], [[#include <rte_config.h>]]) - # On some systems we have to add -ldl to link with dpdk - # - # This code, at first, tries to link without -ldl (""), - # then adds it and tries again. - # Before each attempt the search cache must be unset, - # otherwise autoconf will stick with the old result + # DPDK uses dlopen to load plugins. + OVS_FIND_DEPENDENCY([dlopen], [dl], [libdl]) + + AC_MSG_CHECKING([whether linking with dpdk works]) + LIBS="$DPDK_LIB $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);])], + [AC_MSG_RESULT([yes]) + DPDKLIB_FOUND=true], + [AC_MSG_RESULT([no]) + if test "$DPDK_AUTO_DISCOVER" = "true"; then + AC_MSG_ERROR(m4_normalize([ + 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 + ]) - DPDKLIB_FOUND=false - save_LIBS=$LIBS - for extras in "" "-ldl"; do - 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);])], - [DPDKLIB_FOUND=true]) - if $DPDKLIB_FOUND; then - break - fi - done - - # 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" if test "$DPDK_AUTO_DISCOVER" = "false"; then
DPDK uses dlopen to load plugins and we need to search for library containing this function. But we should not do this in a loop because 'AC_SEARCH_LIBS' could do this for us. Also, 'AC_SEARCH_LIBS' prints user-visible messages that are useful for debuging. Also added the new 'checking' message and code normalized to be more readable. With this change we'll have following additional messages: checking for library containing dlopen... -ldl checking whether linking with dpdk works... yes Signed-off-by: Ilya Maximets <i.maximets@samsung.com> --- acinclude.m4 | 50 +++++++++++++++++++++----------------------------- 1 file changed, 21 insertions(+), 29 deletions(-)