about summary refs log tree commit diff
path: root/nixpkgs/pkgs/top-level/release-alternatives.nix
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2020-04-27 21:04:56 +0000
committerAlyssa Ross <hi@alyssa.is>2020-04-27 21:04:56 +0000
commita4e6c7d26af697f4346cacb7ab18dcd7fcfc056e (patch)
tree47950e79183035018882419c4eff5047d1537b99 /nixpkgs/pkgs/top-level/release-alternatives.nix
parent5b00523fb58512232b819a301c4309f579c7f09c (diff)
parent22a3bf9fb9edad917fb6cd1066d58b5e426ee975 (diff)
downloadnixlib-a4e6c7d26af697f4346cacb7ab18dcd7fcfc056e.tar
nixlib-a4e6c7d26af697f4346cacb7ab18dcd7fcfc056e.tar.gz
nixlib-a4e6c7d26af697f4346cacb7ab18dcd7fcfc056e.tar.bz2
nixlib-a4e6c7d26af697f4346cacb7ab18dcd7fcfc056e.tar.lz
nixlib-a4e6c7d26af697f4346cacb7ab18dcd7fcfc056e.tar.xz
nixlib-a4e6c7d26af697f4346cacb7ab18dcd7fcfc056e.tar.zst
nixlib-a4e6c7d26af697f4346cacb7ab18dcd7fcfc056e.zip
Merge commit '22a3bf9fb9edad917fb6cd1066d58b5e426ee975'
Diffstat (limited to 'nixpkgs/pkgs/top-level/release-alternatives.nix')
-rw-r--r--nixpkgs/pkgs/top-level/release-alternatives.nix91
1 files changed, 91 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/top-level/release-alternatives.nix b/nixpkgs/pkgs/top-level/release-alternatives.nix
new file mode 100644
index 000000000000..eef239d4e0a8
--- /dev/null
+++ b/nixpkgs/pkgs/top-level/release-alternatives.nix
@@ -0,0 +1,91 @@
+{ pkgsFun ? import ../..
+, lib ? import ../../lib
+, supportedSystems ? ["x86_64-linux"]
+, allowUnfree ? false }:
+
+let
+
+  # called BLAS here, but also tests LAPACK
+  blasUsers = [
+    # "julia_07" "julia_10" "julia_11" "julia_13" "octave" "octaveFull"
+    "fflas-ffpack" "linbox" "R" "ipopt" "hpl" "rspamd" "octopus"
+    "sundials" "sundials_2" "superlu" "suitesparse_5_3" "suitesparse_4_4"
+    "suitesparse_4_2" "scs" "scalapack" "petsc" "cholmod-extra"
+    "arpack" "qrupdate" "libcint" "iml" "globalarrays" "arrayfire" "armadillo"
+    "xfitter" "lammps" "plink-ng" "quantum-espresso" "siesta"
+    "siesta-mpi" "shogun" "calculix" "csdp" "getdp" "giac" "gmsh" "jags"
+    "lammps" "lammps-mpi"
+
+    # requires openblas
+    # "caffe" "mxnet" "flint" "sage" "sageWithDoc"
+
+    # broken
+    # "gnss-sdr" "octave-jit" "openmodelica" "torch"
+
+    # subpackages
+    ["pythonPackages" "numpy"] ["pythonPackages" "prox-tv"] ["pythonPackages" "scs"]
+    ["pythonPackages" "pysparse"] ["pythonPackages" "cvxopt"]
+    # ["pythonPackages" "fenics"]
+    ["rPackages" "slfm"] ["rPackages" "SamplerCompare"]
+    # ["rPackages" "EMCluster"]
+    # ["ocamlPackages" "lacaml"]
+    # ["ocamlPackages" "owl"]
+    ["haskellPackages" "bindings-levmar"]
+  ] ++ lib.optionals allowUnfree [ "magma" ];
+  blas64Users = [
+    "rspamd" "suitesparse_5_3" "suitesparse_4_4"
+    "suitesparse_4_2" "petsc" "cholmod-extra"
+    "arpack" "qrupdate" "iml" "globalarrays" "arrayfire"
+    "xfitter" "lammps" "plink-ng" "quantum-espresso"
+    "calculix" "csdp" "getdp" "jags"
+    "lammps" "lammps-mpi"
+    # ["ocamlPackages" "lacaml"]
+    ["haskellPackages" "bindings-levmar"]
+  ] ++ lib.optionals allowUnfree [ "magma" ];
+  blasProviders = system: [ "openblasCompat" "lapack-reference" "openblas" ]
+    ++ lib.optionals (allowUnfree && system.isx86) ["mkl" "mkl64"];
+
+  blas64Providers = [ "mkl64" "openblas"];
+
+  mapListToAttrs = xs: f: builtins.listToAttrs (map (name: {
+    name = if builtins.isList name
+           then builtins.elemAt name (builtins.length name - 1)
+           else name;
+    value = f name;
+  }) xs);
+
+in
+
+{
+  blas = mapListToAttrs supportedSystems (system': let system = lib.systems.elaborate { system = system'; };
+    in mapListToAttrs (blasProviders system) (provider: let
+      is64bit = builtins.elem provider (["mkl64"] ++ lib.optional system.is64bit "openblas");
+      pkgs = pkgsFun {
+        config = { inherit allowUnfree; };
+        system = system';
+        overlays = [(self: super: {
+          lapack = super.lapack.override {
+            lapackProvider = if provider == "mkl64"
+                             then super.mkl
+                             else builtins.getAttr provider super;
+            inherit is64bit;
+          };
+          blas = super.blas.override {
+            blasProvider = if provider == "mkl64"
+                           then super.mkl
+                           else builtins.getAttr provider super;
+            inherit is64bit;
+          };
+        })];
+      };
+    in mapListToAttrs (if builtins.elem provider blas64Providers
+                       then blas64Users else blasUsers)
+                      (attr: if builtins.isList attr
+                             then lib.getAttrFromPath attr pkgs
+                             else builtins.getAttr attr pkgs)
+
+        // { recurseForDerivations = true; })
+      // { recurseForDerivations = true; })
+    // { recurseForDerivations = true; };
+  recurseForDerivations = true;
+}