aboutsummaryrefslogtreecommitdiff
path: root/pkgs/top-level/release-alternatives.nix
diff options
context:
space:
mode:
authorMatthew Bauer <mjbauer95@gmail.com>2020-03-31 02:39:39 -0400
committerMatthew Bauer <mjbauer95@gmail.com>2020-04-17 16:24:16 -0500
commit7841b4290f72af6041163cc1bdcab6a710b0d4a5 (patch)
tree8a316eae763cd5b05585442a4b6e25124ba78a65 /pkgs/top-level/release-alternatives.nix
parent1c8aba83340be3713f68410d1d273a8b15e7e007 (diff)
pkgs/release-alternatives.nix: create
Add some ability to test the different BLAS/LAPACK implementations together.
Diffstat (limited to 'pkgs/top-level/release-alternatives.nix')
-rw-r--r--pkgs/top-level/release-alternatives.nix91
1 files changed, 91 insertions, 0 deletions
diff --git a/pkgs/top-level/release-alternatives.nix b/pkgs/top-level/release-alternatives.nix
new file mode 100644
index 000000000000..230e20417bcc
--- /dev/null
+++ b/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" "scs" "petsc" "magma" "cholmod-extra"
+ "arpack" "qrupdate" "iml" "globalarrays" "arrayfire"
+ "xfitter" "lammps" "plink-ng" "quantum-espresso"
+ "calculix" "csdp" "getdp" "giac" "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;
+}