On Fri, 5 Nov 2021 14:58:24 +0000
Bruce Richardson <bruce.richard...@intel.com> wrote:

> On Thu, Nov 04, 2021 at 05:01:24PM -0700, Stephen Hemminger wrote:
> > Some other projects using meson may not be able to use DPDK
> > using the standard distribution pkg-config mechanism.
> > Meson supports a way to handle this via the subproject
> >   https://mesonbuild.com/Subprojects.html
> > 
> > This patch adds the necessary dependency to follow the
> > "Naming convention for dependency variables" from the documentation.
> > 
> > Signed-off-by: Stephen Hemminger <step...@networkplumber.org>
> > ---
> > Cleaned up from RFC and support both static and shared.
> > 
> >  lib/meson.build |  5 +++++
> >  meson.build     | 12 ++++++++++++
> >  2 files changed, 17 insertions(+)
> > 
> > diff --git a/lib/meson.build b/lib/meson.build
> > index 499d26060fdd..e6df538bd6ef 100644
> > --- a/lib/meson.build
> > +++ b/lib/meson.build
> > @@ -241,6 +241,11 @@ foreach l:libraries
> >  
> >      dpdk_libraries = [shared_lib] + dpdk_libraries
> >      dpdk_static_libraries = [static_lib] + dpdk_static_libraries
> > +    if get_option('default_library') == 'static'
> > +        dpdk_libs_deps += static_dep
> > +    else
> > +        dpdk_libs_deps += shared_dep
> > +    endif
> >  
> >      set_variable('shared_rte_' + name, shared_dep)
> >      set_variable('static_rte_' + name, static_dep)
> > diff --git a/meson.build b/meson.build
> > index 12cb6e0e83f3..032783e4e6cf 100644
> > --- a/meson.build
> > +++ b/meson.build
> > @@ -36,6 +36,7 @@ dpdk_drivers = []
> >  dpdk_extra_ldflags = []
> >  dpdk_libs_disabled = []
> >  dpdk_drvs_disabled = []
> > +dpdk_libs_deps = []
> >  abi_version_file = files('ABI_VERSION')
> >  
> >  if host_machine.cpu_family().startswith('x86')
> > @@ -97,6 +98,17 @@ configure_file(output: build_cfg,
> >  # build pkg-config files for dpdk
> >  subdir('buildtools/pkg-config')
> >  
> > +# If DPDK is being built as subproject then define
> > +# variable with the dependency convention
> > +if meson.is_subproject()
> > +    libdpdk_dep = declare_dependency(
> > +        version: meson.project_version(),
> > +        compile_args : pkg_extra_cflags,
> > +        dependencies: dpdk_libs_deps,
> > +        link_args: dpdk_extra_ldflags,
> > +    )
> > +endif
> > +  
> 
> While the code all looks correct to me, when I tested it out, the resulting
> app couldn't link. I tested by moving l2fwd/main.c to a new folder and
> adding the following as a meson.build file in it:
> 
>   project('l2fwd', 'C')
> 
>   dpdk_dep = dependency('libdpdk', fallback : ['libdpdk', 'libdpdk_dep'])
>   executable('dpdk-l2fwd', 'main.c',
>           dependencies: dpdk_dep)
> 
> Even though dependencies should include both the libs to link with and the
> include paths, that didn't seem to work in this case - the compile worked
> fine with all cflags present, none of the DPDK libraries were given on the
> link command - just the extra -ldl etc. args.
> Adding "link_with: dpdk_libraries" fixed this and allowed it work for me,
> but I'm surpised that it proved necessary. Stephen, does it work for you
> with just the dependencies provided?
> 
> /Bruce
> 
> PS: My testing was done with meson 0.56.2 on Ubuntu 21.10.

I was testing with a cross-build with an app that uses quite limited
dependencies, and it worked. Also, the app has same depedencies for some
of the parts that are missed.

Will try l3fwd and something more complex for next version

Reply via email to