haskell.compiler.{ghc98*,ghcHEAD}: bootstrap using source built 9.6

Unfortunately, we are running into trouble linking dependencies of
hadrian against the libraries of the clock package with 9.6.3 and
9.6.4 _bindists_. My current suspiscion is that this is caused by
some kind of discrepancy between the toolchain used by GHC upstream
and us that persists from the configure step used when building the
bindist. The problem seems to be somewhat localized to hsc2hs (hence
clock is an issue), with GHC 9.6.4 bindists even passing a flag to
ld that is not supported by our version of cctools.

The problem is not fully diagnosed, so take the speculation above
with a grain of salt.

As a workaround, we can use the source built GHC 9.6 which is, of
course, configured with our toolchain in the environment.
This commit is contained in:
sternenseemann 2024-03-21 20:04:55 +01:00
parent 6f19531beb
commit ccc08ba453
2 changed files with 24 additions and 0 deletions

View file

@ -403,5 +403,8 @@ stdenv.mkDerivation rec {
# `pkgsMusl`. # `pkgsMusl`.
platforms = builtins.attrNames ghcBinDists.${distSetName}; platforms = builtins.attrNames ghcBinDists.${distSetName};
maintainers = lib.teams.haskell.members; maintainers = lib.teams.haskell.members;
# packages involving hsc2hs (clock) produce libraries our
# ld can't link against
broken = stdenv.hostPlatform.isDarwin;
}; };
} }

View file

@ -298,6 +298,13 @@ in {
packages.ghc963 packages.ghc963
else if stdenv.hostPlatform.isPower64 && stdenv.hostPlatform.isLittleEndian then else if stdenv.hostPlatform.isPower64 && stdenv.hostPlatform.isLittleEndian then
packages.ghc963 packages.ghc963
else if stdenv.hostPlatform.isDarwin then
# it seems like the GHC 9.6.* bindists are built with a different
# toolchain than we are using (which I'm guessing from the fact
# that 9.6.4 bindists pass linker flags our ld doesn't support).
# With both 9.6.3 and 9.6.4 binary it is impossible to link against
# the clock package (probably a hsc2hs problem).
packages.ghc963
else else
packages.ghc963Binary; packages.ghc963Binary;
inherit (buildPackages.python3Packages) sphinx; inherit (buildPackages.python3Packages) sphinx;
@ -316,6 +323,13 @@ in {
packages.ghc963 packages.ghc963
else if stdenv.hostPlatform.isPower64 && stdenv.hostPlatform.isLittleEndian then else if stdenv.hostPlatform.isPower64 && stdenv.hostPlatform.isLittleEndian then
packages.ghc963 packages.ghc963
else if stdenv.hostPlatform.isDarwin then
# it seems like the GHC 9.6.* bindists are built with a different
# toolchain than we are using (which I'm guessing from the fact
# that 9.6.4 bindists pass linker flags our ld doesn't support).
# With both 9.6.3 and 9.6.4 binary it is impossible to link against
# the clock package (probably a hsc2hs problem).
packages.ghc963
else else
packages.ghc963Binary; packages.ghc963Binary;
inherit (buildPackages.python3Packages) sphinx; inherit (buildPackages.python3Packages) sphinx;
@ -335,6 +349,13 @@ in {
packages.ghc963 packages.ghc963
else if stdenv.hostPlatform.isPower64 && stdenv.hostPlatform.isLittleEndian then else if stdenv.hostPlatform.isPower64 && stdenv.hostPlatform.isLittleEndian then
packages.ghc963 packages.ghc963
else if stdenv.hostPlatform.isDarwin then
# it seems like the GHC 9.6.* bindists are built with a different
# toolchain than we are using (which I'm guessing from the fact
# that 9.6.4 bindists pass linker flags our ld doesn't support).
# With both 9.6.3 and 9.6.4 binary it is impossible to link against
# the clock package (probably a hsc2hs problem).
packages.ghc963
else else
packages.ghc963Binary; packages.ghc963Binary;
inherit (buildPackages.python3Packages) sphinx; inherit (buildPackages.python3Packages) sphinx;