From 53cb70d811a1168beaa1844a81d575c9083469c2 Mon Sep 17 00:00:00 2001 From: Lukasz Czajka Date: Tue, 15 Oct 2024 17:17:05 +0200 Subject: [PATCH] conditionally include Rust/WASM targets --- app/Commands/Compile/Options.hs | 7 ++-- app/Commands/Compile/RiscZeroRust.hs | 34 ++---------------- app/Commands/Compile/RiscZeroRust/Rust.hs | 36 +++++++++++++++++++ app/Commands/Compile/Wasi/Options.hs | 12 +++---- app/Commands/Dev/Asm/Compile/Options.hs | 8 +++-- app/Commands/Dev/Core/Compile/Options.hs | 9 ++--- app/Commands/Dev/DevCompile/NativeRust.hs | 12 +++---- app/Commands/Dev/Reg/Compile/Options.hs | 6 ++-- app/Commands/Dev/Runtime/Options.hs | 4 +-- app/Commands/Dev/Tree/Compile.hs | 2 ++ app/Commands/Dev/Tree/Compile/Options.hs | 17 +++------ app/Commands/Dev/Tree/Compile/RiscZeroRust.hs | 27 ++++++++++++++ app/Commands/Dev/Tree/CompileOld/Options.hs | 6 ++-- app/Commands/Extra/Compile.hs | 12 +++---- runtime/Makefile | 2 +- src/Juvix/Compiler/Pipeline.hs | 9 +++++ 16 files changed, 125 insertions(+), 78 deletions(-) create mode 100644 app/Commands/Compile/RiscZeroRust/Rust.hs create mode 100644 app/Commands/Dev/Tree/Compile/RiscZeroRust.hs diff --git a/app/Commands/Compile/Options.hs b/app/Commands/Compile/Options.hs index 17d2bdaa3c..da7936f024 100644 --- a/app/Commands/Compile/Options.hs +++ b/app/Commands/Compile/Options.hs @@ -11,6 +11,7 @@ import Commands.Compile.Vampir.Options import Commands.Compile.Wasi.Options import Commands.Extra.NewCompile import CommonOptions +import Juvix.Config qualified as Config data CompileCommand = Native (NativeOptions 'InputMain) @@ -29,7 +30,7 @@ supportedTargets = [ (AppTargetVampIR, Vampir <$> parseVampir), (AppTargetAnoma, Anoma <$> parseAnoma), (AppTargetCairo, Cairo <$> parseCairo), - (AppTargetWasm32Wasi, Wasi <$> parseWasi), - (AppTargetNative64, Native <$> parseNative), - (AppTargetRiscZeroRust, RiscZeroRust <$> parseRiscZeroRust) + (AppTargetNative64, Native <$> parseNative) ] + <> [(AppTargetWasm32Wasi, Wasi <$> parseWasi) | Config.config ^. Config.configWasm] + <> [(AppTargetRiscZeroRust, RiscZeroRust <$> parseRiscZeroRust) | Config.config ^. Config.configRust] diff --git a/app/Commands/Compile/RiscZeroRust.hs b/app/Commands/Compile/RiscZeroRust.hs index f8f38bcbb3..a70076f0d5 100644 --- a/app/Commands/Compile/RiscZeroRust.hs +++ b/app/Commands/Compile/RiscZeroRust.hs @@ -2,39 +2,11 @@ module Commands.Compile.RiscZeroRust where import Commands.Base import Commands.Compile.RiscZeroRust.Options -import Commands.Extra.NewCompile -import Data.FileEmbed qualified as FE +import Commands.Compile.RiscZeroRust.Rust import Juvix.Compiler.Backend.Rust.Data.Result runCommand :: forall r. (Members AppEffects r) => RiscZeroRustOptions 'InputMain -> Sem r () runCommand opts = do - let opts' = opts ^. riscZeroRustCompileCommonOptions - inputFile = opts' ^. compileInputFile - moutputDir = opts ^. riscZeroRustOutputDir - outDir :: Path Abs Dir <- getOutputDir FileExtRiscZero inputFile moutputDir - writeDirFiles riscZeroDir outDir - let outJuvixSourceDir :: Path Abs Dir = outDir $(mkRelDir "juvix") $(mkRelDir "src") - writeDirFiles rustRuntimeSourceDir outJuvixSourceDir - writeFile (outDir $(mkRelDir "juvix") $(mkRelFile "Cargo.toml")) rustRuntimeToml - let outFile :: Path Abs File = - outDir - $(mkRelDir "methods") - $(mkRelDir "guest") - $(mkRelDir "src") - $(mkRelFile "main.rs") + let inputFile = opts ^. riscZeroRustCompileCommonOptions . compileInputFile Result {..} <- runPipeline opts inputFile upToRiscZeroRust - writeFileEnsureLn outFile _resultRustCode - where - riscZeroDir :: [(FilePath, ByteString)] - riscZeroDir = $(FE.makeRelativeToProject "runtime/rust/risc0" >>= FE.embedDir) - - rustRuntimeSourceDir :: [(FilePath, ByteString)] - rustRuntimeSourceDir = $(FE.makeRelativeToProject "runtime/rust/juvix/src" >>= FE.embedDir) - - rustRuntimeToml :: ByteString - rustRuntimeToml = $(FE.makeRelativeToProject "runtime/rust/juvix/Cargo.toml" >>= FE.embedFile) - - writeDirFiles :: [(FilePath, ByteString)] -> Path Abs Dir -> Sem r () - writeDirFiles fs outDir = do - let fs' = map (first relFile) fs - forM_ (first (outDir ) <$> fs') (uncurry writeFile) + compileRustCode opts inputFile _resultRustCode diff --git a/app/Commands/Compile/RiscZeroRust/Rust.hs b/app/Commands/Compile/RiscZeroRust/Rust.hs new file mode 100644 index 0000000000..c7a592c5a9 --- /dev/null +++ b/app/Commands/Compile/RiscZeroRust/Rust.hs @@ -0,0 +1,36 @@ +module Commands.Compile.RiscZeroRust.Rust where + +import Commands.Base +import Commands.Compile.RiscZeroRust.Options +import Commands.Extra.NewCompile +import Data.FileEmbed qualified as FE + +compileRustCode :: forall k r. (Members '[App, TaggedLock, EmbedIO] r) => RiscZeroRustOptions k -> Maybe (AppPath File) -> Text -> Sem r () +compileRustCode opts inputFile code = do + let moutputDir = opts ^. riscZeroRustOutputDir + outDir :: Path Abs Dir <- getOutputDir FileExtRiscZero inputFile moutputDir + writeDirFiles riscZeroDir outDir + let outJuvixSourceDir :: Path Abs Dir = outDir $(mkRelDir "juvix") $(mkRelDir "src") + writeDirFiles rustRuntimeSourceDir outJuvixSourceDir + writeFile (outDir $(mkRelDir "juvix") $(mkRelFile "Cargo.toml")) rustRuntimeToml + let outFile :: Path Abs File = + outDir + $(mkRelDir "methods") + $(mkRelDir "guest") + $(mkRelDir "src") + $(mkRelFile "main.rs") + writeFileEnsureLn outFile code + where + riscZeroDir :: [(FilePath, ByteString)] + riscZeroDir = $(FE.makeRelativeToProject "runtime/rust/risc0" >>= FE.embedDir) + + rustRuntimeSourceDir :: [(FilePath, ByteString)] + rustRuntimeSourceDir = $(FE.makeRelativeToProject "runtime/rust/juvix/src" >>= FE.embedDir) + + rustRuntimeToml :: ByteString + rustRuntimeToml = $(FE.makeRelativeToProject "runtime/rust/juvix/Cargo.toml" >>= FE.embedFile) + + writeDirFiles :: [(FilePath, ByteString)] -> Path Abs Dir -> Sem r () + writeDirFiles fs outDir = do + let fs' = map (first relFile) fs + forM_ (first (outDir ) <$> fs') (uncurry writeFile) diff --git a/app/Commands/Compile/Wasi/Options.hs b/app/Commands/Compile/Wasi/Options.hs index 0686d457e2..d71d719b9a 100644 --- a/app/Commands/Compile/Wasi/Options.hs +++ b/app/Commands/Compile/Wasi/Options.hs @@ -44,18 +44,18 @@ wasiHelperOptions opts = forall s. (Members '[App, EmbedIO] s) => Sem s () - prepareRuntime = writeRuntime runtime + prepareRuntime = writeRuntime (fromJust runtime) where - runtime :: BS.ByteString + runtime :: Maybe BS.ByteString runtime | opts ^. wasiCompileCommonOptions . compileDebug = wasiDebugRuntime | otherwise = wasiReleaseRuntime where - wasiReleaseRuntime :: BS.ByteString - wasiReleaseRuntime = $(FE.makeRelativeToProject "runtime/c/_build.wasm32-wasi/libjuvix.a" >>= FE.embedFile) + wasiReleaseRuntime :: Maybe BS.ByteString + wasiReleaseRuntime = $(FE.makeRelativeToProject "runtime/c/_build.wasm32-wasi/libjuvix.a" >>= FE.embedFileIfExists) - wasiDebugRuntime :: BS.ByteString - wasiDebugRuntime = $(FE.makeRelativeToProject "runtime/c/_build.wasm32-wasi-debug/libjuvix.a" >>= FE.embedFile) + wasiDebugRuntime :: Maybe BS.ByteString + wasiDebugRuntime = $(FE.makeRelativeToProject "runtime/c/_build.wasm32-wasi-debug/libjuvix.a" >>= FE.embedFileIfExists) wasiDefaultOutputFile :: Path Abs File -> Path Abs File -> Path Abs File wasiDefaultOutputFile inputFile baseOutputFile = diff --git a/app/Commands/Dev/Asm/Compile/Options.hs b/app/Commands/Dev/Asm/Compile/Options.hs index 53d97a67b8..a3cfb05705 100644 --- a/app/Commands/Dev/Asm/Compile/Options.hs +++ b/app/Commands/Dev/Asm/Compile/Options.hs @@ -6,17 +6,19 @@ where import Commands.Extra.Compile.Options import CommonOptions +import Juvix.Config qualified as Config type AsmCompileOptions = CompileOptions asmSupportedTargets :: NonEmpty CompileTarget asmSupportedTargets = - AppTargetWasm32Wasi - :| [ AppTargetNative64, - AppTargetReg, + AppTargetNative64 + :| [ AppTargetReg, AppTargetCasm, AppTargetCairo ] + <> [AppTargetWasm32Wasi | Config.config ^. Config.configWasm] + <> [AppTargetRiscZeroRust | Config.config ^. Config.configRust] parseAsmCompileOptions :: Parser AsmCompileOptions parseAsmCompileOptions = diff --git a/app/Commands/Dev/Core/Compile/Options.hs b/app/Commands/Dev/Core/Compile/Options.hs index bb6d49aaee..1901b0bd26 100644 --- a/app/Commands/Dev/Core/Compile/Options.hs +++ b/app/Commands/Dev/Core/Compile/Options.hs @@ -7,22 +7,23 @@ where import Commands.Extra.Compile.Options import CommonOptions import Data.List.NonEmpty qualified as NonEmpty +import Juvix.Config qualified as Config type CoreCompileOptions = CompileOptions coreSupportedTargets :: NonEmpty CompileTarget coreSupportedTargets = - NonEmpty.fromList + NonEmpty.fromList $ [ AppTargetNative64, - AppTargetWasm32Wasi, AppTargetVampIR, AppTargetTree, AppTargetAsm, AppTargetReg, AppTargetCasm, - AppTargetCairo, - AppTargetRiscZeroRust + AppTargetCairo ] + <> [AppTargetWasm32Wasi | Config.config ^. Config.configWasm] + <> [AppTargetRiscZeroRust | Config.config ^. Config.configRust] parseCoreCompileOptions :: Parser CoreCompileOptions parseCoreCompileOptions = diff --git a/app/Commands/Dev/DevCompile/NativeRust.hs b/app/Commands/Dev/DevCompile/NativeRust.hs index 27ee0233f4..4f8127ef5b 100644 --- a/app/Commands/Dev/DevCompile/NativeRust.hs +++ b/app/Commands/Dev/DevCompile/NativeRust.hs @@ -36,18 +36,18 @@ runCommand opts = do forall s. (Members '[App, EmbedIO] s) => Sem s () - prepareRuntime = writeRuntime runtime + prepareRuntime = writeRuntime (fromJust runtime) where - runtime :: BS.ByteString + runtime :: Maybe BS.ByteString runtime | opts ^. nativeRustCompileCommonOptions . compileDebug = rustDebugRuntime | otherwise = rustReleaseRuntime where - rustReleaseRuntime :: BS.ByteString - rustReleaseRuntime = $(FE.makeRelativeToProject "runtime/rust/juvix/target/release/libjuvix.rlib" >>= FE.embedFile) + rustReleaseRuntime :: Maybe BS.ByteString + rustReleaseRuntime = $(FE.makeRelativeToProject "runtime/rust/juvix/target/release/libjuvix.rlib" >>= FE.embedFileIfExists) - rustDebugRuntime :: BS.ByteString - rustDebugRuntime = $(FE.makeRelativeToProject "runtime/rust/juvix/target/debug/libjuvix.rlib" >>= FE.embedFile) + rustDebugRuntime :: Maybe BS.ByteString + rustDebugRuntime = $(FE.makeRelativeToProject "runtime/rust/juvix/target/debug/libjuvix.rlib" >>= FE.embedFileIfExists) inputRustFile :: (Members '[App, EmbedIO] r) => Path Abs File -> Sem r (Path Abs File) inputRustFile inputFileCompile = do diff --git a/app/Commands/Dev/Reg/Compile/Options.hs b/app/Commands/Dev/Reg/Compile/Options.hs index aef408d555..e80231eb65 100644 --- a/app/Commands/Dev/Reg/Compile/Options.hs +++ b/app/Commands/Dev/Reg/Compile/Options.hs @@ -6,14 +6,16 @@ where import Commands.Extra.Compile.Options import CommonOptions +import Juvix.Config qualified as Config regSupportedTargets :: NonEmpty CompileTarget regSupportedTargets = AppTargetNative64 - :| [ AppTargetWasm32Wasi, - AppTargetCasm, + :| [ AppTargetCasm, AppTargetCairo ] + <> [AppTargetWasm32Wasi | Config.config ^. Config.configWasm] + <> [AppTargetRiscZeroRust | Config.config ^. Config.configRust] parseRegCompileOptions :: Parser CompileOptions parseRegCompileOptions = diff --git a/app/Commands/Dev/Runtime/Options.hs b/app/Commands/Dev/Runtime/Options.hs index 096e2abd79..02633121b9 100644 --- a/app/Commands/Dev/Runtime/Options.hs +++ b/app/Commands/Dev/Runtime/Options.hs @@ -2,6 +2,7 @@ module Commands.Dev.Runtime.Options where import Commands.Dev.Runtime.Compile.Options import CommonOptions +import Juvix.Config qualified as Config newtype RuntimeCommand = Compile CompileOptions @@ -10,8 +11,7 @@ newtype RuntimeCommand runtimeSupportedTargets :: NonEmpty CompileTarget runtimeSupportedTargets = AppTargetNative64 - :| [ AppTargetWasm32Wasi - ] + :| [AppTargetWasm32Wasi | Config.config ^. Config.configWasm] parseRuntimeOptions :: Parser CompileOptions parseRuntimeOptions = diff --git a/app/Commands/Dev/Tree/Compile.hs b/app/Commands/Dev/Tree/Compile.hs index cda36249af..6abeaca41d 100644 --- a/app/Commands/Dev/Tree/Compile.hs +++ b/app/Commands/Dev/Tree/Compile.hs @@ -8,6 +8,7 @@ import Commands.Dev.Tree.Compile.Casm qualified as Casm import Commands.Dev.Tree.Compile.Native qualified as Native import Commands.Dev.Tree.Compile.Options import Commands.Dev.Tree.Compile.Reg qualified as Reg +import Commands.Dev.Tree.Compile.RiscZeroRust qualified as RiscZeroRust import Commands.Dev.Tree.Compile.Wasi qualified as Wasi runCommand :: @@ -23,3 +24,4 @@ runCommand = \case Reg opts -> Reg.runCommand opts Anoma opts -> Anoma.runCommand opts Cairo opts -> Cairo.runCommand opts + RiscZeroRust opts -> RiscZeroRust.runCommand opts diff --git a/app/Commands/Dev/Tree/Compile/Options.hs b/app/Commands/Dev/Tree/Compile/Options.hs index 247def225b..a5491bad3d 100644 --- a/app/Commands/Dev/Tree/Compile/Options.hs +++ b/app/Commands/Dev/Tree/Compile/Options.hs @@ -6,6 +6,7 @@ where import Commands.Compile.Anoma.Options import Commands.Compile.Cairo.Options import Commands.Compile.Native.Options +import Commands.Compile.RiscZeroRust.Options import Commands.Compile.Wasi.Options import Commands.Dev.DevCompile.Asm.Options import Commands.Dev.DevCompile.Casm.Options @@ -13,6 +14,7 @@ import Commands.Dev.DevCompile.Reg.Options import Commands.Extra.Compile.Options import Commands.Extra.NewCompile import CommonOptions +import Juvix.Config qualified as Config data CompileCommand = Native (NativeOptions ('InputExtension 'FileExtJuvixTree)) @@ -22,29 +24,20 @@ data CompileCommand | Casm (CasmOptions ('InputExtension 'FileExtJuvixTree)) | Anoma (AnomaOptions ('InputExtension 'FileExtJuvixTree)) | Cairo (CairoOptions ('InputExtension 'FileExtJuvixTree)) + | RiscZeroRust (RiscZeroRustOptions ('InputExtension 'FileExtJuvixTree)) deriving stock (Data) -treeSupportedTargets :: SupportedTargets -treeSupportedTargets = - AppTargetNative64 - :| [ AppTargetWasm32Wasi, - AppTargetAsm, - AppTargetReg, - AppTargetCasm, - AppTargetCairo, - AppTargetAnoma - ] - supportedTargets :: [(CompileTarget, Parser CompileCommand)] supportedTargets = [ (AppTargetNative64, Native <$> parseNative), - (AppTargetWasm32Wasi, Wasi <$> parseWasi), (AppTargetAsm, Asm <$> parseAsm), (AppTargetReg, Reg <$> parseReg), (AppTargetCasm, Casm <$> parseCasm), (AppTargetAnoma, Anoma <$> parseAnoma), (AppTargetCairo, Cairo <$> parseCairo) ] + <> [(AppTargetWasm32Wasi, Wasi <$> parseWasi) | Config.config ^. Config.configWasm] + <> [(AppTargetRiscZeroRust, RiscZeroRust <$> parseRiscZeroRust) | Config.config ^. Config.configRust] parseCompileCommand :: Parser CompileCommand parseCompileCommand = commandTargetsHelper supportedTargets diff --git a/app/Commands/Dev/Tree/Compile/RiscZeroRust.hs b/app/Commands/Dev/Tree/Compile/RiscZeroRust.hs new file mode 100644 index 0000000000..45bde73365 --- /dev/null +++ b/app/Commands/Dev/Tree/Compile/RiscZeroRust.hs @@ -0,0 +1,27 @@ +module Commands.Dev.Tree.Compile.RiscZeroRust where + +import Commands.Base +import Commands.Compile.RiscZeroRust.Options +import Commands.Compile.RiscZeroRust.Rust +import Juvix.Compiler.Backend.Rust.Data.Result +import Juvix.Compiler.Tree.Data.InfoTable +import Juvix.Compiler.Tree.Translation.FromSource qualified as Tree + +runCommand :: + (Members '[App, TaggedLock, EmbedIO] r) => + RiscZeroRustOptions ('InputExtension 'FileExtJuvixTree) -> + Sem r () +runCommand opts = do + let inputFile = Just $ opts ^. riscZeroRustCompileCommonOptions . compileInputFile + mainFile <- getMainFile inputFile + tab :: InfoTable <- readFile mainFile >>= getRight . Tree.runParser mainFile + entrypoint <- + applyOptions opts + <$> getEntryPoint inputFile + Result {..} <- + getRight + . run + . runError @JuvixError + . runReader entrypoint + $ treeToRiscZeroRust tab + compileRustCode opts inputFile _resultRustCode diff --git a/app/Commands/Dev/Tree/CompileOld/Options.hs b/app/Commands/Dev/Tree/CompileOld/Options.hs index da0184c502..822b098fb5 100644 --- a/app/Commands/Dev/Tree/CompileOld/Options.hs +++ b/app/Commands/Dev/Tree/CompileOld/Options.hs @@ -6,17 +6,19 @@ where import Commands.Extra.Compile.Options import CommonOptions +import Juvix.Config qualified as Config treeSupportedTargets :: SupportedTargets treeSupportedTargets = AppTargetNative64 - :| [ AppTargetWasm32Wasi, - AppTargetAsm, + :| [ AppTargetAsm, AppTargetReg, AppTargetCasm, AppTargetCairo, AppTargetAnoma ] + <> [AppTargetWasm32Wasi | Config.config ^. Config.configWasm] + <> [AppTargetRiscZeroRust | Config.config ^. Config.configRust] parseTreeCompileOptions :: Parser CompileOptions parseTreeCompileOptions = diff --git a/app/Commands/Extra/Compile.hs b/app/Commands/Extra/Compile.hs index c1ef0f0ff7..9afa985255 100644 --- a/app/Commands/Extra/Compile.hs +++ b/app/Commands/Extra/Compile.hs @@ -42,8 +42,8 @@ prepareRuntime buildDir o = do mapM_ writeHeader headersDir case o ^. compileTarget of AppTargetWasm32Wasi - | o ^. compileDebug -> writeRuntime wasiDebugRuntime - AppTargetWasm32Wasi -> writeRuntime wasiReleaseRuntime + | o ^. compileDebug -> writeRuntime (fromJust wasiDebugRuntime) + AppTargetWasm32Wasi -> writeRuntime (fromJust wasiReleaseRuntime) AppTargetNative64 | o ^. compileDebug -> writeRuntime nativeDebugRuntime AppTargetNative64 -> writeRuntime nativeReleaseRuntime @@ -57,14 +57,14 @@ prepareRuntime buildDir o = do AppTargetCairo -> return () AppTargetRiscZeroRust -> return () where - wasiReleaseRuntime :: BS.ByteString - wasiReleaseRuntime = $(FE.makeRelativeToProject "runtime/c/_build.wasm32-wasi/libjuvix.a" >>= FE.embedFile) + wasiReleaseRuntime :: Maybe BS.ByteString + wasiReleaseRuntime = $(FE.makeRelativeToProject "runtime/c/_build.wasm32-wasi/libjuvix.a" >>= FE.embedFileIfExists) nativeReleaseRuntime :: BS.ByteString nativeReleaseRuntime = $(FE.makeRelativeToProject "runtime/c/_build.native64/libjuvix.a" >>= FE.embedFile) - wasiDebugRuntime :: BS.ByteString - wasiDebugRuntime = $(FE.makeRelativeToProject "runtime/c/_build.wasm32-wasi-debug/libjuvix.a" >>= FE.embedFile) + wasiDebugRuntime :: Maybe BS.ByteString + wasiDebugRuntime = $(FE.makeRelativeToProject "runtime/c/_build.wasm32-wasi-debug/libjuvix.a" >>= FE.embedFileIfExists) nativeDebugRuntime :: BS.ByteString nativeDebugRuntime = $(FE.makeRelativeToProject "runtime/c/_build.native64-debug/libjuvix.a" >>= FE.embedFile) diff --git a/runtime/Makefile b/runtime/Makefile index 50e4fcd837..6446a33e01 100644 --- a/runtime/Makefile +++ b/runtime/Makefile @@ -16,7 +16,7 @@ juvix_c_native: .PHONY: juvix_c_wasm juvix_c_wasm: - if grep -q '"wasm": true' ../config/config.json; then cd c && $(MAKE) -s wasm32 wasm32-wasi-debug; fi + if grep -q '"wasm": true' ../config/config.json; then cd c && $(MAKE) -s wasm32-wasi wasm32-wasi-debug; fi .PHONY: juvix_rust juvix_rust: diff --git a/src/Juvix/Compiler/Pipeline.hs b/src/Juvix/Compiler/Pipeline.hs index ad95a0a790..4f957b11b6 100644 --- a/src/Juvix/Compiler/Pipeline.hs +++ b/src/Juvix/Compiler/Pipeline.hs @@ -322,6 +322,15 @@ treeToCasm = treeToCairoAsm >=> asmToCasm treeToCairo :: (Members '[Error JuvixError, Reader EntryPoint] r) => Tree.InfoTable -> Sem r Cairo.Result treeToCairo = treeToCasm >=> casmToCairo +treeToRust' :: (Members '[Error JuvixError, Reader EntryPoint] r) => Rust.Backend -> Tree.InfoTable -> Sem r Rust.Result +treeToRust' backend = treeToReg >=> regToRust' backend + +treeToRust :: (Members '[Error JuvixError, Reader EntryPoint] r) => Tree.InfoTable -> Sem r Rust.Result +treeToRust = treeToRust' Rust.BackendRust + +treeToRiscZeroRust :: (Members '[Error JuvixError, Reader EntryPoint] r) => Tree.InfoTable -> Sem r Rust.Result +treeToRiscZeroRust = treeToRust' Rust.BackendRiscZero + asmToReg :: (Members '[Error JuvixError, Reader EntryPoint] r) => Asm.InfoTable -> Sem r Reg.InfoTable asmToReg = Asm.toReg >=> return . Reg.fromAsm