Files
zstd-rs/build/meson/README.md
T
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

56 lines
1.7 KiB
Markdown

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`)
```sh
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:
```sh
DESTDIR=./staging ninja install
```
To configure build options, use:
```sh
meson configure
```
See [man meson(1)](https://manpages.debian.org/testing/meson/meson.1.en.html).
For a cross build, set the Cargo target explicitly, for example:
```sh
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.