mirror of
https://github.com/mii443/wasmer.git
synced 2025-09-03 16:09:20 +00:00
In both of these engines, the compiled code may be loaded in memory far from the Wasmer runtime which means that libcalls may not be reachable through the normal relocation types. Instead a trampoline is needed to allow reaching any address in the 64-bit address space. In the case of engine-dylib, this is even worse since the symbols are not exported by the executable without some special linker flags. The solution here is to manually patch in the addresses at load time into a data table of function pointers.
wasmer-compiler-llvm

This crate contains a compiler implementation based on the LLVM Compiler Infrastructure.
Usage
use wasmer::{Store, Universal};
use wasmer_compiler_llvm::LLVM;
let compiler = LLVM::new();
// Put it into an engine and add it to the store
let store = Store::new(&Universal::new(compiler).engine());
Note: you can find a full working example using LLVM compiler here.
When to use LLVM
We recommend using LLVM as the default compiler when running WebAssembly files on any production system, as it offers maximum peformance near to native speeds.
Requirements
The LLVM compiler requires a valid installation of LLVM in your system. It currently requires LLVM 12.
You can install LLVM easily on your Debian-like system via this command:
wget https://apt.llvm.org/llvm.sh -O /tmp/llvm.sh
sudo bash /tmp/llvm.sh 12
Or in macOS:
brew install llvm
Or via any of the pre-built binaries that LLVM offers.