on master help sign in
Merge pull request #2463 from melted/cgoptions

Pass parameters to codegens with new cmdoption --cg-opt

commitdda41af21d33cee5f24e073a1525f15096583396 authorNiklas Larsson <metaniklas@gmail.com> dateFri 24 Jul 2015, 12:13 (11 years ago) parenta24c7d4f5bff01
4 files changed+9−1
src/IRTS/Compiler.hs+1−1 src/Idris/AbsSyntaxTree.hs+1 src/Idris/CmdOptions.hs+1 src/Idris/REPL.hs+6
src/IRTS/Compiler.hs+1−1
@@ -136,7 +136,7 @@ generate codegen mainmod ir
136136 Via "c" -> codegenC ir
137137 -- Any external code generator
138138 Via cg -> do let cmd = "idris-" ++ cg
139− args = [mainmod, "-o", outputFile ir]
139+ args = [mainmod, "-o", outputFile ir] ++ compilerFlags ir
140140 exit <- rawSystem cmd args
141141 when (exit /= ExitSuccess) $
142142 putStrLn ("FAILURE: " ++ show cmd ++ " " ++ show args)
src/Idris/AbsSyntaxTree.hs+1
@@ -472,6 +472,7 @@ data Opt = Filename String
472472 | DumpDefun String
473473 | DumpCases String
474474 | UseCodegen Codegen
475+ | CodegenArgs String
475476 | OutputTy OutputType
476477 | Extension LanguageExt
477478 | InterpretScript String
src/Idris/CmdOptions.hs+1
@@ -127,6 +127,7 @@ parseFlags = many $
127127 <|> (DumpDefun <$> strOption (long "dumpdefuns"))
128128 <|> (DumpCases <$> strOption (long "dumpcases"))
129129 <|> ((\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"))
130131 <|> (EvalExpr <$> strOption (long "eval" <> short 'e' <> metavar "EXPR" <> help "Evaluate an expression without loading the REPL"))
131132 <|> flag' (InterpretScript "Main.main") (long "execute" <> help "Execute as idris")
132133 <|> (InterpretScript <$> strOption (long "exec" <> metavar "EXPR" <> help "Execute as idris"))
src/Idris/REPL.hs+6
@@ -1601,6 +1601,8 @@ idrisMain opts =
16011601 let cgn = case opt getCodegen opts of
16021602 [] -> Via "c"
16031603 xs -> last xs
1604+ let cgFlags = opt getCodegenArgs opts
1605+
16041606 -- Now set/unset specifically chosen optimisations
16051607 sequence_ (opt getOptimisation opts)
16061608 script <- case opt getExecScript opts of
@@ -1625,6 +1627,7 @@ idrisMain opts =
16251627 setOutputTy outty
16261628 setNoBanner nobanner
16271629 setCodegen cgn
1630+ mapM_ (addFlag cgn) cgFlags
16281631 mapM_ makeOption opts
16291632 -- if we have the --bytecode flag, drop into the bytecode assembler
16301633 case bcs of
@@ -1839,6 +1842,9 @@ getCodegen :: Opt -> Maybe Codegen
18391842getCodegen (UseCodegen x) = Just x
18401843getCodegen _ = Nothing
18411844
1845+getCodegenArgs :: Opt -> Maybe String
1846+getCodegenArgs (CodegenArgs args) = Just args
1847+getCodegenArgs _ = Nothing
18421848
18431849getConsoleWidth :: Opt -> Maybe ConsoleWidth
18441850getConsoleWidth (UseConsoleWidth x) = Just x