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.richard...@intel.com>
Tested-by: Andrzej Ostruszka <aostrus...@marvell.com>
---
V2: amended git log to clarify that external dependencies are unaffected by
this change
---
 app/test/meson.build | 2 +-
 drivers/meson.build  | 2 +-
 examples/meson.build | 6 +++---
 lib/meson.build      | 2 +-
 4 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/app/test/meson.build b/app/test/meson.build
index fc60acbe7..5f2c803d6 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -400,7 +400,7 @@ test_dep_objs += cc.find_library('execinfo', required: 
false)
 
 link_libs = []
 if get_option('default_library') == 'static'
-       link_libs = dpdk_drivers
+       link_libs = dpdk_static_libraries + dpdk_drivers
 endif
 
 dpdk_test = executable('dpdk-test',
diff --git a/drivers/meson.build b/drivers/meson.build
index dc293b270..53c2ff0f3 100644
--- a/drivers/meson.build
+++ b/drivers/meson.build
@@ -196,7 +196,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)
 
diff --git a/examples/meson.build b/examples/meson.build
index 1f2b6f516..ec6bd5a08 100644
--- a/examples/meson.build
+++ b/examples/meson.build
@@ -1,9 +1,9 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2017-2019 Intel Corporation
 
-driver_libs = []
+link_whole_libs = []
 if get_option('default_library') == 'static'
-       driver_libs = dpdk_drivers
+       link_whole_libs = dpdk_static_libraries + dpdk_drivers
 endif
 
 execinfo = cc.find_library('execinfo', required: false)
@@ -99,7 +99,7 @@ foreach example: examples
                endif
                executable('dpdk-' + name, sources,
                        include_directories: includes,
-                       link_whole: driver_libs,
+                       link_whole: link_whole_libs,
                        link_args: dpdk_extra_ldflags,
                        c_args: cflags,
                        dependencies: dep_objs)
diff --git a/lib/meson.build b/lib/meson.build
index 07a65a625..44b850033 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -128,7 +128,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)
 
-- 
2.20.1

Reply via email to