Refactor build flavours
authorAndrey Mokhov <andrey.mokhov@gmail.com>
Tue, 12 Jul 2016 23:43:38 +0000 (00:43 +0100)
committerAndrey Mokhov <andrey.mokhov@gmail.com>
Tue, 12 Jul 2016 23:44:46 +0000 (00:44 +0100)
See #268.

43 files changed:
hadrian.cabal
src/CmdLineFlag.hs
src/Flavour.hs [new file with mode: 0644]
src/Oracles/ArgsHash.hs
src/Oracles/Dependencies.hs
src/Oracles/WindowsPath.hs
src/Rules.hs
src/Rules/Actions.hs
src/Rules/Cabal.hs
src/Rules/Clean.hs
src/Rules/Compile.hs
src/Rules/Data.hs
src/Rules/Dependencies.hs
src/Rules/Documentation.hs
src/Rules/Generate.hs
src/Rules/Generators/ConfigHs.hs
src/Rules/Library.hs
src/Rules/Program.hs
src/Rules/Register.hs
src/Rules/Test.hs
src/Rules/Wrappers/Ghc.hs
src/Rules/Wrappers/GhcPkg.hs
src/Settings.hs
src/Settings/Args.hs [deleted file]
src/Settings/Builders/Cc.hs
src/Settings/Builders/Common.hs
src/Settings/Builders/Configure.hs
src/Settings/Builders/Ghc.hs
src/Settings/Builders/GhcCabal.hs
src/Settings/Builders/GhcPkg.hs
src/Settings/Builders/Haddock.hs
src/Settings/Builders/Hsc2Hs.hs
src/Settings/Builders/Make.hs
src/Settings/Default.hs
src/Settings/Default.hs-boot [new file with mode: 0644]
src/Settings/Flavours/Quick.hs
src/Settings/Flavours/Quickest.hs
src/Settings/Packages.hs [deleted file]
src/Settings/Packages/Base.hs
src/Settings/Packages/Compiler.hs
src/Settings/Packages/Rts.hs
src/Settings/Ways.hs [deleted file]
src/UserSettings.hs

index 2ba6dab..3429424 100644 (file)
@@ -24,6 +24,7 @@ executable hadrian
                        , Context
                        , Environment
                        , Expression
+                       , Flavour
                        , GHC
                        , Oracles.ArgsHash
                        , Oracles.Config
@@ -68,7 +69,6 @@ executable hadrian
                        , Rules.Wrappers.Ghc
                        , Rules.Wrappers.GhcPkg
                        , Settings
-                       , Settings.Args
                        , Settings.Builders.Alex
                        , Settings.Builders.Ar
                        , Settings.Builders.Common
@@ -90,7 +90,6 @@ executable hadrian
                        , Settings.Default
                        , Settings.Flavours.Quick
                        , Settings.Flavours.Quickest
-                       , Settings.Packages
                        , Settings.Packages.Base
                        , Settings.Packages.Compiler
                        , Settings.Packages.Directory
@@ -106,7 +105,6 @@ executable hadrian
                        , Settings.Packages.Touchy
                        , Settings.Packages.Unlit
                        , Settings.Paths
-                       , Settings.Ways
                        , Stage
                        , Target
                        , UserSettings
index df3af5b..cc0eb7f 100644 (file)
@@ -1,7 +1,7 @@
 module CmdLineFlag (
-    putCmdLineFlags, cmdFlags, cmdBuildHaddock, cmdFlavour, Flavour (..),
-    cmdProgressColour, ProgressColour (..), cmdProgressInfo, ProgressInfo (..),
-    cmdSkipConfigure, cmdSplitObjects
+    putCmdLineFlags, cmdFlags, cmdBuildHaddock, cmdFlavour, cmdProgressColour,
+    ProgressColour (..), cmdProgressInfo, ProgressInfo (..), cmdSkipConfigure,
+    cmdSplitObjects
     ) where
 
 import Data.IORef
@@ -14,14 +14,13 @@ import System.IO.Unsafe
 -- build rules to be rurun.
 data Untracked = Untracked
     { buildHaddock   :: Bool
-    , flavour        :: Flavour
+    , flavour        :: Maybe String
     , progressColour :: ProgressColour
     , progressInfo   :: ProgressInfo
     , skipConfigure  :: Bool
     , splitObjects   :: Bool }
     deriving (Eq, Show)
 
-data Flavour        = Default | Quick | Quickest deriving (Eq, Show)
 data ProgressColour = Never | Auto | Always deriving (Eq, Show)
 data ProgressInfo   = None | Brief | Normal | Unicorn deriving (Eq, Show)
 
@@ -29,7 +28,7 @@ data ProgressInfo   = None | Brief | Normal | Unicorn deriving (Eq, Show)
 defaultUntracked :: Untracked
 defaultUntracked = Untracked
     { buildHaddock   = False
-    , flavour        = Default
+    , flavour        = Nothing
     , progressColour = Auto
     , progressInfo   = Normal
     , skipConfigure  = False
@@ -39,16 +38,7 @@ readBuildHaddock :: Either String (Untracked -> Untracked)
 readBuildHaddock = Right $ \flags -> flags { buildHaddock = True }
 
 readFlavour :: Maybe String -> Either String (Untracked -> Untracked)
-readFlavour ms =
-    maybe (Left "Cannot parse flavour") (Right . set) (go =<< lower <$> ms)
-  where
-    go :: String -> Maybe Flavour
-    go "default"  = Just Default
-    go "quick"    = Just Quick
-    go "quickest" = Just Quickest
-    go _          = Nothing
-    set :: Flavour -> Untracked -> Untracked
-    set flag flags = flags { flavour = flag }
+readFlavour ms = Right $ \flags -> flags { flavour = ms }
 
 readProgressColour :: Maybe String -> Either String (Untracked -> Untracked)
 readProgressColour ms =
@@ -112,7 +102,7 @@ getCmdLineFlags = unsafePerformIO $ readIORef cmdLineFlags
 cmdBuildHaddock :: Bool
 cmdBuildHaddock = buildHaddock getCmdLineFlags
 
-cmdFlavour :: Flavour
+cmdFlavour :: Maybe String
 cmdFlavour = flavour getCmdLineFlags
 
 cmdProgressColour :: ProgressColour
diff --git a/src/Flavour.hs b/src/Flavour.hs
new file mode 100644 (file)
index 0000000..ad658c4
--- /dev/null
@@ -0,0 +1,18 @@
+module Flavour (Flavour (..)) where\r
+\r
+import Expression\r
+\r
+-- TODO: Merge {libraryWays, rtsWays}, and {dynamicGhcPrograms, ghcProfiled...}.\r
+-- | 'Flavour' is a collection of build settings that fully define a GHC build.\r
+data Flavour = Flavour\r
+    { name               :: String    -- ^ Flavour name, to set from command line.\r
+    , args               :: Args      -- ^ Use these command line arguments.\r
+    , packages           :: Packages  -- ^ Build these packages.\r
+    , libraryWays        :: Ways      -- ^ Build libraries these ways.\r
+    , rtsWays            :: Ways      -- ^ Build RTS these ways.\r
+    , splitObjects       :: Predicate -- ^ Build split objects.\r
+    , buildHaddock       :: Predicate -- ^ Build Haddock and documentation.\r
+    , dynamicGhcPrograms :: Bool      -- ^ Build dynamic GHC programs.\r
+    , ghciWithDebugger   :: Bool      -- ^ Enable GHCi debugger.\r
+    , ghcProfiled        :: Bool      -- ^ Build profiled GHC.\r
+    , ghcDebugged        :: Bool }    -- ^ Build GHC with debug information.\r
index bb597c4..d1ebc68 100644 (file)
@@ -4,8 +4,8 @@ module Oracles.ArgsHash (checkArgsHash, argsHashOracle) where
 import Base
 import Expression
 import Settings
-import Settings.Args
 import Target
+import UserSettings
 
 newtype ArgsHashKey = ArgsHashKey Target
     deriving (Binary, Eq, Hashable, NFData, Show, Typeable)
index 1a8b587..81bb3d8 100644 (file)
@@ -11,6 +11,7 @@ import Expression
 import Oracles.PackageData
 import Settings
 import Settings.Builders.GhcCabal
+import Settings.Paths
 
 newtype ObjDepsKey = ObjDepsKey (FilePath, FilePath)
     deriving (Binary, Eq, Hashable, NFData, Show, Typeable)
index 086f330..6303942 100644 (file)
@@ -1,8 +1,11 @@
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 module Oracles.WindowsPath (
-    fixAbsolutePathOnWindows, topDirectory, windowsPathOracle
+    fixAbsolutePathOnWindows, topDirectory, getTopDirectory, windowsPathOracle
     ) where
 
+-- TODO: Rename to Oracles.Path.
+
+import Control.Monad.Trans.Reader
 import Data.Char
 
 import Base
@@ -15,6 +18,9 @@ newtype WindowsPath = WindowsPath FilePath
 topDirectory :: Action FilePath
 topDirectory = fixAbsolutePathOnWindows =<< setting GhcSourcePath
 
+getTopDirectory :: ReaderT a Action FilePath
+getTopDirectory = lift topDirectory
+
 -- | Fix an absolute path on Windows:
 -- * "/c/" => "C:/"
 -- * "/usr/bin/tar.exe" => "C:/msys/usr/bin/tar.exe"
index bea672d..f69cc95 100644 (file)
@@ -1,10 +1,9 @@
 module Rules (topLevelTargets, buildRules) where
 
-import Data.Foldable
-
 import Base
 import Context
 import Expression
+import Flavour
 import GHC
 import qualified Rules.Compile
 import qualified Rules.Data
@@ -20,25 +19,26 @@ import qualified Rules.Perl
 import qualified Rules.Program
 import qualified Rules.Register
 import Settings
+import Settings.Paths
 
 allStages :: [Stage]
 allStages = [minBound ..]
 
--- | 'need' all top-level build targets
+-- | This rule 'need' all top-level build targets.
 topLevelTargets :: Rules ()
 topLevelTargets = do
 
     want $ Rules.Generate.installTargets
 
-    -- TODO: do we want libffiLibrary to be a top-level target?
+    -- TODO: Do we want libffiLibrary to be a top-level target?
 
     action $ do -- TODO: Add support for all rtsWays
         rtsLib    <- pkgLibraryFile $ rtsContext { way = vanilla  }
         rtsThrLib <- pkgLibraryFile $ rtsContext { way = threaded }
         need [ rtsLib, rtsThrLib ]
 
-    for_ allStages $ \stage ->
-        for_ (knownPackages \\ [rts, libffi]) $ \pkg -> action $ do
+    forM_ allStages $ \stage ->
+        forM_ (knownPackages \\ [rts, libffi]) $ \pkg -> action $ do
             let context = vanillaContext stage pkg
             activePackages <- interpretInContext context getPackages
             when (pkg `elem` activePackages) $
@@ -46,7 +46,7 @@ topLevelTargets = do
                 then do -- build a library
                     ways <- interpretInContext context getLibraryWays
                     libs <- mapM (pkgLibraryFile . Context stage pkg) ways
-                    docs <- interpretInContext context buildHaddock
+                    docs <- interpretInContext context $ buildHaddock flavour
                     need $ libs ++ [ pkgHaddockFile context | docs && stage == Stage1 ]
                 else do -- otherwise build a program
                     need [ fromJust $ programPath context ] -- TODO: drop fromJust
@@ -65,11 +65,11 @@ packageRules = do
     let contexts        = liftM3 Context        allStages knownPackages allWays
         vanillaContexts = liftM2 vanillaContext allStages knownPackages
 
-    for_ contexts $ mconcat
+    forM_ contexts $ mconcat
         [ Rules.Compile.compilePackage readPackageDb
         , Rules.Library.buildPackageLibrary ]
 
-    for_ vanillaContexts $ mconcat
+    forM_ vanillaContexts $ mconcat
         [ Rules.Data.buildPackageData
         , Rules.Dependencies.buildPackageDependencies readPackageDb
         , Rules.Documentation.buildPackageDocumentation
index 7b4c46c..cbca810 100644 (file)
@@ -17,9 +17,9 @@ import Oracles.ArgsHash
 import Oracles.DirectoryContent
 import Oracles.WindowsPath
 import Settings
-import Settings.Args
 import Settings.Builders.Ar
 import Target
+import UserSettings
 
 -- | Build a 'Target' with the right 'Builder' and command line arguments.
 -- Force a rebuild if the argument list has changed since the last build.
index 888f602..ed72f93 100644 (file)
@@ -10,6 +10,7 @@ import Base
 import Expression
 import GHC
 import Settings
+import Settings.Paths
 
 cabalRules :: Rules ()
 cabalRules = do
index 156488e..7fc6e5e 100644 (file)
@@ -5,7 +5,7 @@ import Context
 import Package
 import Rules.Actions
 import Rules.Generate
-import Settings.Packages
+import Settings
 import Settings.Paths
 import Stage
 import UserSettings
index 5de7dc0..1b81547 100644 (file)
@@ -5,7 +5,7 @@ import Context
 import Expression
 import Oracles.Dependencies
 import Rules.Actions
-import Settings
+import Settings.Paths
 import Target
 
 compilePackage :: [(Resource, Int)] -> Context -> Rules ()
index 6c99113..2da6f86 100644 (file)
@@ -9,9 +9,10 @@ import Oracles.Dependencies
 import Rules.Actions
 import Rules.Generate
 import Rules.Libffi
-import Settings
 import Settings.Builders.Common
+import Settings.Paths
 import Target
+import UserSettings
 
 -- | Build @package-data.mk@ by using ghc-cabal utility to process .cabal files.
 buildPackageData :: Context -> Rules ()
index c5f60bb..f78c488 100644 (file)
@@ -8,8 +8,9 @@ import Expression
 import Oracles.ModuleFiles
 import Oracles.PackageData
 import Rules.Actions
-import Settings
+import Settings.Paths
 import Target
+import UserSettings
 
 buildPackageDependencies :: [(Resource, Int)] -> Context -> Rules ()
 buildPackageDependencies rs context@Context {..} =
index 032c270..e4d9cb6 100644 (file)
@@ -3,11 +3,13 @@ module Rules.Documentation (buildPackageDocumentation) where
 import Base
 import Context
 import Expression
+import Flavour
 import GHC
 import Oracles.ModuleFiles
 import Oracles.PackageData
 import Rules.Actions
 import Settings
+import Settings.Paths
 import Target
 
 haddockHtmlLib :: FilePath
@@ -38,7 +40,7 @@ buildPackageDocumentation context@Context {..} =
 
             -- Build Haddock documentation
             -- TODO: pass the correct way from Rules via Context
-            let haddockWay = if dynamicGhcPrograms then dynamic else vanilla
+            let haddockWay = if dynamicGhcPrograms flavour then dynamic else vanilla
             build $ Target (context {way = haddockWay}) Haddock srcs [file]
 
         when (package == haddock) $ haddockHtmlLib %> \_ -> do
index 3cf602b..17f51a5 100644 (file)
@@ -19,8 +19,9 @@ import Rules.Generators.GhcSplit
 import Rules.Generators.GhcVersionH
 import Rules.Generators.VersionHs
 import Rules.Libffi
-import Settings
+import Settings.Paths
 import Target
+import UserSettings
 
 installTargets :: [FilePath]
 installTargets = [ "inplace/lib/ghc-usage.txt"
index 12eb909..c5ad0cc 100644 (file)
@@ -2,11 +2,13 @@ module Rules.Generators.ConfigHs (generateConfigHs) where
 
 import Base
 import Expression
+import Flavour
 import GHC
 import Oracles.Config.Flag
 import Oracles.Config.Setting
-import Settings
 import Rules.Generators.Common
+import Settings
+import UserSettings
 
 generateConfigHs :: Expr String
 generateConfigHs = do
@@ -96,6 +98,6 @@ generateConfigHs = do
         , "cGhcThreaded :: Bool"
         , "cGhcThreaded = " ++ show (threaded `elem` rtsWays)
         , "cGhcDebugged :: Bool"
-        , "cGhcDebugged = " ++ show ghcDebugged
+        , "cGhcDebugged = " ++ show (ghcDebugged flavour)
         , "cGhcRtsWithLibdw :: Bool"
         , "cGhcRtsWithLibdw = " ++ show cGhcRtsWithLibdw ]
index a45ef51..c2d56b4 100644 (file)
@@ -8,11 +8,14 @@ import qualified System.Directory as IO
 import Base
 import Context
 import Expression
+import Flavour
 import Oracles.PackageData
 import Rules.Actions
 import Rules.Gmp
 import Settings
+import Settings.Paths
 import Target
+import UserSettings
 
 buildPackageLibrary :: Context -> Rules ()
 buildPackageLibrary context@Context {..} = do
@@ -34,7 +37,7 @@ buildPackageLibrary context@Context {..} = do
         -- explicitly as this would needlessly bloat the Shake database).
         need $ cObjs ++ hObjs
 
-        split <- interpretInContext context splitObjects
+        split <- interpretInContext context $ splitObjects flavour
         splitObjs <- if not split then return hObjs else -- TODO: make clearer!
             concatForM hSrcs $ \src -> do
                 let splitPath = path -/- src ++ "_" ++ osuf way ++ "_split"
index 97a47e6..b93a51d 100644 (file)
@@ -14,7 +14,9 @@ import Rules.Library
 import Rules.Wrappers.Ghc
 import Rules.Wrappers.GhcPkg
 import Settings
+import Settings.Paths
 import Target
+import UserSettings
 
 -- TODO: Move to buildRootPath, see #113.
 -- | Directory for wrapped binaries.
index 79e6ee8..ec33668 100644 (file)
@@ -6,8 +6,8 @@ import Expression
 import GHC
 import Rules.Actions
 import Rules.Libffi
-import Settings
 import Settings.Packages.Rts
+import Settings.Paths
 import Target
 
 -- | Build package-data.mk by processing the .cabal file with ghc-cabal utility.
index ea0c1c5..b15864c 100644 (file)
@@ -3,14 +3,14 @@ module Rules.Test (testRules) where
 import Base
 import Builder
 import Expression
+import Flavour
 import GHC
 import Oracles.Config.Flag
 import Oracles.Config.Setting
 import Oracles.WindowsPath
 import Rules.Actions
-import Settings.Packages
+import Settings
 import Target
-import UserSettings
 
 -- TODO: clean up after testing
 testRules :: Rules ()
@@ -43,7 +43,7 @@ testRules = do
             , "-e", "config.speed=2"
             , "-e", "ghc_compiler_always_flags=" ++ show "-fforce-recomp -dcore-lint -dcmm-lint -dno-debug-output -no-user-package-db -rtsopts"
             , "-e", "ghc_with_native_codegen=" ++ show ghcWithNativeCodeGenInt
-            , "-e", "ghc_debugged=" ++ yesNo ghcDebugged
+            , "-e", "ghc_debugged=" ++ yesNo (ghcDebugged flavour)
             , "-e", "ghc_with_vanilla=1" -- TODO: do we always build vanilla?
             , "-e", "ghc_with_dynamic=0" -- TODO: support dynamic
             , "-e", "ghc_with_profiling=0" -- TODO: support profiling
index 7338450..b5afad7 100644 (file)
@@ -2,7 +2,7 @@ module Rules.Wrappers.Ghc (ghcWrapper) where
 
 import Base
 import Expression
-import Settings
+import Oracles.WindowsPath
 
 ghcWrapper :: FilePath -> Expr String
 ghcWrapper program = do
index 25d5d6e..48e1677 100644 (file)
@@ -2,7 +2,8 @@ module Rules.Wrappers.GhcPkg (ghcPkgWrapper) where
 
 import Base
 import Expression
-import Settings
+import Oracles.WindowsPath
+import Settings.Paths
 
 ghcPkgWrapper :: FilePath -> Expr String
 ghcPkgWrapper program = do
index 2785b98..3fdf14f 100644 (file)
@@ -1,21 +1,33 @@
 module Settings (
-    module Settings.Packages,
-    module Settings.Paths,
-    module Settings.Ways,
-    module UserSettings,
-    getPkgData, getPkgDataList, getTopDirectory, isLibrary,
-    getPackagePath, getContextDirectory, getBuildPath
+    getArgs, getPackages, getLibraryWays, getRtsWays, flavour, knownPackages,
+    findKnownPackage, getPkgData, getPkgDataList, isLibrary, getPackagePath,
+    getContextDirectory, getBuildPath
     ) where
 
 import Base
+import CmdLineFlag
 import Expression
+import Flavour
+import GHC
 import Oracles.PackageData
-import Oracles.WindowsPath
-import Settings.Packages
+import {-# SOURCE #-} Settings.Default
+import Settings.Flavours.Quick
+import Settings.Flavours.Quickest
 import Settings.Paths
-import Settings.Ways
 import UserSettings
 
+getArgs :: Expr [String]
+getArgs = fromDiffExpr $ args flavour
+
+getLibraryWays :: Expr [Way]
+getLibraryWays = fromDiffExpr $ libraryWays flavour
+
+getRtsWays :: Expr [Way]
+getRtsWays = fromDiffExpr $ rtsWays flavour
+
+getPackages :: Expr [Package]
+getPackages = fromDiffExpr $ packages flavour
+
 getPackagePath :: Expr FilePath
 getPackagePath = pkgPath <$> getPackage
 
@@ -31,5 +43,29 @@ getPkgData key = lift . pkgData . key =<< getBuildPath
 getPkgDataList :: (FilePath -> PackageDataList) -> Expr [String]
 getPkgDataList key = lift . pkgDataList . key =<< getBuildPath
 
-getTopDirectory :: Expr FilePath
-getTopDirectory = lift topDirectory
+hadrianFlavours :: [Flavour]
+hadrianFlavours = [defaultFlavour, quickFlavour, quickestFlavour]
+
+flavour :: Flavour
+flavour = fromMaybe unknownFlavour $ find ((== flavourName) . name) flavours
+  where
+    unknownFlavour = error $ "Unknown build flavour: " ++ flavourName
+    flavours       = hadrianFlavours ++ userFlavours
+    flavourName    = fromMaybe "default" cmdFlavour
+
+-- TODO: switch to Set Package as the order of packages should not matter?
+-- Otherwise we have to keep remembering to sort packages from time to time.
+knownPackages :: [Package]
+knownPackages = sort $ defaultKnownPackages ++ userKnownPackages
+
+-- TODO: Speed up?
+-- Note: this is slow but we keep it simple as there are just ~50 packages
+findKnownPackage :: PackageName -> Maybe Package
+findKnownPackage name = find (\pkg -> pkgName pkg == name) knownPackages
+
+-- TODO: add src-hc-args = -H32m -O
+-- TODO: GhcStage2HcOpts=-O2 unless GhcUnregisterised
+-- TODO: compiler/stage1/build/Parser_HC_OPTS += -O0 -fno-ignore-interface-pragmas
+-- TODO: compiler/main/GhcMake_HC_OPTS        += -auto-all
+-- TODO: compiler/prelude/PrimOp_HC_OPTS  += -fforce-recomp
+-- TODO: is GhcHcOpts=-Rghc-timing needed?
diff --git a/src/Settings/Args.hs b/src/Settings/Args.hs
deleted file mode 100644 (file)
index 2ff071a..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-module Settings.Args (getArgs) where
-
-import CmdLineFlag
-import Expression
-import Settings.Builders.Alex
-import Settings.Builders.Ar
-import Settings.Builders.DeriveConstants
-import Settings.Builders.Cc
-import Settings.Builders.Configure
-import Settings.Builders.GenApply
-import Settings.Builders.GenPrimopCode
-import Settings.Builders.Ghc
-import Settings.Builders.GhcCabal
-import Settings.Builders.GhcPkg
-import Settings.Builders.Haddock
-import Settings.Builders.Happy
-import Settings.Builders.Hsc2Hs
-import Settings.Builders.HsCpp
-import Settings.Builders.Ld
-import Settings.Builders.Make
-import Settings.Builders.Tar
-import Settings.Flavours.Quick
-import Settings.Flavours.Quickest
-import Settings.Packages.Base
-import Settings.Packages.Compiler
-import Settings.Packages.Directory
-import Settings.Packages.Ghc
-import Settings.Packages.GhcCabal
-import Settings.Packages.GhcPrim
-import Settings.Packages.Haddock
-import Settings.Packages.Hp2ps
-import Settings.Packages.IntegerGmp
-import Settings.Packages.IservBin
-import Settings.Packages.Rts
-import Settings.Packages.RunGhc
-import Settings.Packages.Touchy
-import Settings.Packages.Unlit
-import UserSettings
-
-getArgs :: Expr [String]
-getArgs = fromDiffExpr $ mconcat [ defaultBuilderArgs
-                                 , defaultPackageArgs
-                                 , flavourArgs
-                                 , userArgs ]
-
--- TODO: add src-hc-args = -H32m -O
--- TODO: GhcStage2HcOpts=-O2 unless GhcUnregisterised
--- TODO: compiler/stage1/build/Parser_HC_OPTS += -O0 -fno-ignore-interface-pragmas
--- TODO: compiler/main/GhcMake_HC_OPTS        += -auto-all
--- TODO: compiler/prelude/PrimOp_HC_OPTS  += -fforce-recomp
--- TODO: is GhcHcOpts=-Rghc-timing needed?
-defaultBuilderArgs :: Args
-defaultBuilderArgs = mconcat
-    [ alexBuilderArgs
-    , arBuilderArgs
-    , ccBuilderArgs
-    , configureBuilderArgs
-    , deriveConstantsBuilderArgs
-    , genApplyBuilderArgs
-    , genPrimopCodeBuilderArgs
-    , ghcBuilderArgs
-    , ghcCabalBuilderArgs
-    , ghcCabalHsColourBuilderArgs
-    , ghcMBuilderArgs
-    , ghcPkgBuilderArgs
-    , haddockBuilderArgs
-    , happyBuilderArgs
-    , hsc2hsBuilderArgs
-    , hsCppBuilderArgs
-    , ldBuilderArgs
-    , makeBuilderArgs
-    , tarBuilderArgs ]
-
-defaultPackageArgs :: Args
-defaultPackageArgs = mconcat
-    [ basePackageArgs
-    , compilerPackageArgs
-    , directoryPackageArgs
-    , ghcPackageArgs
-    , ghcCabalPackageArgs
-    , ghcPrimPackageArgs
-    , haddockPackageArgs
-    , hp2psPackageArgs
-    , integerGmpPackageArgs
-    , iservBinPackageArgs
-    , rtsPackageArgs
-    , runGhcPackageArgs
-    , touchyPackageArgs
-    , unlitPackageArgs ]
-
-flavourArgs :: Args
-flavourArgs = case cmdFlavour of
-    Default  -> mempty
-    Quick    -> quickFlavourArgs
-    Quickest -> quickestFlavourArgs
index e5c8c98..fb8f9e7 100644 (file)
@@ -4,8 +4,8 @@ import Base
 import Oracles.Config.Setting
 import Oracles.PackageData
 import Predicate
-import Settings
 import Settings.Builders.Common
+import Settings
 
 -- TODO: handle custom $1_$2_MKDEPENDC_OPTS and
 ccBuilderArgs :: Args
index 252667f..d036f8a 100644 (file)
@@ -9,6 +9,7 @@ import Oracles.Config.Flag
 import Oracles.Config.Setting
 import Oracles.PackageData
 import Settings
+import UserSettings
 
 includes :: [FilePath]
 includes = ["includes", "includes/dist-derivedconstants/header"]
index d66f21e..c95a5da 100644 (file)
@@ -2,8 +2,9 @@ module Settings.Builders.Configure (configureBuilderArgs) where
 
 import Base
 import Oracles.Config.Setting
+import Oracles.WindowsPath
 import Predicate
-import Settings
+import Settings.Paths
 
 configureBuilderArgs :: Args
 configureBuilderArgs = mconcat
index 9b1430d..d9bb4ff 100644 (file)
@@ -1,6 +1,7 @@
 module Settings.Builders.Ghc (ghcBuilderArgs, ghcMBuilderArgs, commonGhcArgs) where
 
 import Base
+import Flavour
 import GHC
 import Oracles.Config.Flag
 import Oracles.Config.Setting
@@ -9,6 +10,7 @@ import Predicate
 import Settings
 import Settings.Builders.Common
 import Settings.Builders.GhcCabal
+import Settings.Paths
 
 -- TODO: Add support for -dyno.
 -- $1/$2/build/%.$$($3_o-bootsuf) : $1/$4/%.hs-boot
@@ -57,7 +59,7 @@ needTouchy = do
 
 -- TODO: Add GhcSplit builder and use needBuilder.
 splitObjectsArgs :: Args
-splitObjectsArgs = splitObjects ? do
+splitObjectsArgs = splitObjects flavour ? do
     lift $ need [ghcSplit]
     arg "-split-objs"
 
index bf45a75..a36fd74 100644 (file)
@@ -6,12 +6,15 @@ module Settings.Builders.GhcCabal (
 
 import Base
 import Context
+import Flavour
 import GHC
 import Oracles.Config.Flag
 import Oracles.Config.Setting
+import Oracles.WindowsPath
 import Predicate
 import Settings
 import Settings.Builders.Common
+import Settings.Paths
 
 ghcCabalBuilderArgs :: Args
 ghcCabalBuilderArgs = builder GhcCabal ? do
@@ -49,7 +52,7 @@ libraryArgs = do
     append [ if vanilla `elem` ways
              then  "--enable-library-vanilla"
              else "--disable-library-vanilla"
-           , if vanilla `elem` ways && withGhci && not dynamicGhcPrograms
+           , if vanilla `elem` ways && withGhci && not (dynamicGhcPrograms flavour)
              then  "--enable-library-for-ghci"
              else "--disable-library-for-ghci"
            , if profiling `elem` ways
index d6efd0b..ed6843a 100644 (file)
@@ -4,6 +4,7 @@ import Base
 import Predicate
 import Settings
 import Settings.Builders.GhcCabal
+import Settings.Paths
 
 ghcPkgBuilderArgs :: Args
 ghcPkgBuilderArgs = builder GhcPkg ? (initArgs <> updateArgs)
index 9be7028..e7b23ab 100644 (file)
@@ -6,6 +6,7 @@ import Oracles.PackageData
 import Predicate
 import Settings
 import Settings.Builders.Ghc
+import Settings.Paths
 
 -- | Given a version string such as "2.16.2" produce an integer equivalent.
 versionToInt :: String -> Int
index 0eb27f5..2c37561 100644 (file)
@@ -4,6 +4,7 @@ import Base
 import Oracles.Config.Flag
 import Oracles.Config.Setting
 import Oracles.PackageData
+import Oracles.WindowsPath
 import Predicate
 import Settings
 import Settings.Builders.Common
index 7283b4b..d6b7dbf 100644 (file)
@@ -2,7 +2,7 @@ module Settings.Builders.Make (makeBuilderArgs) where
 
 import Base
 import Predicate
-import Settings
+import Settings.Paths
 
 makeBuilderArgs :: Args
 makeBuilderArgs = do
index fe0a774..e35fea0 100644 (file)
-module Settings.Default (defaultSplitObjects) where
+module Settings.Default (
+    defaultBuilderArgs, defaultPackageArgs, defaultArgs, defaultPackages,
+    defaultLibraryWays, defaultRtsWays, defaultFlavour, defaultSplitObjects
+    ) where
 
 import Base
+import CmdLineFlag
+import Flavour
 import GHC
 import Oracles.Config.Flag
+import Oracles.Config.Setting
 import Predicate
+import Settings
+import Settings.Builders.Alex
+import Settings.Builders.Ar
+import Settings.Builders.DeriveConstants
+import Settings.Builders.Cc
+import Settings.Builders.Configure
+import Settings.Builders.GenApply
+import Settings.Builders.GenPrimopCode
+import Settings.Builders.Ghc
+import Settings.Builders.GhcCabal
+import Settings.Builders.GhcPkg
+import Settings.Builders.Haddock
+import Settings.Builders.Happy
+import Settings.Builders.Hsc2Hs
+import Settings.Builders.HsCpp
+import Settings.Builders.Ld
+import Settings.Builders.Make
+import Settings.Builders.Tar
+import Settings.Packages.Base
+import Settings.Packages.Compiler
+import Settings.Packages.Directory
+import Settings.Packages.Ghc
+import Settings.Packages.GhcCabal
+import Settings.Packages.GhcPrim
+import Settings.Packages.Haddock
+import Settings.Packages.Hp2ps
+import Settings.Packages.IntegerGmp
+import Settings.Packages.IservBin
+import Settings.Packages.Rts
+import Settings.Packages.RunGhc
+import Settings.Packages.Touchy
+import Settings.Packages.Unlit
+import UserSettings
 
+-- | All 'Builder'-dependent command line arguments.
+defaultBuilderArgs :: Args
+defaultBuilderArgs = mconcat
+    [ alexBuilderArgs
+    , arBuilderArgs
+    , ccBuilderArgs
+    , configureBuilderArgs
+    , deriveConstantsBuilderArgs
+    , genApplyBuilderArgs
+    , genPrimopCodeBuilderArgs
+    , ghcBuilderArgs
+    , ghcCabalBuilderArgs
+    , ghcCabalHsColourBuilderArgs
+    , ghcMBuilderArgs
+    , ghcPkgBuilderArgs
+    , haddockBuilderArgs
+    , happyBuilderArgs
+    , hsc2hsBuilderArgs
+    , hsCppBuilderArgs
+    , ldBuilderArgs
+    , makeBuilderArgs
+    , tarBuilderArgs ]
+
+
+-- | All 'Package'-dependent command line arguments.
+defaultPackageArgs :: Args
+defaultPackageArgs = mconcat
+    [ basePackageArgs
+    , compilerPackageArgs
+    , directoryPackageArgs
+    , ghcPackageArgs
+    , ghcCabalPackageArgs
+    , ghcPrimPackageArgs
+    , haddockPackageArgs
+    , hp2psPackageArgs
+    , integerGmpPackageArgs
+    , iservBinPackageArgs
+    , rtsPackageArgs
+    , runGhcPackageArgs
+    , touchyPackageArgs
+    , unlitPackageArgs ]
+
+-- | All default command line arguments.
+defaultArgs :: Args
+defaultArgs = mconcat
+    [ defaultBuilderArgs
+    , defaultPackageArgs
+    , builder Ghc ? remove ["-Wall", "-fwarn-tabs"] ] -- TODO: Fix warning Args.
+
+-- TODO: Simplify.
+-- | Packages that are built by default. You can change this by editing
+-- 'userPackages' in "UserSettings".
+defaultPackages :: Packages
+defaultPackages = mconcat
+    [ stage0 ? packagesStage0
+    , stage1 ? packagesStage1
+    , stage2 ? packagesStage2 ]
+
+packagesStage0 :: Packages
+packagesStage0 = mconcat
+    [ append [ binary, cabal, compiler, ghc, ghcBoot, ghcBootTh, ghcCabal
+             , ghcPkg, hsc2hs, hoopl, hpc, templateHaskell, transformers ]
+    -- the stage0 predicate makes sure these packages are built only in Stage0
+    , stage0 ? append [ deriveConstants, dllSplit, genapply, genprimopcode
+                      , hp2ps, unlit ]
+    , stage0 ? windowsHost ? append [touchy]
+    , notM windowsHost ? notM iosHost ? append [terminfo] ]
+
+packagesStage1 :: Packages
+packagesStage1 = mconcat
+    [ packagesStage0
+    , append [ array, base, bytestring, containers, compareSizes, deepseq
+             , directory, filepath, ghci, ghcPrim, haskeline, hpcBin
+             , integerLibrary, pretty, process, rts, runGhc, time ]
+    , windowsHost      ? append [win32]
+    , notM windowsHost ? append [unix]
+    , notM windowsHost ? append [iservBin]
+    , buildHaddock flavour ? append [xhtml] ]
+
+-- TODO: Currently there is an unchecked assumption that we build only programs
+-- in Stage2 and Stage3. Can we check this in compile time?
+packagesStage2 :: Packages
+packagesStage2 = mconcat
+    [ append [checkApiAnnotations, ghcTags, mkUserGuidePart]
+    , buildHaddock flavour ? append [haddock] ]
+
+-- TODO: What about profilingDynamic way? Do we need platformSupportsSharedLibs?
+-- | Default build ways for library packages:
+-- * We always build 'vanilla' way.
+-- * We build 'profiling' way when stage > Stage0.
+-- * We build 'dynamic' way when stage > Stage0 and the platform supports it.
+defaultLibraryWays :: Ways
+defaultLibraryWays = mconcat
+    [ append [vanilla]
+    , notStage0 ? append [profiling] ]
+    -- FIXME: Fix dynamic way and uncomment the line below, #4.
+    -- , notStage0 ? platformSupportsSharedLibs ? append [dynamic] ]
+
+-- | Default build ways for the RTS.
+defaultRtsWays :: Ways
+defaultRtsWays = do
+    ways <- getLibraryWays
+    mconcat
+        [ append [ logging, debug, threaded, threadedDebug, threadedLogging ]
+        , (profiling `elem` ways) ? append [threadedProfiling]
+        , (dynamic `elem` ways) ?
+          append [ dynamic, debugDynamic, threadedDynamic, threadedDebugDynamic
+                 , loggingDynamic, threadedLoggingDynamic ] ]
+
+-- | Default build flavour. Other build flavours are defined in modules
+-- @Settings.Flavours.*@. Users can add new build flavours in "UserSettings".
+defaultFlavour :: Flavour
+defaultFlavour = Flavour
+    { name               = "default"
+    , args               = defaultArgs
+    , packages           = defaultPackages
+    , libraryWays        = defaultLibraryWays
+    , rtsWays            = defaultRtsWays
+    , splitObjects       = defaultSplitObjects
+    , buildHaddock       = return cmdBuildHaddock
+    , dynamicGhcPrograms = False
+    , ghciWithDebugger   = False
+    , ghcProfiled        = False
+    , ghcDebugged        = False }
+
+-- | Default condition for building split objects.
 defaultSplitObjects :: Predicate
 defaultSplitObjects = do
     goodStage <- notStage0 -- We don't split bootstrap (stage 0) packages
     pkg       <- getPackage
     supported <- lift supportsSplitObjects
     let goodPackage = isLibrary pkg && pkg /= compiler && pkg /= rts
-    return $ goodStage && goodPackage && supported
+    return $ cmdSplitObjects && goodStage && goodPackage && supported
diff --git a/src/Settings/Default.hs-boot b/src/Settings/Default.hs-boot
new file mode 100644 (file)
index 0000000..21f9e9b
--- /dev/null
@@ -0,0 +1,13 @@
+module Settings.Default (
+    defaultBuilderArgs, defaultPackageArgs, defaultArgs, defaultPackages,
+    defaultLibraryWays, defaultRtsWays, defaultFlavour, defaultSplitObjects
+    ) where
+
+import Flavour
+import Predicate
+
+defaultBuilderArgs, defaultPackageArgs, defaultArgs :: Args
+defaultPackages :: Packages
+defaultLibraryWays, defaultRtsWays :: Ways
+defaultFlavour :: Flavour
+defaultSplitObjects :: Predicate
index 834a72b..448a875 100644 (file)
@@ -1,17 +1,25 @@
-module Settings.Flavours.Quick (quickFlavourArgs, quickFlavourWays) where
+module Settings.Flavours.Quick (quickFlavour) where
 
 import Context
+import Flavour
 import GHC
 import Predicate
+import {-# SOURCE #-} Settings.Default
+
+quickFlavour :: Flavour
+quickFlavour = defaultFlavour
+    { name        = "quick"
+    , args        = defaultArgs <> quickArgs
+    , libraryWays = defaultLibraryWays <> quickLibraryWays }
 
 optimise :: Context -> Bool
-optimise Context {..} = package `elem` [compiler, ghc]
-                     || stage == Stage1 && isLibrary package
+optimise Context {..} =
+    package `elem` [compiler, ghc] || stage == Stage1 && isLibrary package
 
-quickFlavourArgs :: Args
-quickFlavourArgs = builder Ghc ? do
+quickArgs :: Args
+quickArgs = builder Ghc ? do
     context <- getContext
     if optimise context then arg "-O" else arg "-O0"
 
-quickFlavourWays :: Ways
-quickFlavourWays = remove [profiling]
+quickLibraryWays :: Ways
+quickLibraryWays = remove [profiling]
index 3696237..9f9b85b 100644 (file)
@@ -1,9 +1,17 @@
-module Settings.Flavours.Quickest (quickestFlavourArgs, quickestFlavourWays) where
+module Settings.Flavours.Quickest (quickestFlavour) where
 
+import Flavour
 import Predicate
+import {-# SOURCE #-} Settings.Default
 
-quickestFlavourArgs :: Args
-quickestFlavourArgs = builder Ghc ? arg "-O0"
+quickestFlavour :: Flavour
+quickestFlavour = defaultFlavour
+    { name        = "quickest"
+    , args        = defaultArgs <> quickestArgs
+    , libraryWays = defaultLibraryWays <> quickestLibraryWays }
 
-quickestFlavourWays :: Ways
-quickestFlavourWays = remove [profiling]
+quickestArgs :: Args
+quickestArgs = builder Ghc ? arg "-O0"
+
+quickestLibraryWays :: Ways
+quickestLibraryWays = remove [profiling]
diff --git a/src/Settings/Packages.hs b/src/Settings/Packages.hs
deleted file mode 100644 (file)
index 6c65b71..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-module Settings.Packages (getPackages, knownPackages, findKnownPackage) where
-
-import Base
-import GHC
-import Predicate
-import Oracles.Config.Setting
-import UserSettings
-
--- Combining default list of packages with user modifications
-getPackages :: Expr [Package]
-getPackages = fromDiffExpr $ defaultPackages <> userPackages
-
--- These are the packages we build by default
--- TODO: simplify
-defaultPackages :: Packages
-defaultPackages = mconcat
-    [ stage0 ? packagesStage0
-    , stage1 ? packagesStage1
-    , stage2 ? packagesStage2 ]
-
-packagesStage0 :: Packages
-packagesStage0 = mconcat
-    [ append [ binary, cabal, compiler, ghc, ghcBoot, ghcBootTh, ghcCabal
-             , ghcPkg, hsc2hs, hoopl, hpc, templateHaskell, transformers ]
-    -- the stage0 predicate makes sure these packages are built only in Stage0
-    , stage0 ? append [ deriveConstants, dllSplit, genapply, genprimopcode
-                      , hp2ps, unlit ]
-    , stage0 ? windowsHost ? append [touchy]
-    , notM windowsHost ? notM iosHost ? append [terminfo] ]
-
-packagesStage1 :: Packages
-packagesStage1 = mconcat
-    [ packagesStage0
-    , append [ array, base, bytestring, containers, compareSizes, deepseq
-             , directory, filepath, ghci, ghcPrim, haskeline, hpcBin
-             , integerLibrary, pretty, process, rts, runGhc, time ]
-    , windowsHost      ? append [win32]
-    , notM windowsHost ? append [unix]
-    , notM windowsHost ? append [iservBin]
-    , buildHaddock     ? append [xhtml] ]
-
--- TODO: currently there is an unchecked assumption that we build only programs
--- in Stage2 and Stage3. Can we check this in compile time?
-packagesStage2 :: Packages
-packagesStage2 = mconcat
-    [ append [checkApiAnnotations, ghcTags, mkUserGuidePart]
-    , buildHaddock ? append [haddock] ]
-
--- TODO: switch to Set Package as the order of packages should not matter?
--- Otherwise we have to keep remembering to sort packages from time to time.
-knownPackages :: [Package]
-knownPackages = sort $ defaultKnownPackages ++ userKnownPackages
-
--- Note: this is slow but we keep it simple as there are just ~50 packages
--- TODO: speed up?
-findKnownPackage :: PackageName -> Maybe Package
-findKnownPackage name = find (\pkg -> pkgName pkg == name) knownPackages
index b70fd42..261c2bb 100644 (file)
@@ -3,7 +3,7 @@ module Settings.Packages.Base (basePackageArgs) where
 import Base
 import GHC
 import Predicate
-import Settings
+import UserSettings
 
 basePackageArgs :: Args
 basePackageArgs = package base ?
index 0224f63..7dbbaa3 100644 (file)
@@ -1,6 +1,7 @@
 module Settings.Packages.Compiler (compilerPackageArgs) where
 
 import Base
+import Flavour
 import GHC
 import Oracles.Config.Flag
 import Oracles.Config.Setting
@@ -33,9 +34,9 @@ compilerPackageArgs = package compiler ? do
                 notM (flag GhcUnregisterised) ?
                 notStage0 ? arg "--ghc-option=-DGHCI_TABLES_NEXT_TO_CODE"
               , ghcWithInterpreter ?
-                ghciWithDebugger ?
+                ghciWithDebugger flavour ?
                 notStage0 ? arg "--ghc-option=-DDEBUGGER"
-              , ghcProfiled ?
+              , ghcProfiled flavour ?
                 notStage0 ? arg "--ghc-pkg-option=--force"
               ]
 
index 2e95572..a396310 100644 (file)
@@ -6,6 +6,7 @@ import Base
 import GHC
 import Oracles.Config.Flag
 import Oracles.Config.Setting
+import Oracles.WindowsPath
 import Predicate
 import Settings
 import Settings.Builders.Common
diff --git a/src/Settings/Ways.hs b/src/Settings/Ways.hs
deleted file mode 100644 (file)
index 95301e1..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-module Settings.Ways (getLibraryWays, getRtsWays) where
-
-import Base
-import CmdLineFlag
-import Oracles.Config.Flag
-import Predicate
-import Settings.Flavours.Quick
-import Settings.Flavours.Quickest
-import UserSettings
-
--- | Combine default library ways with user modifications.
-getLibraryWays :: Expr [Way]
-getLibraryWays = fromDiffExpr $ mconcat [ defaultLibraryWays
-                                        , userLibraryWays
-                                        , flavourLibraryWays ]
-
--- | Combine default RTS ways with user modifications.
-getRtsWays :: Expr [Way]
-getRtsWays = fromDiffExpr $ defaultRtsWays <> userRtsWays
-
--- TODO: what about profilingDynamic way? Do we need platformSupportsSharedLibs?
--- These are default ways for library packages:
--- * We always build 'vanilla' way.
--- * We build 'profiling' way when stage > Stage0.
--- * We build 'dynamic' way when stage > Stage0 and the platform supports it.
-defaultLibraryWays :: Ways
-defaultLibraryWays = mconcat
-    [ append [vanilla]
-    , notStage0 ? append [profiling]
-    , notStage0 ? platformSupportsSharedLibs ? append [dynamic] ]
-
-flavourLibraryWays :: Ways
-flavourLibraryWays = case cmdFlavour of
-    Default  -> mempty
-    Quick    -> quickFlavourWays
-    Quickest -> quickestFlavourWays
-
-defaultRtsWays :: Ways
-defaultRtsWays = do
-    ways <- getLibraryWays
-    mconcat
-        [ append [ logging, debug, threaded, threadedDebug, threadedLogging ]
-        , (profiling `elem` ways) ? append [threadedProfiling]
-        , (dynamic `elem` ways) ?
-          append [ dynamic, debugDynamic, threadedDynamic, threadedDebugDynamic
-                 , loggingDynamic, threadedLoggingDynamic ] ]
index 23380ce..1f73efa 100644 (file)
@@ -3,35 +3,32 @@
 -- If you don't copy the file your changes will be tracked by git and you can
 -- accidentally commit them.
 module UserSettings (
-    buildRootPath, trackBuildSystem, userArgs, userPackages, userLibraryWays,
-    userRtsWays, userKnownPackages, integerLibrary, buildHaddock, validating,
-    ghciWithDebugger, ghcProfiled, ghcDebugged, dynamicGhcPrograms,
-    turnWarningsIntoErrors, splitObjects, verboseCommands, putBuild, putSuccess
+    buildRootPath, userFlavours, userKnownPackages, integerLibrary,
+    trackBuildSystem, validating, turnWarningsIntoErrors, verboseCommands,
+    putBuild, putSuccess
     ) where
 
 import System.Console.ANSI
 
 import Base
-import CmdLineFlag
+import Flavour
 import GHC
 import Predicate
-import Settings.Default
 
+-- TODO: Update the docs.
 -- See doc/user-settings.md for instructions.
 
 -- | All build results are put into 'buildRootPath' directory.
 buildRootPath :: FilePath
 buildRootPath = "_build"
 
--- | Modify default build command line arguments.
-userArgs :: Args
-userArgs = builder Ghc ? remove ["-Wall", "-fwarn-tabs"]
+-- | User defined build flavours. See 'defaultFlavour' as an example.
+userFlavours :: [Flavour]
+userFlavours = []
 
--- | Modify the set of packages that are built by default in each stage.
-userPackages :: Packages
-userPackages = mempty
-
--- | Add user defined packages. Don't forget to add them to 'userPackages' too.
+-- | Add user defined packages. Note, this only let's Hadrian know about the
+-- existence of a new package; to actually build it you need to create a new
+-- build flavour, modifying the list of packages that are built by default.
 userKnownPackages :: [Package]
 userKnownPackages = []
 
@@ -39,15 +36,6 @@ userKnownPackages = []
 integerLibrary :: Package
 integerLibrary = integerGmp
 
--- FIXME: We skip 'dynamic' since it's currently broken #4.
--- | Modify the set of ways in which library packages are built.
-userLibraryWays :: Ways
-userLibraryWays = remove [dynamic]
-
--- | Modify the set of ways in which the 'rts' package is built.
-userRtsWays :: Ways
-userRtsWays = mempty
-
 -- | User defined flags. Note the following type semantics:
 -- * @Bool@: a plain Boolean flag whose value is known at compile time.
 -- * @Action Bool@: a flag whose value can depend on the build environment.
@@ -66,29 +54,6 @@ trackBuildSystem = True
 validating :: Bool
 validating = False
 
--- | Control when split objects are generated. Note, due to the GHC bug #11315
--- it is necessary to do a full clean rebuild when changing this option.
-splitObjects :: Predicate
-splitObjects = return cmdSplitObjects &&^ defaultSplitObjects
-
--- | Control when to build Haddock documentation.
-buildHaddock :: Predicate
-buildHaddock = return cmdBuildHaddock
-
--- TODO: Do we need to be able to set these from command line?
--- TODO: Turn the flags below into a simple list @ghcWays :: [Way]@?
-dynamicGhcPrograms :: Bool
-dynamicGhcPrograms = False
-
-ghciWithDebugger :: Bool
-ghciWithDebugger = False
-
-ghcProfiled :: Bool
-ghcProfiled = False
-
-ghcDebugged :: Bool
-ghcDebugged = False
-
 -- TODO: Replace with stage2 ? arg "-Werror"? Also see #251.
 -- | To enable -Werror in Stage2 set turnWarningsIntoErrors = stage2.
 turnWarningsIntoErrors :: Predicate