Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f2c5d2f3ee |
@@ -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"]
|
||||||
Executable
BIN
Binary file not shown.
@@ -0,0 +1,31 @@
|
|||||||
|
;; -*- mode:scheme -*-
|
||||||
|
(λ (k118)
|
||||||
|
(let ((k119 (κ
|
||||||
|
(r120)
|
||||||
|
(let ((t11 r120))
|
||||||
|
(let ((k122 (κ
|
||||||
|
(r123)
|
||||||
|
(let ((t12 r123))
|
||||||
|
(let ((t125 (set! factorial
|
||||||
|
#f
|
||||||
|
(λ (k127 n10)
|
||||||
|
(let ((k128 (κ (r129) (k127 r129))))
|
||||||
|
(let ((k131 (κ
|
||||||
|
(r132)
|
||||||
|
(if r132
|
||||||
|
(k128 1)
|
||||||
|
(let ((k134 (κ (r135) (k128 r135))))
|
||||||
|
(let ((k138 (κ
|
||||||
|
(r139)
|
||||||
|
(let ((a137 r139)) (scheme#* k134 n10 a137)))))
|
||||||
|
(let ((k142 (κ
|
||||||
|
(r143)
|
||||||
|
(let ((a141 r143)) (factorial k138 a141)))))
|
||||||
|
(scheme#- k142 n10 1))))))))
|
||||||
|
(scheme#zero? k131 n10)))))))
|
||||||
|
(let ((t13 t125))
|
||||||
|
(let ((k145 (κ (r146) (k118 r146))))
|
||||||
|
(let ((k148 (κ (r149) (r149 k145))))
|
||||||
|
(chicken.base#implicit-exit-handler k148)))))))))
|
||||||
|
(##core#callunit eval k122))))))
|
||||||
|
(##core#callunit library k119)))
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
(define (factorial n)
|
||||||
|
(if (zero? n)
|
||||||
|
1
|
||||||
|
(* n (factorial (- n 1)))))
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
import Development.Shake
|
||||||
|
import Development.Shake.Command
|
||||||
|
import Development.Shake.FilePath
|
||||||
|
import Development.Shake.Util
|
||||||
|
|
||||||
|
worldFor "program.wasm" = "gyehoek-program"
|
||||||
|
worldFor "runtime.wasm" = "gyehoek-runtime"
|
||||||
|
|
||||||
|
main = shakeArgs shakeOptions $ do
|
||||||
|
want ["gyehoek.wasm"]
|
||||||
|
alternatives $ do
|
||||||
|
"gyehoek.wasm" %> \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"]
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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)))
|
||||||
@@ -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)))
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
(component
|
||||||
|
(core module $main
|
||||||
|
(func (export "square") (param $n i32) (result i32)
|
||||||
|
(i32.mul (local.get $n) (local.get $n)))))
|
||||||
Reference in New Issue
Block a user