summaryrefslogtreecommitdiff
path: root/examples/rust
diff options
context:
space:
mode:
authorHenry Gressmann <mail@henrygressmann.de>2024-09-11 22:48:12 +0200
committerHenry Gressmann <mail@henrygressmann.de>2024-09-11 22:48:12 +0200
commitc5f45ff56f7538944d92d5d318a01d10da04535c (patch)
tree589c7c3af38c46441c798ce307c96acca637c314 /examples/rust
parent0ed6acf459ff941f3b20b3e7462e4ba1cf7fdbe5 (diff)
ci: improve no_std testing, add linux arm64
Signed-off-by: Henry Gressmann <mail@henrygressmann.de>
Diffstat (limited to 'examples/rust')
-rw-r--r--examples/rust/Cargo.toml11
-rwxr-xr-xexamples/rust/build.sh3
-rw-r--r--examples/rust/src/tinywasm.rs2
-rw-r--r--examples/rust/src/tinywasm_no_std.rs17
4 files changed, 30 insertions, 3 deletions
diff --git a/examples/rust/Cargo.toml b/examples/rust/Cargo.toml
index f691a1b..5c6b710 100644
--- a/examples/rust/Cargo.toml
+++ b/examples/rust/Cargo.toml
@@ -10,8 +10,13 @@ forced-target="wasm32-unknown-unknown"
edition="2021"
[dependencies]
-tinywasm={path="../../crates/tinywasm", features=["parser", "std"]}
+tinywasm={path="../../crates/tinywasm", default-features=false, features=["parser", "archive"]}
argon2={version="0.5"}
+lol_alloc="0.4.1"
+
+[features]
+default=["std"]
+std=["tinywasm/std"]
[[bin]]
name="hello"
@@ -26,6 +31,10 @@ name="tinywasm"
path="src/tinywasm.rs"
[[bin]]
+name="tinywasm_no_std"
+path="src/tinywasm_no_std.rs"
+
+[[bin]]
name="fibonacci"
path="src/fibonacci.rs"
diff --git a/examples/rust/build.sh b/examples/rust/build.sh
index ceb1de6..d1e6285 100755
--- a/examples/rust/build.sh
+++ b/examples/rust/build.sh
@@ -12,6 +12,9 @@ wasmopt_features="--enable-reference-types --enable-bulk-memory --enable-mutable
# ensure out dir exists
mkdir -p "$dest_dir"
+# build no_std
+cargo build --target wasm32-unknown-unknown --package rust-wasm-examples --profile=wasm --bin tinywasm_no_std --no-default-features
+
for bin in "${bins[@]}"; do
RUSTFLAGS="-C target-feature=$rust_features -C panic=abort" cargo build --target wasm32-unknown-unknown --package rust-wasm-examples --profile=wasm --bin "$bin"
diff --git a/examples/rust/src/tinywasm.rs b/examples/rust/src/tinywasm.rs
index 08c8135..68e6375 100644
--- a/examples/rust/src/tinywasm.rs
+++ b/examples/rust/src/tinywasm.rs
@@ -12,7 +12,7 @@ pub extern "C" fn hello() {
}
fn run() -> tinywasm::Result<()> {
- let module = tinywasm::Module::parse_bytes(include_bytes!("../out/print.wasm"))?;
+ let module = tinywasm::Module::parse_stream(&include_bytes!("../out/print.wasm")[..])?;
let mut store = tinywasm::Store::default();
let mut imports = tinywasm::Imports::new();
diff --git a/examples/rust/src/tinywasm_no_std.rs b/examples/rust/src/tinywasm_no_std.rs
index 9f2b28c..c20e243 100644
--- a/examples/rust/src/tinywasm_no_std.rs
+++ b/examples/rust/src/tinywasm_no_std.rs
@@ -1,7 +1,19 @@
#![no_main]
#![no_std]
+use lol_alloc::{AssumeSingleThreaded, FreeListAllocator};
use tinywasm::{Extern, FuncContext};
+extern crate alloc;
+
+#[panic_handler]
+fn panic(_info: &core::panic::PanicInfo) -> ! {
+ loop {}
+}
+
+#[global_allocator]
+static ALLOCATOR: AssumeSingleThreaded<FreeListAllocator> =
+ unsafe { AssumeSingleThreaded::new(FreeListAllocator::new()) };
+
#[link(wasm_import_module = "env")]
extern "C" {
fn printi32(x: i32);
@@ -13,10 +25,13 @@ pub extern "C" fn hello() {
}
fn run() -> tinywasm::Result<()> {
- let module = tinywasm::Module::parse_bytes(include_bytes!("../out/print.wasm"))?;
let mut store = tinywasm::Store::default();
let mut imports = tinywasm::Imports::new();
+ let res = tinywasm::parser::Parser::new().parse_module_bytes(include_bytes!("../out/print.wasm"))?;
+ let twasm = res.serialize_twasm();
+ let module = tinywasm::Module::parse_bytes(&twasm)?;
+
imports.define(
"env",
"printi32",