From c7b8133ceaedbefd407d7d5b25ea543a930edb90 Mon Sep 17 00:00:00 2001 From: Eli Schwartz Date: Sun, 8 Aug 2021 21:43:59 -0400 Subject: [PATCH] meson: set the symbol visibility of the shared library to hidden This matches the Makefile build. Due to one private xxhash symbol in use by the program, it recompiles a private copy of xxhash. Due to the test binaries making extensive (?) use of private symbols, it doesn't even attempt to link to shared libzstd, and instead, all of the original object files are added to libtestcommon itself for private linkage. This, too, matches the Makefile build. Ref. #2261 --- build/meson/lib/meson.build | 1 + build/meson/meson.build | 2 +- build/meson/programs/meson.build | 4 +++- build/meson/tests/meson.build | 31 +++++++++++++++---------------- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/build/meson/lib/meson.build b/build/meson/lib/meson.build index 5cc9fee8625..5da53872959 100644 --- a/build/meson/lib/meson.build +++ b/build/meson/lib/meson.build @@ -108,6 +108,7 @@ libzstd = library('zstd', libzstd_sources, include_directories: libzstd_includes, c_args: libzstd_c_args, + gnu_symbol_visibility: 'hidden', dependencies: libzstd_deps, install: true, version: zstd_libversion) diff --git a/build/meson/meson.build b/build/meson/meson.build index b74932c41e2..0c29a7621b9 100644 --- a/build/meson/meson.build +++ b/build/meson/meson.build @@ -21,7 +21,7 @@ project('zstd', #'werror=true' ], version: 'DUMMY', - meson_version: '>=0.47.0') + meson_version: '>=0.48.0') cc = meson.get_compiler('c') cxx = meson.get_compiler('cpp') diff --git a/build/meson/programs/meson.build b/build/meson/programs/meson.build index d255627cd30..4181030c2ee 100644 --- a/build/meson/programs/meson.build +++ b/build/meson/programs/meson.build @@ -18,7 +18,9 @@ zstd_programs_sources = [join_paths(zstd_rootdir, 'programs/zstdcli.c'), join_paths(zstd_rootdir, 'programs/benchzstd.c'), join_paths(zstd_rootdir, 'programs/datagen.c'), join_paths(zstd_rootdir, 'programs/dibio.c'), - join_paths(zstd_rootdir, 'programs/zstdcli_trace.c')] + join_paths(zstd_rootdir, 'programs/zstdcli_trace.c'), + # needed due to use of private symbol + -fvisibility=hidden + join_paths(zstd_rootdir, 'lib/common/xxhash.c')] zstd_c_args = libzstd_debug_cflags if use_multi_thread diff --git a/build/meson/tests/meson.build b/build/meson/tests/meson.build index 0c4c3535a5b..04b9dd802be 100644 --- a/build/meson/tests/meson.build +++ b/build/meson/tests/meson.build @@ -34,32 +34,35 @@ testcommon_sources = [join_paths(zstd_rootdir, 'programs/datagen.c'), join_paths(zstd_rootdir, 'programs/timefn.c'), join_paths(zstd_rootdir, 'programs/benchfn.c'), join_paths(zstd_rootdir, 'programs/benchzstd.c')] + testcommon = static_library('testcommon', - testcommon_sources) + testcommon_sources, + # needed due to use of private symbol + -fvisibility=hidden + objects: libzstd.extract_all_objects(recursive: false)) + +testcommon_dep = declare_dependency(link_with: testcommon, + include_directories: libzstd_includes) datagen_sources = [join_paths(zstd_rootdir, 'tests/datagencli.c')] datagen = executable('datagen', datagen_sources, c_args: [ '-DNDEBUG' ], include_directories: test_includes, - dependencies: libzstd_dep, - link_with: testcommon, + dependencies: testcommon_dep, install: false) fullbench_sources = [join_paths(zstd_rootdir, 'tests/fullbench.c')] fullbench = executable('fullbench', fullbench_sources, include_directories: test_includes, - dependencies: libzstd_dep, - link_with: testcommon, + dependencies: testcommon_dep, install: false) fuzzer_sources = [join_paths(zstd_rootdir, 'tests/fuzzer.c')] fuzzer = executable('fuzzer', fuzzer_sources, include_directories: test_includes, - dependencies: [ libzstd_dep, thread_dep ], - link_with: testcommon, + dependencies: [ testcommon_dep, thread_dep ], install: false) zstreamtest_sources = [join_paths(zstd_rootdir, 'tests/seqgen.c'), @@ -67,22 +70,20 @@ zstreamtest_sources = [join_paths(zstd_rootdir, 'tests/seqgen.c'), zstreamtest = executable('zstreamtest', zstreamtest_sources, include_directories: test_includes, - dependencies: libzstd_dep, - link_with: testcommon, + dependencies: testcommon_dep, install: false) paramgrill_sources = [join_paths(zstd_rootdir, 'tests/paramgrill.c')] paramgrill = executable('paramgrill', paramgrill_sources, include_directories: test_includes, - dependencies: [ libzstd_dep, libm_dep ], - link_with: testcommon, + dependencies: [ testcommon_dep, libm_dep ], install: false) roundTripCrash_sources = [join_paths(zstd_rootdir, 'tests/roundTripCrash.c')] roundTripCrash = executable('roundTripCrash', roundTripCrash_sources, - dependencies: [ libzstd_dep ], + dependencies: [ testcommon_dep ], install: false) longmatch_sources = [join_paths(zstd_rootdir, 'tests/longmatch.c')] @@ -111,8 +112,7 @@ decodecorpus_sources = [join_paths(zstd_rootdir, 'tests/decodecorpus.c')] decodecorpus = executable('decodecorpus', decodecorpus_sources, include_directories: test_includes, - dependencies: [ libzstd_dep, libm_dep ], - link_with: testcommon, + dependencies: [ testcommon_dep, libm_dep ], install: false) poolTests_sources = [join_paths(zstd_rootdir, 'tests/poolTests.c'), @@ -123,8 +123,7 @@ poolTests_sources = [join_paths(zstd_rootdir, 'tests/poolTests.c'), poolTests = executable('poolTests', poolTests_sources, include_directories: test_includes, - dependencies: [ libzstd_dep, thread_dep ], - link_with: testcommon, + dependencies: [ testcommon_dep, thread_dep ], install: false) checkTag_sources = [join_paths(zstd_rootdir, 'tests/checkTag.c')]