diff options
-rw-r--r-- | hadrian/src/Flavour.hs | 4 | ||||
-rw-r--r-- | hadrian/src/Flavour/Type.hs | 5 | ||||
-rw-r--r-- | hadrian/src/Hadrian/Haskell/Cabal/Parse.hs | 5 | ||||
-rwxr-xr-x | hadrian/src/Settings.hs | 7 | ||||
-rw-r--r-- | hadrian/src/Settings/Builders/Ghc.hs | 3 | ||||
-rw-r--r-- | hadrian/src/Settings/Default.hs | 12 | ||||
-rw-r--r-- | hadrian/src/Settings/Default.hs-boot | 4 | ||||
-rw-r--r-- | hadrian/src/Settings/Flavours/Benchmark.hs | 2 | ||||
-rw-r--r-- | hadrian/src/Settings/Flavours/Development.hs | 2 | ||||
-rw-r--r-- | hadrian/src/Settings/Flavours/GhcInGhci.hs | 2 | ||||
-rw-r--r-- | hadrian/src/Settings/Flavours/Performance.hs | 2 | ||||
-rw-r--r-- | hadrian/src/Settings/Flavours/Quick.hs | 2 | ||||
-rw-r--r-- | hadrian/src/Settings/Flavours/QuickCross.hs | 2 | ||||
-rw-r--r-- | hadrian/src/Settings/Flavours/Quickest.hs | 2 | ||||
-rw-r--r-- | hadrian/src/Settings/Flavours/Validate.hs | 4 |
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 } |