[project @ 2001-03-26 12:28:15 by simonmar]
[ghc-hetmet.git] / ghc / compiler / main / CmdLineOpts.lhs
index d254ab1..9227351 100644 (file)
@@ -1,4 +1,4 @@
-%
+
 % (c) The University of Glasgow, 1996-2000
 %
 \section[CmdLineOpts]{Things to do with command-line options}
@@ -10,9 +10,11 @@ module CmdLineOpts (
        SimplifierSwitch(..), isAmongSimpl,
        StgToDo(..),
        SwitchResult(..),
+
        HscLang(..),
        DynFlag(..),    -- needed non-abstractly by DriverFlags
        DynFlags(..),
+       defaultDynFlags,
 
        v_Static_hsc_opts,
 
@@ -21,6 +23,7 @@ module CmdLineOpts (
        isStaticHscFlag,
 
        opt_PprStyle_NoPrags,
+       opt_PprStyle_RawTypes,
        opt_PprUserLength,
        opt_PprStyle_Debug,
 
@@ -32,6 +35,11 @@ module CmdLineOpts (
        dopt_HscLang,
        dopt_OutName,
 
+       -- sets of warning opts
+       standardWarnings,
+       minusWOpts,
+       minusWallOpts,
+
        -- profiling opts
        opt_AutoSccsOnAllToplevs,
        opt_AutoSccsOnExportedToplevs,
@@ -48,8 +56,11 @@ module CmdLineOpts (
        opt_NumbersStrict,
        opt_Parallel,
        opt_SMP,
+       opt_NoMonomorphismRestriction,
+       opt_KeepStgTypes,
 
        -- optimisation opts
+       opt_NoMethodSharing,
        opt_DoSemiTagging,
        opt_FoldrBuildOn,
        opt_LiberateCaseThreshold,
@@ -60,13 +71,10 @@ module CmdLineOpts (
        opt_SimplNoPreInlining,
        opt_SimplDoEtaReduction,
        opt_SimplDoLambdaEtaExpansion,
-       opt_SimplCaseOfCase,
        opt_SimplCaseMerge,
-       opt_SimplPedanticBottoms,
        opt_SimplExcessPrecision,
 
        -- Unfolding control
-       opt_UF_HiFileThreshold,
        opt_UF_CreationThreshold,
        opt_UF_UseThreshold,
        opt_UF_FunAppDiscount,
@@ -85,14 +93,12 @@ module CmdLineOpts (
        opt_IgnoreAsserts,
        opt_IgnoreIfacePragmas,
         opt_NoHiCheck,
-       opt_NoImplicitPrelude,
        opt_OmitBlackHoling,
        opt_OmitInterfacePragmas,
        opt_NoPruneTyDecls,
        opt_NoPruneDecls,
        opt_Static,
-       opt_Unregisterised,
-       opt_Verbose
+       opt_Unregisterised
     ) where
 
 #include "HsVersions.h"
@@ -103,6 +109,7 @@ import IOExts       ( IORef, readIORef )
 import Constants       -- Default values for some flags
 import Util
 import FastTypes
+import Config
 
 import Maybes          ( firstJust )
 import Panic           ( panic )
@@ -177,6 +184,7 @@ data CoreToDo               -- These are diff core-to-core passes,
   | CoreDoStrictness
   | CoreDoWorkerWrapper
   | CoreDoSpecialising
+  | CoreDoSpecConstr
   | CoreDoUSPInf
   | CoreDoCPResult
   | CoreDoGlomBinds
@@ -187,9 +195,7 @@ data CoreToDo               -- These are diff core-to-core passes,
 
 \begin{code}
 data StgToDo
-  = StgDoStaticArgs
-  | StgDoLambdaLift
-  | StgDoMassageForProfiling  -- should be (next to) last
+  = StgDoMassageForProfiling  -- should be (next to) last
   -- There's also setStgVarInfo, but its absolute "lastness"
   -- is so critical that it is hardwired in (no flag).
   | D_stg_stats
@@ -214,9 +220,7 @@ data SimplifierSwitch
 data DynFlag
 
    -- debugging flags
-   = Opt_D_dump_all
-   | Opt_D_dump_most
-   | Opt_D_dump_absC
+   = Opt_D_dump_absC
    | Opt_D_dump_asm
    | Opt_D_dump_cpranal
    | Opt_D_dump_deriv
@@ -231,6 +235,7 @@ data DynFlag
    | Opt_D_dump_simpl
    | Opt_D_dump_simpl_iterations
    | Opt_D_dump_spec
+   | Opt_D_dump_sat
    | Opt_D_dump_stg
    | Opt_D_dump_stranal
    | Opt_D_dump_tc
@@ -239,14 +244,16 @@ data DynFlag
    | Opt_D_dump_usagesp
    | Opt_D_dump_cse
    | Opt_D_dump_worker_wrapper
-   | Opt_D_show_passes
    | Opt_D_dump_rn_trace
    | Opt_D_dump_rn_stats
    | Opt_D_dump_stix
    | Opt_D_dump_simpl_stats
+   | Opt_D_dump_tc_trace
+   | Opt_D_dump_BCOs
    | Opt_D_source_stats
    | Opt_D_verbose_core2core
    | Opt_D_verbose_stg2stg
+   | Opt_D_dump_hi
    | Opt_D_dump_hi_diffs
    | Opt_D_dump_minimal_imports
    | Opt_DoCoreLinting
@@ -273,19 +280,61 @@ data DynFlag
    | Opt_AllowUndecidableInstances
    | Opt_GlasgowExts
    | Opt_Generics
+   | Opt_NoImplicitPrelude 
 
-   -- misc
-   | Opt_ReportCompile
    deriving (Eq)
 
 data DynFlags = DynFlags {
-  coreToDo   :: [CoreToDo],
-  stgToDo    :: [StgToDo],
-  hscLang    :: HscLang,
-  hscOutName :: String,  -- name of the file in which to place output
-  flags      :: [DynFlag]
+  coreToDo             :: [CoreToDo],
+  stgToDo              :: [StgToDo],
+  hscLang              :: HscLang,
+  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
+  verbosity            :: Int,         -- verbosity level
+  cppFlag              :: Bool,        -- preprocess with cpp?
+  stolen_x86_regs      :: Int,         
+  cmdlineHcIncludes    :: [String],    -- -#includes
+
+  -- options for particular phases
+  opt_L                        :: [String],
+  opt_P                        :: [String],
+  opt_c                        :: [String],
+  opt_a                        :: [String],
+  opt_m                        :: [String],
+
+  -- hsc dynamic flags
+  flags                :: [DynFlag]
  }
 
+defaultDynFlags = DynFlags {
+  coreToDo = [], stgToDo = [], 
+  hscLang = HscC, 
+  hscOutName = "", 
+  hscStubHOutName = "", hscStubCOutName = "",
+  verbosity = 0, 
+  cppFlag              = False,
+  stolen_x86_regs      = 4,
+  cmdlineHcIncludes    = [],
+  opt_L                        = [],
+  opt_P                        = [],
+  opt_c                        = [],
+  opt_a                        = [],
+  opt_m                        = [],
+  flags = standardWarnings,
+  }
+
+{- 
+    Verbosity levels:
+       
+    0  |   print errors & warnings only
+    1   |   minimal verbosity: print "compiling M ... done." for each module.
+    2   |   equivalent to -dshow-passes
+    3   |   equivalent to existing "ghc -v"
+    4   |   "ghc -v -ddump-most"
+    5   |   "ghc -v -ddump-all"
+-}
+
 dopt :: DynFlag -> DynFlags -> Bool
 dopt f dflags  = f `elem` (flags dflags)
 
@@ -302,8 +351,11 @@ data HscLang
   = HscC
   | HscAsm
   | HscJava
+#ifdef ILX
+  | HscILX
+#endif
   | HscInterpreted
-    deriving Eq
+    deriving (Eq, Show)
 
 dopt_HscLang :: DynFlags -> HscLang
 dopt_HscLang = hscLang
@@ -311,6 +363,38 @@ dopt_HscLang = hscLang
 
 %************************************************************************
 %*                                                                     *
+\subsection{Warnings}
+%*                                                                     *
+%************************************************************************
+
+\begin{code}
+standardWarnings
+    = [ Opt_WarnDeprecations,
+       Opt_WarnOverlappingPatterns,
+       Opt_WarnMissingFields,
+       Opt_WarnMissingMethods,
+       Opt_WarnDuplicateExports
+      ]
+
+minusWOpts
+    = standardWarnings ++ 
+      [        Opt_WarnUnusedBinds,
+       Opt_WarnUnusedMatches,
+       Opt_WarnUnusedImports,
+       Opt_WarnIncompletePatterns
+      ]
+
+minusWallOpts
+    = minusWOpts ++
+      [        Opt_WarnTypeDefaults,
+       Opt_WarnNameShadowing,
+       Opt_WarnMissingSigs,
+       Opt_WarnHiShadows
+      ]
+\end{code}
+
+%************************************************************************
+%*                                                                     *
 \subsection{Classifying command-line options}
 %*                                                                     *
 %************************************************************************
@@ -341,10 +425,6 @@ lookup_def_int sw def = case (lookup_str sw) of
                            Nothing -> def              -- Use default
                            Just xx -> read xx
 
-lookup_def_char sw def = case (lookup_str sw) of
-                           Just (xx:_) -> xx
-                           _           -> def          -- Use default
-
 lookup_def_float sw def = case (lookup_str sw) of
                            Nothing -> def              -- Use default
                            Just xx -> read xx
@@ -377,6 +457,7 @@ unpacked_opts =
 -- debugging opts
 opt_PprStyle_NoPrags           = lookUp  SLIT("-dppr-noprags")
 opt_PprStyle_Debug             = lookUp  SLIT("-dppr-debug")
+opt_PprStyle_RawTypes          = lookUp  SLIT("-dppr-rawtypes")
 opt_PprUserLength              = lookup_def_int "-dppr-user-length" 5 --ToDo: give this a name
 
 -- profiling opts
@@ -389,6 +470,7 @@ opt_DoTickyProfiling                = lookUp  SLIT("-fticky-ticky")
 
 -- language opts
 opt_AllStrict                  = lookUp  SLIT("-fall-strict")
+opt_NoMonomorphismRestriction  = lookUp  SLIT("-fno-monomorphism-restriction")
 opt_DictsStrict                        = lookUp  SLIT("-fdicts-strict")
 opt_IrrefutableTuples          = lookUp  SLIT("-firrefutable-tuples")
 opt_MaxContextReductionDepth   = lookup_def_int "-fcontext-stack" mAX_CONTEXT_REDUCTION_DEPTH
@@ -397,18 +479,19 @@ opt_Parallel                      = lookUp  SLIT("-fparallel")
 opt_SMP                                = lookUp  SLIT("-fsmp")
 
 -- optimisation opts
+opt_NoMethodSharing            = lookUp  SLIT("-fno-method-sharing")
 opt_DoSemiTagging              = lookUp  SLIT("-fsemi-tagging")
 opt_FoldrBuildOn               = lookUp  SLIT("-ffoldr-build-on")
 opt_LiberateCaseThreshold      = lookup_def_int "-fliberate-case-threshold" (10::Int)
 opt_StgDoLetNoEscapes          = lookUp  SLIT("-flet-no-escape")
-opt_UnfoldCasms                        = lookUp SLIT("-funfold-casms-in-hi-file")
+opt_UnfoldCasms                        = lookUp  SLIT("-funfold-casms-in-hi-file")
 opt_UsageSPOn                  = lookUp  SLIT("-fusagesp-on")
 opt_UnboxStrictFields          = lookUp  SLIT("-funbox-strict-fields")
 
 {-
    The optional '-inpackage=P' flag tells what package
    we are compiling this module for.
-   The Prelude, for example is compiled with '-package prelude'
+   The Prelude, for example is compiled with '-inpackage std'
 -}
 opt_InPackage                  = case lookup_str "-inpackage=" of
                                    Just p  -> _PK_ p
@@ -417,28 +500,25 @@ opt_InPackage                     = case lookup_str "-inpackage=" of
 opt_EmitCExternDecls           = lookUp  SLIT("-femit-extern-decls")
 opt_EnsureSplittableC          = lookUp  SLIT("-fglobalise-toplev-names")
 opt_GranMacros                 = lookUp  SLIT("-fgransim")
-opt_HiVersion                  = lookup_def_int "-fhi-version=" 0 -- what version we're compiling.
+opt_HiVersion                  = read cProjectVersionInt :: Int
 opt_HistorySize                        = lookup_def_int "-fhistory-size" 20
 opt_IgnoreAsserts               = lookUp  SLIT("-fignore-asserts")
 opt_IgnoreIfacePragmas         = lookUp  SLIT("-fignore-interface-pragmas")
 opt_NoHiCheck                   = lookUp  SLIT("-fno-hi-version-check")
-opt_NoImplicitPrelude          = lookUp  SLIT("-fno-implicit-prelude")
 opt_OmitBlackHoling            = lookUp  SLIT("-dno-black-holing")
 opt_OmitInterfacePragmas       = lookUp  SLIT("-fomit-interface-pragmas")
+opt_KeepStgTypes               = lookUp  SLIT("-fkeep-stg-types")
 
 -- Simplifier switches
-opt_SimplNoPreInlining         = lookUp SLIT("-fno-pre-inlining")
+opt_SimplNoPreInlining         = lookUp  SLIT("-fno-pre-inlining")
        -- NoPreInlining is there just to see how bad things
        -- get if you don't do it!
-opt_SimplDoEtaReduction                = lookUp SLIT("-fdo-eta-reduction")
-opt_SimplDoLambdaEtaExpansion  = lookUp SLIT("-fdo-lambda-eta-expansion")
-opt_SimplCaseOfCase            = lookUp SLIT("-fcase-of-case")
-opt_SimplCaseMerge             = lookUp SLIT("-fcase-merge")
-opt_SimplPedanticBottoms       = lookUp SLIT("-fpedantic-bottoms")
-opt_SimplExcessPrecision       = lookUp SLIT("-fexcess-precision")
+opt_SimplDoEtaReduction                = lookUp  SLIT("-fdo-eta-reduction")
+opt_SimplDoLambdaEtaExpansion  = lookUp  SLIT("-fdo-lambda-eta-expansion")
+opt_SimplCaseMerge             = lookUp  SLIT("-fcase-merge")
+opt_SimplExcessPrecision       = lookUp  SLIT("-fexcess-precision")
 
 -- Unfolding control
-opt_UF_HiFileThreshold         = lookup_def_int "-funfolding-interface-threshold" (45::Int)
 opt_UF_CreationThreshold       = lookup_def_int "-funfolding-creation-threshold"  (45::Int)
 opt_UF_UseThreshold            = lookup_def_int "-funfolding-use-threshold"       (8::Int)     -- Discounts can be big
 opt_UF_FunAppDiscount          = lookup_def_int "-funfolding-fun-discount"        (6::Int)     -- It's great to inline a fn
@@ -448,11 +528,10 @@ opt_UF_UpdateInPlace              = lookUp  SLIT("-funfolding-update-in-place")
 opt_UF_CheapOp  = ( 1 :: Int)  -- Only one instruction; and the args are charged for
 opt_UF_DearOp   = ( 4 :: Int)
                        
-opt_NoPruneDecls               = lookUp SLIT("-fno-prune-decls")
-opt_NoPruneTyDecls             = lookUp SLIT("-fno-prune-tydecls")
-opt_Static                     = lookUp SLIT("-static")
-opt_Unregisterised             = lookUp SLIT("-funregisterised")
-opt_Verbose                    = lookUp SLIT("-v")
+opt_NoPruneDecls               = lookUp  SLIT("-fno-prune-decls")
+opt_NoPruneTyDecls             = lookUp  SLIT("-fno-prune-tydecls")
+opt_Static                     = lookUp  SLIT("-static")
+opt_Unregisterised             = lookUp  SLIT("-funregisterised")
 \end{code}
 
 %************************************************************************
@@ -464,58 +543,54 @@ opt_Verbose                       = lookUp SLIT("-v")
 \begin{code}
 isStaticHscFlag f =
   f `elem` [
-       "-fauto-sccs-on-all-toplevs",
-       "-fauto-sccs-on-exported-toplevs",
-       "-fauto-sccs-on-individual-cafs",
-       "-fauto-sccs-on-dicts",
-       "-fscc-profiling",
-       "-fticky-ticky",
-       "-fall-strict",
-       "-fdicts-strict",
-       "-fgenerics",
-       "-firrefutable-tuples",
-       "-fnumbers-strict",
-       "-fparallel",
-       "-fsmp",
-       "-fsemi-tagging",
-       "-ffoldr-build-on",
-       "-flet-no-escape",
-       "-funfold-casms-in-hi-file",
-       "-fusagesp-on",
-       "-funbox-strict-fields",
-       "-femit-extern-decls",
-       "-fglobalise-toplev-names",
-       "-fgransim",
-       "-fignore-asserts",
-       "-fignore-interface-pragmas",
-       "-fno-hi-version-check",
-       "-fno-implicit-prelude",
-       "-dno-black-holing",
-       "-fomit-interface-pragmas",
-       "-fno-pre-inlining",
-       "-fdo-eta-reduction",
-       "-fdo-lambda-eta-expansion",
-       "-fcase-of-case",
-       "-fcase-merge",
-       "-fpedantic-bottoms",
-       "-fexcess-precision",
-       "-funfolding-update-in-place",
-       "-freport-compile",
-       "-fno-prune-decls",
-       "-fno-prune-tydecls",
-       "-static",
-       "-funregisterised",
-       "-v" ]
+       "fauto-sccs-on-all-toplevs",
+       "fauto-sccs-on-exported-toplevs",
+       "fauto-sccs-on-individual-cafs",
+       "fauto-sccs-on-dicts",
+       "fscc-profiling",
+       "fticky-ticky",
+       "fall-strict",
+       "fdicts-strict",
+       "firrefutable-tuples",
+       "fnumbers-strict",
+       "fparallel",
+       "fsmp",
+       "fsemi-tagging",
+       "ffoldr-build-on",
+       "flet-no-escape",
+       "funfold-casms-in-hi-file",
+       "fusagesp-on",
+       "funbox-strict-fields",
+       "femit-extern-decls",
+       "fglobalise-toplev-names",
+       "fgransim",
+       "fignore-asserts",
+       "fignore-interface-pragmas",
+       "fno-hi-version-check",
+       "dno-black-holing",
+       "fno-method-sharing",
+        "fno-monomorphism-restriction",
+       "fomit-interface-pragmas",
+       "fkeep-stg-types",
+       "fno-pre-inlining",
+       "fdo-eta-reduction",
+       "fdo-lambda-eta-expansion",
+       "fcase-merge",
+       "fexcess-precision",
+       "funfolding-update-in-place",
+       "fno-prune-decls",
+       "fno-prune-tydecls",
+       "static",
+       "funregisterised"
+       ]
   || any (flip prefixMatch f) [
-       "-fcontext-stack",
-       "-fliberate-case-threshold",
-       "-fhi-version=",
-       "-fhistory-size",
-       "-funfolding-interface-threshold",
-       "-funfolding-creation-threshold",
-       "-funfolding-use-threshold",
-       "-funfolding-fun-discount",
-       "-funfolding-keeness-factor"
+       "fcontext-stack",
+       "fliberate-case-threshold",
+       "fhistory-size",
+       "funfolding-creation-threshold",
+       "funfolding-use-threshold",
+       "funfolding-fun-discount",
+       "funfolding-keeness-factor"
      ]
 \end{code}
 
@@ -606,11 +681,6 @@ isAmongSimpl on_switches           -- Switches mentioned later occur *earlier*
                            || sw `is_elem` ss
 \end{code}
 
-Default settings for simplifier switches
-
-\begin{code}
-defaultSimplSwitches = [MaxSimplifierIterations        1]
-\end{code}
 
 %************************************************************************
 %*                                                                     *