From 9748608aeb6a68ca622268eb8ba07e9003079e8f 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 | 32 ++++++++++++++++---------------- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/build/meson/lib/meson.build b/build/meson/lib/meson.build index 5cc9fee86..5da538729 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 b74932c41..0c29a7621 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 d255627cd..4181030c2 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 0c4c3535a..14f45982a 100644 --- a/build/meson/tests/meson.build +++ b/build/meson/tests/meson.build @@ -34,32 +34,36 @@ 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, + dependencies: libzstd_deps, + 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 +71,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 +113,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 +124,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')] -- 2.47.2