diff --git a/pkgs/development/haskell-modules/generic-builder.nix b/pkgs/development/haskell-modules/generic-builder.nix index ac22f903c9b5..49cbe02b71e5 100644 --- a/pkgs/development/haskell-modules/generic-builder.nix +++ b/pkgs/development/haskell-modules/generic-builder.nix @@ -48,12 +48,8 @@ in , isExecutable ? false, isLibrary ? !isExecutable , jailbreak ? false , license -# We cannot enable -j parallelism for libraries because GHC is far more -# likely to generate a non-determistic library ID in that case. Further -# details are at . -# -# Currently disabled for aarch64. See https://ghc.haskell.org/trac/ghc/ticket/15449. -, enableParallelBuilding ? ((stdenv.lib.versionOlder "7.8" ghc.version && !isLibrary) || stdenv.lib.versionOlder "8.0.1" ghc.version) && !(stdenv.buildPlatform.isAarch64) + # aarch64 sometimes crashes for -jn with n>1: https://ghc.haskell.org/trac/ghc/ticket/15449 +, enableParallelBuilding ? !stdenv.buildPlatform.isAarch64 , maintainers ? [] , doCoverage ? false , doHaddock ? !(ghc.isHaLVM or false) @@ -82,7 +78,7 @@ in # same package in the (recursive) dependencies of the package being # built. Will delay failures, if any, to compile time. allowInconsistentDependencies ? false -, maxBuildCores ? 4 # GHC usually suffers beyond -j4. https://ghc.haskell.org/trac/ghc/ticket/9221 +, maxBuildCores ? 16 # more cores usually don't improve performance: https://ghc.haskell.org/trac/ghc/ticket/9221 , # If set to true, this builds a pre-linked .o file for this Haskell library. # This can make it slightly faster to load this library into GHCi, but takes # extra disk space and compile time. @@ -181,6 +177,8 @@ let (optionalString enableHsc2hsViaAsm "--hsc2hs-option=--via-asm") ]; + parallelBuildingFlags = "-j$NIX_BUILD_CORES" + optionalString stdenv.isLinux " +RTS -A64M -RTS"; + crossCabalFlagsString = stdenv.lib.optionalString isCross (" " + stdenv.lib.concatStringsSep " " crossCabalFlags); @@ -199,7 +197,7 @@ let "--package-db=$packageConfDir" (optionalString (enableSharedExecutables && stdenv.isLinux) "--ghc-option=-optl=-Wl,-rpath=$out/lib/${ghc.name}/${pname}-${version}") (optionalString (enableSharedExecutables && stdenv.isDarwin) "--ghc-option=-optl=-Wl,-headerpad_max_install_names") - (optionalString enableParallelBuilding "--ghc-option=-j$NIX_BUILD_CORES") + (optionalString enableParallelBuilding "--ghc-options=${parallelBuildingFlags}") (optionalString useCpphs "--with-cpphs=${cpphs}/bin/cpphs --ghc-options=-cpp --ghc-options=-pgmP${cpphs}/bin/cpphs --ghc-options=-optP--cpp") (enableFeature (enableDeadCodeElimination && !stdenv.hostPlatform.isAarch32 && !stdenv.hostPlatform.isAarch64 && (versionAtLeast "8.0.1" ghc.version)) "split-objs") (enableFeature enableLibraryProfiling "library-profiling") @@ -227,9 +225,9 @@ let setupCompileFlags = [ (optionalString (!coreSetup) "-${nativePackageDbFlag}=$setupPackageConfDir") - (optionalString (isGhcjs || isHaLVM || versionOlder "7.8" ghc.version) "-j$NIX_BUILD_CORES") - # https://github.com/haskell/cabal/issues/2398 - (optionalString (versionOlder "7.10" ghc.version && !isHaLVM) "-threaded") + (optionalString enableParallelBuilding (parallelBuildingFlags)) + "-threaded" # https://github.com/haskell/cabal/issues/2398 + "-rtsopts" # allow us to pass RTS flags to the generated Setup executable ]; isHaskellPkg = x: x ? isHaskellLibrary;