@@ -117,6 +117,7 @@ import Distribution.Backpack.FullUnitId
117117import Distribution.Backpack.LinkedComponent
118118import Distribution.Backpack.ModuleShape
119119import Distribution.CabalSpecVersion
120+
120121-- import qualified Distribution.Client.BuildReports.Storage as BuildReports
121122import Distribution.Client.Compat.Prelude
122123import Distribution.Client.Config
@@ -362,7 +363,13 @@ rebuildProjectConfig
362363 , distProjectCacheDirectory
363364 , distProjectFile
364365 }
365- cliConfig = do
366+ cliConfig@ ProjectConfig
367+ { projectConfigShared =
368+ ProjectConfigShared
369+ { projectConfigIgnoreProject
370+ , projectConfigConfigFile
371+ }
372+ } = do
366373 progsearchpath <- liftIO $ getSystemSearchPath
367374
368375 let fileMonitorProjectConfig = newFileMonitor (distProjectCacheFile " config" )
@@ -372,7 +379,7 @@ rebuildProjectConfig
372379 return
373380 ( configPath
374381 , distProjectFile " "
375- , (projectConfigHcFlavor, projectConfigHcPath, projectConfigHcPkg)
382+ , toolchainCacheKey
376383 , progsearchpath
377384 , packageConfigProgramPaths
378385 , packageConfigProgramPathExtra
@@ -392,12 +399,9 @@ rebuildProjectConfig
392399 -- have to create the cache directory before configuring the compiler
393400 liftIO $ createDirectoryIfMissingVerbose verbosity True distProjectCacheDirectory
394401 toolchains <- configureCompiler verbosity distDirLayout (fst (PD. ignoreConditions projectConfigSkeleton) <> cliConfig)
395- -- FIXME: what compiler to use here?
396- let Toolchain
397- { toolchainCompiler = compiler
398- , toolchainPlatform = Platform arch os
399- } = getStage toolchains Host
400- return (os, arch, compiler)
402+ -- NOTE: project config is always resolved with the host compiler
403+ let Toolchain {toolchainCompiler, toolchainPlatform = Platform arch os} = getStage toolchains Host
404+ return (os, arch, toolchainCompiler)
401405
402406 (projectConfig, _compiler) <- instantiateProjectConfigSkeletonFetchingCompiler fetchCompiler mempty projectConfigSkeleton
403407 when (projectConfigDistDir (projectConfigShared $ projectConfig) /= NoFlag ) $
@@ -410,6 +414,7 @@ rebuildProjectConfig
410414 [ text " -" <+> docProjectConfigPath path
411415 | Explicit path <- Set. toList . (if verbosity >= verbose then id else onlyTopLevelProvenance) $ projectConfigProvenance projectConfig
412416 ]
417+
413418 unless (null configfiles)
414419 $ notice (verboseStderr verbosity)
415420 . render
@@ -419,8 +424,14 @@ rebuildProjectConfig
419424
420425 return (projectConfig <> cliConfig, localPackages)
421426 where
422- ProjectConfigShared {projectConfigHcFlavor, projectConfigHcPath, projectConfigHcPkg, projectConfigIgnoreProject, projectConfigConfigFile} =
423- projectConfigShared cliConfig
427+ toolchainCacheKey =
428+ ( projectConfigBuildHcFlavor (projectConfigShared cliConfig)
429+ , projectConfigBuildHcPath (projectConfigShared cliConfig)
430+ , projectConfigBuildHcPkg (projectConfigShared cliConfig)
431+ , projectConfigHcFlavor (projectConfigShared cliConfig)
432+ , projectConfigHcPath (projectConfigShared cliConfig)
433+ , projectConfigHcPkg (projectConfigShared cliConfig)
434+ )
424435
425436 PackageConfig {packageConfigProgramPaths, packageConfigProgramPathExtra} =
426437 projectConfigLocalPackages cliConfig
@@ -475,9 +486,9 @@ configureCompiler
475486 { projectConfigHcFlavor
476487 , projectConfigHcPath
477488 , projectConfigHcPkg
478- , projectConfigHostHcFlavor
479- , projectConfigHostHcPath
480- , projectConfigHostHcPkg
489+ , projectConfigBuildHcFlavor
490+ , projectConfigBuildHcPath
491+ , projectConfigBuildHcPkg
481492 }
482493 , projectConfigLocalPackages =
483494 projectConfigLocalPackages@ PackageConfig
@@ -492,9 +503,7 @@ configureCompiler
492503 rerunIfChanged
493504 verbosity
494505 fileMonitorCompiler
495- ( hcFlavor
496- , hcPath
497- , hcPkg
506+ ( cacheKey
498507 , progsearchpath
499508 , packageConfigProgramPaths
500509 , packageConfigProgramPathExtra
@@ -506,13 +515,7 @@ configureCompiler
506515
507516 buildToolchain <- do
508517 (toolchainCompiler, toolchainPlatform, toolchainProgramDb) <-
509- liftIO $
510- Cabal. configCompilerEx
511- hcFlavor
512- hcPath
513- hcPkg
514- defdb
515- verbosity
518+ liftIO $ Cabal. configCompilerEx buildHcFlavor buildHcPath buildHcPkg defdb verbosity
516519
517520 -- Note that we added the user-supplied program locations and args
518521 -- for /all/ programs, not just those for the compiler prog and
@@ -525,13 +528,7 @@ configureCompiler
525528
526529 hostToolchain <- do
527530 (toolchainCompiler, toolchainPlatform, toolchainProgramDb) <-
528- liftIO $
529- Cabal. configCompilerEx
530- hostHcFlavor
531- hostHcPath
532- hostHcPkg
533- defdb
534- verbosity
531+ liftIO $ Cabal. configCompilerEx hostHcFlavor hostHcPath hostHcPkg defdb verbosity
535532
536533 -- Note that we added the user-supplied program locations and args
537534 -- for /all/ programs, not just those for the compiler prog and
@@ -544,12 +541,15 @@ configureCompiler
544541
545542 return (Stage. index [(Build , buildToolchain), (Host , hostToolchain)])
546543 where
547- hcFlavor = flagToMaybe projectConfigHcFlavor
548- hcPath = flagToMaybe projectConfigHcPath
549- hcPkg = flagToMaybe projectConfigHcPkg
550- hostHcFlavor = flagToMaybe projectConfigHostHcFlavor <|> flagToMaybe projectConfigHcFlavor
551- hostHcPath = flagToMaybe projectConfigHostHcPath <|> flagToMaybe projectConfigHcPath
552- hostHcPkg = flagToMaybe projectConfigHostHcPkg <|> flagToMaybe projectConfigHcPkg
544+ hostHcFlavor = flagToMaybe projectConfigHcFlavor
545+ hostHcPath = flagToMaybe projectConfigHcPath
546+ hostHcPkg = flagToMaybe projectConfigHcPkg
547+ -- Use the host compiler if a separate build compiler is not specified
548+ buildHcFlavor = flagToMaybe projectConfigBuildHcFlavor <|> flagToMaybe projectConfigHcFlavor
549+ buildHcPath = flagToMaybe projectConfigBuildHcPath <|> flagToMaybe projectConfigHcPath
550+ buildHcPkg = flagToMaybe projectConfigBuildHcPkg <|> flagToMaybe projectConfigHcPkg
551+
552+ cacheKey = (hostHcFlavor, hostHcPath, hostHcPkg, buildHcFlavor, buildHcPath, buildHcPkg)
553553
554554{- Note [Caching the result of configuring the compiler]
555555~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -682,7 +682,7 @@ rebuildInstallPlan
682682 phaseMaintainPlanOutputs elaboratedPlan elaboratedShared
683683 return (elaboratedPlan, elaboratedShared, totalIndexState, activeRepos)
684684
685- -- | Given the 'InstalledPackageIndex' for a nix-style package store, and an
685+ -- \ | Given the 'InstalledPackageIndex' for a nix-style package store, and an
686686 -- 'ElaboratedInstallPlan', replace configured source packages by installed
687687 -- packages from the store whenever they exist.
688688 --
0 commit comments