On 12/15/20 10:43 AM, Richardson, Bruce wrote:
> 
> 
>> -----Original Message-----
>> From: Ilya Maximets <[email protected]>
>> Sent: Tuesday, December 15, 2020 9:33 AM
>> To: Tonghao Zhang <[email protected]>; Pai G, Sunil
>> <[email protected]>
>> Cc: ovs dev <[email protected]>; Richardson, Bruce
>> <[email protected]>; Ilya Maximets <[email protected]>; David
>> Marchand <[email protected]>; Stokes, Ian <[email protected]>
>> 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 <[email protected]>
>> 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 <[email protected]>
>>>> ---
>>>> 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-
>> [email protected]/
>>
>> 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/[email protected]/
> 
> 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.

Thanks for the information.  Ugh.

It looks like we need to implement the check in our configure script and abort
if pkg-config is bad to avoid weired runtime issues due to not linked libs.

Probably, a grep, similar to what is in above dpdk patch, over the
DPDK_vswitchd_LDFLAGS with some meaningfull error message should do the trick.

Ian, what do you think?

Best regards, Ilya Maximets.
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to