-----------------------------------------------------------------------------
--- $Id: DriverFlags.hs,v 1.1 2000/10/11 11:54:58 simonmar Exp $
+-- $Id: DriverFlags.hs,v 1.8 2000/10/24 16:08:16 simonmar Exp $
--
-- Driver flags
--
------- Specific phases --------------------------------------------
, ( "pgmL" , HasArg (writeIORef pgm_L) )
, ( "pgmP" , HasArg (writeIORef pgm_P) )
- , ( "pgmC" , HasArg (writeIORef pgm_C) )
, ( "pgmc" , HasArg (writeIORef pgm_c) )
, ( "pgmm" , HasArg (writeIORef pgm_m) )
, ( "pgms" , HasArg (writeIORef pgm_s) )
, ( "static" , NoArg (writeIORef static True) )
------ Compiler flags -----------------------------------------------
- , ( "O2-for-C" , NoArg (writeIORef opt_minus_o2_for_C True) )
+ , ( "O2-for-C" , NoArg (writeIORef v_minus_o2_for_C True) )
, ( "O" , OptPrefix (setOptLevel) )
, ( "fasm" , OptPrefix (\_ -> writeIORef hsc_lang HscAsm) )
, ( "fno-asm-mangling" , NoArg (writeIORef do_asm_mangling False) )
, ( "fmax-simplifier-iterations",
- Prefix (writeIORef opt_MaxSimplifierIterations . read) )
+ Prefix (writeIORef v_MaxSimplifierIterations . read) )
- , ( "fusagesp" , NoArg (do writeIORef opt_UsageSPInf True
+ , ( "fusagesp" , NoArg (do writeIORef v_UsageSPInf True
add opt_C "-fusagesp-on") )
, ( "fexcess-precision" , NoArg (do writeIORef excess_precision True
-----------------------------------------------------------------------------
-- parse the dynamic arguments
-GLOBAL_VAR(dynFlags, error "no dynFlags", DynFlags)
+GLOBAL_VAR(v_InitDynFlags, error "no InitDynFlags", DynFlags)
+GLOBAL_VAR(v_DynFlags, error "no DynFlags", DynFlags)
setDynFlag f = do
- dfs <- readIORef dynFlags
- writeIORef dynFlags dfs{ flags = f : flags dfs }
+ dfs <- readIORef v_DynFlags
+ writeIORef v_DynFlags dfs{ flags = f : flags dfs }
unSetDynFlag f = do
- dfs <- readIORef dynFlags
- writeIORef dynFlags dfs{ flags = filter (/= f) (flags dfs) }
+ dfs <- readIORef v_DynFlags
+ writeIORef v_DynFlags dfs{ flags = filter (/= f) (flags dfs) }
dynamic_flags = [
, ( "U", Prefix (\s -> addOpt_P ("-U'"++s++"'") ) )
------ Debugging ----------------------------------------------------
- , ( "dstg-stats", NoArg (writeIORef opt_StgStats True) )
+ , ( "dstg-stats", NoArg (writeIORef v_StgStats True) )
, ( "ddump_all", NoArg (setDynFlag Opt_D_dump_all) )
, ( "ddump_most", NoArg (setDynFlag Opt_D_dump_most) )
, ( "DoStgLinting", NoArg (setDynFlag Opt_DoStgLinting) )
, ( "DoUSPLinting", NoArg (setDynFlag Opt_DoUSPLinting) )
+ ------ Warnings ----------------------------------------------------
+
+ , ( "-fwarn-duplicate-exports", NoArg (setDynFlag Opt_WarnDuplicateExports) )
+ , ( "-fwarn-hi-shadowing", NoArg (setDynFlag Opt_WarnHiShadows) )
+ , ( "-fwarn-incomplete-patterns", NoArg (setDynFlag Opt_WarnIncompletePatterns) )
+ , ( "-fwarn-missing-fields", NoArg (setDynFlag Opt_WarnMissingFields) )
+ , ( "-fwarn-missing-methods", NoArg (setDynFlag Opt_WarnMissingMethods))
+ , ( "-fwarn-missing-signatures", NoArg (setDynFlag Opt_WarnMissingSigs) )
+ , ( "-fwarn-name-shadowing", NoArg (setDynFlag Opt_WarnNameShadowing) )
+ , ( "-fwarn-overlapping-patterns", NoArg (setDynFlag Opt_WarnOverlappingPatterns ) )
+ , ( "-fwarn-simple-patterns", NoArg (setDynFlag Opt_WarnSimplePatterns))
+ , ( "-fwarn-type-defaults", NoArg (setDynFlag Opt_WarnTypeDefaults) )
+ , ( "-fwarn-unused-binds", NoArg (setDynFlag Opt_WarnUnusedBinds) )
+ , ( "-fwarn-unused-imports", NoArg (setDynFlag Opt_WarnUnusedImports) )
+ , ( "-fwarn-unused-matches", NoArg (setDynFlag Opt_WarnUnusedMatches) )
+ , ( "-fwarn-deprecations", NoArg (setDynFlag Opt_WarnDeprecations) )
+
------ Machine dependant (-m<blah>) stuff ---------------------------
, ( "monly-2-regs", NoArg (updateState (\s -> s{stolen_x86_regs = 2}) ))
, ( "fallow-undecidable-instances",
NoArg (setDynFlag Opt_AllowUndecidableInstances) )
+
+ , ( "fgenerics", NoArg (setDynFlag Opt_Generics) )
+
+ , ( "freport-compile", NoArg (setDynFlag Opt_ReportCompile) )
]
-----------------------------------------------------------------------------
floatOpt :: IORef Double -> String -> IO ()
floatOpt ref str
= writeIORef ref (read str :: Double)
+
+-----------------------------------------------------------------------------
+-- Build the Hsc static command line opts
+
+buildStaticHscOpts :: IO [String]
+buildStaticHscOpts = do
+
+ opt_C_ <- getStaticOpts opt_C -- misc hsc opts
+
+ -- optimisation
+ minus_o <- readIORef v_OptLevel
+ let optimisation_opts =
+ case minus_o of
+ 0 -> hsc_minusNoO_flags
+ 1 -> hsc_minusO_flags
+ 2 -> hsc_minusO2_flags
+ _ -> error "unknown opt level"
+ -- ToDo: -Ofile
+
+ let stg_opts = [ "-flet-no-escape" ]
+ -- let-no-escape always on for now
+
+ -- take into account -fno-* flags by removing the equivalent -f*
+ -- flag from our list.
+ anti_flags <- getStaticOpts anti_opt_C
+ let basic_opts = opt_C_ ++ optimisation_opts ++ stg_opts
+ filtered_opts = filter (`notElem` anti_flags) basic_opts
+
+ verb <- is_verbose
+ let hi_vers = "-fhi-version="++cProjectVersionInt
+
+ static <- (do s <- readIORef static; if s then return "-static"
+ else return "")
+
+ return ( filtered_opts ++ [ hi_vers, static, verb ] )