From f2c5d2f3ee2a144fd234c4f272059615eb6efa7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Madeleine=20Sydney=20=C5=9Alaga?= Date: Mon, 24 Aug 2026 07:03:24 -0600 Subject: [PATCH] runtime --- blah/Shakefile.hs | 23 ++++++++++++++++++ blah/factorial | Bin 0 -> 17336 bytes blah/factorial.cps | 31 ++++++++++++++++++++++++ blah/factorial.scm | 4 ++++ examples/wat/runtime/Shakefile.hs | 38 ++++++++++++++++++++++++++++++ examples/wat/runtime/gyehoek.wit | 20 ++++++++++++++++ examples/wat/runtime/program.wat | 8 +++++++ examples/wat/runtime/runtime.wat | 5 ++++ examples/wat/runtime/t.wat | 4 ++++ flake.nix | 1 + 10 files changed, 134 insertions(+) create mode 100644 blah/Shakefile.hs create mode 100755 blah/factorial create mode 100644 blah/factorial.cps create mode 100644 blah/factorial.scm create mode 100644 examples/wat/runtime/Shakefile.hs create mode 100644 examples/wat/runtime/gyehoek.wit create mode 100644 examples/wat/runtime/program.wat create mode 100644 examples/wat/runtime/runtime.wat create mode 100644 examples/wat/runtime/t.wat diff --git a/blah/Shakefile.hs b/blah/Shakefile.hs new file mode 100644 index 0000000..11019e8 --- /dev/null +++ b/blah/Shakefile.hs @@ -0,0 +1,23 @@ +import Development.Shake +import Development.Shake.Command +import Development.Shake.FilePath +import Development.Shake.Util + +main = shakeArgs shakeOptions $ do + action $ do + sourceFiles <- getDirectoryFiles "" ["//*.scm"] + need $ (-<.> "cps") <$> sourceFiles + alternatives $ do + "*.cps" %> \out -> do + let scm = out -<.> "scm" + need [scm] + Stdout cps0 <- cmd + "csc -debug 3" + [scm] + Stdout cps1 <- cmd + "sed -e" ["s/##core#lambda/κ/g;s/lambda/λ/g;/\\[cps\\]/d"] (Stdin cps0) + writeFile' out $ ";; -*- mode:scheme -*-\n" ++ cps1 + + phony "clean" $ do + removeFilesAfter ".shake" ["//*"] + liftIO $ removeFiles "." ["*.cps"] diff --git a/blah/factorial b/blah/factorial new file mode 100755 index 0000000000000000000000000000000000000000..b3b193a6b85c63b79f74d4bcddbad30e14603877 GIT binary patch literal 17336 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 \out -> do + need ["runtime.component.wasm","program.component.wasm"] + cmd_ + "wac plug --plug" + "runtime.component.wasm" "program.component.wasm" + "-o" "gyehoek.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 = "gyehoek.wit" + let wat = out -<.> "wat" + need [wit,wat] + cmd_ + "wasm-tools component embed" + "-w" [worldFor out] + [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"] diff --git a/examples/wat/runtime/gyehoek.wit b/examples/wat/runtime/gyehoek.wit new file mode 100644 index 0000000..79c96b5 --- /dev/null +++ b/examples/wat/runtime/gyehoek.wit @@ -0,0 +1,20 @@ +package gyehoek:gyehoek@0.1.0; + +interface runtime { + resource scm { + make-small-int: static func(n: s32) -> scm; + } +} + +interface program { + run: func() -> s32; +} + +world gyehoek-runtime { + export runtime; +} + +world gyehoek-program { + import runtime; + export program; +} \ No newline at end of file diff --git a/examples/wat/runtime/program.wat b/examples/wat/runtime/program.wat new file mode 100644 index 0000000..3ff7f6c --- /dev/null +++ b/examples/wat/runtime/program.wat @@ -0,0 +1,8 @@ +(module + (import "gyehoek:gyehoek/runtime@0.1.0" + "[static]scm.make-small-int" + (func $make-small-int (param i32) (result i32))) + (func $run (result i32) + (call $make-small-int (i32.const 123))) + (export "gyehoek:gyehoek/program@0.1.0#run" + (func $run))) diff --git a/examples/wat/runtime/runtime.wat b/examples/wat/runtime/runtime.wat new file mode 100644 index 0000000..f6c834d --- /dev/null +++ b/examples/wat/runtime/runtime.wat @@ -0,0 +1,5 @@ +(module + (func $make-small-int (param $n i32) (result i32) + (i32.mul (local.get $n) (i32.const 2))) + (export "gyehoek:gyehoek/runtime@0.1.0#[static]scm.make-small-int" + (func $make-small-int))) diff --git a/examples/wat/runtime/t.wat b/examples/wat/runtime/t.wat new file mode 100644 index 0000000..cdf89da --- /dev/null +++ b/examples/wat/runtime/t.wat @@ -0,0 +1,4 @@ +(component + (core module $main + (func (export "square") (param $n i32) (result i32) + (i32.mul (local.get $n) (local.get $n))))) diff --git a/flake.nix b/flake.nix index 81e85af..b469812 100644 --- a/flake.nix +++ b/flake.nix @@ -21,6 +21,7 @@ pkgs.wasm-tools pkgs.wac-cli inputs.ghc-wasm.packages.${system}.all_9_14 + pkgs.chicken ]; }; };