depot/third_party/nixpkgs/pkgs/top-level/release-alternatives.nix

195 lines
3.8 KiB
Nix

{
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"
"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"
"sundials"
"suitesparse_5_3"
"suitesparse_4_4"
"suitesparse_4_2"
"petsc"
"cholmod-extra"
"arpack"
"qrupdate"
"iml"
"globalarrays"
"arrayfire"
"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
isILP64 = 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 isILP64;
};
blas = super.blas.override {
blasProvider = if provider == "mkl64" then super.mkl else builtins.getAttr provider super;
inherit isILP64;
};
})
];
};
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;
}