build: add definitions for use as Meson subproject

To allow other projects to easily use DPDK as a subproject, add in the
necessary dependency definitions. Slightly different definitions are
necessary for static and shared builds, since for shared builds the
drivers should not be linked in, and the internal meson dependency
objects are more complete.

To use DPDK as a subproject fallback i.e. use installed DPDK if present,
otherwise the shipped one, the following meson statement can be used:

libdpdk = dependency('libdpdk', fallback: ['dpdk', 'dpdk_dep'])

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Ben Magistro <koncept1@gmail.com>
Tested-by: Ben Magistro <koncept1@gmail.com>
This commit is contained in:
Bruce Richardson 2022-05-06 15:43:18 +01:00 committed by Thomas Monjalon
parent 36c3c4df13
commit f93a605f2d
4 changed files with 33 additions and 0 deletions

View File

@ -0,0 +1,21 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2022 Intel Corporation
message('DPDK subproject linking: ' + get_option('default_library'))
if get_option('default_library') == 'static'
dpdk_dep = declare_dependency(
version: meson.project_version(),
dependencies: dpdk_static_lib_deps,
# static library deps in DPDK build don't include "link_with" parameters,
# so explicitly link-in both libs and drivers
link_with: dpdk_static_libraries,
link_whole: dpdk_drivers,
link_args: dpdk_extra_ldflags)
else
dpdk_dep = declare_dependency(
version: meson.project_version(),
# shared library deps include all necessary linking parameters
dependencies: dpdk_shared_lib_deps)
endif
libdpdk_dep = dpdk_dep

View File

@ -246,6 +246,10 @@ foreach subpath:subdirs
set_variable('shared_@0@'.format(lib_name), shared_dep) set_variable('shared_@0@'.format(lib_name), shared_dep)
set_variable('static_@0@'.format(lib_name), static_dep) set_variable('static_@0@'.format(lib_name), static_dep)
# for drivers, we only need to add dependency objects for static libs,
# shared lib drivers are not linked in
dpdk_static_lib_deps += static_dep
dependency_name = ''.join(lib_name.split('rte_')) dependency_name = ''.join(lib_name.split('rte_'))
if testpmd_sources.length() != 0 if testpmd_sources.length() != 0
testpmd_drivers_sources += testpmd_sources testpmd_drivers_sources += testpmd_sources

View File

@ -266,6 +266,8 @@ foreach l:libraries
set_variable('shared_rte_' + name, shared_dep) set_variable('shared_rte_' + name, shared_dep)
set_variable('static_rte_' + name, static_dep) set_variable('static_rte_' + name, static_dep)
dpdk_shared_lib_deps += shared_dep
dpdk_static_lib_deps += static_dep
if developer_mode if developer_mode
message('lib/@0@: Defining dependency "@1@"'.format(l, name)) message('lib/@0@: Defining dependency "@1@"'.format(l, name))
endif endif

View File

@ -36,6 +36,8 @@ dpdk_build_root = meson.current_build_dir()
dpdk_conf = configuration_data() dpdk_conf = configuration_data()
dpdk_libraries = [] dpdk_libraries = []
dpdk_static_libraries = [] dpdk_static_libraries = []
dpdk_shared_lib_deps = []
dpdk_static_lib_deps = []
dpdk_chkinc_headers = [] dpdk_chkinc_headers = []
dpdk_driver_classes = [] dpdk_driver_classes = []
dpdk_drivers = [] dpdk_drivers = []
@ -105,6 +107,10 @@ configure_file(output: build_cfg,
# build pkg-config files for dpdk # build pkg-config files for dpdk
subdir('buildtools/pkg-config') subdir('buildtools/pkg-config')
if meson.is_subproject()
subdir('buildtools/subproject')
endif
# final output, list all the libs and drivers to be built # final output, list all the libs and drivers to be built
# this does not affect any part of the build, for information only. # this does not affect any part of the build, for information only.
output_message = '\n=================\nLibraries Enabled\n=================\n' output_message = '\n=================\nLibraries Enabled\n=================\n'