Build a configuration-matched Cargo archive from Meson and flatten its object members into static libzstd. This gives C consumers one archive even though the migrated Rust objects and remaining C code refer to each other. Shared libraries whole-archive the Cargo output to retain Rust-only ABI exports. The implementation supports Meson 0.50's generated-archive linking rules, matching HUF mode and 32-bit configuration, and documents cross-build target and archiver selection. Test Plan: - fresh Meson both-build smoke consumers and invalidDictionaries - modern static/shared/both, forced-HUF, i686, install, and fuzzer paths - real Meson 0.50 static and shared smoke builds - cargo clippy, cargo clippy --benches, cargo clippy --tests, and nightly fmt Refs: build/meson/README.md archive and cross-build documentation
1.7 KiB
Meson build system for zstandard
Meson is a build system designed to optimize programmer productivity. It aims to do this by providing simple, out-of-the-box support for modern software development tools and practices, such as unit tests, coverage reports, Valgrind, CCache and the like.
This Meson build system is provided with no guarantee and maintained by Dima Krasner <dima@dimakrasner.com>.
It outputs one libzstd, either shared or static, depending on
default_library option.
The migrated compatibility modules are built with Cargo as part of every
Meson library build. Static builds flatten the Cargo object members into
libzstd.a, so external C consumers link one archive. Shared builds use a
whole-archive link for the Cargo archive, retaining Rust-only public ABI
exports.
How to build
cd to this meson directory (build/meson)
meson setup -Dbin_programs=true -Dbin_contrib=true builddir
cd builddir
ninja # to build
ninja install # to install
You might want to install it in staging directory:
DESTDIR=./staging ninja install
To configure build options, use:
meson configure
See man meson(1).
For a cross build, set the Cargo target explicitly, for example:
meson setup -Dzstd_rust_target=aarch64-unknown-linux-gnu builddir
On 32-bit Linux, the i686-unknown-linux-gnu target is selected
automatically. Set -Dzstd_rust_archiver=... when the C cross toolchain needs
a non-default archiver. The huf_force_decompress_x1 and
huf_force_decompress_x2 options select matching C and Rust decoder modes.