mirror of
https://github.com/facebook/zstd.git
synced 2025-12-08 00:03:24 -05:00
Merge pull request #3122 from eli-schwartz/betterlinkage
meson: for internal linkage, link to both libzstd and a static copy of it
This commit is contained in:
commit
ea763f33cb
@ -126,6 +126,35 @@ libzstd = library('zstd',
|
|||||||
libzstd_dep = declare_dependency(link_with: libzstd,
|
libzstd_dep = declare_dependency(link_with: libzstd,
|
||||||
include_directories: libzstd_includes)
|
include_directories: libzstd_includes)
|
||||||
|
|
||||||
|
# we link to both:
|
||||||
|
# - the shared library (for public symbols)
|
||||||
|
# - the static library (for private symbols)
|
||||||
|
#
|
||||||
|
# this is needed because internally private symbols are used all the time, and
|
||||||
|
# -fvisibility=hidden means those cannot be found
|
||||||
|
if get_option('default_library') == 'static'
|
||||||
|
libzstd_static = libzstd
|
||||||
|
libzstd_internal_dep = libzstd_dep
|
||||||
|
else
|
||||||
|
if get_option('default_library') == 'shared'
|
||||||
|
libzstd_static = static_library('zstd_objlib',
|
||||||
|
objects: libzstd.extract_all_objects(recursive: true),
|
||||||
|
build_by_default: false)
|
||||||
|
else
|
||||||
|
libzstd_static = libzstd.get_static_lib()
|
||||||
|
endif
|
||||||
|
|
||||||
|
if cc_id == compiler_msvc
|
||||||
|
# msvc does not actually support linking to both, but errors out with:
|
||||||
|
# error LNK2005: ZSTD_<foo> already defined in zstd.lib(zstd-1.dll)
|
||||||
|
libzstd_internal_dep = declare_dependency(link_with: libzstd_static)
|
||||||
|
else
|
||||||
|
libzstd_internal_dep = declare_dependency(link_with: libzstd,
|
||||||
|
# the static library must be linked after the shared one
|
||||||
|
dependencies: declare_dependency(link_with: libzstd_static))
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
pkgconfig.generate(libzstd,
|
pkgconfig.generate(libzstd,
|
||||||
name: 'libzstd',
|
name: 'libzstd',
|
||||||
filebase: 'libzstd',
|
filebase: 'libzstd',
|
||||||
|
|||||||
@ -19,17 +19,12 @@ zstd_programs_sources = [join_paths(zstd_rootdir, 'programs/zstdcli.c'),
|
|||||||
join_paths(zstd_rootdir, 'programs/benchzstd.c'),
|
join_paths(zstd_rootdir, 'programs/benchzstd.c'),
|
||||||
join_paths(zstd_rootdir, 'programs/datagen.c'),
|
join_paths(zstd_rootdir, 'programs/datagen.c'),
|
||||||
join_paths(zstd_rootdir, 'programs/dibio.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'),
|
|
||||||
join_paths(zstd_rootdir, 'lib/common/pool.c'),
|
|
||||||
join_paths(zstd_rootdir, 'lib/common/zstd_common.c'),
|
|
||||||
join_paths(zstd_rootdir, 'lib/common/error_private.c')]
|
|
||||||
|
|
||||||
zstd_deps = [ libzstd_dep ]
|
zstd_deps = [ libzstd_internal_dep ]
|
||||||
zstd_c_args = libzstd_debug_cflags
|
zstd_c_args = libzstd_debug_cflags
|
||||||
|
|
||||||
zstd_frugal_deps = [ libzstd_dep ]
|
zstd_frugal_deps = [ libzstd_internal_dep ]
|
||||||
zstd_frugal_c_args = [ '-DZSTD_NOBENCH', '-DZSTD_NODICT', '-DZSTD_NOTRACE' ]
|
zstd_frugal_c_args = [ '-DZSTD_NOBENCH', '-DZSTD_NODICT', '-DZSTD_NOTRACE' ]
|
||||||
|
|
||||||
if use_multi_thread
|
if use_multi_thread
|
||||||
@ -82,10 +77,7 @@ zstd_frugal_sources = [join_paths(zstd_rootdir, 'programs/zstdcli.c'),
|
|||||||
join_paths(zstd_rootdir, 'programs/timefn.c'),
|
join_paths(zstd_rootdir, 'programs/timefn.c'),
|
||||||
join_paths(zstd_rootdir, 'programs/util.c'),
|
join_paths(zstd_rootdir, 'programs/util.c'),
|
||||||
join_paths(zstd_rootdir, 'programs/fileio.c'),
|
join_paths(zstd_rootdir, 'programs/fileio.c'),
|
||||||
join_paths(zstd_rootdir, 'programs/fileio_asyncio.c'),
|
join_paths(zstd_rootdir, 'programs/fileio_asyncio.c')]
|
||||||
join_paths(zstd_rootdir, 'lib/common/pool.c'),
|
|
||||||
join_paths(zstd_rootdir, 'lib/common/zstd_common.c'),
|
|
||||||
join_paths(zstd_rootdir, 'lib/common/error_private.c')]
|
|
||||||
|
|
||||||
# Minimal target, with only zstd compression and decompression.
|
# Minimal target, with only zstd compression and decompression.
|
||||||
# No bench. No legacy.
|
# No bench. No legacy.
|
||||||
|
|||||||
@ -38,7 +38,7 @@ testcommon_sources = [join_paths(zstd_rootdir, 'programs/datagen.c'),
|
|||||||
testcommon = static_library('testcommon',
|
testcommon = static_library('testcommon',
|
||||||
testcommon_sources,
|
testcommon_sources,
|
||||||
# needed due to use of private symbol + -fvisibility=hidden
|
# needed due to use of private symbol + -fvisibility=hidden
|
||||||
objects: libzstd.extract_all_objects(recursive: false))
|
link_with: libzstd_static)
|
||||||
|
|
||||||
testcommon_dep = declare_dependency(link_with: testcommon,
|
testcommon_dep = declare_dependency(link_with: testcommon,
|
||||||
dependencies: libzstd_deps,
|
dependencies: libzstd_deps,
|
||||||
@ -116,11 +116,7 @@ decodecorpus = executable('decodecorpus',
|
|||||||
dependencies: [ testcommon_dep, libm_dep ],
|
dependencies: [ testcommon_dep, libm_dep ],
|
||||||
install: false)
|
install: false)
|
||||||
|
|
||||||
poolTests_sources = [join_paths(zstd_rootdir, 'tests/poolTests.c'),
|
poolTests_sources = [join_paths(zstd_rootdir, 'tests/poolTests.c')]
|
||||||
join_paths(zstd_rootdir, 'lib/common/pool.c'),
|
|
||||||
join_paths(zstd_rootdir, 'lib/common/threading.c'),
|
|
||||||
join_paths(zstd_rootdir, 'lib/common/zstd_common.c'),
|
|
||||||
join_paths(zstd_rootdir, 'lib/common/error_private.c')]
|
|
||||||
poolTests = executable('poolTests',
|
poolTests = executable('poolTests',
|
||||||
poolTests_sources,
|
poolTests_sources,
|
||||||
include_directories: test_includes,
|
include_directories: test_includes,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user