> Building DPDK using Make is removed since DPDK 20.08.
> Hence, remove its references in OVS as well.
>
> Fixes: 540e70fba6d5 ("build: Add support for DPDK meson build.")
> Signed-off-by: Sunil Pai G <[email protected]>
>
Thanks for the patch Sunil, I've applied this to dpdk-latest.
Regards
Ian
> ---
> v2->v3:
> - fix the parsing of pkg-config libs with sed.
> The library output information from pkg-config varies betwen distro's.
> To handle these cases, prepend "-Wl," to the DPDK_vswitchd_LDFLAGS
> variable.
>
> - fix documentation for exporting paths.
> The installed path for dpdk libraries varies depending on distro's
> when prefix is used for meson.
> hence, remove the hardcoded path for PKG_CONFIG_PATH and
> LD_LIBRARY_PATH.
>
> v1->v2:
> - replace python script for pkg-config output parsing
> with native linux tools.
> ---
> .travis/linux-build.sh | 4 +-
> Documentation/intro/install/afxdp.rst | 2 +-
> Documentation/intro/install/dpdk.rst | 75 ++++++----------------
> acinclude.m4 | 90 +++++++++------------------
> python/automake.mk | 3 +-
> python/build/pkgcfg.py | 30 ---------
> 6 files changed, 53 insertions(+), 151 deletions(-)
> delete mode 100644 python/build/pkgcfg.py
>
> diff --git a/.travis/linux-build.sh b/.travis/linux-build.sh
> index 917bbf962..e085780e9 100755
> --- a/.travis/linux-build.sh
> +++ b/.travis/linux-build.sh
> @@ -145,12 +145,12 @@ function install_dpdk()
>
> CC=gcc meson $DPDK_OPTS build
> ninja -C build
> - sudo ninja -C build install
> + ninja -C build install
>
> # Update the library paths.
> sudo ldconfig
>
> - echo "Installed DPDK source"
> + echo "Installed DPDK source in $(pwd)"
> popd
> echo "${DPDK_VER}" > ${VERSION_FILE}
> }
> diff --git a/Documentation/intro/install/afxdp.rst
> b/Documentation/intro/install/afxdp.rst
> index 327f2b3df..aad0aeebe 100644
> --- a/Documentation/intro/install/afxdp.rst
> +++ b/Documentation/intro/install/afxdp.rst
> @@ -396,7 +396,7 @@ PVP using vhostuser device
> --------------------------
> First, build OVS with DPDK and AFXDP::
>
> - ./configure --enable-afxdp --with-dpdk=shared|static|<dpdk path>
> + ./configure --enable-afxdp --with-dpdk=shared|static
> make -j4 && make install
>
> Create a vhost-user port from OVS::
> diff --git a/Documentation/intro/install/dpdk.rst
> b/Documentation/intro/install/dpdk.rst
> index 7a1852bc5..c9e76f5e5 100644
> --- a/Documentation/intro/install/dpdk.rst
> +++ b/Documentation/intro/install/dpdk.rst
> @@ -80,62 +80,37 @@ Install DPDK
>
> #. Configure and install DPDK using Meson
>
> - Meson is the preferred tool to build recent DPDK releases
> - as Make support is deprecated and will be removed from DPDK 20.11.
> - OVS supports DPDK Meson builds from DPDK 19.11 onwards.
> -
> Build and install the DPDK library::
>
> - $ export DPDK_TARGET=x86_64-native-linuxapp-gcc
> - $ export DPDK_BUILD=$DPDK_DIR/$DPDK_TARGET
> - $ meson $DPDK_TARGET
> - $ ninja -C $DPDK_TARGET
> - $ sudo ninja -C $DPDK_TARGET install
> + $ export DPDK_BUILD=$DPDK_DIR/build
> + $ meson build
> + $ ninja -C build
> + $ sudo ninja -C build install
> $ sudo ldconfig
>
> Detailed information can be found at `DPDK documentation`_.
>
> -#. (Optional) Configure DPDK as a shared library
> +#. (Optional) Configure and export the DPDK shared library location
> +
> + Since DPDK is built both as static and shared library by default, no extra
> + configuration is required for the build.
>
> - When using Meson, DPDK is built both as static and shared library.
> - So no extra configuration is required in this case.
> + Exporting the path to library is not necessary if the DPDK libraries are
> + system installed. For libraries installed using a prefix, export the path
> + to this library and also update the $PKG_CONFIG_PATH for use
> + before building OVS::
>
> - In case of Make, DPDK can be built as either a static library or a shared
> - library. By default, it is configured for the former. If you wish to use
> - the latter, set
> - ``CONFIG_RTE_BUILD_SHARED_LIB=y`` in
> ``$DPDK_DIR/config/common_base``.
> + $ export LD_LIBRARY_PATH=/path/to/installed/DPDK/libraries
> + $ export PKG_CONFIG_PATH=/path/to/installed/".pc" file/for/DPDK
>
> .. note::
>
> Minor performance loss is expected when using OVS with a shared DPDK
> library compared to a static DPDK library.
>
> -#. Configure and install DPDK using Make
> -
> - Build and install the DPDK library::
> -
> - $ export DPDK_TARGET=x86_64-native-linuxapp-gcc
> - $ export DPDK_BUILD=$DPDK_DIR/$DPDK_TARGET
> - $ make install T=$DPDK_TARGET DESTDIR=install
> -
> -#. (Optional) Export the DPDK shared library location
> -
> - If DPDK was built as a shared library using Make, export the path to this
> - library for use when building OVS::
> -
> - $ export LD_LIBRARY_PATH=$DPDK_DIR/x86_64-native-linuxapp-gcc/lib
> -
> - In case of Meson, exporting the path to library is not necessary if
> - the DPDK libraries are system installed. For libraries installed using
> - a prefix(assuming $DPDK_INSTALL in the below case), export the path to
> this
> - library and also update the $PKG_CONFIG_PATH for use before building OVS::
> -
> - $ export $DPDK_LIB=$DPDK_INSTALL/lib/x86_64-linux-gnu
> - $ export LD_LIBRARY_PATH=$DPDK_LIB/:$LD_LIBRARY_PATH
> - $ export PKG_CONFIG_PATH=$DPDK_LIB/pkgconfig/:$PKG_CONFIG_PATH
> -
> .. _DPDK sources: http://dpdk.org/rel
> -.. _DPDK documentation:
> https://doc.dpdk.org/guides/linux_gsg/build_dpdk.html
> +.. _DPDK documentation:
> + https://doc.dpdk.org/guides-20.08/linux_gsg/build_dpdk.html
>
> Install OVS
> ~~~~~~~~~~~
> @@ -156,24 +131,14 @@ has to be configured to build against the DPDK library
> (``--with-dpdk``).
>
> #. Configure the package using the ``--with-dpdk`` flag:
>
> - Depending on the tool used to build DPDK and the type of
> - DPDK library to use, one can configure OVS as follows:
> -
> - When DPDK is built using Meson, and OVS must consume DPDK shared
> libraries
> - (also equivalent to leaving --with-dpdk option empty)::
> -
> - $ ./configure --with-dpdk=shared
> -
> - When DPDK is built using Meson, and OVS must consume DPDK static
> libraries::
> + If OVS must consume DPDK static libraries
> + (also equivalent to ``--with-dpdk=yes`` )::
>
> $ ./configure --with-dpdk=static
>
> - When DPDK is built using Make(for shared or static)::
> + If OVS must consume DPDK shared libraries::
>
> - $ ./configure --with-dpdk=$DPDK_BUILD
> -
> - where ``DPDK_BUILD`` is the path to the built DPDK library. This can be
> - skipped if DPDK library is installed in its default location.
> + $ ./configure --with-dpdk=shared
>
> .. note::
> While ``--with-dpdk`` is required, you can pass any other configuration
> diff --git a/acinclude.m4 b/acinclude.m4
> index 061afda4e..f70d8806d 100644
> --- a/acinclude.m4
> +++ b/acinclude.m4
> @@ -334,10 +334,9 @@ dnl
> dnl Configure DPDK source tree
> AC_DEFUN([OVS_CHECK_DPDK], [
> AC_ARG_WITH([dpdk],
> - [AC_HELP_STRING([--with-dpdk=static|shared|/path/to/dpdk],
> + [AC_HELP_STRING([--with-dpdk=static|shared|yes],
> [Specify "static" or "shared" depending on the
> - DPDK libraries to use only if built using Meson
> - OR the DPDK build directory in case of Make])],
> + DPDK libraries to use])],
> [have_dpdk=true])
>
> AC_MSG_CHECKING([whether dpdk is enabled])
> @@ -347,46 +346,25 @@ AC_DEFUN([OVS_CHECK_DPDK], [
> else
> AC_MSG_RESULT([yes])
> case "$with_dpdk" in
> - "shared" | "static" | "yes")
> - DPDK_AUTO_DISCOVER="true"
> - case "$with_dpdk" in
> - "shared" | "yes")
> - PKG_CHECK_MODULES([DPDK], [libdpdk], [
> - DPDK_INCLUDE="$DPDK_CFLAGS"
> - DPDK_LIB="$DPDK_LIBS"], [
> - DPDK_INCLUDE="-I/usr/local/include/dpdk -I/usr/include/dpdk"
> - DPDK_LIB="-ldpdk"])
> - ;;
> - "static")
> - PKG_CHECK_MODULES_STATIC([DPDK], [libdpdk], [
> - DPDK_INCLUDE="$DPDK_CFLAGS"
> - DPDK_LIB="$DPDK_LIBS"], [
> - DPDK_INCLUDE="-I/usr/local/include/dpdk -I/usr/include/dpdk"
> - DPDK_LIB="-ldpdk"])
> - ;;
> - esac
> - ;;
> - *)
> - DPDK_AUTO_DISCOVER="false"
> - DPDK_INCLUDE_PATH="$with_dpdk/include"
> - # If 'with_dpdk' is passed install directory, point to headers
> - # installed in $DESTDIR/$prefix/include/dpdk
> - if test -e "$DPDK_INCLUDE_PATH/rte_config.h"; then
> - DPDK_INCLUDE="-I$DPDK_INCLUDE_PATH"
> - elif test -e "$DPDK_INCLUDE_PATH/dpdk/rte_config.h"; then
> - DPDK_INCLUDE="-I$DPDK_INCLUDE_PATH/dpdk"
> - fi
> - DPDK_LIB_DIR="$with_dpdk/lib"
> - DPDK_LIB="-ldpdk"
> - ;;
> + "shared")
> + PKG_CHECK_MODULES([DPDK], [libdpdk], [
> + DPDK_INCLUDE="$DPDK_CFLAGS"
> + DPDK_LIB="$DPDK_LIBS"], [
> + DPDK_INCLUDE="-I/usr/local/include/dpdk -I/usr/include/dpdk"
> + DPDK_LIB="-ldpdk"])
> + ;;
> + "static" | "yes")
> + PKG_CHECK_MODULES_STATIC([DPDK], [libdpdk], [
> + DPDK_INCLUDE="$DPDK_CFLAGS"
> + DPDK_LIB="$DPDK_LIBS"], [
> + DPDK_INCLUDE="-I/usr/local/include/dpdk -I/usr/include/dpdk"
> + DPDK_LIB="-ldpdk"])
> + ;;
> esac
>
> ovs_save_CFLAGS="$CFLAGS"
> ovs_save_LDFLAGS="$LDFLAGS"
> CFLAGS="$CFLAGS $DPDK_INCLUDE"
> - if test "$DPDK_AUTO_DISCOVER" = "false"; then
> - LDFLAGS="$LDFLAGS -L${DPDK_LIB_DIR}"
> - fi
>
> AC_CHECK_HEADERS([rte_config.h], [], [
> AC_MSG_ERROR([unable to find rte_config.h in $with_dpdk])
> @@ -435,21 +413,14 @@ AC_DEFUN([OVS_CHECK_DPDK], [
> [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, update
> - PKG_CONFIG_PATH for pkg-config to find the .pc file in
> - non-standard location]))
> - else
> - AC_MSG_ERROR([Could not find DPDK libraries in $DPDK_LIB_DIR])
> - fi
> + AC_MSG_ERROR(m4_normalize([
> + Could not find DPDK library in default search path, update
> + PKG_CONFIG_PATH for pkg-config to find the .pc file in
> + non-standard location]))
> ])
>
> CFLAGS="$ovs_save_CFLAGS"
> LDFLAGS="$ovs_save_LDFLAGS"
> - if test "$DPDK_AUTO_DISCOVER" = "false"; then
> - OVS_LDFLAGS="$OVS_LDFLAGS -L$DPDK_LIB_DIR"
> - fi
> OVS_CFLAGS="$OVS_CFLAGS $DPDK_INCLUDE"
> OVS_ENABLE_OPTION([-mssse3])
>
> @@ -458,18 +429,15 @@ AC_DEFUN([OVS_CHECK_DPDK], [
> # This happens because the rest of the DPDK code doesn't use any symbol
> in
> # the pmd driver objects, and the drivers register themselves using an
> # __attribute__((constructor)) function.
> - #
> - # These options are specified inside a single -Wl directive to prevent
> - # autotools from reordering them.
> - #
> - # OTOH newer versions of dpdk pkg-config (generated with Meson)
> - # will already have flagged just the right set of libs with
> - # --whole-archive - in those cases do not wrap it once more.
> - if [[ "$pkg_failed" != "no" ]];then
> - DPDK_vswitchd_LDFLAGS=-Wl,--whole-archive,$DPDK_LIB,--no-whole-
> archive
> - else
> - DPDK_vswitchd_LDFLAGS=`python3 ${srcdir}/python/build/pkgcfg.py
> $DPDK_LIB`
> - fi
> +
> + # Wrap the DPDK libraries inside a single -Wl directive
> + # after comma separation to prevent autotools from reordering them.
> + DPDK_vswitchd_LDFLAGS=$(echo "$DPDK_LIB"| tr -s ' ' ',' | sed
> 's/-Wl,//g')
> + # Replace -pthread with -lpthread for LD and remove the last extra comma.
> + DPDK_vswitchd_LDFLAGS=$(echo "$DPDK_vswitchd_LDFLAGS"| sed 's/,$//' |
> \
> + sed 's/-pthread/-lpthread/g')
> + # Prepend "-Wl,".
> + DPDK_vswitchd_LDFLAGS="-Wl,$DPDK_vswitchd_LDFLAGS"
>
> AC_SUBST([DPDK_vswitchd_LDFLAGS])
> AC_DEFINE([DPDK_NETDEV], [1], [System uses the DPDK module.])
> diff --git a/python/automake.mk b/python/automake.mk
> index 69d9800f9..2f08c7701 100644
> --- a/python/automake.mk
> +++ b/python/automake.mk
> @@ -47,8 +47,7 @@ ovs_pyfiles = \
> EXTRA_DIST += \
> python/build/__init__.py \
> python/build/nroff.py \
> - python/build/soutil.py \
> - python/build/pkgcfg.py
> + python/build/soutil.py
>
> # PyPI support.
> EXTRA_DIST += \
> diff --git a/python/build/pkgcfg.py b/python/build/pkgcfg.py
> deleted file mode 100644
> index 7cee3cb03..000000000
> --- a/python/build/pkgcfg.py
> +++ /dev/null
> @@ -1,30 +0,0 @@
> -# Copyright (c) 2020 Intel, Inc.
> -#
> -# Licensed under the Apache License, Version 2.0 (the "License")
> -# You may not use this file except in compliance with the License.
> -# You may obtain a copy of the License at:
> -#
> -# http://www.apache.org/licenses/LICENSE-2.0
> -#
> -# Unless required by applicable law or agreed to in writing, software
> -# Distributed under the License is distributed on an "AS IS" BASIS,
> -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> -# See the License for the specific language governing permissions and
> -# Limitations under the License.
> -
> -# The purpose of this script is to parse the libraries
> -# From pkg-config in case of DPDK Meson builds.
> -
> -import sys
> -def parse_pkg_cfg_libs(arg):
> - linker_prefix = "-Wl,"
> - # Libtool expects libraries to be comma separated
> - # And -Wl must appear only once.
> - final_string = ','.join(map(str.strip,arg[1:])).replace('-Wl,','')
> - final_string = arg[0]+" "+linker_prefix+final_string
> - # Ld only understands -lpthread.
> - final_string = final_string.replace('-pthread','-lpthread')
> - return final_string
> -
> -if __name__ == "__main__":
> - print(parse_pkg_cfg_libs(sys.argv[1:]))
> --
> 2.17.1
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev