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