diff options
Diffstat (limited to 'tool')
-rw-r--r-- | tool/Compiler.hs | 32 |
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 #-} | ||
2 | import Options.Applicative | ||
3 | import Data.Aeson | ||
4 | import qualified Data.ByteString.Lazy as B | ||
5 | import LambdaCube.Compiler.Driver | ||
6 | |||
7 | data Config | ||
8 | = Config | ||
9 | { srcName :: String | ||
10 | , backend :: Backend | ||
11 | } | ||
12 | |||
13 | sample :: Parser Config | ||
14 | sample = Config | ||
15 | <$> argument str (metavar "SOURCE_FILE") | ||
16 | <*> flag OpenGL33 WebGL1 (long "webgl" <> help "generate WebGL 1.0 pipeline" ) | ||
17 | |||
18 | main :: IO () | ||
19 | main = 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 | |||
26 | compile :: Config -> IO () | ||
27 | compile 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 | ||