@@ -0,0 +1,44 @@
1+module Main where
2+
3+import Idris.Core.TT
4+import Idris.AbsSyntax
5+import Idris.ElabDecls
6+import Idris.REPL
7+
8+import IRTS.Compiler
9+import IRTS.CodegenC
10+
11+import System.Environment
12+import System.Exit
13+
14+import Paths_idris
15+
16+data Opts = Opts { inputs :: [FilePath],
17+ output :: FilePath }
18+
19+showUsage = do putStrLn "Usage: idris-c <ibc-files> [-o <output-file>]"
20+ exitWith ExitSuccess
21+
22+getOpts :: IO Opts
23+getOpts = 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
29+
30+c_main :: Opts -> Idris ()
31+c_main opts = do elabPrims
32+ loadInputs (inputs opts) Nothing
33+ mainProg <- elabMain
34+ ir <- compile (Via "c") (output opts) mainProg
35+ runIO $ codegenC ir
36+
37+main :: IO ()
38+main = do opts <- getOpts
39+ if (null (inputs opts))
40+ then showUsage
41+ else runMain (c_main opts)
42+
43+
44+