[project @ 2000-10-24 16:08:16 by simonmar]
[ghc-hetmet.git] / ghc / compiler / main / DriverFlags.hs
index 8369191..d973a93 100644 (file)
@@ -1,5 +1,5 @@
 -----------------------------------------------------------------------------
--- $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
 --
@@ -241,7 +241,6 @@ static_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) )
@@ -262,7 +261,7 @@ static_flags =
   ,  ( "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) )
@@ -273,9 +272,9 @@ static_flags =
   ,  ( "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
@@ -298,15 +297,16 @@ static_flags =
 -----------------------------------------------------------------------------
 -- 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 = [
 
@@ -324,7 +324,7 @@ 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) )
@@ -365,6 +365,23 @@ dynamic_flags = [
   ,  ( "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}) ))
@@ -380,6 +397,10 @@ dynamic_flags = [
 
   ,  ( "fallow-undecidable-instances",
                NoArg (setDynFlag Opt_AllowUndecidableInstances) )
+
+  ,  ( "fgenerics",  NoArg (setDynFlag Opt_Generics) )
+
+  ,  ( "freport-compile", NoArg (setDynFlag Opt_ReportCompile) )
  ]
 
 -----------------------------------------------------------------------------
@@ -399,3 +420,38 @@ decodeSize str
 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 ] )