wasi:cli/run

This commit is contained in:
2026-06-29 15:39:13 -06:00
parent bf5990c880
commit cd56b176af
7 changed files with 110 additions and 12 deletions
+2 -1
View File
@@ -25,7 +25,8 @@ main = shakeArgs shakeOptions $ do
[wit] [wat] "-o" [out]
phony "run" $ do
need ["hello.component.wasm"]
cmd_ "wasmtime run --invoke hello() hello.component.wasm"
-- cmd_ "wasmtime run --invoke hello() hello.component.wasm"
cmd_ "wasmtime run hello.component.wasm"
phony "clean" $ do
removeFilesAfter ".shake" ["//*"]
liftIO $ removeFiles "." ["*.wasm"]
+3 -2
View File
@@ -14,9 +14,10 @@
(data (i32.const 16) "hello worms\n")
(func $hello (export "hello")
(func (export "wasi:cli/run@0.2.6#run") (result i32)
(call $print
(call $get-stdout)
(i32.const 16) ;; offset to print
(i32.const 12) ;; length to print
(i32.const 32)))) ;; offset for result
(i32.const 32)) ;; offset for result
(i32.const 0)))
+4 -8
View File
@@ -5,8 +5,7 @@ world root {
import wasi:cli/stdout@0.2.6;
import wasi:io/streams@0.2.6;
// export wasi:cli/run@0.2.0;
export hello: func();
export wasi:cli/run@0.2.6;
}
package wasi:cli@0.2.6 {
@@ -17,14 +16,11 @@ package wasi:cli@0.2.6 {
}
interface stdin {
}
interface run {
run: func () -> result;
}
}
// package wasi:cli@0.2.0 {
// interface run {
// run: func() -> result;
// }
// }
package wasi:io@0.2.6 {
interface poll {
resource pollable {
+31
View File
@@ -0,0 +1,31 @@
import Development.Shake
import Development.Shake.Command
import Development.Shake.FilePath
import Development.Shake.Util
main = shakeArgs shakeOptions $ do
-- action $ do
-- sourceFiles <- getDirectoryFiles "" ["//*.luasm"]
-- need $ (-<.> "luac") <$> sourceFiles
want ["silly.component.wasm"]
alternatives $ do
"*.component.wasm" %> \out -> do
let wasm = out `replaceExtensions` "wasm"
need [wasm]
cmd_
"wasm-tools component new"
[wasm]
"-o" [out]
"*.wasm" %> \out -> do
let wit = out -<.> "wit"
let wat = out -<.> "wat"
need [wit,wat]
cmd_
"wasm-tools component embed"
[wit] [wat] "-o" [out]
phony "run" $ do
need ["silly.component.wasm"]
cmd_ "wasmtime run --invoke silly() silly.component.wasm"
phony "clean" $ do
removeFilesAfter ".shake" ["//*"]
liftIO $ removeFiles "." ["*.wasm"]
+20
View File
@@ -0,0 +1,20 @@
(module
(import "wasi:cli/stdout@0.2.6" "get-stdout"
(func $get-stdout (result i32)))
(import
"wasi:io/streams@0.2.6"
"[method]output-stream.blocking-write-and-flush"
(func $print (param i32 i32 i32 i32)))
(memory 1)
(export "memory" (memory 0))
(data (i32.const 16) "hello worms\n")
(func (export "wasi:cli/run@0.2.6#run") (result i32)
(call $print
(call $get-stdout)
(i32.const 16) ;; offset to print
(i32.const 12) ;; length to print
(i32.const 32)) ;; offset for result
(i32.const 0)))
+49
View File
@@ -0,0 +1,49 @@
package root:component;
world root {
import wasi:cli/stdin@0.2.6;
import wasi:cli/stdout@0.2.6;
import wasi:io/streams@0.2.6;
export wasi:cli/run@0.2.6;
}
package wasi:cli@0.2.6 {
interface stdout {
use wasi:io/streams@0.2.6.{output-stream};
get-stdout: func() -> output-stream;
}
interface stdin {
}
interface run {
run: func () -> result;
}
}
package wasi:io@0.2.6 {
interface poll {
resource pollable {
block: func();
}
}
interface error {
resource error;
}
interface streams {
use error.{error};
use poll.{pollable};
resource input-stream;
resource output-stream {
write: func(contents: list<u8>) -> result<_, stream-error>;
blocking-write-and-flush: func(contents: list<u8>) ->result<_,stream-error>;
}
variant stream-error {
last-operation-failed(error),
closed,
}
}
}
+1 -1
View File
@@ -1,3 +1,3 @@
(display "the numberr is ... ")
(display (+ 1 (* 3 4)))
(display (+ 5 (* 3 4)))
(newline)