module Main where import Idris.Core.TT import Idris.AbsSyntax import Idris.ElabDecls import Idris.REPL import IRTS.Compiler import IRTS.CodegenC import System.Environment import System.Exit import Paths_idris data Opts = Opts { inputs :: [FilePath], output :: FilePath } showUsage = do putStrLn "Usage: idris-c [-o ]" exitWith ExitSuccess getOpts :: IO Opts getOpts = do xs <- getArgs return $ process (Opts [] "a.out") xs where process opts ("-o":o:xs) = process (opts { output = o }) xs process opts (x:xs) = process (opts { inputs = x:inputs opts }) xs process opts [] = opts c_main :: Opts -> Idris () c_main opts = do elabPrims loadInputs (inputs opts) Nothing mainProg <- elabMain ir <- compile (Via "c") (output opts) mainProg runIO $ codegenC ir main :: IO () main = do opts <- getOpts if (null (inputs opts)) then showUsage else runMain (c_main opts)