summaryrefslogtreecommitdiff
path: root/compiler/GHC/Driver/Session.hs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/GHC/Driver/Session.hs')
-rw-r--r--compiler/GHC/Driver/Session.hs13
1 files changed, 13 insertions, 0 deletions
diff --git a/compiler/GHC/Driver/Session.hs b/compiler/GHC/Driver/Session.hs
index 0407952c33..887cfa10f0 100644
--- a/compiler/GHC/Driver/Session.hs
+++ b/compiler/GHC/Driver/Session.hs
@@ -229,6 +229,7 @@ import GHC.Builtin.Names ( mAIN_NAME )
import GHC.Driver.Phases ( Phase(..), phaseInputExt )
import GHC.Driver.Flags
import GHC.Driver.Backend
+import GHC.Driver.Plugins.External
import GHC.Settings.Config
import GHC.Utils.CliOption
import GHC.Core.Unfold
@@ -590,6 +591,9 @@ data DynFlags = DynFlags {
-- ^ the @-ffrontend-opt@ flags given on the command line, in *reverse*
-- order that they're specified on the command line.
+ externalPluginSpecs :: [ExternalPluginSpec],
+ -- ^ External plugins loaded from shared libraries
+
-- For ghc -M
depMakefile :: FilePath,
depIncludePkgDeps :: Bool,
@@ -1176,6 +1180,8 @@ defaultDynFlags mySettings =
pluginModNameOpts = [],
frontendPluginOpts = [],
+ externalPluginSpecs = [],
+
outputFile_ = Nothing,
dynOutputFile_ = Nothing,
outputHi = Nothing,
@@ -1715,6 +1721,11 @@ addPluginModuleNameOption optflag d = d { pluginModNameOpts = (mkModuleName m, o
[] -> "" -- should probably signal an error
(_:plug_opt) -> plug_opt -- ignore the ':' from break
+addExternalPlugin :: String -> DynFlags -> DynFlags
+addExternalPlugin optflag d = case parseExternalPluginSpec optflag of
+ Just r -> d { externalPluginSpecs = r : externalPluginSpecs d }
+ Nothing -> cmdLineError $ "Couldn't parse external plugin specification: " ++ optflag
+
addFrontendPluginOption :: String -> DynFlags -> DynFlags
addFrontendPluginOption s d = d { frontendPluginOpts = s : frontendPluginOpts d }
@@ -2695,6 +2706,8 @@ dynamic_flags_deps = [
, make_ord_flag defGhcFlag "fclear-plugins" (noArg clearPluginModuleNames)
, make_ord_flag defGhcFlag "ffrontend-opt" (hasArg addFrontendPluginOption)
+ , make_ord_flag defGhcFlag "fplugin-library" (hasArg addExternalPlugin)
+
------ Optimisation flags ------------------------------------------
, make_dep_flag defGhcFlag "Onot" (noArgM $ setOptLevel 0 )
"Use -O0 instead"