Work around the "can't use Natural in base" problem on a per-flavour basis (#676)
authorAlp Mestanogullari <alpmestan@gmail.com>
Wed, 5 Sep 2018 17:41:45 +0000 (19:41 +0200)
committerAndrey Mokhov <andrey.mokhov@gmail.com>
Wed, 5 Sep 2018 17:41:45 +0000 (18:41 +0100)
* Work around the "can't use natural in base" problem on a per-flavour basis

The only flavours that need the workaround are the ones that build
GHC/{Natural, Num}.hs with -O0, namely 'quick', 'quickest' and 'prof'.
This patches defines the necessary arguments in one place and uses them
in all the aforementionned flavour definitions.

This will allow us to have both quick/quickest/prof builds that come through
as well as an efficient compiler when we want it (with e.g perf), which wasn't
the case before my series of patches for this problem.

* address @snowleopard's feedback

hadrian.cabal
src/Settings/Flavours/Common.hs [new file with mode: 0644]
src/Settings/Flavours/Profiled.hs
src/Settings/Flavours/Quick.hs
src/Settings/Flavours/QuickCross.hs
src/Settings/Flavours/Quickest.hs

index 6bb0d73..2fd2c8c 100644 (file)
@@ -87,6 +87,7 @@ executable hadrian
                        , Settings.Builders.RunTest
                        , Settings.Builders.Xelatex
                        , Settings.Default
+                       , Settings.Flavours.Common
                        , Settings.Flavours.Development
                        , Settings.Flavours.Performance
                        , Settings.Flavours.Profiled
diff --git a/src/Settings/Flavours/Common.hs b/src/Settings/Flavours/Common.hs
new file mode 100644 (file)
index 0000000..a1eb2fb
--- /dev/null
@@ -0,0 +1,11 @@
+module Settings.Flavours.Common where
+
+import Expression
+
+-- See https://ghc.haskell.org/trac/ghc/ticket/15286 and
+-- https://phabricator.haskell.org/D4880
+naturalInBaseFixArgs :: Args
+naturalInBaseFixArgs = mconcat
+  [ input "//Natural.hs" ? pure ["-fno-omit-interface-pragmas"]
+  , input "//Num.hs" ? pure ["-fno-ignore-interface-pragmas"]
+  ]
index d56cc10..91b7f3b 100644 (file)
@@ -3,6 +3,7 @@ module Settings.Flavours.Profiled (profiledFlavour) where
 import Expression
 import Flavour
 import {-# SOURCE #-} Settings.Default
+import Settings.Flavours.Common (naturalInBaseFixArgs)
 
 -- Please update doc/flavours.md when changing this file.
 profiledFlavour :: Flavour
@@ -13,7 +14,10 @@ profiledFlavour = defaultFlavour
 
 profiledArgs :: Args
 profiledArgs = sourceArgs SourceArgs
-    { hsDefault  = pure ["-O0", "-H64m"]
+    { hsDefault  = mconcat
+        [ pure ["-O0", "-H64m"]
+        , naturalInBaseFixArgs
+        ]
     , hsLibrary  = notStage0 ? arg "-O"
     , hsCompiler = arg "-O"
     , hsGhc      = arg "-O" }
index 99dade9..3da1dcf 100644 (file)
@@ -4,6 +4,7 @@ import Expression
 import Flavour
 import Oracles.Flag
 import {-# SOURCE #-} Settings.Default
+import Settings.Flavours.Common (naturalInBaseFixArgs)
 
 -- Please update doc/flavours.md when changing this file.
 quickFlavour :: Flavour
@@ -16,7 +17,10 @@ quickFlavour = defaultFlavour
 
 quickArgs :: Args
 quickArgs = sourceArgs SourceArgs
-    { hsDefault  = pure ["-O0", "-H64m"]
+    { hsDefault  = mconcat $
+        [ pure ["-O0", "-H64m"]
+        , naturalInBaseFixArgs
+        ]
     , hsLibrary  = notStage0 ? arg "-O"
     , hsCompiler =    stage0 ? arg "-O"
     , hsGhc      =    stage0 ? arg "-O" }
index 3d0c410..cfc3586 100644 (file)
@@ -4,6 +4,7 @@ import Expression
 import Flavour
 import Oracles.Flag
 import {-# SOURCE #-} Settings.Default
+import Settings.Flavours.Common
 
 -- Please update doc/flavours.md when changing this file.
 quickCrossFlavour :: Flavour
@@ -16,7 +17,10 @@ quickCrossFlavour = defaultFlavour
 
 quickCrossArgs :: Args
 quickCrossArgs = sourceArgs SourceArgs
-    { hsDefault  = pure ["-O0", "-H64m"]
+    { hsDefault  = mconcat $
+        [ pure ["-O0", "-H64m"]
+        , naturalInBaseFixArgs
+        ]
     , hsLibrary  = notStage0 ? mconcat [ arg "-O", arg "-fllvm" ]
     , hsCompiler = stage0 ? arg "-O"
     , hsGhc      = mconcat
index 836b935..2bcfac4 100644 (file)
@@ -3,6 +3,7 @@ module Settings.Flavours.Quickest (quickestFlavour) where
 import Expression
 import Flavour
 import {-# SOURCE #-} Settings.Default
+import Settings.Flavours.Common (naturalInBaseFixArgs)
 
 -- Please update doc/flavours.md when changing this file.
 quickestFlavour :: Flavour
@@ -14,7 +15,10 @@ quickestFlavour = defaultFlavour
 
 quickestArgs :: Args
 quickestArgs = sourceArgs SourceArgs
-    { hsDefault  = pure ["-O0", "-H64m"]
+    { hsDefault  = mconcat $
+        [ pure ["-O0", "-H64m"]
+        , naturalInBaseFixArgs
+        ]
     , hsLibrary  = mempty
     , hsCompiler = stage0 ? arg "-O"
     , hsGhc      = stage0 ? arg "-O" }