exon-1.7.3.0: lib/Exon/Haskell/Settings.hs
{-# LANGUAGE CPP #-}
{-# OPTIONS_GHC -Wno-missing-fields -Wno-name-shadowing -Wno-unused-imports #-}
-- | Settings needed for running the GHC Parser.
module Exon.Haskell.Settings (baseDynFlags) where
import Data.Data hiding (Fixity)
import Data.Maybe
import GHC.Data.FastString
import GHC.Data.StringBuffer
import GHC.Driver.Backpack.Syntax
import GHC.Driver.Config
import GHC.Driver.Session
import GHC.Hs
import qualified GHC.Parser as Parser
import GHC.Parser.Lexer
import qualified GHC.Parser.Lexer as Lexer
import GHC.Parser.PostProcess
import GHC.Platform
import GHC.Settings
import GHC.Settings.Config
import GHC.Types.Fixity
import GHC.Types.Name
import GHC.Types.Name.Reader
import GHC.Types.SourceText
import GHC.Types.SrcLoc
import GHC.Unit.Info
import GHC.Unit.Types
import GHC.Utils.Fingerprint
import qualified Language.Haskell.TH.Syntax as GhcTH
fakeSettings :: Settings
fakeSettings = Settings
{ sGhcNameVersion=ghcNameVersion
, sFileSettings=fileSettings
, sTargetPlatform=platform
, sPlatformMisc=platformMisc
, sToolSettings=toolSettings
#if MIN_VERSION_ghc(9,14,0)
, sUnitSettings=UnitSettings {unitSettings_baseUnitId = stringToUnitId "base"}
#endif
}
where
toolSettings = ToolSettings {
toolSettings_opt_P_fingerprint=fingerprint0
}
fileSettings = FileSettings {}
platformMisc = PlatformMisc {}
ghcNameVersion =
GhcNameVersion{ghcNameVersion_programName="ghc"
,ghcNameVersion_projectVersion=cProjectVersion
}
platform =
Platform{
-- It doesn't matter what values we write here as these fields are
-- not referenced for our purposes. However the fields are strict
-- so we must say something.
platformByteOrder=LittleEndian
, platformHasGnuNonexecStack=True
, platformHasIdentDirective=False
, platformHasSubsectionsViaSymbols=False
, platformIsCrossCompiling=False
, platformLeadingUnderscore=False
, platformTablesNextToCode=False
, platform_constants=platformConstants
,
platformWordSize=PW8
, platformArchOS=ArchOS {archOS_arch=ArchUnknown, archOS_OS=OSUnknown}
#if MIN_VERSION_ghc(9, 4, 0)
, platformHasLibm = False
#endif
, platformUnregisterised=True
}
platformConstants = Nothing
#if MIN_VERSION_ghc(9, 6, 0)
applyFakeLlvmConfig :: a -> a
applyFakeLlvmConfig = id
#else
applyFakeLlvmConfig :: (LlvmConfig -> a) -> a
applyFakeLlvmConfig f = f $ LlvmConfig [] []
#endif
baseDynFlags :: [GhcTH.Extension] -> DynFlags
baseDynFlags exts =
let enable = GhcTH.TemplateHaskellQuotes : exts
in foldl xopt_set (applyFakeLlvmConfig (defaultDynFlags fakeSettings)) enable