summaryrefslogtreecommitdiff
path: root/examples/rust/src/tinywasm_no_std.rs
diff options
context:
space:
mode:
authorHenry Gressmann <mail@henrygressmann.de>2024-01-29 20:39:31 +0100
committerHenry Gressmann <mail@henrygressmann.de>2024-01-29 20:39:31 +0100
commitf8651619e576ac97209b72660144568b54eb965c (patch)
tree6bbf232f2b7444d02ef6cb2192759f628ce2ab8f /examples/rust/src/tinywasm_no_std.rs
parent4c9385df1bcc0098c7e1db7a2f7c7e3dbeb00c8b (diff)
feat: pre-processed wasm
Signed-off-by: Henry Gressmann <mail@henrygressmann.de>
Diffstat (limited to 'examples/rust/src/tinywasm_no_std.rs')
-rw-r--r--examples/rust/src/tinywasm_no_std.rs33
1 files changed, 33 insertions, 0 deletions
diff --git a/examples/rust/src/tinywasm_no_std.rs b/examples/rust/src/tinywasm_no_std.rs
new file mode 100644
index 0000000..9f2b28c
--- /dev/null
+++ b/examples/rust/src/tinywasm_no_std.rs
@@ -0,0 +1,33 @@
+#![no_main]
+#![no_std]
+use tinywasm::{Extern, FuncContext};
+
+#[link(wasm_import_module = "env")]
+extern "C" {
+ fn printi32(x: i32);
+}
+
+#[no_mangle]
+pub extern "C" fn hello() {
+ let _ = run();
+}
+
+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();
+
+ imports.define(
+ "env",
+ "printi32",
+ Extern::typed_func(|_: FuncContext<'_>, v: i32| {
+ unsafe { printi32(v) }
+ Ok(())
+ }),
+ )?;
+ let instance = module.instantiate(&mut store, Some(imports))?;
+
+ let add_and_print = instance.exported_func::<(i32, i32), ()>(&mut store, "add_and_print")?;
+ add_and_print.call(&mut store, (1, 2))?;
+ Ok(())
+}