ghc-7.0.4: The GHC API

DynFlags

Contents

Description

Dynamic flags

(c) The University of Glasgow 2005

Synopsis

Dynamic flags and associated configuration types

data DynFlag Source

Enumerates the simple on-or-off dynamic flags

Constructors

Opt_D_dump_cmm 
Opt_D_dump_cmmz 
Opt_D_dump_cmmz_pretty 
Opt_D_dump_cps_cmm 
Opt_D_dump_cvt_cmm 
Opt_D_dump_asm 
Opt_D_dump_asm_native 
Opt_D_dump_asm_liveness 
Opt_D_dump_asm_coalesce 
Opt_D_dump_asm_regalloc 
Opt_D_dump_asm_regalloc_stages 
Opt_D_dump_asm_conflicts 
Opt_D_dump_asm_stats 
Opt_D_dump_asm_expanded 
Opt_D_dump_llvm 
Opt_D_dump_cpranal 
Opt_D_dump_deriv 
Opt_D_dump_ds 
Opt_D_dump_flatC 
Opt_D_dump_foreign 
Opt_D_dump_inlinings 
Opt_D_dump_rule_firings 
Opt_D_dump_occur_anal 
Opt_D_dump_parsed 
Opt_D_dump_rn 
Opt_D_dump_simpl 
Opt_D_dump_simpl_iterations 
Opt_D_dump_simpl_phases 
Opt_D_dump_spec 
Opt_D_dump_prep 
Opt_D_dump_stg 
Opt_D_dump_stranal 
Opt_D_dump_tc 
Opt_D_dump_types 
Opt_D_dump_rules 
Opt_D_dump_cse 
Opt_D_dump_worker_wrapper 
Opt_D_dump_rn_trace 
Opt_D_dump_rn_stats 
Opt_D_dump_opt_cmm 
Opt_D_dump_simpl_stats 
Opt_D_dump_cs_trace 
Opt_D_dump_tc_trace 
Opt_D_dump_if_trace 
Opt_D_dump_splices 
Opt_D_dump_BCOs 
Opt_D_dump_vect 
Opt_D_dump_hpc 
Opt_D_dump_rtti 
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_D_dump_mod_cycles 
Opt_D_dump_view_pattern_commoning 
Opt_D_faststring_stats 
Opt_DumpToFile

Append dump output to files instead of stdout.

Opt_D_no_debug_output 
Opt_DoCoreLinting 
Opt_DoStgLinting 
Opt_DoCmmLinting 
Opt_DoAsmLinting 
Opt_WarnIsError 
Opt_WarnDuplicateExports 
Opt_WarnHiShadows 
Opt_WarnImplicitPrelude 
Opt_WarnIncompletePatterns 
Opt_WarnIncompletePatternsRecUpd 
Opt_WarnMissingFields 
Opt_WarnMissingImportList 
Opt_WarnMissingMethods 
Opt_WarnMissingSigs 
Opt_WarnMissingLocalSigs 
Opt_WarnNameShadowing 
Opt_WarnOverlappingPatterns 
Opt_WarnTypeDefaults 
Opt_WarnMonomorphism 
Opt_WarnUnusedBinds 
Opt_WarnUnusedImports 
Opt_WarnUnusedMatches 
Opt_WarnWarningsDeprecations 
Opt_WarnDeprecatedFlags 
Opt_WarnDodgyExports 
Opt_WarnDodgyImports 
Opt_WarnOrphans 
Opt_WarnAutoOrphans 
Opt_WarnTabs 
Opt_WarnUnrecognisedPragmas 
Opt_WarnDodgyForeignImports 
Opt_WarnLazyUnliftedBindings 
Opt_WarnUnusedDoBind 
Opt_WarnWrongDoBind 
Opt_WarnAlternativeLayoutRuleTransitional 
Opt_PrintExplicitForalls 
Opt_Strictness 
Opt_FullLaziness 
Opt_FloatIn 
Opt_Specialise 
Opt_StaticArgumentTransformation 
Opt_CSE 
Opt_LiberateCase 
Opt_SpecConstr 
Opt_DoLambdaEtaExpansion 
Opt_IgnoreAsserts 
Opt_DoEtaReduction 
Opt_CaseMerge 
Opt_UnboxStrictFields 
Opt_MethodSharing 
Opt_DictsCheap 
Opt_EnableRewriteRules 
Opt_Vectorise 
Opt_RegsGraph 
Opt_RegsIterative 
Opt_IgnoreInterfacePragmas 
Opt_OmitInterfacePragmas 
Opt_ExposeAllUnfoldings 
Opt_AutoSccsOnAllToplevs 
Opt_AutoSccsOnExportedToplevs 
Opt_AutoSccsOnIndividualCafs 
Opt_Pp 
Opt_ForceRecomp 
Opt_DryRun 
Opt_DoAsmMangling 
Opt_ExcessPrecision 
Opt_EagerBlackHoling 
Opt_ReadUserPackageConf 
Opt_NoHsMain 
Opt_SplitObjs 
Opt_StgStats 
Opt_HideAllPackages 
Opt_PrintBindResult 
Opt_Haddock 
Opt_HaddockOptions 
Opt_Hpc_No_Auto 
Opt_BreakOnException 
Opt_BreakOnError 
Opt_PrintEvldWithShow 
Opt_PrintBindContents 
Opt_GenManifest 
Opt_EmbedManifest 
Opt_EmitExternalCore 
Opt_SharedImplib 
Opt_BuildingCabalPackage 
Opt_SSE2 
Opt_GhciSandbox 
Opt_RunCPS 
Opt_RunCPSZ 
Opt_ConvertToZipCfgAndBack 
Opt_AutoLinkPackages 
Opt_ImplicitImportQualified 
Opt_TryNewCodeGen 
Opt_KeepHiDiffs 
Opt_KeepHcFiles 
Opt_KeepSFiles 
Opt_KeepRawSFiles 
Opt_KeepTmpFiles 
Opt_KeepRawTokenStream 
Opt_KeepLlvmFiles 

Instances

data ExtensionFlag Source

dopt :: DynFlag -> DynFlags -> BoolSource

Test whether a DynFlag is set

xopt :: ExtensionFlag -> DynFlags -> BoolSource

Test whether a ExtensionFlag is set

data DynFlags Source

Contains not only a collection of DynFlags but also a plethora of information relating to the compilation of a single file or GHC session

Constructors

DynFlags 

Fields

ghcMode :: GhcMode
 
ghcLink :: GhcLink
 
hscTarget :: HscTarget
 
hscOutName :: String

Name of the output file

extCoreName :: String

Name of the .hcr output file

verbosity :: Int

Verbosity level: see Note [Verbosity levels]

optLevel :: Int

Optimisation level

simplPhases :: Int

Number of simplifier phases

maxSimplIterations :: Int

Max simplifier iterations

shouldDumpSimplPhase :: Maybe String
 
ruleCheck :: Maybe String
 
strictnessBefore :: [Int]

Additional demand analysis

specConstrThreshold :: Maybe Int

Threshold for SpecConstr

specConstrCount :: Maybe Int

Max number of specialisations for any one function

liberateCaseThreshold :: Maybe Int

Threshold for LiberateCase

floatLamArgs :: Maybe Int

Arg count for lambda floating See CoreMonad.FloatOutSwitches

targetPlatform :: Platform

The platform we're compiling for. Used by the NCG.

stolen_x86_regs :: Int
 
cmdlineHcIncludes :: [String]
-#includes
importPaths :: [FilePath]
 
mainModIs :: Module
 
mainFunIs :: Maybe String
 
ctxtStkDepth :: Int

Typechecker context stack depth

dphBackend :: DPHBackend
 
thisPackage :: PackageId

name of package currently being compiled

ways :: [Way]

Way flags from the command line

buildTag :: String

The global "way" (e.g. "p" for prof)

rtsBuildTag :: String

The RTS "way"

splitInfo :: Maybe (String, Int)
 
objectDir :: Maybe String
 
dylibInstallName :: Maybe String
 
hiDir :: Maybe String
 
stubDir :: Maybe String
 
objectSuf :: String
 
hcSuf :: String
 
hiSuf :: String
 
outputFile :: Maybe String
 
outputHi :: Maybe String
 
dynLibLoader :: DynLibLoader
 
dumpPrefix :: Maybe FilePath

This is set by DriverPipeline.runPipeline based on where its output is going.

dumpPrefixForce :: Maybe FilePath

Override the dumpPrefix set by DriverPipeline.runPipeline. Set by -ddump-file-prefix

includePaths :: [String]
 
libraryPaths :: [String]
 
frameworkPaths :: [String]
 
cmdlineFrameworks :: [String]
 
tmpDir :: String
 
ghcUsagePath :: FilePath
 
ghciUsagePath :: FilePath
 
rtsOpts :: Maybe String
 
rtsOptsEnabled :: RtsOptsEnabled
 
hpcDir :: String

Path to store the .mix files

opt_L :: [String]
 
opt_P :: [String]
 
opt_F :: [String]
 
opt_c :: [String]
 
opt_m :: [String]
 
opt_a :: [String]
 
opt_l :: [String]
 
opt_windres :: [String]
 
opt_lo :: [String]
 
opt_lc :: [String]
 
pgm_L :: String
 
pgm_P :: (String, [Option])
 
pgm_F :: String
 
pgm_c :: (String, [Option])
 
pgm_m :: (String, [Option])
 
pgm_s :: (String, [Option])
 
pgm_a :: (String, [Option])
 
pgm_l :: (String, [Option])
 
pgm_dll :: (String, [Option])
 
pgm_T :: String
 
pgm_sysman :: String
 
pgm_windres :: String
 
pgm_lo :: (String, [Option])
 
pgm_lc :: (String, [Option])
 
depMakefile :: FilePath
 
depIncludePkgDeps :: Bool
 
depExcludeMods :: [ModuleName]
 
depSuffixes :: [String]
 
extraPkgConfs :: [FilePath]
 
topDir :: FilePath
 
systemPackageConfig :: FilePath

The -package-conf flags given on the command line, in the order they appeared.

packageFlags :: [PackageFlag]

The -package and -hide-package flags from the command-line

pkgDatabase :: Maybe [PackageConfig]
 
pkgState :: PackageState
 
filesToClean :: IORef [FilePath]
 
dirsToClean :: IORef (Map FilePath FilePath)
 
flags :: [DynFlag]
 
language :: Maybe Language
 
extensions :: [OnOff ExtensionFlag]
 
extensionFlags :: [ExtensionFlag]
 
log_action :: Severity -> SrcSpan -> PprStyle -> Message -> IO ()

Message output action: use ErrUtils instead of this if you can

haddockOptions :: Maybe String
 

data HscTarget Source

The target code type of the compilation (if any).

Whenever you change the target, also make sure to set ghcLink to something sensible.

HscNothing can be used to avoid generating any output, however, note that:

  • This will not run the desugaring step, thus no warnings generated in this step will be output. In particular, this includes warnings related to pattern matching. You can run the desugarer manually using GHC.desugarModule.
  • If a program uses Template Haskell the typechecker may try to run code from an imported module. This will fail if no code has been generated for this module. You can use GHC.needsTemplateHaskell to detect whether this might be the case and choose to either switch to a different target or avoid typechecking such modules. (The latter may preferable for security reasons.)

Constructors

HscC

Generate C code.

HscAsm

Generate assembly using the native code generator.

HscLlvm

Generate assembly using the llvm code generator.

HscJava

Generate Java bytecode.

HscInterpreted

Generate bytecode. (Requires LinkInMemory)

HscNothing

Don't generate any code. See notes above.

isObjectTarget :: HscTarget -> BoolSource

Will this target result in an object file on the disk?

defaultObjectTarget :: HscTargetSource

The HscTarget value corresponding to the default way to create object files on the current platform.

data GhcMode Source

The GhcMode tells us whether we're doing multi-module compilation (controlled via the GHC API) or one-shot (single-module) compilation. This makes a difference primarily to the Finder: in one-shot mode we look for interface files for imported modules, but in multi-module mode we look for source files in order to check whether they need to be recompiled.

Constructors

CompManager

--make, GHCi, etc.

OneShot
ghc -c Foo.hs
MkDepend

ghc -M, see Finder for why we need this

data GhcLink Source

What to do in the link step, if there is one.

Constructors

NoLink

Don't link at all

LinkBinary

Link object code into a binary

LinkInMemory

Use the in-memory dynamic linker (works for both bytecode and object code).

LinkDynLib

Link objects into a dynamic lib (DLL on Windows, DSO on ELF platforms)

data Option Source

When invoking external tools as part of the compilation pipeline, we pass these a sequence of options on the command-line. Rather than just using a list of Strings, we use a type that allows us to distinguish between filepaths and 'other stuff'. The reason for this is that this type gives us a handle on transforming filenames, and filenames only, to whatever format they're expected to be on a particular platform.

fFlags :: [FlagSpec DynFlag]Source

These -f<blah> flags can all be reversed with -fno-<blah>

fLangFlags :: [FlagSpec ExtensionFlag]Source

These -f<blah> flags can all be reversed with -fno-<blah>

xFlags :: [FlagSpec ExtensionFlag]Source

These -Xblah flags can all be reversed with -XNoblah

Manipulating DynFlags

defaultDynFlags :: DynFlagsSource

The normal DynFlags. Note that they is not suitable for use in this form and must be fully initialized by GHC.newSession first.

initDynFlags :: DynFlags -> IO DynFlagsSource

Used by GHC.newSession to partially initialize a new DynFlags value

getOptsSource

Arguments

:: DynFlags

DynFlags to retrieve the options from

-> (DynFlags -> [a])

Relevant record accessor: one of the opt_* accessors

-> [a]

Correctly ordered extracted options

Retrieve the options corresponding to a particular opt_* field in the correct order

getVerbFlag :: DynFlags -> StringSource

Gets the verbosity flag for the current verbosity level. This is fed to other tools, so GHC-specific verbosity flags like -ddump-most are not included

updOptLevel :: Int -> DynFlags -> DynFlagsSource

Sets the DynFlags to be appropriate to the optimisation level

Parsing DynFlags

parseDynamicFlagsSource

Arguments

:: Monad m 
=> DynFlags 
-> [Located String] 
-> m (DynFlags, [Located String], [Located String])

Updated DynFlags, left-over arguments, and list of warnings.

Parse dynamic flags from a list of command line arguments. Returns the the parsed DynFlags, the left-over arguments, and a list of warnings. Throws a UsageError if errors occurred during parsing (such as unknown flags or missing arguments).

parseDynamicNoPackageFlagsSource

Arguments

:: Monad m 
=> DynFlags 
-> [Located String] 
-> m (DynFlags, [Located String], [Located String])

Updated DynFlags, left-over arguments, and list of warnings.

Like parseDynamicFlags but does not allow the package flags (-package, -hide-package, -ignore-package, -hide-all-packages, -package-conf).

DynFlag C compiler options

Configuration of the stg-to-stg passes

Compiler configuration suitable for display to the user