Add Quickest build flavour
authorAndrey Mokhov <andrey.mokhov@gmail.com>
Mon, 20 Jun 2016 02:07:24 +0000 (03:07 +0100)
committerAndrey Mokhov <andrey.mokhov@gmail.com>
Mon, 20 Jun 2016 02:07:24 +0000 (03:07 +0100)
See #259, #268.

hadrian.cabal
src/CmdLineFlag.hs
src/Settings/Args.hs
src/Settings/Flavours/Quickest.hs [new file with mode: 0644]
src/Settings/Ways.hs

index 5ffcb65..2b773ee 100644 (file)
@@ -88,6 +88,7 @@ executable hadrian
                        , Settings.Builders.Tar
                        , Settings.Default
                        , Settings.Flavours.Quick
+                       , Settings.Flavours.Quickest
                        , Settings.Packages
                        , Settings.Packages.Base
                        , Settings.Packages.Compiler
index 10c39f2..df3af5b 100644 (file)
@@ -21,7 +21,7 @@ data Untracked = Untracked
     , splitObjects   :: Bool }
     deriving (Eq, Show)
 
-data Flavour        = Default | Quick 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)
 
@@ -43,9 +43,10 @@ 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 _         = Nothing
+    go "default"  = Just Default
+    go "quick"    = Just Quick
+    go "quickest" = Just Quickest
+    go _          = Nothing
     set :: Flavour -> Untracked -> Untracked
     set flag flags = flags { flavour = flag }
 
@@ -83,7 +84,7 @@ readSplitObjects = Right $ \flags -> flags { splitObjects = True }
 cmdFlags :: [OptDescr (Either String (Untracked -> Untracked))]
 cmdFlags =
     [ Option [] ["flavour"] (OptArg readFlavour "FLAVOUR")
-      "Build flavour (Default or Quick)."
+      "Build flavour (Default, Quick or Quickest)."
     , Option [] ["haddock"] (NoArg readBuildHaddock)
       "Generate Haddock documentation."
     , Option [] ["progress-colour"] (OptArg readProgressColour "MODE")
index 18079a2..2ff071a 100644 (file)
@@ -20,6 +20,7 @@ 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
@@ -88,5 +89,7 @@ defaultPackageArgs = mconcat
     , unlitPackageArgs ]
 
 flavourArgs :: Args
-flavourArgs = mconcat
-    [ cmdFlavour == Quick ? quickFlavourArgs ]
+flavourArgs = case cmdFlavour of
+    Default  -> mempty
+    Quick    -> quickFlavourArgs
+    Quickest -> quickestFlavourArgs
diff --git a/src/Settings/Flavours/Quickest.hs b/src/Settings/Flavours/Quickest.hs
new file mode 100644 (file)
index 0000000..cc1de6b
--- /dev/null
@@ -0,0 +1,16 @@
+module Settings.Flavours.Quickest (quickestFlavourArgs, quickestFlavourWays) where\r
+\r
+import Context\r
+import GHC\r
+import Predicate\r
+\r
+optimise :: Context -> Bool\r
+optimise Context {..} = stage == Stage0 && package `elem` [compiler, ghc]\r
+\r
+quickestFlavourArgs :: Args\r
+quickestFlavourArgs = builder Ghc ? do\r
+    context <- getContext\r
+    if optimise context then arg "-O" else arg "-O0"\r
+\r
+quickestFlavourWays :: Ways\r
+quickestFlavourWays = remove [profiling]\r
index 79dd164..95301e1 100644 (file)
@@ -5,6 +5,7 @@ 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.
@@ -29,8 +30,10 @@ defaultLibraryWays = mconcat
     , notStage0 ? platformSupportsSharedLibs ? append [dynamic] ]
 
 flavourLibraryWays :: Ways
-flavourLibraryWays = mconcat
-    [ cmdFlavour == Quick ? quickFlavourWays ]
+flavourLibraryWays = case cmdFlavour of
+    Default  -> mempty
+    Quick    -> quickFlavourWays
+    Quickest -> quickestFlavourWays
 
 defaultRtsWays :: Ways
 defaultRtsWays = do