-
-
Notifications
You must be signed in to change notification settings - Fork 17.6k
Description
I keep stumbling on packages that use sequential build for seemingly no reason:
- coreutils: coreutils: enable parallel builds and tests #142026
- rtorrent: rtorrent: enable paralell building #142318
- gawk
On big parallel machines you can interactively notice which ones do not enable parallel builds and take more than a few seconds to build (especially during bootstrap).
Let's enable parallel builds by default and disable parallelism of select packages that break.
Many build systems already enable parallel builds. To name a few:
- dotent
- ocaml
- go
- haskell
About 1300 packages set enableParallelBuilding = true;.
PoC implementation for stdenv + make packages:
--- a/pkgs/stdenv/generic/make-derivation.nix
+++ b/pkgs/stdenv/generic/make-derivation.nix
@@ -60,6 +60,8 @@ in
(stdenv.hostPlatform != stdenv.buildPlatform)
[ "build" "host" ]
+, enableParallelBuilding ? true
+
# TODO(@Ericson2314): Make unconditional / resolve #33599
# Check phase
, doCheck ? config.doCheckByDefault or false
@@ -310,7 +312,8 @@ else let
llvm-config = 'llvm-config-native'
'';
in [ "--cross-file=${crossFile}" ] ++ mesonFlags;
- } // lib.optionalAttrs (attrs.enableParallelBuilding or false) {
+ } // lib.optionalAttrs enableParallelBuilding {
+ inherit enableParallelBuilding;
enableParallelChecking = attrs.enableParallelChecking or true;
} // lib.optionalAttrs (hardeningDisable != [] || hardeningEnable != [] || stdenv.hostPlatform.isMusl) {
NIX_HARDENING_ENABLE = enabledHardeningOptions;
Example run of this PoC on set of packages from my NixOS desktop reveals at least ~20 failures (of 2100 packages), ~1% of failures. For all of nixpkgs if we extrapolate to 40000 packages that should be about 400 failures (very rough estimate). Does not sound too bad, but needs a hydra run to get most of them before the default flip.
Some examples (to be fixed / worked around).
- cramfsswap: cramfsswap: fix parallel build failure #142478
- discount: discount: enable parallel builds #142491
- cdparanoiaIII: cdparanoiaIII: disable parallel building #142554
- libomxil-bellagio: libomxil-bellagio: explicitly disable parallel building #142386
- adns: adns: explicitly disable parallel building #142549
- portaudio: portaudio: explicitly disable parallel building #142385
- vde2: vde2: explicitly disable parallel building #142384
- ocaml: ocaml: enable parallel building #142723
- gnome2.ORBit2: gnome2.ORBit2: explicitly disable build parallelism due to missing depends #142605
- perlPackages.X11XCB: perlPackages.X11XCB: pull upstream fix for parallel build #142642
- dmraid: dmraid: explicitly disable parallel building #142381
- directfb: directfb: explicitly disable parallel building #142646
- pth: pth: disable parallel building #142558
- openjdk: openjdk: expliictly mark as 'enableParallelBuilding = false;' #142745
- libb64: libb64: enable parallel builds #142770
- m17n_lib: m17n_lib: explicitly disable parallel building #142777
- xalanc: xalanc: explicitly disable parallel building #142780
- ion3: ion3: explicitly disable parallel builds #142834
- espeak-ng: espeak-ng: explicitly disable parallel building #142900
- dhcp: dhcp: enable parallel building #143225
- judy: judy: disable parallel build #143233
- clisp: clisp: explicitly disable build parallelism due to missing depends #144980
- cloog: cloog: enable parallel building, explicitly disable parallel testing #144989
xfce.garcon:fails occasionally regardless of build parallelism: autoconf: pull upstream fix for autoreconf race #144998- jade: jade: explicitly disable parallel builds #151927
- gengetopt: gengetopt: disable parallelism #146596
- most: most: enable parallel building #144382
- dev86: dev86: explicitly disable build parallelism due to missing depends #145797
- afterstep: afterstep: explicitly disable parallel builds #148748
- gsl_1: gsl_1: enable parallel building #147591
- screen: screen: disable parallel build #147990
- re2: re2: enable parallel builds #147991
- dozenal: dozenal: disable parallel build #148110
- cdk: cdk: enable and fix parallel build #150227
- tomboy: tomboy: remove #156979
- muparser: muparser: 2.2.3 -> 2.3.2 #150912
- alliance: various packages: disable broken parallel builds #157264
- ats2: various packages: disable broken parallel builds #157264
- cdesktopenv: various packages: disable broken parallel builds #157264
- deadpixi-sam: various packages: disable broken parallel builds #157264
- gnat6:
- heimdal:
- hylafaxplus: various packages: disable broken parallel builds #157264
- ipvsadm: various packages: disable broken parallel builds #157264
- ocamlPackages.camlidl: various packages: disable broken parallel builds #157264
- lazarus-qt: various packages: disable broken parallel builds #157264
- libappindicator-gtk3:
- libappindicator-gtk2:
- libf2c: libf2c: explicitly disable parallel builds #157279
- mlkit:
- mlton20130715: various packages: disable broken parallel builds #157264
- mltonHEAD: various packages: disable broken parallel builds #157264
- munin: various packages: disable broken parallel builds #157264
- netboot: various packages: disable broken parallel builds #157264
- ocamlPackages.camlidl: various packages: disable broken parallel builds #157264
- ocamlPackages_4_03.camlp4: various packages: disable broken parallel builds #157264
- ocaml-ng.ocamlPackages_4_12.stdcompat: various packages: disable broken parallel builds #157264
- perlPackages.CacheMemcachedFast:
- perlPackages.Razor2ClientAgent:
- patchutils: various packages: disable broken parallel builds #157264
- procdump: procdump: enable parallel building #157816
- reaverwps: reaverwps: enable parallel build #156976
- uae: