Skip to content
Snippets Groups Projects
Commit 8cc9a534 authored by Matthew Pickering's avatar Matthew Pickering Committed by Marge Bot
Browse files

hadrian: Flavour: Change args -> extraArgs

Previously in a flavour definition you could override all the flags
which were passed to GHC. This causes issues when needed to compute a
package hash because we need to know what these extra arguments are
going to be before computing the hash. The solution is to modify flavour
so that the arguments you pass here are just extra ones rather than all
the arguments that you need to compile something.

This makes things work more like how cabal.project files work when you
give extra arguments to a package and also means that flavour
transformers correctly affect the hash.
parent 8fde4ac8
No related branches found
No related tags found
No related merge requests found
Showing
with 30 additions and 28 deletions
......@@ -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
......
......@@ -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.
......
......@@ -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
......
{-# 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
......
......@@ -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?
......
......@@ -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
......
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
......@@ -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]] }
......
......@@ -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
......
......@@ -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.
......
......@@ -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
......
......@@ -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]
......
......@@ -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
......
......@@ -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 }
......
......@@ -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 }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment