summaryrefslogtreecommitdiff
path: root/tool
diff options
context:
space:
mode:
Diffstat (limited to 'tool')
-rw-r--r--tool/Compiler.hs32
1 files changed, 32 insertions, 0 deletions
diff --git a/tool/Compiler.hs b/tool/Compiler.hs
new file mode 100644
index 00000000..2195f0c6
--- /dev/null
+++ b/tool/Compiler.hs
@@ -0,0 +1,32 @@
1{-# LANGUAGE RecordWildCards #-}
2import Options.Applicative
3import Data.Aeson
4import qualified Data.ByteString.Lazy as B
5import LambdaCube.Compiler.Driver
6
7data Config
8 = Config
9 { srcName :: String
10 , backend :: Backend
11 }
12
13sample :: Parser Config
14sample = Config
15 <$> argument str (metavar "SOURCE_FILE")
16 <*> flag OpenGL33 WebGL1 (long "webgl" <> help "generate WebGL 1.0 pipeline" )
17
18main :: IO ()
19main = execParser opts >>= compile
20 where
21 opts = info (helper <*> sample)
22 ( fullDesc
23 <> progDesc "compiles LambdaCube graphics pipeline source to JSON IR"
24 <> header "LambdaCube 3D compiler" )
25
26compile :: Config -> IO ()
27compile Config{..} = do
28 pplRes <- compileMain ["."] backend srcName
29 case pplRes of
30 Left err -> putStrLn err
31 Right ppl -> do
32 B.writeFile (srcName <> ".json") $ encode ppl