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:
parent
36c3c4df13
commit
f93a605f2d
21
buildtools/subproject/meson.build
Normal file
21
buildtools/subproject/meson.build
Normal 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
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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'
|
||||||
|
Loading…
Reference in New Issue
Block a user