[ovs-dev] [PATCH dpdk-latest v4] build: Add support for DPDK meson build.

Richardson, Bruce bruce.richardson at intel.com
Tue Dec 15 09:43:40 UTC 2020



> -----Original Message-----
> From: Ilya Maximets <i.maximets at ovn.org>
> Sent: Tuesday, December 15, 2020 9:33 AM
> To: Tonghao Zhang <xiangxia.m.yue at gmail.com>; Pai G, Sunil
> <sunil.pai.g at intel.com>
> Cc: ovs dev <dev at openvswitch.org>; Richardson, Bruce
> <bruce.richardson at intel.com>; Ilya Maximets <i.maximets at ovn.org>; David
> Marchand <david.marchand at redhat.com>; Stokes, Ian <ian.stokes at intel.com>
> Subject: Re: [ovs-dev] [PATCH dpdk-latest v4] build: Add support for DPDK
> meson build.
> 
> On 12/15/20 5:02 AM, Tonghao Zhang wrote:
> > On Thu, Sep 3, 2020 at 2:06 AM Sunil Pai G <sunil.pai.g at intel.com>
> wrote:
> >>
> >> Make based build is deprecated in DPDK. Meson based
> >> build to be used for future DPDK releases.
> >>
> >> This updates travis, configure script and documentation
> >> for using DPDK Meson with OVS.
> >>
> >> Tested-at: https://travis-ci.org/github/Sunil-Pai-G/ovs-
> copy/builds/723510063
> >> Signed-off-by: Sunil Pai G <sunil.pai.g at intel.com>
> >> ---
> >> v3->v4:
> >> - Fix checkpatch errors
> >>
> >> v2->v3:
> >> - Update Documentation for vhost-user
> >>
> >> v1->v2:
> >> - Update Documentation
> >> - Simplify the pkg-config parsing script
> >> - Rename and move the pkg-config parsing script to python dir
> >> - Update travis to:
> >>    - install DPDK to cached dir
> >>    - disable DPDK tests
> >>    - removed fPIC flag for DPDK
> >>    - removed cross compilation for aarch64
> >> ---
> >>  .travis.yml                              |  3 ++
> >>  .travis/linux-build.sh                   | 39 ++++++++++-----
> >>  .travis/linux-prepare.sh                 |  1 +
> >>  Documentation/intro/install/afxdp.rst    |  2 +-
> >>  Documentation/intro/install/dpdk.rst     | 63 ++++++++++++++++++++----
> >>  Documentation/topics/dpdk/vhost-user.rst | 18 +------
> >>  acinclude.m4                             | 44 +++++++++++------
> >>  python/automake.mk                       |  3 +-
> >>  python/build/pkgcfg.py                   | 30 +++++++++++
> >>  9 files changed, 149 insertions(+), 54 deletions(-)
> >>  create mode 100644 python/build/pkgcfg.py
> >>
> >> diff --git a/.travis.yml b/.travis.yml
> >> index 3dd5d1d23..a8f9a4d79 100644
> >> --- a/.travis.yml
> >> +++ b/.travis.yml
> >> @@ -27,6 +27,9 @@ addons:
> >>        - selinux-policy-dev
> >>        - libunbound-dev
> >>        - libunwind-dev
> >> +      - python3-setuptools
> >> +      - python3-wheel
> >> +      - ninja-build
> >>
> >>  before_install: ./.travis/${TRAVIS_OS_NAME}-prepare.sh
> >>
> >> diff --git a/.travis/linux-build.sh b/.travis/linux-build.sh
> >> index 817bf24aa..14ef833c9 100755
> >> --- a/.travis/linux-build.sh
> >> +++ b/.travis/linux-build.sh
> >> @@ -85,17 +85,29 @@ function install_dpdk()
> >>  {
> >>      local DPDK_VER=$1
> >>      local VERSION_FILE="dpdk-dir/travis-dpdk-cache-version"
> >> +    local DPDK_OPTS=""
> >> +    local DPDK_LIB=""
> >>
> >>      if [ -z "$TRAVIS_ARCH" ] ||
> >>         [ "$TRAVIS_ARCH" == "amd64" ]; then
> >> -        TARGET="x86_64-native-linuxapp-gcc"
> >> +        DPDK_LIB=$(pwd)/dpdk-dir/build/lib/x86_64-linux-gnu
> >>      elif [ "$TRAVIS_ARCH" == "aarch64" ]; then
> >> -        TARGET="arm64-armv8a-linuxapp-gcc"
> >> +        DPDK_LIB=$(pwd)/dpdk-dir/build/lib/aarch64-linux-gnu
> >>      else
> >>          echo "Target is unknown"
> >>          exit 1
> >>      fi
> >>
> >> +    if [ "$DPDK_SHARED" ]; then
> >> +        EXTRA_OPTS="$EXTRA_OPTS --with-dpdk=shared"
> >> +        export LD_LIBRARY_PATH=$DPDK_LIB/:$LD_LIBRARY_PATH
> >> +    else
> >> +        EXTRA_OPTS="$EXTRA_OPTS --with-dpdk=static"
> >> +    fi
> >> +
> >> +    # Export the following path for pkg-config to find the .pc file.
> >> +    export PKG_CONFIG_PATH=$DPDK_LIB/pkgconfig/:$PKG_CONFIG_PATH
> >> +
> >>      if [ "${DPDK_VER##refs/*/}" != "${DPDK_VER}" ]; then
> >>          # Avoid using cache for git tree build.
> >>          rm -rf dpdk-dir
> >> @@ -108,7 +120,8 @@ function install_dpdk()
> >>          if [ -f "${VERSION_FILE}" ]; then
> >>              VER=$(cat ${VERSION_FILE})
> >>              if [ "${VER}" = "${DPDK_VER}" ]; then
> >> -                EXTRA_OPTS="${EXTRA_OPTS} --with-dpdk=$(pwd)/dpdk-
> dir/build"
> >> +                # Update the library paths.
> >> +                sudo ldconfig
> >>                  echo "Found cached DPDK ${VER} build in $(pwd)/dpdk-
> dir"
> >>                  return
> >>              fi
> >> @@ -122,16 +135,20 @@ function install_dpdk()
> >>          pushd dpdk-dir
> >>      fi
> >>
> >> -    make config CC=gcc T=$TARGET
> >> +    # Disable building DPDK unit tests. Not needed for OVS build or
> tests.
> >> +    DPDK_OPTS="$DPDK_OPTS -Dtests=false"
> >>
> >> -    if [ "$DPDK_SHARED" ]; then
> >> -        sed -i '/CONFIG_RTE_BUILD_SHARED_LIB=n/s/=n/=y/' build/.config
> >> -        export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/$TARGET/lib
> >> -    fi
> >> +    # Install DPDK using prefix.
> >> +    DPDK_OPTS="$DPDK_OPTS --prefix=$(pwd)/build"
> >> +
> >> +    CC=gcc meson $DPDK_OPTS build
> >> +    ninja -C build
> >> +    sudo ninja -C build install
> >> +
> >> +    # Update the library paths.
> >> +    sudo ldconfig
> >>
> >> -    make -j4 CC=gcc EXTRA_CFLAGS='-fPIC'
> >> -    EXTRA_OPTS="$EXTRA_OPTS --with-dpdk=$(pwd)/build"
> >> -    echo "Installed DPDK source in $(pwd)"
> >> +    echo "Installed DPDK source"
> >>      popd
> >>      echo "${DPDK_VER}" > ${VERSION_FILE}
> >>  }
> >> diff --git a/.travis/linux-prepare.sh b/.travis/linux-prepare.sh
> >> index 71eb347e8..1baa11641 100755
> >> --- a/.travis/linux-prepare.sh
> >> +++ b/.travis/linux-prepare.sh
> >> @@ -22,6 +22,7 @@ cd ..
> >>
> >>  pip3 install --disable-pip-version-check --user flake8 hacking
> >>  pip3 install --user --upgrade docutils
> >> +pip3 install --user  'meson==0.47.1'
> >>
> >>  if [ "$M32" ]; then
> >>      # Installing 32-bit libraries.
> >> diff --git a/Documentation/intro/install/afxdp.rst
> b/Documentation/intro/install/afxdp.rst
> >> index 3c8f78825..327f2b3df 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=<dpdk path>
> >> +  ./configure  --enable-afxdp --with-dpdk=shared|static|<dpdk path>
> >>    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 39544f835..cd7e51c75 100644
> >> --- a/Documentation/intro/install/dpdk.rst
> >> +++ b/Documentation/intro/install/dpdk.rst
> >> @@ -62,6 +62,8 @@ Detailed system requirements can be found at `DPDK
> requirements`_.
> >>  .. _DPDK supported NIC: http://dpdk.org/doc/nics
> >>  .. _DPDK requirements:
> http://dpdk.org/doc/guides/linux_gsg/sys_reqs.html
> >>
> >> +.. _dpdk-install:
> >> +
> >>  Installing
> >>  ----------
> >>
> >> @@ -76,10 +78,31 @@ Install DPDK
> >>         $ export DPDK_DIR=/usr/src/dpdk-stable-19.11.2
> >>         $ cd $DPDK_DIR
> >>
> >> +#. 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
> >> +       $ sudo ldconfig
> >> +
> >> +   Detailed information can be found at `DPDK documentation`_.
> >> +
> >>  #. (Optional) Configure DPDK as a shared library
> >>
> >> -   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
> >> +   When using Meson, DPDK is built both as static and shared library.
> >> +   So no extra configuration is required in this case.
> >> +
> >> +   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``.
> >>
> >>     .. note::
> >> @@ -87,7 +110,7 @@ Install DPDK
> >>        Minor performance loss is expected when using OVS with a shared
> DPDK
> >>        library compared to a static DPDK library.
> >>
> >> -#. Configure and install DPDK
> >> +#. Configure and install DPDK using Make
> >>
> >>     Build and install the DPDK library::
> >>
> >> @@ -97,12 +120,22 @@ Install DPDK
> >>
> >>  #. (Optional) Export the DPDK shared library location
> >>
> >> -   If DPDK was built as a shared library, export the path to this
> library for
> >> -   use when building OVS::
> >> +   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
> >>
> >>  Install OVS
> >>  ~~~~~~~~~~~
> >> @@ -121,17 +154,27 @@ has to be configured to build against the DPDK
> library (``--with-dpdk``).
> >>
> >>  #. Bootstrap, if required, as described in :ref:`general-
> bootstrapping`
> >>
> >> -#. Configure the package using the ``--with-dpdk`` flag::
> >> +#. 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
> > Hi all
> > when I build ovs with --with-dpdk=shared, Compilation is fine, but we
> > I launch the ovs:
> >
> > 41 2020-12-14T10:42:22.964Z|00018|dpdk|INFO|EAL ARGS: ovs-vswitchd -a
> >
> 0000:82:00.0,dv_flow_en=1,dv_esw_en=1,l3_vxlan_en=1,dv_xmeta_en=2,represen
> tor=[0-6]
> > -c 0xe --huge-dir /dev/hugepages --socket    -mem 1024,1024
> > --socket-limit 1024,1024.
> > 42 2020-12-14T10:42:22.969Z|00019|dpdk|INFO|EAL: Detected 56 lcore(s)
> > 43 2020-12-14T10:42:22.969Z|00020|dpdk|INFO|EAL: Detected 2 NUMA nodes
> > 44 2020-12-14T10:42:22.969Z|00021|dpdk|ERR|EAL: failed to parse device
> > "0000:82:00.0"
> > 45 2020-12-14T10:42:22.969Z|00022|dpdk|ERR|EAL: Unable to parse device
> >
> '0000:82:00.0,dv_flow_en=1,dv_esw_en=1,l3_vxlan_en=1,dv_xmeta_en=2,represe
> ntor=[0-6]'
> > 46 2020-12-14T10:42:22.969Z|00023|dpdk|EMER|Unable to initialize DPDK:
> > No such device
> >
> > In dpdk:
> > eal_plugins_init
> > rte_pci_scan
> > rte_bus_register
> > eal_option_device_parse -- no pci bus
> >
> > pkg-config is pkgconf-1.4.2
> >> +   When DPDK is built using Meson, and OVS must consume DPDK static
> libraries::
> >> +
> >> +       $ ./configure --with-dpdk=static
> > Only one issue, if we use the pkgconfig-0.27
> > The ovs log:
> > 2020-12-14T11:58:22.622Z|00018|dpdk|INFO|EAL ARGS: ovs-vswitchd -a
> >
> 0000:82:00.0,dv_flow_en=1,dv_esw_en=1,l3_vxlan_en=1,dv_xmeta_en=2,represen
> tor=[0-6]
> > -c 0xe --huge-dir /dev/hugepages --socket-mem 1024,1024 --socket-limit
> > 1024,1024.
> > 2020-12-14T11:58:22.627Z|00019|dpdk|INFO|EAL: Detected 56 lcore(s)
> > 2020-12-14T11:58:22.627Z|00020|dpdk|INFO|EAL: Detected 2 NUMA nodes
> > 2020-12-14T11:58:22.627Z|00021|dpdk|ERR|EAL: failed to parse device
> > "0000:82:00.0"
> > 2020-12-14T11:58:22.627Z|00022|dpdk|ERR|EAL: Unable to parse device
> >
> '0000:82:00.0,dv_flow_en=1,dv_esw_en=1,l3_vxlan_en=1,dv_xmeta_en=2,represe
> ntor=[0-6]'
> > 2020-12-14T11:58:22.627Z|00023|dpdk|EMER|Unable to initialize DPDK: No
> > such device
> >
> > Because  /bin/pkg-config --static --libs libdpdk
> > pkg_cv_DPDK_LIBS='-Wl,--whole-archive -Wl,--no-whole-archive
> > -Wl,--as-needed -pthread -L/root/local/dpdk-next-net/lib64
> > -l:librte_common_cpt.a -l:librte_common_dpaax.a
> > -l:librte_common_iavf.a -l:librte_common_octeontx.a
> > -l:librte_common_octeontx2.a -l:librte_common_sfc_efx.a
> > -l:librte_bus_dpaa.a -l:librte_bus_fslmc.a -l:librte_bus_ifpga.a
> > -l:librte_bus_pci.a -l:librte_bus_vdev.a -l:librte_bus_vmbus.a
> > -l:librte_common_mlx5.a -l:librte_common_qat.a
> > -l:librte_mempool_bucket.a -l:librte_mempool_dpaa.a
> > -l:librte_mempool_dpaa2.a -l:librte_mempool_octeontx.a
> > -l:librte_mempool_octeontx2.a -l:librte_mempool_ring.a
> > -l:librte_mempool_stack.a -l:librte_net_af_packet.a
> > -l:librte_net_ark.a -l:librte_net_atlantic.a -l:librte_net_avp.a
> > -l:librte_net_axgbe.a -l:librte_net_bond.a -l:librte_net_bnxt.a
> > -l:librte_net_cxgbe.a -l:librte_net_dpaa.a -l:librte_net_dpaa2.a
> > -l:librte_net_e1000.a -l:librte_net_ena.a -l:librte_net_enetc.a
> > -l:librte_net_enic.a -l:librte_net_failsafe.a -l:librte_net_fm10k.a
> > -l:librte_net_i40e.a -l:librte_net_hinic.a -l:librte_net_hns3.a
> > -l:librte_net_iavf.a -l:librte_net_ice.a -l:librte_net_igc.a
> > -l:librte_net_ixgbe.a -l:librte_net_kni.a -l:librte_net_liquidio.a
> > -l:librte_net_memif.a -l:librte_net_mlx5.a -l:librte_net_netvsc.a
> > -l:librte_net_nfp.a -l:librte_net_null.a -l:librte_net_octeontx.a
> > -l:librte_net_octeontx2.a -l:librte_net_pcap.a -l:librte_net_pfe.a
> > -l:librte_net_qede.a -l:librte_net_ring.a -l:librte_net_sfc.a
> > -l:librte_net_softnic.a -l:librte_net_thunderx.a -l:librte_net_txgbe.a
> > -l:librte_net_vdev_netvsc.a -l:librte_net_vhost.a
> > -l:librte_net_virtio.a -l:librte_net_vmxnet3.a
> > -l:librte_raw_dpaa2_cmdif.a -l:librte_raw_dpaa2_qdma.a
> > -l:librte_raw_ioat.a -l:librte_raw_ntb.a -l:librte_raw_octeontx2_dma.a
> > -l:librte_raw_octeontx2_ep.a -l:librte_raw_skeleton.a
> > -l:librte_compress_octeontx.a -l:librte_regex_mlx5.a
> > -l:librte_regex_octeontx2.a -l:librte_vdpa_ifc.a -l:librte_vdpa_mlx5.a
> > -l:librte_baseband_null.a -l:librte_baseband_turbo_sw.a
> > -l:librte_baseband_fpga_lte_fec.a -l:librte_baseband_fpga_5gnr_fec.a
> > -l:librte_baseband_acc100.a -l:librte_node.a -l:librte_graph.a
> > -l:librte_bpf.a -l:librte_flow_classify.a -l:librte_pipeline.a
> > -l:librte_table.a -l:librte_port.a -l:librte_fib.a -l:librte_ipsec.a
> > -l:librte_vhost.a -l:librte_stack.a -l:librte_security.a
> > -l:librte_sched.a -l:librte_reorder.a -l:librte_rib.a
> > -l:librte_regexdev.a -l:librte_rawdev.a -l:librte_pdump.a
> > -l:librte_power.a -l:librte_member.a -l:librte_lpm.a
> > -l:librte_latencystats.a -l:librte_kni.a -l:librte_jobstats.a
> > -l:librte_ip_frag.a -l:librte_gso.a -l:librte_gro.a
> > -l:librte_eventdev.a -l:librte_efd.a -l:librte_distributor.a
> > -l:librte_cryptodev.a -l:librte_compressdev.a -l:librte_cfgfile.a
> > -l:librte_bitratestats.a -l:librte_bbdev.a -l:librte_acl.a
> > -l:librte_timer.a -l:librte_hash.a -l:librte_metrics.a
> > -l:librte_cmdline.a -l:librte_pci.a -l:librte_ethdev.a
> > -l:librte_meter.a -l:librte_net.a -l:librte_mbuf.a -l:librte_mempool.a
> > -l:librte_rcu.a -l:librte_ring.a -l:librte_eal.a -l:librte_telemetry.a
> > -l:librte_kvargs.a -lmlx5 -libverbs -lrte_node -lrte_graph -lrte_bpf
> > -lrte_flow_classify -lrte_pipeline -lrte_table -lrte_port -lrte_fib
> > -lrte_ipsec -lrte_vhost -lrte_stack -lrte_security -lrte_sched
> > -lrte_reorder -lrte_rib -lrte_regexdev -lrte_rawdev -lrte_pdump
> > -lrte_power -lrte_member -lrte_lpm -lrte_latencystats -lrte_kni
> > -lrte_jobstats -lrte_ip_frag -lrte_gso -lrte_gro -lrte_eventdev
> > -lrte_efd -lrte_distributor -lrte_cryptodev -lrte_compressdev
> > -lrte_cfgfile -lrte_bitratestats -lrte_bbdev -lrte_acl -lrte_timer
> > -lrte_hash -lrte_metrics -lrte_cmdline -lrte_pci -lrte_ethdev
> > -lrte_meter -lrte_net -lrte_mbuf -lrte_mempool -lrte_rcu -lrte_ring
> > -lrte_eal -lrte_telemetry -lrte_kvargs -lm -ldl -lnuma -lpcap  '
> >
> > Note that:
> > -Wl,--whole-archive -Wl,--no-whole-archive (RTE_INIT in dpdk doesn't
> work.)
> > I guess we dont hope that, It should be:
> > -Wl,--whole-archive ...(other -lxxx)...  -Wl,--no-whole-archive
> >
> > update pkg-config to pkgconf-1.4.2
> > /bin/pkg-config --static --libs libdpdk
> > pkg_cv_DPDK_LIBS='-Wl,--whole-archive
> > -L/root/local/dpdk-next-net/lib64 -l:librte_common_cpt.a
> > -l:librte_common_dpaax.a -l:librte_common_iavf.a
> > -l:librte_common_octeontx.a -l:librte_common_octeontx2.a
> > -l:librte_common_sfc_efx.a -l:librte_bus_dpaa.a -l:librte_bus_fslmc.a
> > -l:librte_bus_ifpga.a -l:librte_bus_pci.a -l:librte_bus_vdev.a
> > -l:librte_bus_vmbus.a -l:librte_common_mlx5.a -l:librte_common_qat.a
> > -l:librte_mempool_bucket.a -l:librte_mempool_dpaa.a
> > -l:librte_mempool_dpaa2.a -l:librte_mempool_octeontx.a
> > -l:librte_mempool_octeontx2.a -l:librte_mempool_ring.a
> > -l:librte_mempool_stack.a -l:librte_net_af_packet.a
> > -l:librte_net_ark.a -l:librte_net_atlantic.a -l:librte_net_avp.a
> > -l:librte_net_axgbe.a -l:librte_net_bond.a -l:librte_net_bnxt.a
> > -l:librte_net_cxgbe.a -l:librte_net_dpaa.a -l:librte_net_dpaa2.a
> > -l:librte_net_e1000.a -l:librte_net_ena.a -l:librte_net_enetc.a
> > -l:librte_net_enic.a -l:librte_net_failsafe.a -l:librte_net_fm10k.a
> > -l:librte_net_i40e.a -l:librte_net_hinic.a -l:librte_net_hns3.a
> > -l:librte_net_iavf.a -l:librte_net_ice.a -l:librte_net_igc.a
> > -l:librte_net_ixgbe.a -l:librte_net_kni.a -l:librte_net_liquidio.a
> > -l:librte_net_memif.a -l:librte_net_mlx5.a -l:librte_net_netvsc.a
> > -l:librte_net_nfp.a -l:librte_net_null.a -l:librte_net_octeontx.a
> > -l:librte_net_octeontx2.a -l:librte_net_pcap.a -l:librte_net_pfe.a
> > -l:librte_net_qede.a -l:librte_net_ring.a -l:librte_net_sfc.a
> > -l:librte_net_softnic.a -l:librte_net_thunderx.a -l:librte_net_txgbe.a
> > -l:librte_net_vdev_netvsc.a -l:librte_net_vhost.a
> > -l:librte_net_virtio.a -l:librte_net_vmxnet3.a
> > -l:librte_raw_dpaa2_cmdif.a -l:librte_raw_dpaa2_qdma.a
> > -l:librte_raw_ioat.a -l:librte_raw_ntb.a -l:librte_raw_octeontx2_dma.a
> > -l:librte_raw_octeontx2_ep.a -l:librte_raw_skeleton.a
> > -l:librte_compress_octeontx.a -l:librte_regex_mlx5.a
> > -l:librte_regex_octeontx2.a -l:librte_vdpa_ifc.a -l:librte_vdpa_mlx5.a
> > -l:librte_baseband_null.a -l:librte_baseband_turbo_sw.a
> > -l:librte_baseband_fpga_lte_fec.a -l:librte_baseband_fpga_5gnr_fec.a
> > -l:librte_baseband_acc100.a -l:librte_node.a -l:librte_graph.a
> > -l:librte_bpf.a -l:librte_flow_classify.a -l:librte_pipeline.a
> > -l:librte_table.a -l:librte_port.a -l:librte_fib.a -l:librte_ipsec.a
> > -l:librte_vhost.a -l:librte_stack.a -l:librte_security.a
> > -l:librte_sched.a -l:librte_reorder.a -l:librte_rib.a
> > -l:librte_regexdev.a -l:librte_rawdev.a -l:librte_pdump.a
> > -l:librte_power.a -l:librte_member.a -l:librte_lpm.a
> > -l:librte_latencystats.a -l:librte_kni.a -l:librte_jobstats.a
> > -l:librte_ip_frag.a -l:librte_gso.a -l:librte_gro.a
> > -l:librte_eventdev.a -l:librte_efd.a -l:librte_distributor.a
> > -l:librte_cryptodev.a -l:librte_compressdev.a -l:librte_cfgfile.a
> > -l:librte_bitratestats.a -l:librte_bbdev.a -l:librte_acl.a
> > -l:librte_timer.a -l:librte_hash.a -l:librte_metrics.a
> > -l:librte_cmdline.a -l:librte_pci.a -l:librte_ethdev.a
> > -l:librte_meter.a -l:librte_net.a -l:librte_mbuf.a -l:librte_mempool.a
> > -l:librte_rcu.a -l:librte_ring.a -l:librte_eal.a -l:librte_telemetry.a
> > -l:librte_kvargs.a -Wl,--no-whole-archive -lpcap -lmlx5 -libverbs
> > -Wl,--as-needed -lrte_node -lrte_graph -lrte_bpf -lrte_flow_classify
> > -lrte_pipeline -lrte_table -lrte_port -lrte_fib -lrte_ipsec
> > -lrte_vhost -lrte_stack -lrte_security -lrte_sched -lrte_reorder
> > -lrte_rib -lrte_regexdev -lrte_rawdev -lrte_pdump -lrte_power
> > -lrte_member -lrte_lpm -lrte_latencystats -lrte_kni -lrte_jobstats
> > -lrte_ip_frag -lrte_gso -lrte_gro -lrte_eventdev -lrte_efd
> > -lrte_distributor -lrte_cryptodev -lrte_compressdev -lrte_cfgfile
> > -lrte_bitratestats -lrte_bbdev -lrte_acl -lrte_timer -lrte_hash
> > -lrte_metrics -lrte_cmdline -lrte_pci -lrte_ethdev -lrte_meter
> > -lrte_net -lrte_mbuf -lrte_mempool -lrte_rcu -lrte_ring -lrte_eal
> > -lrte_telemetry -lrte_kvargs -pthread -lm -ldl -lnuma -lpcap '
> >
> > ovs works fine.
> 
> Hmm.  Thanks for the report.
> 
> It'll be great if you can test this with new version of this patch:
> https://patchwork.ozlabs.org/project/openvswitch/patch/1607977825-30877-1-
> git-send-email-ian.stokes at intel.com/
> 
> Bruce, David, it looks like not all versions of pkg-config could be used.
> Do you know what is the minimal required version or how to protect us from
> this kind of issues?
> 
> Best regards, Ilya Maximets.

This was just recently flagged to us and discussed on this email thread on 
the dpdk dev list.

http://inbox.dpdk.org/dev/20201029091638.26646-1-getelson@nvidia.com/

At the end of the discussion the follow was noted in our docs as a known 
issue for DPDK.

"pkg-config v0.27 supplied with RHEL-7 does not process correctly libdpdk.pc Libs.private section."

If you have any suggestions as to how we could work around this issue, I'd
be very keen to hear them, though unfortunately it does seem to be a bug
in pkg-config that is outside of our control.

Regards,
/Bruce


More information about the dev mailing list