+-- debugging opts
+opt_PprStyle_NoPrags = lookUp SLIT("-dppr-noprags")
+opt_PprStyle_Debug = lookUp SLIT("-dppr-debug")
+opt_PprUserLength = lookup_def_int "-dppr-user-length" 5 --ToDo: give this a name
+
+-- warning opts
+opt_WarnDuplicateExports = lookUp SLIT("-fwarn-duplicate-exports")
+opt_WarnHiShadows = lookUp SLIT("-fwarn-hi-shadowing")
+opt_WarnIncompletePatterns = lookUp SLIT("-fwarn-incomplete-patterns")
+opt_WarnMissingFields = lookUp SLIT("-fwarn-missing-fields")
+opt_WarnMissingMethods = lookUp SLIT("-fwarn-missing-methods")
+opt_WarnMissingSigs = lookUp SLIT("-fwarn-missing-signatures")
+opt_WarnNameShadowing = lookUp SLIT("-fwarn-name-shadowing")
+opt_WarnOverlappingPatterns = lookUp SLIT("-fwarn-overlapping-patterns")
+opt_WarnSimplePatterns = lookUp SLIT("-fwarn-simple-patterns")
+opt_WarnTypeDefaults = lookUp SLIT("-fwarn-type-defaults")
+opt_WarnUnusedBinds = lookUp SLIT("-fwarn-unused-binds")
+opt_WarnUnusedImports = lookUp SLIT("-fwarn-unused-imports")
+opt_WarnUnusedMatches = lookUp SLIT("-fwarn-unused-matches")
+opt_WarnDeprecations = lookUp SLIT("-fwarn-deprecations")
+
+-- profiling opts
+opt_AutoSccsOnAllToplevs = lookUp SLIT("-fauto-sccs-on-all-toplevs")
+opt_AutoSccsOnExportedToplevs = lookUp SLIT("-fauto-sccs-on-exported-toplevs")
+opt_AutoSccsOnIndividualCafs = lookUp SLIT("-fauto-sccs-on-individual-cafs")
+opt_AutoSccsOnDicts = lookUp SLIT("-fauto-sccs-on-dicts")
+opt_SccProfilingOn = lookUp SLIT("-fscc-profiling")
+opt_DoTickyProfiling = lookUp SLIT("-fticky-ticky")
+
+-- language opts
+opt_AllStrict = lookUp SLIT("-fall-strict")
+opt_DictsStrict = lookUp SLIT("-fdicts-strict")
+opt_Generics = lookUp SLIT("-fgenerics")
+opt_IrrefutableTuples = lookUp SLIT("-firrefutable-tuples")
+opt_MaxContextReductionDepth = lookup_def_int "-fcontext-stack" mAX_CONTEXT_REDUCTION_DEPTH
+opt_NumbersStrict = lookUp SLIT("-fnumbers-strict")
+opt_Parallel = lookUp SLIT("-fparallel")
+opt_SMP = lookUp SLIT("-fsmp")
+
+-- optimisation opts
+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_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'
+-}
+opt_InPackage = case lookup_str "-inpackage=" of
+ Just p -> _PK_ p
+ Nothing -> SLIT("Main") -- The package name if none is specified
+
+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_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")
+
+-- Simplifier switches
+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")
+
+-- 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
+opt_UF_KeenessFactor = lookup_def_float "-funfolding-keeness-factor" (1.5::Float)
+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_ReportCompile = lookUp SLIT("-freport-compile")
+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_UseVanillaRegs | opt_Unregisterised = 0
+ | otherwise = mAX_Real_Vanilla_REG
+opt_UseFloatRegs | opt_Unregisterised = 0
+ | otherwise = mAX_Real_Float_REG
+opt_UseDoubleRegs | opt_Unregisterised = 0
+ | otherwise = mAX_Real_Double_REG
+opt_UseLongRegs | opt_Unregisterised = 0
+ | otherwise = mAX_Real_Long_REG
+\end{code}