Files
ddidderr 3d679116d8 build(meson): link migrated Rust code into native libraries
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
2026-07-10 22:08:55 +02:00
..
2024-01-29 15:50:21 -08:00

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.