haskell.packages.ghc984Binary: init

The 9.8 binaries introduce support for aarch64 musl. They can also be
used to build ghcHEAD, which previously wasn't buildable with a
bindist, so use it there and use the source-built 9.8.4 on platforms
without a bindist for consistency. It fails to build 9.10.x and
9.12.x though, so I've left those as they are.

+509 -2
+491
pkgs/development/compilers/ghc/9.8.4-binary.nix
··· 1 + { 2 + lib, 3 + stdenv, 4 + fetchurl, 5 + perl, 6 + gcc, 7 + ncurses6, 8 + gmp, 9 + libiconv, 10 + numactl, 11 + libffi, 12 + llvmPackages, 13 + coreutils, 14 + targetPackages, 15 + 16 + # minimal = true; will remove files that aren't strictly necessary for 17 + # regular builds and GHC bootstrapping. 18 + # This is "useful" for staying within hydra's output limits for at least the 19 + # aarch64-linux architecture. 20 + minimal ? false, 21 + }: 22 + 23 + # Prebuilt only does native 24 + assert stdenv.targetPlatform == stdenv.hostPlatform; 25 + 26 + let 27 + downloadsUrl = "https://downloads.haskell.org/ghc"; 28 + 29 + # Copy sha256 from https://downloads.haskell.org/~ghc/9.8.4/SHA256SUMS 30 + version = "9.8.4"; 31 + 32 + # Information about available bindists that we use in the build. 33 + # 34 + # # Bindist library checking 35 + # 36 + # The field `archSpecificLibraries` also provides a way for us get notified 37 + # early when the upstream bindist changes its dependencies (e.g. because a 38 + # newer Debian version is used that uses a new `ncurses` version). 39 + # 40 + # Usage: 41 + # 42 + # * You can find the `fileToCheckFor` of libraries by running `readelf -d` 43 + # on the compiler binary (`exePathForLibraryCheck`). 44 + # * To skip library checking for an architecture, 45 + # set `exePathForLibraryCheck = null`. 46 + # * To skip file checking for a specific arch specific library, 47 + # set `fileToCheckFor = null`. 48 + ghcBinDists = { 49 + # Binary distributions for the default libc (e.g. glibc, or libSystem on Darwin) 50 + # nixpkgs uses for the respective system. 51 + defaultLibc = { 52 + i686-linux = { 53 + variantSuffix = ""; 54 + src = { 55 + url = "${downloadsUrl}/${version}/ghc-${version}-i386-deb10-linux.tar.xz"; 56 + sha256 = "e5efce16c654d5e702986258a87dd9531e1722b8051823c8ce1150ce3c5899ae"; 57 + }; 58 + exePathForLibraryCheck = "bin/ghc"; 59 + archSpecificLibraries = [ 60 + { 61 + nixPackage = gmp; 62 + fileToCheckFor = null; 63 + } 64 + { 65 + nixPackage = ncurses6; 66 + fileToCheckFor = "libtinfo.so.6"; 67 + } 68 + ]; 69 + }; 70 + x86_64-linux = { 71 + variantSuffix = ""; 72 + src = { 73 + url = "${downloadsUrl}/${version}/ghc-${version}-x86_64-deb11-linux.tar.xz"; 74 + sha256 = "af151db8682b8c763f5a44f960f65453d794c95b60f151abc82dbdefcbe6f8ad"; 75 + }; 76 + exePathForLibraryCheck = "bin/ghc"; 77 + archSpecificLibraries = [ 78 + { 79 + nixPackage = gmp; 80 + fileToCheckFor = null; 81 + } 82 + { 83 + nixPackage = ncurses6; 84 + fileToCheckFor = "libtinfo.so.6"; 85 + } 86 + ]; 87 + }; 88 + aarch64-linux = { 89 + variantSuffix = ""; 90 + src = { 91 + url = "${downloadsUrl}/${version}/ghc-${version}-aarch64-deb11-linux.tar.xz"; 92 + sha256 = "310204daf2df6ad16087be94b3498ca414a0953b29e94e8ec8eb4a5c9bf603d3"; 93 + }; 94 + exePathForLibraryCheck = "bin/ghc"; 95 + archSpecificLibraries = [ 96 + { 97 + nixPackage = gmp; 98 + fileToCheckFor = null; 99 + } 100 + { 101 + nixPackage = ncurses6; 102 + fileToCheckFor = "libtinfo.so.6"; 103 + } 104 + { 105 + nixPackage = numactl; 106 + fileToCheckFor = null; 107 + } 108 + ]; 109 + }; 110 + x86_64-darwin = { 111 + variantSuffix = ""; 112 + src = { 113 + url = "${downloadsUrl}/${version}/ghc-${version}-x86_64-apple-darwin.tar.xz"; 114 + sha256 = "de7baacfb1513ab0e4ccf8911045cceee84bc8a4e39b89bd975ed3135e5f7d96"; 115 + }; 116 + exePathForLibraryCheck = null; # we don't have a library check for darwin yet 117 + archSpecificLibraries = [ 118 + { 119 + nixPackage = gmp; 120 + fileToCheckFor = null; 121 + } 122 + { 123 + nixPackage = ncurses6; 124 + fileToCheckFor = null; 125 + } 126 + { 127 + nixPackage = libiconv; 128 + fileToCheckFor = null; 129 + } 130 + ]; 131 + }; 132 + aarch64-darwin = { 133 + variantSuffix = ""; 134 + src = { 135 + url = "${downloadsUrl}/${version}/ghc-${version}-aarch64-apple-darwin.tar.xz"; 136 + sha256 = "e2f12a922754fd28511512875bf6d9eb3e0cce7fc963a7266f6e1661aeabd7ed"; 137 + }; 138 + exePathForLibraryCheck = null; # we don't have a library check for darwin yet 139 + archSpecificLibraries = [ 140 + { 141 + nixPackage = gmp; 142 + fileToCheckFor = null; 143 + } 144 + { 145 + nixPackage = ncurses6; 146 + fileToCheckFor = null; 147 + } 148 + { 149 + nixPackage = libiconv; 150 + fileToCheckFor = null; 151 + } 152 + ]; 153 + }; 154 + }; 155 + # Binary distributions for the musl libc for the respective system. 156 + musl = { 157 + aarch64-linux = { 158 + variantSuffix = "-musl"; 159 + src = { 160 + url = "${downloadsUrl}/${version}/ghc-${version}-aarch64-alpine3_18-linux.tar.xz"; 161 + sha256 = "b5c86a0cda0bd62d5eeeb52b1937c3bd00c70cd67dd74226ce787d5c429a4e62"; 162 + }; 163 + exePathForLibraryCheck = "bin/ghc"; 164 + archSpecificLibraries = [ 165 + { 166 + nixPackage = gmp; 167 + fileToCheckFor = null; 168 + } 169 + { 170 + nixPackage = ncurses6; 171 + fileToCheckFor = "libncursesw.so.6"; 172 + } 173 + ]; 174 + }; 175 + x86_64-linux = { 176 + variantSuffix = "-musl"; 177 + src = { 178 + url = "${downloadsUrl}/${version}/ghc-${version}-x86_64-alpine3_12-linux.tar.xz"; 179 + sha256 = "e34bb16e8387509adc96a3d98b4a444bab425d12864c38a3629f2860b4bec2e7"; 180 + }; 181 + exePathForLibraryCheck = "bin/ghc"; 182 + archSpecificLibraries = [ 183 + { 184 + nixPackage = gmp; 185 + fileToCheckFor = null; 186 + } 187 + { 188 + nixPackage = ncurses6; 189 + fileToCheckFor = "libncursesw.so.6"; 190 + } 191 + ]; 192 + }; 193 + }; 194 + }; 195 + 196 + distSetName = if stdenv.hostPlatform.isMusl then "musl" else "defaultLibc"; 197 + 198 + binDistUsed = 199 + ghcBinDists.${distSetName}.${stdenv.hostPlatform.system} 200 + or (throw "cannot bootstrap GHC on this platform ('${stdenv.hostPlatform.system}' with libc '${distSetName}')"); 201 + 202 + gmpUsed = 203 + (builtins.head ( 204 + builtins.filter ( 205 + drv: lib.hasPrefix "gmp" (drv.nixPackage.name or "") 206 + ) binDistUsed.archSpecificLibraries 207 + )).nixPackage; 208 + 209 + useLLVM = !(import ./common-have-ncg.nix { inherit lib stdenv version; }); 210 + 211 + libPath = lib.makeLibraryPath ( 212 + # Add arch-specific libraries. 213 + map ({ nixPackage, ... }: nixPackage) binDistUsed.archSpecificLibraries 214 + ); 215 + 216 + libEnvVar = lib.optionalString stdenv.hostPlatform.isDarwin "DY" + "LD_LIBRARY_PATH"; 217 + 218 + runtimeDeps = 219 + [ 220 + targetPackages.stdenv.cc 221 + targetPackages.stdenv.cc.bintools 222 + coreutils # for cat 223 + ] 224 + ++ lib.optionals useLLVM [ 225 + (lib.getBin llvmPackages.llvm) 226 + ] 227 + # On darwin, we need unwrapped bintools as well (for otool) 228 + ++ lib.optionals (stdenv.targetPlatform.linker == "cctools") [ 229 + targetPackages.stdenv.cc.bintools.bintools 230 + ]; 231 + 232 + in 233 + 234 + stdenv.mkDerivation { 235 + inherit version; 236 + pname = "ghc-binary${binDistUsed.variantSuffix}"; 237 + 238 + src = fetchurl binDistUsed.src; 239 + 240 + nativeBuildInputs = [ perl ]; 241 + 242 + # Set LD_LIBRARY_PATH or equivalent so that the programs running as part 243 + # of the bindist installer can find the libraries they expect. 244 + # Cannot patchelf beforehand due to relative RPATHs that anticipate 245 + # the final install location. 246 + ${libEnvVar} = libPath; 247 + 248 + postUnpack = 249 + # Verify our assumptions of which `libtinfo.so` (ncurses) version is used, 250 + # so that we know when ghc bindists upgrade that and we need to update the 251 + # version used in `libPath`. 252 + lib.optionalString (binDistUsed.exePathForLibraryCheck != null) 253 + # Note the `*` glob because some GHCs have a suffix when unpacked, e.g. 254 + # the musl bindist has dir `ghc-VERSION-x86_64-unknown-linux/`. 255 + # As a result, don't shell-quote this glob when splicing the string. 256 + ( 257 + let 258 + buildExeGlob = ''ghc-${version}*/"${binDistUsed.exePathForLibraryCheck}"''; 259 + in 260 + lib.concatStringsSep "\n" [ 261 + ('' 262 + shopt -u nullglob 263 + echo "Checking that ghc binary exists in bindist at ${buildExeGlob}" 264 + if ! test -e ${buildExeGlob}; then 265 + echo >&2 "GHC binary ${binDistUsed.exePathForLibraryCheck} could not be found in the bindist build directory (at ${buildExeGlob}) for arch ${stdenv.hostPlatform.system}, please check that ghcBinDists correctly reflect the bindist dependencies!"; exit 1; 266 + fi 267 + '') 268 + (lib.concatMapStringsSep "\n" ( 269 + { fileToCheckFor, nixPackage }: 270 + lib.optionalString (fileToCheckFor != null) '' 271 + echo "Checking bindist for ${fileToCheckFor} to ensure that is still used" 272 + if ! readelf -d ${buildExeGlob} | grep "${fileToCheckFor}"; then 273 + echo >&2 "File ${fileToCheckFor} could not be found in ${binDistUsed.exePathForLibraryCheck} for arch ${stdenv.hostPlatform.system}, please check that ghcBinDists correctly reflect the bindist dependencies!"; exit 1; 274 + fi 275 + 276 + echo "Checking that the nix package ${nixPackage} contains ${fileToCheckFor}" 277 + if ! test -e "${lib.getLib nixPackage}/lib/${fileToCheckFor}"; then 278 + echo >&2 "Nix package ${nixPackage} did not contain ${fileToCheckFor} for arch ${stdenv.hostPlatform.system}, please check that ghcBinDists correctly reflect the bindist dependencies!"; exit 1; 279 + fi 280 + '' 281 + ) binDistUsed.archSpecificLibraries) 282 + ] 283 + ) 284 + # GHC has dtrace probes, which causes ld to try to open /usr/lib/libdtrace.dylib 285 + # during linking 286 + + lib.optionalString stdenv.hostPlatform.isDarwin '' 287 + export NIX_LDFLAGS+=" -no_dtrace_dof" 288 + # not enough room in the object files for the full path to libiconv :( 289 + for exe in $(find . -type f -executable); do 290 + isMachO $exe || continue 291 + ln -fs ${libiconv}/lib/libiconv.dylib $(dirname $exe)/libiconv.dylib 292 + install_name_tool -change /usr/lib/libiconv.2.dylib @executable_path/libiconv.dylib -change /usr/local/lib/gcc/6/libgcc_s.1.dylib ${gcc.cc.lib}/lib/libgcc_s.1.dylib $exe 293 + done 294 + '' 295 + 296 + # We have to patch the GMP paths for the ghc-bignum package, for hadrian by 297 + # modifying the package-db directly 298 + + '' 299 + find . -name 'ghc-bignum*.conf' \ 300 + -exec sed -e '/^[a-z-]*library-dirs/a \ ${lib.getLib gmpUsed}/lib' -i {} \; 301 + '' 302 + # Similar for iconv and libffi on darwin 303 + + lib.optionalString stdenv.hostPlatform.isDarwin '' 304 + find . -name 'base*.conf' \ 305 + -exec sed -e '/^[a-z-]*library-dirs/a \ ${lib.getLib libiconv}/lib' -i {} \; 306 + 307 + # To link RTS in the end we also need libffi now 308 + find . -name 'rts*.conf' \ 309 + -exec sed -e '/^[a-z-]*library-dirs/a \ ${lib.getLib libffi}/lib' \ 310 + -e 's@/Library/Developer/.*/usr/include/ffi@${lib.getDev libffi}/include@' \ 311 + -i {} \; 312 + '' 313 + + 314 + # aarch64 does HAVE_NUMA so -lnuma requires it in library-dirs in rts/package.conf.in 315 + # FFI_LIB_DIR is a good indication of places it must be needed. 316 + lib.optionalString (stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isAarch64) '' 317 + find . -name package.conf.in \ 318 + -exec sed -i "s@FFI_LIB_DIR@FFI_LIB_DIR ${numactl.out}/lib@g" {} \; 319 + '' 320 + + 321 + # Rename needed libraries and binaries, fix interpreter 322 + lib.optionalString stdenv.hostPlatform.isLinux '' 323 + find . -type f -executable -exec patchelf \ 324 + --interpreter ${stdenv.cc.bintools.dynamicLinker} {} \; 325 + ''; 326 + 327 + # fix for `configure: error: Your linker is affected by binutils #16177` 328 + preConfigure = lib.optionalString stdenv.targetPlatform.isAarch32 "LD=ld.gold"; 329 + 330 + # GHC has a patched config.sub and bindists' platforms should always work 331 + dontUpdateAutotoolsGnuConfigScripts = true; 332 + 333 + configurePlatforms = [ ]; 334 + configureFlags = 335 + lib.optional stdenv.hostPlatform.isDarwin "--with-gcc=${./gcc-clang-wrapper.sh}" 336 + # From: https://github.com/NixOS/nixpkgs/pull/43369/commits 337 + ++ lib.optional stdenv.hostPlatform.isMusl "--disable-ld-override"; 338 + 339 + # No building is necessary, but calling make without flags ironically 340 + # calls install-strip ... 341 + dontBuild = true; 342 + 343 + # Patch scripts to include runtime dependencies in $PATH. 344 + postInstall = 345 + '' 346 + for i in "$out/bin/"*; do 347 + test ! -h "$i" || continue 348 + isScript "$i" || continue 349 + sed -i -e '2i export PATH="${lib.makeBinPath runtimeDeps}:$PATH"' "$i" 350 + done 351 + '' 352 + + lib.optionalString stdenv.targetPlatform.isDarwin '' 353 + # Work around building with binary GHC on Darwin due to GHC’s use of `ar -L` when it 354 + # detects `llvm-ar` even though the resulting archives are not supported by ld64. 355 + # https://gitlab.haskell.org/ghc/ghc/-/issues/23188 356 + # https://github.com/haskell/cabal/issues/8882 357 + sed -i -e 's/,("ar supports -L", "YES")/,("ar supports -L", "NO")/' "$out/lib/ghc-${version}/lib/settings" 358 + ''; 359 + 360 + # Apparently necessary for the ghc Alpine (musl) bindist: 361 + # When we strip, and then run the 362 + # patchelf --set-rpath "${libPath}:$(patchelf --print-rpath $p)" $p 363 + # below, running ghc (e.g. during `installCheckPhase)` gives some apparently 364 + # corrupted rpath or whatever makes the loader work on nonsensical strings: 365 + # running install tests 366 + # Error relocating /nix/store/...-ghc-8.10.2-binary/lib/ghc-8.10.5/bin/ghc: : symbol not found 367 + # Error relocating /nix/store/...-ghc-8.10.2-binary/lib/ghc-8.10.5/bin/ghc: ir6zf6c9f86pfx8sr30n2vjy-ghc-8.10.2-binary/lib/ghc-8.10.5/bin/../lib/x86_64-linux-ghc-8.10.5/libHSexceptions-0.10.4-ghc8.10.5.so: symbol not found 368 + # Error relocating /nix/store/...-ghc-8.10.2-binary/lib/ghc-8.10.5/bin/ghc: y/lib/ghc-8.10.5/bin/../lib/x86_64-linux-ghc-8.10.5/libHStemplate-haskell-2.16.0.0-ghc8.10.5.so: symbol not found 369 + # Error relocating /nix/store/...-ghc-8.10.2-binary/lib/ghc-8.10.5/bin/ghc: 8.10.5/libHStemplate-haskell-2.16.0.0-ghc8.10.5.so: symbol not found 370 + # Error relocating /nix/store/...-ghc-8.10.2-binary/lib/ghc-8.10.5/bin/ghc: �: symbol not found 371 + # Error relocating /nix/store/...-ghc-8.10.2-binary/lib/ghc-8.10.5/bin/ghc: �?: symbol not found 372 + # Error relocating /nix/store/...-ghc-8.10.2-binary/lib/ghc-8.10.5/bin/ghc: 64-linux-ghc-8.10.5/libHSexceptions-0.10.4-ghc8.10.5.so: symbol not found 373 + # This is extremely bogus and should be investigated. 374 + dontStrip = if stdenv.hostPlatform.isMusl then true else false; # `if` for explicitness 375 + 376 + # On Linux, use patchelf to modify the executables so that they can 377 + # find editline/gmp. 378 + postFixup = 379 + lib.optionalString (stdenv.hostPlatform.isLinux && !(binDistUsed.isStatic or false)) ( 380 + if stdenv.hostPlatform.isAarch64 then 381 + # Keep rpath as small as possible on aarch64 for patchelf#244. All Elfs 382 + # are 2 directories deep from $out/lib, so pooling symlinks there makes 383 + # a short rpath. 384 + '' 385 + (cd $out/lib; ln -s ${lib.getLib gmpUsed}/lib/libgmp.so.10) 386 + '' 387 + + ( 388 + if stdenv.hostPlatform.isMusl then 389 + '' 390 + (cd $out/lib; ln -s ${ncurses6.out}/lib/libncursesw.so.6) 391 + '' 392 + else 393 + '' 394 + (cd $out/lib; ln -s ${ncurses6.out}/lib/libtinfo.so.6) 395 + '' 396 + ) 397 + + '' 398 + for p in $(find "$out/lib" -type f -name "*\.so*"); do 399 + (cd $out/lib; ln -s $p) 400 + done 401 + 402 + for p in $(find "$out/lib" -type f -executable); do 403 + if isELF "$p"; then 404 + echo "Patchelfing $p" 405 + patchelf --set-rpath "\$ORIGIN:\$ORIGIN/../.." $p 406 + fi 407 + done 408 + '' 409 + else 410 + '' 411 + for p in $(find "$out" -type f -executable); do 412 + if isELF "$p"; then 413 + echo "Patchelfing $p" 414 + patchelf --set-rpath "${libPath}:$(patchelf --print-rpath $p)" $p 415 + fi 416 + done 417 + '' 418 + ) 419 + + lib.optionalString stdenv.hostPlatform.isDarwin '' 420 + # not enough room in the object files for the full path to libiconv :( 421 + for exe in $(find "$out" -type f -executable); do 422 + isMachO $exe || continue 423 + ln -fs ${libiconv}/lib/libiconv.dylib $(dirname $exe)/libiconv.dylib 424 + install_name_tool -change /usr/lib/libiconv.2.dylib @executable_path/libiconv.dylib -change /usr/local/lib/gcc/6/libgcc_s.1.dylib ${gcc.cc.lib}/lib/libgcc_s.1.dylib $exe 425 + done 426 + 427 + for file in $(find "$out" -name setup-config); do 428 + substituteInPlace $file --replace /usr/bin/ranlib "$(type -P ranlib)" 429 + done 430 + '' 431 + # Recache package db which needs to happen for Hadrian bindists 432 + # where we modify the package db before installing 433 + + '' 434 + package_db=("$out"/lib/ghc-*/lib/package.conf.d) 435 + "$out/bin/ghc-pkg" --package-db="$package_db" recache 436 + ''; 437 + 438 + # GHC cannot currently produce outputs that are ready for `-pie` linking. 439 + # Thus, disable `pie` hardening, otherwise `recompile with -fPIE` errors appear. 440 + # See: 441 + # * https://github.com/NixOS/nixpkgs/issues/129247 442 + # * https://gitlab.haskell.org/ghc/ghc/-/issues/19580 443 + hardeningDisable = [ "pie" ]; 444 + 445 + doInstallCheck = true; 446 + installCheckPhase = '' 447 + # Sanity check, can ghc create executables? 448 + cd $TMP 449 + mkdir test-ghc; cd test-ghc 450 + cat > main.hs << EOF 451 + {-# LANGUAGE TemplateHaskell #-} 452 + module Main where 453 + main = putStrLn \$([|"yes"|]) 454 + EOF 455 + env -i $out/bin/ghc --make main.hs || exit 1 456 + echo compilation ok 457 + [ $(./main) == "yes" ] 458 + ''; 459 + 460 + passthru = { 461 + targetPrefix = ""; 462 + enableShared = true; 463 + 464 + inherit llvmPackages; 465 + 466 + # Our Cabal compiler name 467 + haskellCompilerName = "ghc-${version}"; 468 + 469 + # Normal GHC derivations expose the hadrian derivation used to build them 470 + # here. In the case of bindists we just make sure that the attribute exists, 471 + # as it is used for checking if a GHC derivation has been built with hadrian. 472 + hadrian = null; 473 + }; 474 + 475 + meta = rec { 476 + homepage = "http://haskell.org/ghc"; 477 + description = "Glasgow Haskell Compiler"; 478 + license = lib.licenses.bsd3; 479 + # HACK: since we can't encode the libc / abi in platforms, we need 480 + # to make the platform list dependent on the evaluation platform 481 + # in order to avoid eval errors with musl which supports less 482 + # platforms than the default libcs (i. e. glibc / libSystem). 483 + # This is done for the benefit of Hydra, so `packagePlatforms` 484 + # won't return any platforms that would cause an evaluation 485 + # failure for `pkgsMusl.haskell.compiler.ghc922Binary`, as 486 + # long as the evaluator runs on a platform that supports 487 + # `pkgsMusl`. 488 + platforms = builtins.attrNames ghcBinDists.${distSetName}; 489 + maintainers = lib.teams.haskell.members; 490 + }; 491 + }
+18 -2
pkgs/top-level/haskell-packages.nix
··· 25 25 "ghc8107Binary" 26 26 "ghc924Binary" 27 27 "ghc963Binary" 28 + "ghc984Binary" 28 29 # ghcjs 29 30 "ghcjs" 30 31 "ghcjs810" ··· 95 96 }; 96 97 97 98 ghc963Binary = callPackage ../development/compilers/ghc/9.6.3-binary.nix { 99 + llvmPackages = pkgs.llvmPackages_15; 100 + }; 101 + 102 + ghc984Binary = callPackage ../development/compilers/ghc/9.8.4-binary.nix { 98 103 llvmPackages = pkgs.llvmPackages_15; 99 104 }; 100 105 ··· 428 433 ghc912 = compiler.ghc9121; 429 434 ghcHEAD = callPackage ../development/compilers/ghc/head.nix { 430 435 bootPkgs = 431 - # No suitable bindist packaged yet 432 - bb.packages.ghc9101; 436 + # No armv7l bindists are available. 437 + if stdenv.buildPlatform.isAarch32 then 438 + bb.packages.ghc984 439 + else if stdenv.buildPlatform.isPower64 && stdenv.buildPlatform.isLittleEndian then 440 + bb.packages.ghc984 441 + else 442 + bb.packages.ghc984Binary; 433 443 inherit (buildPackages.python3Packages) sphinx; 434 444 # Need to use apple's patched xattr until 435 445 # https://github.com/xattr/xattr/issues/44 and ··· 508 518 buildHaskellPackages = bh.packages.ghc963Binary; 509 519 ghc = bh.compiler.ghc963Binary; 510 520 compilerConfig = callPackage ../development/haskell-modules/configuration-ghc-9.6.x.nix { }; 521 + packageSetConfig = bootstrapPackageSet; 522 + }; 523 + ghc984Binary = callPackage ../development/haskell-modules { 524 + buildHaskellPackages = bh.packages.ghc984Binary; 525 + ghc = bh.compiler.ghc984Binary; 526 + compilerConfig = callPackage ../development/haskell-modules/configuration-ghc-9.8.x.nix { }; 511 527 packageSetConfig = bootstrapPackageSet; 512 528 }; 513 529 ghc8107 = callPackage ../development/haskell-modules {