[ovs-dev] [PATCH dpdk-latest v3] build: Remove DPDK make build references.
Sunil Pai G
sunil.pai.g at intel.com
Wed Nov 25 16:36:20 UTC 2020
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 <sunil.pai.g at intel.com>
---
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
More information about the dev
mailing list