> -----Original Message-----
> From: Pai G, Sunil <[email protected]>
> Sent: Thursday, July 2, 2020 4:25 PM
> To: Ilya Maximets <[email protected]>; [email protected]
> Cc: Stokes, Ian <[email protected]>; [email protected];
> Richardson, Bruce <[email protected]>; Tummala, Sivaprasad
> <[email protected]>
> Subject: RE: [PATCH RFC dpdk-latest] build: Add support for DPDK meson
> build.
> 
> > -----Original Message-----
> > From: Ilya Maximets <[email protected]>
> > Sent: Thursday, July 2, 2020 7:26 PM
> > To: Pai G, Sunil <[email protected]>; [email protected]
> > Cc: Stokes, Ian <[email protected]>; [email protected];
> > [email protected]; Richardson, Bruce
> > <[email protected]>; Tummala, Sivaprasad
> > <[email protected]>; [email protected]
> > Subject: Re: [PATCH RFC dpdk-latest] build: Add support for DPDK meson
> build.
> >
> > On 7/2/20 3:13 PM, Sunil Pai G 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.
> > >
> > > Signed-off-by: Sunil Pai G <[email protected]>
> >
> > Thanks for working on this!
> > Not a full review, just a few quick bits.
> >
> > At first, why dpdk-latest?  Is there issue with meson build on 19.11?
> 
> The linker always picked the shared DPDK libraries over static when built
> with Meson in DPDK-19.11. -Bstatic flag would get jumbled by libtool
> causing this.
> Thanks to Bruce, there was recently merged series which fixed a bunch of
> issues along with this :
> https://patches.dpdk.org/project/dpdk/list/?series=10690
> It is requested for a back port of this series to DPDK-19.11.
> 
> >
> > Few more comments inline.
> >
> > Best regards, Ilya Maximets.
> >
> > > ---
> > >  .travis.yml                           |  3 ++
> > >  .travis/linux-build.sh                | 37 +++++++++-------
> > >  .travis/linux-prepare.sh              |  1 +
> > >  Documentation/intro/install/afxdp.rst |  2 +-
> > > Documentation/intro/install/dpdk.rst  | 56 ++++++++++++++++++++----
> > >  Makefile.am                           |  3 +-
> > >  acinclude.m4                          | 42 ++++++++++++------
> > >  parse_pkg_cfg.py                      | 62
> +++++++++++++++++++++++++++
> > >  8 files changed, 167 insertions(+), 39 deletions(-)  create mode
> > > 100644 parse_pkg_cfg.py
> > >
> > > diff --git a/.travis.yml b/.travis.yml index 97249c1ce..46d7ad9bb
> > > 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
> > > 33b359a61..7fa7e738c 100755
> > > --- a/.travis/linux-build.sh
> > > +++ b/.travis/linux-build.sh
> > > @@ -85,17 +85,21 @@ function install_dpdk()  {
> > >      local DPDK_VER=$1
> > >      local VERSION_FILE="dpdk-dir/travis-dpdk-cache-version"
> > > +    local DPDK_OPTS=""
> > >
> > > -    if [ -z "$TRAVIS_ARCH" ] ||
> > > -       [ "$TRAVIS_ARCH" == "amd64" ]; then
> > > -        TARGET="x86_64-native-linuxapp-gcc"
> > > -    elif [ "$TRAVIS_ARCH" == "aarch64" ]; then
> > > -        TARGET="arm64-armv8a-linuxapp-gcc"
> > > -    else
> > > +    if [ "$TRAVIS_ARCH" == "aarch64" ]; then
> > > +        DPDK_OPTS="$DPDK_OPTS --cross-file
> > config/arm/arm64_armv8_linux_gcc"
> >
> > We're not cross compiling, we're actually building on aarch64 here.
> > This option should not be needed.  IIUC, meson should detect current
> > architecture and build with appropriate configuration.
> >
> > We should be able to just drop all the TRAVIS_ARCH checks for DPDK here.
> 
> Sure ,let me check on this . I see a similar approach taken in DPDK
> travis.
> May be Bruce can comment as well ?
> 
> >
> > > +    elif [ "$TRAVIS_ARCH" != "amd64" ] && [ -n "$TRAVIS_ARCH" ];
> > > + then
> > >          echo "Target is unknown"
> > >          exit 1
> > >      fi
> > >
> > > +    if [ "$DPDK_SHARED" ]; then
> > > +        EXTRA_OPTS="$EXTRA_OPTS --with-dpdk=shared"
> > > +    else
> > > +        EXTRA_OPTS="$EXTRA_OPTS --with-dpdk=static"
> > > +    fi
> >
> > I gusee we could just change the env variable and not parse it here.
> > i.e. have DPDK_LIB=static defined by travis.yml by default and
> > redefine it for matrix entries where we need shared libs.
> 
> Yes , this could be done. But if we install the libraries in a custom path
> using a prefix, we would have to export the LD_LIBRARY_PATH for which
> querying whether to build as shared/static will be required.(This in
> relation to the below comment as well :))
> 
> 
> >
> > > +
> > >      if [ "${DPDK_VER##refs/*/}" != "${DPDK_VER}" ]; then
> > >          # Avoid using cache for git tree build.
> > >          rm -rf dpdk-dir
> > > @@ -108,7 +112,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"
> > > +                sudo ninja -C $(pwd)/dpdk-dir/build install
> > > +                sudo ldconfig
> >
> > I think that installing right here inside the cached folder and just
> > adjusting environment variables should be a bit faster than re-
> installing DPDK every time.
> >
> > This script also will be a good example for people like me, who really
> > don't want to install development versions of DPDK globally on a work
> > laptop while testing OVS builds.
> 
> Yes , Thanks for the suggestion. Although ,using an install to a directory
> with a prefix would require this patch from Bruce:
> https://patches.dpdk.org/patch/72271/
>  (which is not merged yet as of this writing) .without this , OVS would
> fail to run searching for few shared DPDK libraries even when built with
> static libraries.
> 
> >
> > >                  echo "Found cached DPDK ${VER} build in $(pwd)/dpdk-
> dir"
> > >                  return
> > >              fi
> > > @@ -122,16 +127,18 @@ function install_dpdk()
> > >          pushd dpdk-dir
> > >      fi
> > >
> > > -    make config CC=gcc T=$TARGET
> > > +    # Disable building DPDK kernel modules. Not needed for OVS build
> or tests.
> > > +    DPDK_OPTS="$DPDK_OPTS -Denable_kmods=false"
> >
> > We should also disable examples and tests at least.
> 
> Sure , this will reduce the build time as well.
>  Will update in the next version.
> 

Examples will be disabled by default, but disabling tests indeed makes sense 
here.

> >
> > >
> > > -    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
> > > +    DPDK_OPTS="$DPDK_OPTS -Dc_args=-fPIC"
> > > +    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
> > > 8cbbd5623..682f6234b 100755
> > > --- a/.travis/linux-prepare.sh
> > > +++ b/.travis/linux-prepare.sh
> > > @@ -16,6 +16,7 @@ cd ..
> > >
> > >  pip3 install --disable-pip-version-check --user flake8 hacking
> > >  pip3 install --user --upgrade docutils
> > > +pip3 install --user  'meson==0.47.1'
> >
> > I understand that that is the minimum required version, but why not
> > the most recent one or, at least, a bit more recent?
> >
> 
> Yes , quoting David's commit message from DPDK travis :
> "
>     meson 0.53.0 has a compatibility issue [1] with the python 3.5.2 that
> comes
>     in Ubuntu 16.04.
>     On the other hand, the minimal version supported in dpdk is 0.47.1.
> 
>     Stick to this version to avoid getting hit by regressions in meson
> latest
>     shiny release.
> 
>     1: https://github.com/mesonbuild/meson/issues/6427
> "
> 

Does your travis instance use 16.04 or 18.04? If possible can you standardize
on a new specific version to get some additional benefits. For example, with 
meson
0.54 there is support for "uninstalled" pkg-config files, which you can use for
linking against a DPDK instance which has not been installed on the system.
[https://mesonbuild.com/Release-notes-for-0-54-0.html#uninstalled-pkgconfig-files]
I think that feature may be of interest or of use for the future.
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to