Skip to content

Commit

Permalink
Try #416:
Browse files Browse the repository at this point in the history
  • Loading branch information
bors[bot] committed May 15, 2019
2 parents 6b43a6a + 0ab8a04 commit 04d232b
Show file tree
Hide file tree
Showing 34 changed files with 2,471 additions and 521 deletions.
3 changes: 1 addition & 2 deletions .circleci/config.yml
Expand Up @@ -89,7 +89,7 @@ jobs:
- restore_cache:
keys:
- v8-cargo-cache-darwin-stable-{{ arch }}-{{ checksum "Cargo.lock" }}
- v8-cargo-cache-darwin-stable-{{ arch }}
# - v8-cargo-cache-darwin-stable-{{ arch }}
- run:
name: Install crate dependencies
command: |
Expand Down Expand Up @@ -372,7 +372,6 @@ jobs:
-d build_parameters[CIRCLE_JOB]=bench \
https://circleci.com/api/v1.1/project/github/wasmerio/wasmer-bench/tree/master
fi
workflows:
version: 2
main:
Expand Down
718 changes: 391 additions & 327 deletions Cargo.lock

Large diffs are not rendered by default.

5 changes: 4 additions & 1 deletion Cargo.toml
Expand Up @@ -19,6 +19,7 @@ include = [
]

[dependencies]
byteorder = "1.3.1"
errno = "0.2.4"
structopt = "0.2.11"
wabt = "0.7.2"
Expand All @@ -32,9 +33,10 @@ wasmer-runtime-core = { path = "lib/runtime-core" }
wasmer-emscripten = { path = "lib/emscripten" }
wasmer-llvm-backend = { path = "lib/llvm-backend", optional = true }
wasmer-wasi = { path = "lib/wasi", optional = true }
wasmer-kernel-loader = { path = "lib/kernel-loader", optional = true }

[workspace]
members = ["lib/clif-backend", "lib/singlepass-backend", "lib/runtime", "lib/runtime-abi", "lib/runtime-core", "lib/emscripten", "lib/spectests", "lib/win-exception-handler", "lib/runtime-c-api", "lib/llvm-backend", "lib/wasi", "lib/middleware-common", "examples/plugin-for-example"]
members = ["lib/clif-backend", "lib/singlepass-backend", "lib/runtime", "lib/runtime-abi", "lib/runtime-core", "lib/emscripten", "lib/spectests", "lib/win-exception-handler", "lib/runtime-c-api", "lib/llvm-backend", "lib/wasi", "lib/middleware-common", "lib/kernel-loader", "lib/kernel-net", "examples/plugin-for-example"]

[build-dependencies]
wabt = "0.7.2"
Expand All @@ -43,6 +45,7 @@ rustc_version = "0.2.3"

[features]
default = ["fast-tests", "wasi"]
"loader:kernel" = ["wasmer-kernel-loader"]
debug = ["wasmer-runtime-core/debug"]
extra-debug = ["wasmer-clif-backend/debug", "wasmer-runtime-core/debug"]
# This feature will allow cargo test to run much faster
Expand Down
12 changes: 6 additions & 6 deletions Makefile
Expand Up @@ -67,27 +67,27 @@ test-emscripten-singlepass:
cargo test --manifest-path lib/emscripten/Cargo.toml --features singlepass -- --test-threads=1 $(runargs)

singlepass-debug-release:
cargo +nightly build --features "backend:singlepass debug" --release
cargo +nightly build --features backend:singlepass,debug --release

singlepass-release:
cargo +nightly build --features "backend:singlepass" --release
cargo +nightly build --features backend:singlepass --release

singlepass-build:
cargo +nightly build --features "backend:singlepass debug"
cargo +nightly build --features backend:singlepass,debug

release:
# If you are in OS-X, you will need mingw-w64 for cross compiling to windows
# brew install mingw-w64
cargo build --release

production-release:
cargo build --release --features backend:singlepass,backend:llvm
cargo build --release --features backend:singlepass,backend:llvm,loader:kernel

debug-release:
cargo build --release --features "debug"
cargo build --release --features debug

extra-debug-release:
cargo build --release --features "extra-debug"
cargo build --release --features extra-debug

publish-release:
ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -delete ${VERSION} ./artifacts/
13 changes: 13 additions & 0 deletions examples/http-server/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 12 additions & 0 deletions examples/http-server/Cargo.toml
@@ -0,0 +1,12 @@
[package]
name = "http-server"
version = "0.1.0"
authors = ["Heyang Zhou <zhy20000919@hotmail.com>"]
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[workspace]

[dependencies]
wasmer-kernel-net = { path = "../../lib/kernel-net" }
72 changes: 72 additions & 0 deletions examples/http-server/src/main.rs
@@ -0,0 +1,72 @@
#![feature(wasi_ext)]

use wasmer_kernel_net::{schedule, Epoll, Tcp4Listener, TcpStream};
use std::sync::Arc;

fn serve(stream: Arc<TcpStream>, mut all: Vec<u8>) {
let stream2 = stream.clone();
stream.read_async(
Vec::with_capacity(512),
move |result| {
match result {
Ok(buf) => {
if buf.len() == 0 {
return;
}
all.extend_from_slice(&buf);
if all.len() > 4096 {
println!("header too large");
return;
}
let s = match ::std::str::from_utf8(&all) {
Ok(x) => x,
Err(e) => {
println!("not utf8: {:?}", e);
return;
}
};
if let Some(_pos) = s.find("\r\n\r\n") {
let body = format!(
"Hello, world!\n",
).into_bytes();
let stream = stream2.clone();
stream2.write_all_async(
format!(
"HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nConnection: close\r\nContent-Length: {}\r\n\r\n",
body.len()
).into_bytes(),
|_| {
stream.write_all_async(body, |_| {});
}
);
} else {
schedule(|| serve(stream2, all));
}
}
Err(code) => {
println!("failed to read; code = {}", code);
}
}
}
);
}

fn main() {
let epoll = Arc::new(Epoll::new());
let listener = Arc::new(Tcp4Listener::new("0.0.0.0", 2011, 128).unwrap());

listener.accept_async(epoll.clone(), |stream| match stream {
Ok(stream) => {
serve(stream, vec![]);
Ok(())
}
Err(code) => {
println!("failed to accept; code = {}", code);
Err(())
}
});
println!("start epoll");
unsafe {
epoll.run();
}
}
9 changes: 9 additions & 0 deletions examples/pipe/Cargo.toml
@@ -0,0 +1,9 @@
[package]
name = "pipe"
version = "0.1.0"
authors = ["Heyang Zhou <zhy20000919@hotmail.com>"]
edition = "2018"

[workspace]

[dependencies]
13 changes: 13 additions & 0 deletions examples/pipe/src/main.rs
@@ -0,0 +1,13 @@
use std::io::{Read, Write};

fn main() {
let mut stdin = ::std::io::stdin();
let mut stdout = ::std::io::stdout();
let mut buf: Vec<u8> = vec![0; 512];
let mut total: u64 = 0;
while total < 1048576u64 * 2048 {
let n = stdin.read(&mut buf).unwrap();
stdout.write_all(&buf[..n]).unwrap();
total += n as u64;
}
}
10 changes: 10 additions & 0 deletions examples/wasi-networking/Cargo.toml
@@ -0,0 +1,10 @@
[package]
name = "wasi-networking"
version = "0.1.0"
authors = ["Heyang Zhou <zhy20000919@hotmail.com>"]
edition = "2018"

[workspace]

[dependencies]
wasmer-kernel-net = { path = "../../lib/kernel-net" }
49 changes: 49 additions & 0 deletions examples/wasi-networking/src/main.rs
@@ -0,0 +1,49 @@
#![feature(wasi_ext)]

use wasmer_kernel_net::{schedule, Epoll, Tcp4Listener, TcpStream};
use std::sync::Arc;

fn do_echo(stream: Arc<TcpStream>, buf: Vec<u8>) {
let stream2 = stream.clone();
stream.read_async(buf, move |result| match result {
Ok(buf) => {
if buf.len() == 0 {
return;
}
let stream = stream2.clone();
stream2.write_all_async(buf, move |result| match result {
Ok(buf) => {
schedule(|| {
do_echo(stream, buf);
});
}
Err(code) => {
println!("failed to write; code = {}", code);
}
});
}
Err(code) => {
println!("failed to read; code = {}", code);
}
});
}

fn main() {
let epoll = Arc::new(Epoll::new());
let listener = Arc::new(Tcp4Listener::new("0.0.0.0", 2001, 128).unwrap());

listener.accept_async(epoll.clone(), |stream| match stream {
Ok(stream) => {
do_echo(stream, Vec::with_capacity(16384));
Ok(())
}
Err(code) => {
println!("failed to accept; code = {}", code);
Err(())
}
});
println!("start epoll");
unsafe {
epoll.run();
}
}
9 changes: 9 additions & 0 deletions lib/kernel-loader/Cargo.toml
@@ -0,0 +1,9 @@
[package]
name = "wasmer-kernel-loader"
version = "0.1.0"
authors = ["Heyang Zhou <zhy20000919@hotmail.com>"]
edition = "2018"

[dependencies]
libc = "0.2.49"
wasmer-runtime-core = { path = "../runtime-core" }

0 comments on commit 04d232b

Please sign in to comment.