docs/PACKAGING.md
Wasmer is written in Rust. To build Wasmer, where possible, do not
directly invoke cargo, but use the supplied Makefile
Wasmer provides several compilers and the Makefile autodetects
when compilers can be compiled and/or installed. Set the environment
variables ENABLE_{CRANELIFT,LLVM,SINGLEPASS}=1 to force compiler
to be build or to fail trying, e.g:
$ ENABLE_LLVM=1 make build-wasmer
make install respects DESTDIR, but prefix must be configured
with WASMER_INSTALL_PREFIX. Note that DESTDIR must include
WASMER_INSTALL_PREFIX, e.g.:
export WASMER_INSTALL_PREFIX=/usr
make
DESTDIR=/tmp/staging/usr make install
In case you must build/install directly with cargo, make sure to
enable at least one compiler feature, like e.g. --features cranelift,
cargo build --workspace --features …
will not enable features on the subcrates in the workspace and
result in a headless Wasmer binary that can not compile Wasm files
directly.For reproducible builds, set WASMER_REPRODUCIBLE_BUILD=1 in the
build environment. This strips the build timestamp from
wasmer --version -v by omitting the verbose commit-date: line,
which is useful for distribution packaging.
If you split the package into several subpackages, beware that the
create-exe command of the wasmer CLI requires libwasmer.a to
be installed at $WASMER_INSTALL_PREFIX/lib/libwasmer.a. Suggestions for splitting:
The wasmer-headless CLI contains a subset of the wasmer's functionalities
and should only be packaged when splitting — it must be built
explicitly with:
$ make build-wasmer-headless-minimal install-wasmer-headless-minimal
libwasmer, containing libwasmer.so*,
libwasmer-dev, containing the header files and a .pc file,
libwasmer-static, containing libwasmer.a.
The Wasmer distro packaging story is still in its infancy, so feedback is very welcome.
Wasmer can be registered as a binfmt interpreter for wasm binaries. An example systemd .service is included here. Please consider statically linking the wasmer binary so that this capability is also available in mount namespaces.