docs/PACKAGING.md
Wasmer is written in Rust. To build Wasmer, where possible, do not
directly invoke cargo, but use the supplied Makefile
For packaging purposes, use the provided wasmer-full-source.tar.gz,
which includes all required submodules.
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.