wip: rustslop

This commit is contained in:
2026-06-22 00:20:18 -06:00
parent ef5362cc25
commit d13edd2ca0
9 changed files with 121 additions and 0 deletions
+37
View File
@@ -0,0 +1,37 @@
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 ["complete.component.wasm"]
alternatives $ do
"complete.component.wasm" %> \out -> do
need ["provider.component.wasm","importing.component.wasm"]
cmd_
"wac plug --plug"
"provider.component.wasm" "importing.component.wasm"
"-o" "complete.component.wasm"
"*.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 ["complete.component.wasm"]
cmd_ "wasmtime run --invoke add(1) complete.component.wasm"
phony "clean" $ do
removeFilesAfter ".shake" ["//*"]
liftIO $ removeFiles "." ["*.wasm"]
+27
View File
@@ -0,0 +1,27 @@
(module
;; Correct module name: stdio, not stdout
(import "wasi:cli/stdio@0.2.6" "get-stdout"
(func $get_stdout (result i32)))
;; Write and flush a buffer.
(import "wasi:io/streams@0.2.0" "blocking-write-and-flush"
(func $bwrite (param i32 i32 i32) (result i32)))
(memory (export "memory") 1)
(data (i32.const 0) "Hello, World!\n")
(func (export "main")
(local $stdout i32)
;; Get the stdout stream handle
call $get_stdout
local.set $stdout
;; Write "Hello, World!\n" (14 bytes) to stdout
local.get $stdout
i32.const 0
i32.const 14
call $bwrite
drop ;; ignore the return value (0 = success)
)
)
+22
View File
@@ -0,0 +1,22 @@
package root:component;
world root {
import wasi:cli/stdin@0.2.6;
import wasi:cli/stdout@0.2.6;
export wasi:cli/run@0.2.0;
}
package wasi:cli@0.2.6 {
interface stdout {
use wasi:io/streams@0.2.6.{output-stream};
get-stdout: func() -> output-stream;
}
}
package wasi:cli@0.2.0 {
interface run {
run: func() -> result;
}
}