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.
