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"]