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
56 lines
1.7 KiB
Markdown
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.
|