on 7afa310 help sign in
44 lines 1.1 kB history raw
1module Main where
3import Idris.Core.TT
4import Idris.AbsSyntax
5import Idris.ElabDecls
6import Idris.REPL
8import IRTS.Compiler
9import IRTS.CodegenC
11import System.Environment
12import System.Exit
14import Paths_idris
16data Opts = Opts { inputs :: [FilePath],
17 output :: FilePath }
19showUsage = do putStrLn "Usage: idris-c <ibc-files> [-o <output-file>]"
20 exitWith ExitSuccess
22getOpts :: IO Opts
23getOpts = do xs <- getArgs
24 return $ process (Opts [] "a.out") xs
25 where
26 process opts ("-o":o:xs) = process (opts { output = o }) xs
27 process opts (x:xs) = process (opts { inputs = x:inputs opts }) xs
28 process opts [] = opts
30c_main :: Opts -> Idris ()
31c_main opts = do elabPrims
32 loadInputs (inputs opts) Nothing
33 mainProg <- elabMain
34 ir <- compile (Via "c") (output opts) mainProg
35 runIO $ codegenC ir
37main :: IO ()
38main = do opts <- getOpts
39 if (null (inputs opts))
40 then showUsage
41 else runMain (c_main opts)