> -----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