Disable optimisation when building Cabal in development flavours
authorBen Gamari <ben@smart-cactus.org>
Thu, 13 Jun 2019 20:24:10 +0000 (16:24 -0400)
committerMarge Bot <ben+marge-bot@smart-cactus.org>
Sun, 16 Jun 2019 03:32:38 +0000 (23:32 -0400)
This updates the make and Hadrian build flavours targetting developers
to disable optimisation when building the Cabal library. Cabal tends to
tickle some very bad compiler performance cases (e.g. #16577) so
disabling optimisation here makes a sizeable impact on overall build
time.

See #16817.

hadrian/cabal.project
hadrian/src/Settings/Flavours/Development.hs
mk/flavours/devel1.mk
mk/flavours/devel2.mk
mk/flavours/validate.mk

index d9c3291..0df6b15 100644 (file)
@@ -1,8 +1,8 @@
 packages: ./
           ../libraries/Cabal/Cabal/
 
-# N.B. Compile with -O0 since this is not a performance-critical executable
-# and the Cabal takes nearly twice as long to build with -O1. See #16817.
+-- N.B. Compile with -O0 since this is not a performance-critical executable
+-- and the Cabal takes nearly twice as long to build with -O1. See #16817.
 package Cabal
   optimization: False
 
index 5fcc88b..08200df 100644 (file)
@@ -2,6 +2,7 @@ module Settings.Flavours.Development (developmentFlavour) where
 
 import Expression
 import Flavour
+import Packages
 import {-# SOURCE #-} Settings.Default
 
 -- Please update doc/flavours.md when changing this file.
@@ -17,7 +18,10 @@ developmentArgs :: Stage -> Args
 developmentArgs ghcStage = do
     stage <- getStage
     sourceArgs SourceArgs
-        { hsDefault  = pure ["-O", "-H64m"]
+        { hsDefault  = mconcat [ pure ["-O", "-H64m"],
+                                 -- Disable optimization when building Cabal;
+                                 -- this saves many minutes of build time.
+                                 package cabal ? pure ["-O0"]]
         , hsLibrary  = notStage0 ? arg "-dcore-lint"
         , hsCompiler = mconcat [stage0 ? arg "-O2",
                                 succ stage == ghcStage ? pure ["-O0", "-DDEBUG"]]
index e062a57..1c03aff 100644 (file)
@@ -10,3 +10,7 @@ BUILD_SPHINX_PDF   = NO
 BUILD_MAN          = NO
 
 LAX_DEPENDENCIES   = YES
+
+# Reduce optimisation when building Cabal; this makes a significant difference
+# in overall build time. See #16817.
+libraries/Cabal_dist-install_HC_OPTS += -O0
index 1c8e24f..2d7d3b3 100644 (file)
@@ -10,3 +10,7 @@ BUILD_SPHINX_PDF   = NO
 BUILD_MAN          = NO
 
 LAX_DEPENDENCIES   = YES
+
+# Reduce optimisation when building Cabal; this makes a significant difference
+# in overall build time. See #16817.
+libraries/Cabal_dist-install_HC_OPTS += -O0
index 3fd916a..6395d2d 100644 (file)
@@ -27,6 +27,10 @@ endif
 
 WERROR             = -Werror
 
+# Reduce optimisation when building Cabal; this makes a significant difference
+# in overall build time. See #16817.
+libraries/Cabal_dist-install_HC_OPTS += -O0
+
 # DO NOT EDIT THIS FILE! Instead, create a file mk/validate.mk, whose settings
 # will override these. See also mk/custom-settings.mk.
 #
@@ -36,6 +40,7 @@ WERROR             = -Werror
 #
 #
 # Note [validate build settings]
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 #
 # Using GhcStage2HcOpts=-O (rather than -O0) here bringes my validate down from
 # 22mins to 16 mins. Compiling stage2 takes longer, but we gain a faster