summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hadrian/src/Flavour.hs4
-rw-r--r--hadrian/src/Flavour/Type.hs5
-rw-r--r--hadrian/src/Hadrian/Haskell/Cabal/Parse.hs5
-rwxr-xr-xhadrian/src/Settings.hs7
-rw-r--r--hadrian/src/Settings/Builders/Ghc.hs3
-rw-r--r--hadrian/src/Settings/Default.hs12
-rw-r--r--hadrian/src/Settings/Default.hs-boot4
-rw-r--r--hadrian/src/Settings/Flavours/Benchmark.hs2
-rw-r--r--hadrian/src/Settings/Flavours/Development.hs2
-rw-r--r--hadrian/src/Settings/Flavours/GhcInGhci.hs2
-rw-r--r--hadrian/src/Settings/Flavours/Performance.hs2
-rw-r--r--hadrian/src/Settings/Flavours/Quick.hs2
-rw-r--r--hadrian/src/Settings/Flavours/QuickCross.hs2
-rw-r--r--hadrian/src/Settings/Flavours/Quickest.hs2
-rw-r--r--hadrian/src/Settings/Flavours/Validate.hs4
15 files changed, 30 insertions, 28 deletions
diff --git a/hadrian/src/Flavour.hs b/hadrian/src/Flavour.hs
index 6f68d6c6ba..47211d0971 100644
--- a/hadrian/src/Flavour.hs
+++ b/hadrian/src/Flavour.hs
@@ -112,7 +112,7 @@ parseFlavour baseFlavours transformers str =
-- | Add arguments to the 'args' of a 'Flavour'.
addArgs :: Args -> Flavour -> Flavour
-addArgs args' fl = fl { args = args fl <> args' }
+addArgs args' fl = fl { extraArgs = extraArgs fl <> args' }
-- | Turn on -Werror for packages built with the stage1 compiler.
-- It mimics the CI settings so is useful to turn on when developing.
@@ -468,7 +468,7 @@ applySetting (KeyVal ks op v) = case runSettingsM ks builderPredicate of
Left err -> throwError $
"error while setting `" ++ intercalate "`." ks ++ ": " ++ err
Right pred -> Right $ \flav -> flav
- { args = update (args flav) pred }
+ { extraArgs = update (extraArgs flav) pred }
where override arguments predicate = do
holds <- predicate
diff --git a/hadrian/src/Flavour/Type.hs b/hadrian/src/Flavour/Type.hs
index da236cbba3..a84ae77e79 100644
--- a/hadrian/src/Flavour/Type.hs
+++ b/hadrian/src/Flavour/Type.hs
@@ -14,8 +14,9 @@ import Data.Set (Set)
data Flavour = Flavour {
-- | Flavour name, to select this flavour from command line.
name :: String,
- -- | Use these command line arguments.
- args :: Args,
+ -- | Use these extra command line arguments.
+ -- This can't depend on the result of configuring a package (ie, using readContextData)
+ extraArgs :: Args,
-- | Build these packages.
packages :: Stage -> Action [Package],
-- | Bignum backend: 'native', 'gmp', 'ffi', etc.
diff --git a/hadrian/src/Hadrian/Haskell/Cabal/Parse.hs b/hadrian/src/Hadrian/Haskell/Cabal/Parse.hs
index 2ab73b76c0..74ae8fb16a 100644
--- a/hadrian/src/Hadrian/Haskell/Cabal/Parse.hs
+++ b/hadrian/src/Hadrian/Haskell/Cabal/Parse.hs
@@ -158,9 +158,8 @@ configurePackage context@Context {..} = do
pure $ if configureExists then C.autoconfUserHooks else C.simpleUserHooks
-- Compute the list of flags, and the Cabal configuration arguments
- flavourArgs <- args <$> flavour
- flagList <- interpret (target context (Cabal Flags stage) [] []) flavourArgs
- argList <- interpret (target context (Cabal Setup stage) [] []) flavourArgs
+ flagList <- interpret (target context (Cabal Flags stage) [] []) getArgs
+ argList <- interpret (target context (Cabal Setup stage) [] []) getArgs
trackArgsHash (target context (Cabal Flags stage) [] [])
trackArgsHash (target context (Cabal Setup stage) [] [])
verbosity <- getVerbosity
diff --git a/hadrian/src/Settings.hs b/hadrian/src/Settings.hs
index fd44af1916..d3de77f9bc 100755
--- a/hadrian/src/Settings.hs
+++ b/hadrian/src/Settings.hs
@@ -1,7 +1,7 @@
{-# LANGUAGE TupleSections #-}
module Settings (
- getArgs, getLibraryWays, getRtsWays, flavour, knownPackages,
+ getExtraArgs, getArgs, getLibraryWays, getRtsWays, flavour, knownPackages,
findPackageByName, unsafeFindPackageByName, unsafeFindPackageByPath,
isLibrary, stagePackages, getBignumBackend, getBignumCheck, completeSetting
) where
@@ -25,8 +25,11 @@ import Settings.Flavours.Validate
import Settings.Flavours.Release
+getExtraArgs :: Args
+getExtraArgs = expr flavour >>= extraArgs
+
getArgs :: Args
-getArgs = expr flavour >>= args
+getArgs = mconcat [ defaultBuilderArgs, getExtraArgs, defaultPackageArgs ]
getLibraryWays :: Ways
getLibraryWays = expr flavour >>= libraryWays
diff --git a/hadrian/src/Settings/Builders/Ghc.hs b/hadrian/src/Settings/Builders/Ghc.hs
index aa243db30c..947172ecb8 100644
--- a/hadrian/src/Settings/Builders/Ghc.hs
+++ b/hadrian/src/Settings/Builders/Ghc.hs
@@ -39,6 +39,7 @@ toolArgs = do
, map ("-optc" ++) <$> getStagedSettingList ConfCcArgs
, map ("-optP" ++) <$> getStagedSettingList ConfCppArgs
, map ("-optP" ++) <$> getContextData cppOpts
+ , getContextData hcOpts
]
compileAndLinkHs :: Args
@@ -228,6 +229,8 @@ commonGhcArgs = do
-- input hash to avoid superfluous recompilation, avoiding
-- #18672.
arg "-fdiagnostics-color=always"
+ -- Important this is last.. as these options can override the default options
+ , getContextData hcOpts
]
-- TODO: Do '-ticky' in all debug ways?
diff --git a/hadrian/src/Settings/Default.hs b/hadrian/src/Settings/Default.hs
index 55e56b2212..378fc27a94 100644
--- a/hadrian/src/Settings/Default.hs
+++ b/hadrian/src/Settings/Default.hs
@@ -7,7 +7,7 @@ module Settings.Default (
-- * Default command line arguments for various builders
SourceArgs (..), sourceArgs, defaultBuilderArgs, defaultPackageArgs,
- defaultArgs,
+ defaultExtraArgs,
-- * Default build flavour and BigNum backend
defaultFlavour, defaultBignumBackend
@@ -210,7 +210,6 @@ data SourceArgs = SourceArgs
sourceArgs :: SourceArgs -> Args
sourceArgs SourceArgs {..} = builder Ghc ? mconcat
[ hsDefault
- , getContextData hcOpts
-- `compiler` is also a library but the specific arguments that we want
-- to apply to that are given by the hsCompiler option. `ghc` is an
-- executable so we don't have to exclude that.
@@ -219,11 +218,8 @@ sourceArgs SourceArgs {..} = builder Ghc ? mconcat
, package ghc ? hsGhc ]
-- | All default command line arguments.
-defaultArgs :: Args
-defaultArgs = mconcat
- [ defaultBuilderArgs
- , sourceArgs defaultSourceArgs
- , defaultPackageArgs ]
+defaultExtraArgs :: Args
+defaultExtraArgs = sourceArgs defaultSourceArgs
-- | Default source arguments, e.g. optimisation settings.
defaultSourceArgs :: SourceArgs
@@ -241,7 +237,7 @@ defaultSourceArgs = SourceArgs
defaultFlavour :: Flavour
defaultFlavour = Flavour
{ name = "default"
- , args = defaultArgs
+ , extraArgs = defaultExtraArgs
, packages = defaultPackages
, bignumBackend = defaultBignumBackend
, bignumCheck = False
diff --git a/hadrian/src/Settings/Default.hs-boot b/hadrian/src/Settings/Default.hs-boot
index da5fb27b50..d2774be72d 100644
--- a/hadrian/src/Settings/Default.hs-boot
+++ b/hadrian/src/Settings/Default.hs-boot
@@ -1,6 +1,6 @@
module Settings.Default (
SourceArgs (..), sourceArgs, defaultBuilderArgs, defaultPackageArgs,
- defaultArgs, defaultLibraryWays, defaultRtsWays,
+ defaultExtraArgs, defaultLibraryWays, defaultRtsWays,
defaultFlavour, defaultBignumBackend
) where
@@ -15,7 +15,7 @@ data SourceArgs = SourceArgs
sourceArgs :: SourceArgs -> Args
-defaultBuilderArgs, defaultPackageArgs, defaultArgs :: Args
+defaultBuilderArgs, defaultPackageArgs, defaultExtraArgs :: Args
defaultLibraryWays, defaultRtsWays :: Ways
defaultFlavour :: Flavour
defaultBignumBackend :: String
diff --git a/hadrian/src/Settings/Flavours/Benchmark.hs b/hadrian/src/Settings/Flavours/Benchmark.hs
index 3715e6505d..7ae8b4b160 100644
--- a/hadrian/src/Settings/Flavours/Benchmark.hs
+++ b/hadrian/src/Settings/Flavours/Benchmark.hs
@@ -10,7 +10,7 @@ import {-# SOURCE #-} Settings.Default
benchmarkFlavour :: Flavour
benchmarkFlavour = defaultFlavour
{ name = "bench"
- , args = defaultBuilderArgs <> benchmarkArgs <> defaultPackageArgs
+ , extraArgs = benchmarkArgs
, libraryWays = pure $ Set.fromList [vanilla]
, rtsWays = Set.fromList <$> mconcat [pure [vanilla], targetSupportsThreadedRts ? pure [threaded]] }
diff --git a/hadrian/src/Settings/Flavours/Development.hs b/hadrian/src/Settings/Flavours/Development.hs
index c710d8855f..5a7a3cbfee 100644
--- a/hadrian/src/Settings/Flavours/Development.hs
+++ b/hadrian/src/Settings/Flavours/Development.hs
@@ -12,7 +12,7 @@ import {-# SOURCE #-} Settings.Default
developmentFlavour :: Stage -> Flavour
developmentFlavour ghcStage = defaultFlavour
{ name = "devel" ++ stageString ghcStage
- , args = defaultBuilderArgs <> developmentArgs ghcStage <> defaultPackageArgs
+ , extraArgs = developmentArgs ghcStage
, libraryWays = pure $ Set.fromList [vanilla]
, rtsWays = Set.fromList <$> mconcat [pure [vanilla, debug], targetSupportsThreadedRts ? pure [threaded, threadedDebug]]
, dynamicGhcPrograms = return False
diff --git a/hadrian/src/Settings/Flavours/GhcInGhci.hs b/hadrian/src/Settings/Flavours/GhcInGhci.hs
index fc956518f9..b2fb5d4806 100644
--- a/hadrian/src/Settings/Flavours/GhcInGhci.hs
+++ b/hadrian/src/Settings/Flavours/GhcInGhci.hs
@@ -11,7 +11,7 @@ import {-# SOURCE #-} Settings.Default
ghcInGhciFlavour :: Flavour
ghcInGhciFlavour = defaultFlavour
{ name = "ghc-in-ghci"
- , args = defaultBuilderArgs <> ghciArgs <> defaultPackageArgs
+ , extraArgs = ghciArgs
-- We can't build DLLs on Windows (yet). Actually we should only
-- include the dynamic way when we have a dynamic host GHC, but just
-- checking for Windows seems simpler for now.
diff --git a/hadrian/src/Settings/Flavours/Performance.hs b/hadrian/src/Settings/Flavours/Performance.hs
index a856bc9d17..c4ad7b65d3 100644
--- a/hadrian/src/Settings/Flavours/Performance.hs
+++ b/hadrian/src/Settings/Flavours/Performance.hs
@@ -8,7 +8,7 @@ import {-# SOURCE #-} Settings.Default
performanceFlavour :: Flavour
performanceFlavour = splitSections $ defaultFlavour
{ name = "perf"
- , args = defaultBuilderArgs <> performanceArgs <> defaultPackageArgs }
+ , extraArgs = performanceArgs }
performanceArgs :: Args
performanceArgs = sourceArgs SourceArgs
diff --git a/hadrian/src/Settings/Flavours/Quick.hs b/hadrian/src/Settings/Flavours/Quick.hs
index 6df22c5712..fe804240a0 100644
--- a/hadrian/src/Settings/Flavours/Quick.hs
+++ b/hadrian/src/Settings/Flavours/Quick.hs
@@ -15,7 +15,7 @@ import {-# SOURCE #-} Settings.Default
quickFlavour :: Flavour
quickFlavour = defaultFlavour
{ name = "quick"
- , args = defaultBuilderArgs <> quickArgs <> defaultPackageArgs
+ , extraArgs = quickArgs
, libraryWays = Set.fromList <$>
mconcat
[ pure [vanilla]
diff --git a/hadrian/src/Settings/Flavours/QuickCross.hs b/hadrian/src/Settings/Flavours/QuickCross.hs
index 152a3c5641..036301aae0 100644
--- a/hadrian/src/Settings/Flavours/QuickCross.hs
+++ b/hadrian/src/Settings/Flavours/QuickCross.hs
@@ -11,7 +11,7 @@ import {-# SOURCE #-} Settings.Default
quickCrossFlavour :: Flavour
quickCrossFlavour = defaultFlavour
{ name = "quick-cross"
- , args = defaultBuilderArgs <> quickCrossArgs <> defaultPackageArgs
+ , extraArgs = quickCrossArgs
, dynamicGhcPrograms = pure False
, libraryWays = Set.fromList <$>
mconcat
diff --git a/hadrian/src/Settings/Flavours/Quickest.hs b/hadrian/src/Settings/Flavours/Quickest.hs
index 318e7c8359..9eed80116b 100644
--- a/hadrian/src/Settings/Flavours/Quickest.hs
+++ b/hadrian/src/Settings/Flavours/Quickest.hs
@@ -11,7 +11,7 @@ import {-# SOURCE #-} Settings.Default
quickestFlavour :: Flavour
quickestFlavour = defaultFlavour
{ name = "quickest"
- , args = defaultBuilderArgs <> quickestArgs <> defaultPackageArgs
+ , extraArgs = quickestArgs
, libraryWays = pure (Set.fromList [vanilla])
, rtsWays = pure (Set.fromList [vanilla]) <> (targetSupportsThreadedRts ? pure (Set.fromList [threaded]))
, dynamicGhcPrograms = return False }
diff --git a/hadrian/src/Settings/Flavours/Validate.hs b/hadrian/src/Settings/Flavours/Validate.hs
index f70e33cb98..493645b072 100644
--- a/hadrian/src/Settings/Flavours/Validate.hs
+++ b/hadrian/src/Settings/Flavours/Validate.hs
@@ -12,7 +12,7 @@ import {-# SOURCE #-} Settings.Default
validateFlavour :: Flavour
validateFlavour = enableLinting $ werror $ defaultFlavour
{ name = "validate"
- , args = defaultBuilderArgs <> validateArgs <> defaultPackageArgs
+ , extraArgs = validateArgs
, libraryWays = Set.fromList <$>
mconcat [ pure [vanilla]
, notStage0 ? platformSupportsSharedLibs ? pure [dynamic]
@@ -60,4 +60,4 @@ quickValidateArgs = sourceArgs SourceArgs
quickValidateFlavour :: Flavour
quickValidateFlavour = werror $ validateFlavour
{ name = "quick-validate"
- , args = defaultBuilderArgs <> quickValidateArgs <> defaultPackageArgs }
+ , extraArgs = quickValidateArgs }