on master help sign in
Pass parameters to codegens with new cmdoption --cg-opt
f5bff01Niklas Larsson
src/IRTS/Compiler.hs+1−1
@@ -136,7 +136,7 @@ generate codegen mainmod ir
136 Via "c" -> codegenC ir
136 Via "c" -> codegenC ir
137 -- Any external code generator
137 -- Any external code generator
138 Via cg -> do let cmd = "idris-" ++ cg
138 Via cg -> do let cmd = "idris-" ++ cg
139− args = [mainmod, "-o", outputFile ir]
139+ args = [mainmod, "-o", outputFile ir] ++ compilerFlags ir
140 exit <- rawSystem cmd args
140 exit <- rawSystem cmd args
141 when (exit /= ExitSuccess) $
141 when (exit /= ExitSuccess) $
142 putStrLn ("FAILURE: " ++ show cmd ++ " " ++ show args)
142 putStrLn ("FAILURE: " ++ show cmd ++ " " ++ show args)
src/Idris/AbsSyntaxTree.hs+1
@@ -472,6 +472,7 @@ data Opt = Filename String
472 | DumpDefun String
472 | DumpDefun String
473 | DumpCases String
473 | DumpCases String
474 | UseCodegen Codegen
474 | UseCodegen Codegen
475+ | CodegenArgs String
475 | OutputTy OutputType
476 | OutputTy OutputType
476 | Extension LanguageExt
477 | Extension LanguageExt
477 | InterpretScript String
478 | InterpretScript String
src/Idris/CmdOptions.hs+1
@@ -127,6 +127,7 @@ parseFlags = many $
127 <|> (DumpDefun <$> strOption (long "dumpdefuns"))
127 <|> (DumpDefun <$> strOption (long "dumpdefuns"))
128 <|> (DumpCases <$> strOption (long "dumpcases"))
128 <|> (DumpCases <$> strOption (long "dumpcases"))
129 <|> ((\s -> UseCodegen $ parseCodegen s) <$> strOption (long "codegen" <> metavar "TARGET" <> help "Select code generator: C, Javascript, Node and bytecode are bundled with Idris"))
129 <|> ((\s -> UseCodegen $ parseCodegen s) <$> strOption (long "codegen" <> metavar "TARGET" <> help "Select code generator: C, Javascript, Node and bytecode are bundled with Idris"))
130+ <|> (CodegenArgs <$> strOption (long "cg-opt" <> metavar "ARG" <> help "Arguments to pass to code generator"))
130 <|> (EvalExpr <$> strOption (long "eval" <> short 'e' <> metavar "EXPR" <> help "Evaluate an expression without loading the REPL"))
131 <|> (EvalExpr <$> strOption (long "eval" <> short 'e' <> metavar "EXPR" <> help "Evaluate an expression without loading the REPL"))
131 <|> flag' (InterpretScript "Main.main") (long "execute" <> help "Execute as idris")
132 <|> flag' (InterpretScript "Main.main") (long "execute" <> help "Execute as idris")
132 <|> (InterpretScript <$> strOption (long "exec" <> metavar "EXPR" <> help "Execute as idris"))
133 <|> (InterpretScript <$> strOption (long "exec" <> metavar "EXPR" <> help "Execute as idris"))
src/Idris/REPL.hs+6
@@ -1600,6 +1600,8 @@ idrisMain opts =
1600 let cgn = case opt getCodegen opts of
1600 let cgn = case opt getCodegen opts of
1601 [] -> Via "c"
1601 [] -> Via "c"
1602 xs -> last xs
1602 xs -> last xs
1603+ let cgFlags = opt getCodegenArgs opts
1604+
1603 -- Now set/unset specifically chosen optimisations
1605 -- Now set/unset specifically chosen optimisations
1604 sequence_ (opt getOptimisation opts)
1606 sequence_ (opt getOptimisation opts)
1605 script <- case opt getExecScript opts of
1607 script <- case opt getExecScript opts of
@@ -1624,6 +1626,7 @@ idrisMain opts =
1624 setOutputTy outty
1626 setOutputTy outty
1625 setNoBanner nobanner
1627 setNoBanner nobanner
1626 setCodegen cgn
1628 setCodegen cgn
1629+ mapM_ (addFlag cgn) cgFlags
1627 mapM_ makeOption opts
1630 mapM_ makeOption opts
1628 -- if we have the --bytecode flag, drop into the bytecode assembler
1631 -- if we have the --bytecode flag, drop into the bytecode assembler
1629 case bcs of
1632 case bcs of
@@ -1838,6 +1841,9 @@ getCodegen :: Opt -> Maybe Codegen
1838getCodegen (UseCodegen x) = Just x
1841getCodegen (UseCodegen x) = Just x
1839getCodegen _ = Nothing
1842getCodegen _ = Nothing
1840
1843
1844+getCodegenArgs :: Opt -> Maybe String
1845+getCodegenArgs (CodegenArgs args) = Just args
1846+getCodegenArgs _ = Nothing
1841
1847
1842getConsoleWidth :: Opt -> Maybe ConsoleWidth
1848getConsoleWidth :: Opt -> Maybe ConsoleWidth
1843getConsoleWidth (UseConsoleWidth x) = Just x
1849getConsoleWidth (UseConsoleWidth x) = Just x