@@ -43,6 +43,7 @@ import qualified Data.Map as M
43import qualified Data.Set as S
43import qualified Data.Set as S
44import System.Process
44import System.Process
45import System.IO
45import System.IO
46import System.Directory
47import System.Directory
47import System.Environment
48import System.Environment
48import System.FilePath ((</>), addTrailingPathSeparator)
49import System.FilePath ((</>), addTrailingPathSeparator)
@@ -114,14 +115,22 @@ compile codegen f tm
114 ex <- doesFileExist f
115 ex <- doesFileExist f
115 if ex then return f else return h
116 if ex then return f else return h
117−generate :: Codegen -> CodegenInfo -> IO ()
118+generate :: Codegen -> FilePath -> CodegenInfo -> IO ()
118−generate codegen ir = case codegen of
119+generate codegen mainmod ir
121+ -- Built-in code generators (FIXME: lift these out!)
119− Via "c" -> codegenC ir
122+ Via "c" -> codegenC ir
120− Via "java" -> codegenJava ir
123+ Via "java" -> codegenJava ir
121− Via "javascript" -> codegenJavaScript ir
124+ Via "javascript" -> codegenJavaScript ir
122− Via "node" -> codegenNode ir
125+ Via "node" -> codegenNode ir
123− Via "llvm" -> codegenLLVM ir
126+ Via "llvm" -> codegenLLVM ir
127+ -- Any external code generator
128+ Via cg -> do let cmd = "idris-" ++ cg ++ " " ++ mainmod ++
129+ " -o " ++ outputFile ir
131+ when (exit /= ExitSuccess) $
132+ putStrLn ("FAILURE: " ++ show cmd)
124− Bytecode -> dumpBC (simpleDecls ir) (outputFile ir)
133+ Bytecode -> dumpBC (simpleDecls ir) (outputFile ir)
126irMain :: TT Name -> Idris LDecl
135irMain :: TT Name -> Idris LDecl
127irMain tm = do
136irMain tm = do