diff options
Diffstat (limited to 'examples/rust/src')
| -rw-r--r-- | examples/rust/src/hello.rs | 18 | ||||
| -rw-r--r-- | examples/rust/src/tinywasm.rs | 41 |
2 files changed, 59 insertions, 0 deletions
diff --git a/examples/rust/src/hello.rs b/examples/rust/src/hello.rs new file mode 100644 index 0000000..34f3c7f --- /dev/null +++ b/examples/rust/src/hello.rs @@ -0,0 +1,18 @@ +#![no_std] +#![no_main] + +#[cfg(not(test))] +#[panic_handler] +fn panic(_info: &core::panic::PanicInfo) -> ! { + core::arch::wasm32::unreachable() +} + +#[link(wasm_import_module = "env")] +extern "C" { + fn printi32(x: i32); +} + +#[no_mangle] +pub unsafe extern "C" fn add_and_print(lh: i32, rh: i32) { + printi32(lh + rh); +} diff --git a/examples/rust/src/tinywasm.rs b/examples/rust/src/tinywasm.rs new file mode 100644 index 0000000..4edde66 --- /dev/null +++ b/examples/rust/src/tinywasm.rs @@ -0,0 +1,41 @@ +#![no_std] +#![no_main] + +use embedded_alloc::Heap; +// use tinywasm::{Extern, FuncContext}; + +#[cfg(not(test))] +#[panic_handler] +fn panic(_info: &core::panic::PanicInfo) -> ! { + core::arch::wasm32::unreachable() +} + +#[global_allocator] +static HEAP: Heap = Heap::empty(); + +#[no_mangle] +pub unsafe extern "C" fn _start() { + // Initialize the allocator BEFORE you use it + { + use core::mem::MaybeUninit; + const HEAP_SIZE: usize = 1024; + static mut HEAP_MEM: [MaybeUninit<u8>; HEAP_SIZE] = [MaybeUninit::uninit(); HEAP_SIZE]; + unsafe { HEAP.init(HEAP_MEM.as_ptr() as usize, HEAP_SIZE) } + } + + // now the allocator is ready types like Box, Vec can be used. + let _ = run(); +} + +fn run() -> tinywasm::Result<()> { + // let module = tinywasm::Module::parse_bytes(include_bytes!("../out/hello.wasm"))?; + // let mut store = tinywasm::Store::default(); + + // let mut imports = tinywasm::Imports::new(); + // imports.define("env", "printi32", Extern::typed_func(|_: FuncContext<'_>, _: i32| Ok(())))?; + + // let instance = module.instantiate(&mut store, Some(imports))?; + // let add_and_print = instance.typed_func::<(i32, i32), ()>(&mut store, "add_and_print")?; + // add_and_print.call(&mut store, (1, 2))?; + Ok(()) +} |
