wasmer/README.md

153 lines
4.1 KiB
Markdown
Raw Normal View History

<p align="center"><a href="https://wasmer.io" target="_blank" rel="noopener noreferrer"><img width="400" src="https://raw.githubusercontent.com/wasmerio/wasmer/master/logo.png" alt="Wasmer logo"></a></p>
2018-11-05 13:52:53 +00:00
<p align="center">
<a href="https://circleci.com/gh/wasmerio/wasmer/"><img src="https://img.shields.io/circleci/project/github/wasmerio/wasmer/master.svg" alt="Build Status"></a>
<a href="https://github.com/wasmerio/wasmer/blob/master/LICENSE"><img src="https://img.shields.io/github/license/wasmerio/wasmer.svg" alt="License"></a>
2018-11-05 13:52:53 +00:00
</p>
2018-11-05 13:52:53 +00:00
## Introduction
[Wasmer](https://wasmer.io/) is a Standalone JIT WebAssembly runtime, aiming to be fully compatible with Emscripten, Rust and Go.
Install Wasmer with:
```sh
curl https://get.wasmer.io -sSfL | sh
```
2019-01-24 22:50:29 +00:00
_**NEW ✨**: Now you can also embed Wasmer in your Rust application, check our [example repo](https://github.com/wasmerio/wasmer-rust-example) to see how to do it!_
2018-12-07 19:25:31 +00:00
### Usage
2018-11-05 13:52:53 +00:00
`wasmer` can execute both the standard binary format (`.wasm`) and the text
format defined by the WebAssembly reference interpreter (`.wat`).
Once installed, you will be able to run any WebAssembly files (_including Nginx, and Lua!_):
2018-10-14 21:49:10 +00:00
```sh
# Run Lua
wasmer run examples/lua.wasm
# Run Nginx
2018-12-07 04:25:14 +00:00
wasmer run examples/nginx/nginx.wasm -- -p examples/nginx -c nginx.conf
2018-10-14 21:49:10 +00:00
```
## Code Structure
Wasmer is structured into different directories:
- [`src`](./src): code related to the wasmer excutable binary itself
- [`lib`](./lib): modularized libraries that Wasmer uses under the hood
- [`examples`](./examples): some useful examples to getting started with wasmer
## Dependencies
Building wasmer requires [rustup](https://rustup.rs/).
To install on Windows, download and run [`rustup-init.exe`](https://win.rustup.rs/)
then follow the onscreen instructions.
To install on other systems, run:
```sh
curl https://sh.rustup.rs -sSf | sh
```
### Other dependencies
Please select your operating system:
2019-01-24 22:50:29 +00:00
- [macOS](#macos)
- [Debian-based Linuxes](#debian-based-linuxes)
- [Microsoft Windows](#windows-msvc)
#### macOS
If you have [homebrew](https://brew.sh/) installed:
2019-01-24 22:50:29 +00:00
```sh
brew install cmake
```
Or, in case you have [ports](https://www.macports.org/install.php):
```sh
sudo port install cmake
```
#### Debian-based Linuxes
2019-01-24 22:50:29 +00:00
```sh
sudo apt install cmake
```
#### Windows (MSVC)
2019-01-24 22:50:29 +00:00
Right now Windows support is _highly experimental_.
We are working on this so Wasmer can soon be released for Windows.
1. Install Python for Windows (https://www.python.org/downloads/release/python-2714/). The Windows x86-64 MSI installer is fine.
2019-01-24 22:50:29 +00:00
You should change the installation to install the "Add python.exe to Path" feature.
2. Install Git for Windows (https://git-scm.com/download/win). DO allow it to add git.exe to the PATH (default
2019-01-24 22:50:29 +00:00
settings for the installer are fine).
## Building
Wasmer is built with [Cargo](https://crates.io/), the Rust package manager.
```sh
# checkout code
git clone https://github.com/wasmerio/wasmer.git
cd wasmer
# install tools
# make sure that `python` is accessible.
2019-01-21 02:18:59 +00:00
cargo install --path .
```
2018-10-14 21:49:10 +00:00
## Testing
Thanks to [spectests](https://github.com/wasmerio/wasmer/tree/master/spectests) we can assure 100% compatibility with the WebAssembly spec test suite.
2018-10-24 10:07:52 +00:00
2018-10-14 21:49:10 +00:00
Tests can be run with:
```sh
2018-11-15 21:30:00 +00:00
make test
2018-10-14 21:49:10 +00:00
```
2018-10-24 10:07:52 +00:00
If you need to re-generate the Rust tests from the spectests
you can run:
```sh
make spectests
```
2019-01-18 20:20:13 +00:00
You can also run integration tests with:
```sh
make integration-tests
```
2018-10-24 10:07:52 +00:00
## Roadmap
2018-10-14 21:54:28 +00:00
Wasmer is an open project guided by strong principles, aiming to be modular, flexible and fast. It is open to the community to help set its direction.
2018-10-24 10:07:52 +00:00
Below are some of the goals (written with order) of this project:
- [x] It should be 100% compatible with the [WebAssembly Spectest](https://github.com/wasmerio/wasmer/tree/master/spectests)
- [x] It should be fast _(partially achieved)_
2019-01-25 16:35:18 +00:00
- [ ] Support Emscripten calls _(in the works)_
2018-10-24 10:07:52 +00:00
- [ ] Support Rust ABI calls
- [ ] Support GO ABI calls
2018-12-07 19:25:31 +00:00
## Architecture
If you would like to know how Wasmer works under the hood, please visit our [ARCHITECTURE](https://github.com/wasmerio/wasmer/blob/master/ARCHITECTURE.md) document.
## License
MIT/Apache-2.0
2018-12-19 21:00:07 +00:00
<small>[Attributions](./ATTRIBUTIONS.md)</small>.