Add bang patterns
[ghc-hetmet.git] / ghc / compiler / main / DynFlags.hs
index c6702b1..9d279d6 100644 (file)
@@ -152,6 +152,7 @@ data DynFlag
    | Opt_Generics
    | Opt_ImplicitPrelude 
    | Opt_ScopedTypeVariables
+   | Opt_BangPatterns
 
    -- optimisation opts
    | Opt_Strictness
@@ -194,8 +195,6 @@ data DynFlags = DynFlags {
   stgToDo              :: Maybe [StgToDo],  -- similarly
   hscTarget                    :: HscTarget,
   hscOutName           :: String,      -- name of the output file
-  hscStubHOutName      :: String,      -- name of the .stub_h output file
-  hscStubCOutName      :: String,      -- name of the .stub_c output file
   extCoreName          :: String,      -- name of the .core output file
   verbosity            :: Int,         -- verbosity level
   optLevel             :: Int,         -- optimisation level
@@ -213,13 +212,17 @@ data DynFlags = DynFlags {
   rtsBuildTag          :: String,      -- the RTS "way"
   
   -- paths etc.
-  outputDir            :: Maybe String,
-  outputFile           :: Maybe String,
-  outputHi             :: Maybe String,
+  objectDir            :: Maybe String,
+  hiDir                        :: Maybe String,
+  stubDir              :: Maybe String,
+
   objectSuf            :: String,
   hcSuf                        :: String,
-  hiDir                        :: Maybe String,
   hiSuf                        :: String,
+
+  outputFile           :: Maybe String,
+  outputHi             :: Maybe String,
+
   includePaths         :: [String],
   libraryPaths         :: [String],
   frameworkPaths       :: [String],    -- used on darwin only
@@ -326,8 +329,6 @@ defaultDynFlags =
        stgToDo                 = Nothing, 
        hscTarget               = defaultHscTarget, 
        hscOutName              = "", 
-       hscStubHOutName         = "",
-       hscStubCOutName         = "",
        extCoreName             = "",
        verbosity               = 0, 
        optLevel                = 0,
@@ -343,13 +344,16 @@ defaultDynFlags =
        buildTag                = panic "buildTag",
        rtsBuildTag             = panic "rtsBuildTag",
 
-       outputDir               = Nothing,
-       outputFile              = Nothing,
-       outputHi                = Nothing,
+       objectDir               = Nothing,
+       hiDir                   = Nothing,
+       stubDir                 = Nothing,
+
        objectSuf               = phaseInputExt StopLn,
        hcSuf                   = phaseInputExt HCc,
-       hiDir                   = Nothing,
        hiSuf                   = "hi",
+
+       outputFile              = Nothing,
+       outputHi                = Nothing,
        includePaths            = [],
        libraryPaths            = [],
        frameworkPaths          = [],
@@ -442,13 +446,16 @@ getVerbFlag dflags
   | verbosity dflags >= 3  = "-v" 
   | otherwise =  ""
 
-setOutputDir  f d = d{ outputDir  = f}
-setOutputFile f d = d{ outputFile = f}
-setOutputHi   f d = d{ outputHi   = f}
+setObjectDir  f d = d{ objectDir  = f}
+setHiDir      f d = d{ hiDir      = f}
+setStubDir    f d = d{ stubDir    = f}
+
 setObjectSuf  f d = d{ objectSuf  = f}
-setHcSuf      f d = d{ hcSuf      = f}
 setHiSuf      f d = d{ hiSuf      = f}
-setHiDir      f d = d{ hiDir      = f}
+setHcSuf      f d = d{ hcSuf      = f}
+
+setOutputFile f d = d{ outputFile = f}
+setOutputHi   f d = d{ outputHi   = f}
 
 -- XXX HACK: Prelude> words "'does not' work" ===> ["'does","not'","work"]
 -- Config.hs should really use Option.
@@ -805,7 +812,7 @@ dynamic_flags = [
   ,  ( "framework"     , HasArg (upd . addCmdlineFramework) )
 
        ------- Output Redirection ------------------------------------------
-  ,  ( "odir"          , HasArg (upd . setOutputDir  . Just))
+  ,  ( "odir"          , HasArg (upd . setObjectDir  . Just))
   ,  ( "o"             , SepArg (upd . setOutputFile . Just))
   ,  ( "ohi"           , HasArg (upd . setOutputHi   . Just ))
   ,  ( "osuf"          , HasArg (upd . setObjectSuf))
@@ -813,6 +820,7 @@ dynamic_flags = [
   ,  ( "hisuf"         , HasArg (upd . setHiSuf))
   ,  ( "hidir"         , HasArg (upd . setHiDir . Just))
   ,  ( "tmpdir"                , HasArg (upd . setTmpDir))
+  ,  ( "stubdir"       , HasArg (upd . setStubDir . Just))
 
        ------- Keeping temporary files -------------------------------------
   ,  ( "keep-hc-file"   , AnySuffix (\_ -> setDynFlag Opt_KeepHcFiles))
@@ -884,7 +892,7 @@ dynamic_flags = [
   ,  ( "dverbose-stg2stg",       setDumpFlag Opt_D_verbose_stg2stg)
   ,  ( "ddump-hi-diffs",         NoArg (setDynFlag Opt_D_dump_hi_diffs))
   ,  ( "ddump-hi",               setDumpFlag Opt_D_dump_hi)
-  ,  ( "ddump-minimal-imports",  setDumpFlag Opt_D_dump_minimal_imports)
+  ,  ( "ddump-minimal-imports",  NoArg (setDynFlag Opt_D_dump_minimal_imports))
   ,  ( "ddump-vect",            setDumpFlag Opt_D_dump_vect)
   ,  ( "dcore-lint",            NoArg (setDynFlag Opt_DoCoreLinting))
   ,  ( "dstg-lint",             NoArg (setDynFlag Opt_DoStgLinting))
@@ -961,6 +969,7 @@ fFlags = [
   ( "th",                              Opt_TH ),
   ( "implicit-prelude",                Opt_ImplicitPrelude ),
   ( "scoped-type-variables",           Opt_ScopedTypeVariables ),
+  ( "bang-patterns",                   Opt_BangPatterns ),
   ( "monomorphism-restriction",                Opt_MonomorphismRestriction ),
   ( "implicit-params",                 Opt_ImplicitParams ),
   ( "allow-overlapping-instances",     Opt_AllowOverlappingInstances ),
@@ -986,7 +995,8 @@ glasgowExtsFlags = [
   Opt_FFI, 
   Opt_TH, 
   Opt_ImplicitParams, 
-  Opt_ScopedTypeVariables ]
+  Opt_ScopedTypeVariables,
+  Opt_BangPatterns ]
 
 isFFlag f = f `elem` (map fst fFlags)
 getFFlag f = fromJust (lookup f fFlags)
@@ -1239,11 +1249,16 @@ machdepCCOpts dflags
 
 #elif x86_64_TARGET_ARCH
        = ( [], ["-fomit-frame-pointer",
-                "-fno-asynchronous-unwind-tables"
+                "-fno-asynchronous-unwind-tables",
                        -- the unwind tables are unnecessary for HC code,
                        -- and get in the way of -split-objs.  Another option
                        -- would be to throw them away in the mangler, but this
                        -- is easier.
+                "-fno-unit-at-a-time"
+                       -- unit-at-a-time doesn't do us any good, and screws
+                       -- up -split-objs by moving the split markers around.
+                       -- It's only turned on with -O2, but put it here just
+                       -- in case someone uses -optc-O2.
                ] )
 
 #elif mips_TARGET_ARCH