[v3,1/7] build: always link-whole DPDK static libraries
Checks
Commit Message
To ensure all constructors are included in static build, we need to pass
the --whole-archive flag when linking, which is used with the
"link_whole" meson option. Since we use link_whole for all libs, we no
longer need to track the lib as part of the static dependency, just the
path to the headers for compiling.
After this patch is applied, all DPDK .a files are inside
--whole-archive/--no-whole-archive flags, but external dependencies and
shared libs being linked against remain outside.
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Tested-by: Andrzej Ostruszka <aostruszka@marvell.com>
Acked-by: Luca Boccassi <bluca@debian.org>
Acked-by: Sunil Pai G <sunil.pai.g@intel.com>
---
app/test/meson.build | 2 +-
drivers/meson.build | 2 +-
examples/meson.build | 6 +++---
lib/meson.build | 2 +-
4 files changed, 6 insertions(+), 6 deletions(-)
Comments
30/06/2020 16:14, Bruce Richardson:
> To ensure all constructors are included in static build, we need to pass
> the --whole-archive flag when linking, which is used with the
> "link_whole" meson option. Since we use link_whole for all libs, we no
> longer need to track the lib as part of the static dependency, just the
> path to the headers for compiling.
>
> After this patch is applied, all DPDK .a files are inside
> --whole-archive/--no-whole-archive flags, but external dependencies and
> shared libs being linked against remain outside.
>
> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> Tested-by: Andrzej Ostruszka <aostruszka@marvell.com>
> Acked-by: Luca Boccassi <bluca@debian.org>
> Acked-by: Sunil Pai G <sunil.pai.g@intel.com>
> ---
> --- a/app/test/meson.build
> +++ b/app/test/meson.build
> - link_libs = dpdk_drivers
> + link_libs = dpdk_static_libraries + dpdk_drivers
> link_nodes = dpdk_graph_nodes
[...]
> --- a/examples/meson.build
> +++ b/examples/meson.build
> -driver_libs = []
> +link_whole_libs = []
> node_libs = []
> if get_option('default_library') == 'static'
> - driver_libs = dpdk_drivers
> + link_whole_libs = dpdk_static_libraries + dpdk_drivers
> node_libs = dpdk_graph_nodes
I think the special case for librte_node may be removed.
I will propose a separate patch for this case.
Acked-by: Thomas Monjalon <thomas@monjalon.net>
@@ -415,7 +415,7 @@ test_dep_objs += cc.find_library('execinfo', required: false)
link_libs = []
link_nodes = []
if get_option('default_library') == 'static'
- link_libs = dpdk_drivers
+ link_libs = dpdk_static_libraries + dpdk_drivers
link_nodes = dpdk_graph_nodes
endif
@@ -200,7 +200,7 @@ foreach class:dpdk_driver_classes
shared_dep = declare_dependency(link_with: shared_lib,
include_directories: includes,
dependencies: shared_deps)
- static_dep = declare_dependency(link_with: static_lib,
+ static_dep = declare_dependency(
include_directories: includes,
dependencies: static_deps)
@@ -1,10 +1,10 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2017-2019 Intel Corporation
-driver_libs = []
+link_whole_libs = []
node_libs = []
if get_option('default_library') == 'static'
- driver_libs = dpdk_drivers
+ link_whole_libs = dpdk_static_libraries + dpdk_drivers
node_libs = dpdk_graph_nodes
endif
@@ -101,7 +101,7 @@ foreach example: examples
endif
executable('dpdk-' + name, sources,
include_directories: includes,
- link_whole: driver_libs + node_libs,
+ link_whole: link_whole_libs + node_libs,
link_args: dpdk_extra_ldflags,
c_args: cflags,
dependencies: dep_objs)
@@ -134,7 +134,7 @@ foreach l:libraries
dependencies: static_deps,
include_directories: includes,
install: true)
- static_dep = declare_dependency(link_with: static_lib,
+ static_dep = declare_dependency(
include_directories: includes,
dependencies: static_deps)