From 90326ba624ddfbd3b7f9eb3995994644cee804fb Mon Sep 17 00:00:00 2001 From: Matthew Bauer Date: Thu, 26 Mar 2020 20:03:02 -0400 Subject: [PATCH 1/8] lapack: enable shared libraries, cblas, and tests --- .../libraries/science/math/liblapack/default.nix | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/pkgs/development/libraries/science/math/liblapack/default.nix b/pkgs/development/libraries/science/math/liblapack/default.nix index 53389935dda..d26bfbb3e6e 100644 --- a/pkgs/development/libraries/science/math/liblapack/default.nix +++ b/pkgs/development/libraries/science/math/liblapack/default.nix @@ -4,7 +4,7 @@ gfortran, cmake, python2, - shared ? false + shared ? true }: let inherit (stdenv.lib) optional; @@ -22,16 +22,16 @@ stdenv.mkDerivation { sha256 = "0sxnc97z67i7phdmcnq8f8lmxgw10wdwvr8ami0w3pb179cgrbpb"; }; - buildInputs = [ gfortran ]; - nativeBuildInputs = [ python2 cmake ]; + nativeBuildInputs = [ gfortran python2 cmake ]; cmakeFlags = [ "-DCMAKE_Fortran_FLAGS=-fPIC" "-DLAPACKE=ON" + "-DCBLAS=ON" ] - ++ (optional shared "-DBUILD_SHARED_LIBS=ON"); + ++ optional shared "-DBUILD_SHARED_LIBS=ON"; - doCheck = ! shared; + doCheck = true; enableParallelBuilding = true; @@ -42,4 +42,7 @@ stdenv.mkDerivation { license = licenses.bsd3; platforms = platforms.all; }; + + passthru.libblasName = "libblas"; + passthru.libcblasName = "libcblas"; } From 43873351ffed36b52170571839e26b57c9f15920 Mon Sep 17 00:00:00 2001 From: Matthew Bauer Date: Fri, 27 Mar 2020 14:50:45 -0400 Subject: [PATCH 2/8] =?UTF-8?q?blas/lapack:=20add=20wrapper=20for=20?= =?UTF-8?q?=E2=80=9Calternative=E2=80=9Ds=20of=20BLAS/LAPACK=20provider?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is based on previous work for switching between BLAS and LAPACK implementation in Debian[1] and Gentoo[2]. The goal is to have one way to depend on the BLAS/LAPACK libraries that all packages must use. The attrs “blas” and “lapack” are used to represent a wrapped BLAS/LAPACK provider. Derivations that don’t care how BLAS and LAPACK are implemented can just use blas and lapack directly. If you do care what you get (perhaps for some CPP), you should verify that blas and lapack match what you expect with an assertion. The “blas” package collides with the old “blas” reference implementation. This has been renamed to “blas-reference”. In addition, “lapack-reference” is also included, corresponding to “liblapack” from Netlib.org. Currently, there are 3 providers of the BLAS and LAPACK interfaces: - lapack-reference: the BLAS/LAPACK implementation maintained by netlib.org - OpenBLAS: an optimized version of BLAS and LAPACK - MKL: Intel’s unfree but highly optimized BLAS/LAPACK implementation By default, the above implementations all use the “LP64” BLAS and LAPACK ABI. This corresponds to “openblasCompat” and is the safest way to use BLAS/LAPACK. You may received some benefits from “ILP64” or 8-byte integer BLAS at the expense of breaking compatibility with some packages. This can be switched at build time with an override like: import { config.allowUnfree = true; overlays = [(self: super: { lapack = super.lapack.override { lapackProvider = super.lapack-reference; }; blas = super.blas.override { blasProvider = super.lapack-reference; }; })]; } or, switched at runtime via LD_LIBRARY_PATH like: $ LD_LIBRARY_PATH=$(nix-build -E '(with import {}).lapack.override { lapackProvider = pkgs.mkl; is64bit = true; })')/lib:$(nix-build -E '(with import {}).blas.override { blasProvider = pkgs.mkl; is64bit = true; })')/lib ./your-blas-linked-binary By default, we use OpenBLAS LP64 also known in Nixpkgs as openblasCompat. [1]: https://wiki.debian.org/DebianScience/LinearAlgebraLibraries [2]: https://wiki.gentoo.org/wiki/Blas-lapack-switch --- .../alternatives/blas/default.nix | 137 ++++++++++++++++++ .../alternatives/lapack/default.nix | 111 ++++++++++++++ .../libraries/fflas-ffpack/default.nix | 11 +- pkgs/development/libraries/linbox/default.nix | 6 +- .../libraries/science/math/blas/default.nix | 6 - .../science/math/liblapack/default.nix | 3 - .../libraries/science/math/mkl/default.nix | 9 +- .../science/math/openblas/default.nix | 12 +- pkgs/top-level/aliases.nix | 2 +- pkgs/top-level/all-packages.nix | 24 ++- pkgs/top-level/release-small.nix | 2 +- 11 files changed, 286 insertions(+), 37 deletions(-) create mode 100644 pkgs/build-support/alternatives/blas/default.nix create mode 100644 pkgs/build-support/alternatives/lapack/default.nix diff --git a/pkgs/build-support/alternatives/blas/default.nix b/pkgs/build-support/alternatives/blas/default.nix new file mode 100644 index 00000000000..1b878343866 --- /dev/null +++ b/pkgs/build-support/alternatives/blas/default.nix @@ -0,0 +1,137 @@ +{ lib, stdenv +, lapack-reference, openblasCompat, openblas +, is64bit ? false +, blasProvider ? if is64bit then openblas else openblasCompat }: + +let + blasFortranSymbols = [ + "caxpy" "ccopy" "cdotc" "cdotu" "cgbmv" "cgemm" "cgemv" "cgerc" "cgeru" + "chbmv" "chemm" "chemv" "cher" "cher2" "cher2k" "cherk" "chpmv" "chpr" + "chpr2" "crotg" "cscal" "csrot" "csscal" "cswap" "csymm" "csyr2k" "csyrk" + "ctbmv" "ctbsv" "ctpmv" "ctpsv" "ctrmm" "ctrmv" "ctrsm" "ctrsv" "dasum" + "daxpy" "dcabs1" "dcopy" "ddot" "dgbmv" "dgemm" "dgemv" "dger" "dnrm2" + "drot" "drotg" "drotm" "drotmg" "dsbmv" "dscal" "dsdot" "dspmv" "dspr" + "dspr2" "dswap" "dsymm" "dsymv" "dsyr" "dsyr2" "dsyr2k" "dsyrk" "dtbmv" + "dtbsv" "dtpmv" "dtpsv" "dtrmm" "dtrmv" "dtrsm" "dtrsv" "dzasum" "dznrm2" + "icamax" "idamax" "isamax" "izamax" "lsame" "sasum" "saxpy" "scabs1" + "scasum" "scnrm2" "scopy" "sdot" "sdsdot" "sgbmv" "sgemm" "sgemv" + "sger" "snrm2" "srot" "srotg" "srotm" "srotmg" "ssbmv" "sscal" "sspmv" + "sspr" "sspr2" "sswap" "ssymm" "ssymv" "ssyr" "ssyr2" "ssyr2k" "ssyrk" + "stbmv" "stbsv" "stpmv" "stpsv" "strmm" "strmv" "strsm" "strsv" "xerbla" + "xerbla_array" "zaxpy" "zcopy" "zdotc" "zdotu" "zdrot" "zdscal" "zgbmv" + "zgemm" "zgemv" "zgerc" "zgeru" "zhbmv" "zhemm" "zhemv" "zher" "zher2" + "zher2k" "zherk" "zhpmv" "zhpr" "zhpr2" "zrotg" "zscal" "zswap" "zsymm" + "zsyr2k" "zsyrk" "ztbmv" "ztbsv" "ztpmv" "ztpsv" "ztrmm" "ztrmv" "ztrsm" + "ztrsv" + ]; + + version = "3"; + canonicalExtension = if stdenv.hostPlatform.isLinux + then "${stdenv.hostPlatform.extensions.sharedLibrary}.${version}" + else stdenv.hostPlatform.extensions.sharedLibrary; + + + is64bit = blasProvider.blas64 or false; + blasImplementation = lib.getName blasProvider; + +in + +assert is64bit -> (blasImplementation == "openblas" && blasProvider.blas64) || blasImplementation == "mkl"; + +stdenv.mkDerivation { + pname = "blas"; + inherit version; + + outputs = [ "out" "dev" ]; + + meta = (blasProvider.meta or {}) // { + description = "${lib.getName blasProvider} with just the BLAS C and FORTRAN ABI"; + }; + + passthru = { + inherit is64bit; + provider = blasProvider; + implementation = blasImplementation; + }; + + dontBuild = true; + dontConfigure = true; + unpackPhase = "src=$PWD"; + + installPhase = ('' + mkdir -p $out/lib $dev/include $dev/include/pkgconfig + + libblas="${lib.getLib blasProvider}/lib/libblas${stdenv.hostPlatform.extensions.sharedLibrary}" + + if ! [ -e "$libblas" ]; then + echo "$libblas does not exist, ${blasProvider.name} does not provide libblas." + exit 1 + fi + + nm -an "$libblas" | cut -f3 -d' ' > symbols + for symbol in ${toString blasFortranSymbols}; do + grep "^$symbol_$" symbols || { echo "$symbol" was not found in "$libblas"; exit 1; } + done + + cp -L "$libblas" $out/lib/libblas${canonicalExtension} + chmod +w $out/lib/libblas${canonicalExtension} + +'' + (if stdenv.hostPlatform.parsed.kernel.execFormat.name == "elf" then '' + patchelf --set-soname libblas${canonicalExtension} $out/lib/libblas${canonicalExtension} + patchelf --set-rpath "$(patchelf --print-rpath $out/lib/libblas${canonicalExtension}):${lib.getLib blasProvider}/lib" $out/lib/libblas${canonicalExtension} +'' else if stdenv.hostPlatform.isDarwin then '' + install_name_tool \ + -id libblas${canonicalExtension} + -add_rpath ${lib.getLib blasProvider}/lib \ + $out/lib/libblas${canonicalExtension} +'' else "") + '' + + if [ "$out/lib/libblas${canonicalExtension}" != "$out/lib/libblas${stdenv.hostPlatform.extensions.sharedLibrary}" ]; then + ln -s $out/lib/libblas${canonicalExtension} "$out/lib/libblas${stdenv.hostPlatform.extensions.sharedLibrary}" + fi + + cat < $dev/lib/pkgconfig/blas.pc +Name: blas +Version: ${version} +Description: BLAS FORTRAN implementation +Libs: -L$out/lib -lblas +Cflags: -I$dev/include +EOF + + libcblas="${lib.getLib blasProvider}/lib/libcblas${stdenv.hostPlatform.extensions.sharedLibrary}" + + if ! [ -e "$libcblas" ]; then + echo "$libcblas does not exist, ${blasProvider.name} does not provide libcblas." + exit 1 + fi + + cp -L "$libcblas" $out/lib/libcblas${canonicalExtension} + chmod +w $out/lib/libcblas${canonicalExtension} + +'' + (if stdenv.hostPlatform.parsed.kernel.execFormat.name == "elf" then '' + patchelf --set-soname libcblas${canonicalExtension} $out/lib/libcblas${canonicalExtension} + patchelf --set-rpath "$(patchelf --print-rpath $out/lib/libcblas${canonicalExtension}):${lib.getLib blasProvider}/lib" $out/lib/libcblas${canonicalExtension} +'' else if stdenv.hostPlatform.isDarwin then '' + install_name_tool \ + -id libcblas${canonicalExtension} \ + -add_rpath ${lib.getLib blasProvider}/lib \ + $out/lib/libcblas${canonicalExtension} +'' else "") + '' + if [ "$out/lib/libcblas${canonicalExtension}" != "$out/lib/libcblas${stdenv.hostPlatform.extensions.sharedLibrary}" ]; then + ln -s $out/lib/libcblas${canonicalExtension} "$out/lib/libcblas${stdenv.hostPlatform.extensions.sharedLibrary}" + fi + + cp ${lib.getDev lapack-reference}/include/cblas{,_mangling}.h $dev/include + + cat < $dev/lib/pkgconfig/cblas.pc +Name: cblas +Version: ${version} +Description: BLAS C implementation +Cflags: -I$dev/include +Libs: -L$out/lib -lcblas +EOF +'' + stdenv.lib.optionalString (blasImplementation == "mkl") '' + mkdir -p $out/nix-support + echo 'export MKL_INTERFACE_LAYER=${lib.optionalString is64bit "I"}LP64,GNU' > $out/nix-support/setup-hook +''); +} diff --git a/pkgs/build-support/alternatives/lapack/default.nix b/pkgs/build-support/alternatives/lapack/default.nix new file mode 100644 index 00000000000..24c339042a2 --- /dev/null +++ b/pkgs/build-support/alternatives/lapack/default.nix @@ -0,0 +1,111 @@ +{ lib, stdenv +, lapack-reference, openblasCompat, openblas +, is64bit ? false +, lapackProvider ? if is64bit then openblas else openblasCompat }: + +let + + version = "3"; + canonicalExtension = if stdenv.hostPlatform.isLinux + then "${stdenv.hostPlatform.extensions.sharedLibrary}.${version}" + else stdenv.hostPlatform.extensions.sharedLibrary; + + lapackImplementation = lib.getName lapackProvider; + +in + +assert is64bit -> (lapackImplementation == "openblas" && lapackProvider.blas64) || lapackImplementation == "mkl"; + +stdenv.mkDerivation { + pname = "lapack"; + inherit version; + + outputs = [ "out" "dev" ]; + + meta = (lapackProvider.meta or {}) // { + description = "${lib.getName lapackProvider} with just the LAPACK C and FORTRAN ABI"; + }; + + passthru = { + inherit is64bit; + provider = lapackProvider; + implementation = lapackImplementation; + }; + + dontBuild = true; + dontConfigure = true; + unpackPhase = "src=$PWD"; + + installPhase = ('' + mkdir -p $out/lib $dev/include $dev/lib/pkgconfig + + liblapack="${lib.getLib lapackProvider}/lib/liblapack${stdenv.hostPlatform.extensions.sharedLibrary}" + + if ! [ -e "$liblapack" ]; then + echo "$liblapack does not exist, ${lapackProvider.name} does not provide liblapack." + exit 1 + fi + + cp -L "$liblapack" $out/lib/liblapack${canonicalExtension} + chmod +w $out/lib/liblapack${canonicalExtension} + +'' + (if stdenv.hostPlatform.parsed.kernel.execFormat.name == "elf" then '' + patchelf --set-soname liblapack${canonicalExtension} $out/lib/liblapack${canonicalExtension} + patchelf --set-rpath "$(patchelf --print-rpath $out/lib/liblapack${canonicalExtension}):${lapackProvider}/lib" $out/lib/liblapack${canonicalExtension} +'' else if stdenv.hostPlatform.isDarwin then '' + install_name_tool -id liblapack${canonicalExtension} \ + -add_rpath ${lib.getLib lapackProvider}/lib \ + $out/lib/liblapack${canonicalExtension} +'' else "") + '' + + if [ "$out/lib/liblapack${canonicalExtension}" != "$out/lib/liblapack${stdenv.hostPlatform.extensions.sharedLibrary}" ]; then + ln -s $out/lib/liblapack${canonicalExtension} "$out/lib/liblapack${stdenv.hostPlatform.extensions.sharedLibrary}" + fi + + install -D ${lib.getDev lapack-reference}/include/lapack.h $dev/include/lapack.h + + cat < $dev/lib/pkgconfig/lapack.pc +Name: lapack +Version: ${version} +Description: LAPACK FORTRAN implementation +Cflags: -I$dev/include +Libs: -L$out/lib -llapack +EOF + + liblapacke="${lib.getLib lapackProvider}/lib/liblapacke${stdenv.hostPlatform.extensions.sharedLibrary}" + + if ! [ -e "$liblapacke" ]; then + echo "$liblapacke does not exist, ${lapackProvider.name} does not provide liblapacke." + exit 1 + fi + + cp -L "$liblapacke" $out/lib/liblapacke${canonicalExtension} + chmod +w $out/lib/liblapacke${canonicalExtension} + +'' + (if stdenv.hostPlatform.parsed.kernel.execFormat.name == "elf" then '' + patchelf --set-soname liblapacke${canonicalExtension} $out/lib/liblapacke${canonicalExtension} + patchelf --set-rpath "$(patchelf --print-rpath $out/lib/liblapacke${canonicalExtension}):${lib.getLib lapackProvider}/lib" $out/lib/liblapacke${canonicalExtension} +'' else if stdenv.hostPlatform.isDarwin then '' + install_name_tool -id liblapacke${canonicalExtension} \ + -add_rpath ${lib.getLib lapackProvider}/lib \ + $out/lib/liblapacke${canonicalExtension} +'' else "") + '' + + if [ -f "$out/lib/liblapacke.so.3" ]; then + ln -s $out/lib/liblapacke.so.3 $out/lib/liblapacke.so + fi + + cp ${lib.getDev lapack-reference}/include/lapacke{,_mangling,_config}.h $dev/include + + cat < $dev/lib/pkgconfig/lapacke.pc +Name: lapacke +Version: ${version} +Description: LAPACK C implementation +Cflags: -I$dev/include +Libs: -L$out/lib -llapacke +EOF +'' + stdenv.lib.optionalString (lapackImplementation == "mkl") '' + mkdir -p $out/nix-support + echo 'export MKL_INTERFACE_LAYER=${lib.optionalString is64bit "I"}LP64,GNU' > $out/nix-support/setup-hook +''); +} diff --git a/pkgs/development/libraries/fflas-ffpack/default.nix b/pkgs/development/libraries/fflas-ffpack/default.nix index 44267dfeceb..16a9e3e79d4 100644 --- a/pkgs/development/libraries/fflas-ffpack/default.nix +++ b/pkgs/development/libraries/fflas-ffpack/default.nix @@ -1,6 +1,9 @@ -{ stdenv, fetchFromGitHub, autoreconfHook, givaro, pkgconfig, blas +{ stdenv, fetchFromGitHub, autoreconfHook, givaro, pkgconfig, blas, lapack , gmpxx }: + +assert (!blas.is64bit) && (!lapack.is64bit); + stdenv.mkDerivation rec { pname = "fflas-ffpack"; version = "2.4.3"; @@ -23,11 +26,11 @@ stdenv.mkDerivation rec { pkgconfig ] ++ stdenv.lib.optionals doCheck checkInputs; - buildInputs = [ givaro blas ]; + buildInputs = [ givaro blas lapack ]; configureFlags = [ - "--with-blas-libs=-l${blas.linkName}" - "--with-lapack-libs=-l${blas.linkName}" + "--with-blas-libs=-lcblas" + "--with-lapack-libs=-llapacke" ] ++ stdenv.lib.optionals stdenv.isx86_64 { # disable SIMD instructions (which are enabled *when available* by default) # for now we need to be careful to disable *all* relevant versions of an instruction set explicitly (https://github.com/linbox-team/fflas-ffpack/issues/284) diff --git a/pkgs/development/libraries/linbox/default.nix b/pkgs/development/libraries/linbox/default.nix index 006c774e9a1..6d25cb45987 100644 --- a/pkgs/development/libraries/linbox/default.nix +++ b/pkgs/development/libraries/linbox/default.nix @@ -4,10 +4,14 @@ , givaro , pkgconfig , blas +, lapack , fflas-ffpack , gmpxx , withSage ? false # sage support }: + +assert (!blas.is64bit) && (!lapack.is64bit); + stdenv.mkDerivation rec { pname = "linbox"; version = "1.6.3"; @@ -33,7 +37,7 @@ stdenv.mkDerivation rec { ]; configureFlags = [ - "--with-blas-libs=-l${blas.linkName}" + "--with-blas-libs=-lblas" "--disable-optimization" ] ++ stdenv.lib.optionals stdenv.isx86_64 { # disable SIMD instructions (which are enabled *when available* by default) diff --git a/pkgs/development/libraries/science/math/blas/default.nix b/pkgs/development/libraries/science/math/blas/default.nix index c58ac6be23d..c240a19cca6 100644 --- a/pkgs/development/libraries/science/math/blas/default.nix +++ b/pkgs/development/libraries/science/math/blas/default.nix @@ -68,10 +68,4 @@ EOF homepage = "http://www.netlib.org/blas/"; platforms = stdenv.lib.platforms.unix; }; - - # We use linkName to pass a different name to --with-blas-libs for - # fflas-ffpack and linbox, because we use blas on darwin but openblas - # elsewhere. - # See see https://github.com/NixOS/nixpkgs/pull/45013. - passthru.linkName = "blas"; } diff --git a/pkgs/development/libraries/science/math/liblapack/default.nix b/pkgs/development/libraries/science/math/liblapack/default.nix index d26bfbb3e6e..045cccbd2eb 100644 --- a/pkgs/development/libraries/science/math/liblapack/default.nix +++ b/pkgs/development/libraries/science/math/liblapack/default.nix @@ -42,7 +42,4 @@ stdenv.mkDerivation { license = licenses.bsd3; platforms = platforms.all; }; - - passthru.libblasName = "libblas"; - passthru.libcblasName = "libcblas"; } diff --git a/pkgs/development/libraries/science/math/mkl/default.nix b/pkgs/development/libraries/science/math/mkl/default.nix index 3def5e5b403..f9026ec7b99 100644 --- a/pkgs/development/libraries/science/math/mkl/default.nix +++ b/pkgs/development/libraries/science/math/mkl/default.nix @@ -111,7 +111,14 @@ in stdenvNoCC.mkDerivation { cp -r opt/intel/compilers_and_libraries_${version}/linux/compiler/lib/intel64_lin/*.so* $out/lib/ cp -r opt/intel/compilers_and_libraries_${version}/linux/mkl/lib/intel64_lin/*.so* $out/lib/ cp -r opt/intel/compilers_and_libraries_${version}/linux/mkl/bin/pkgconfig/*dynamic*.pc $out/lib/pkgconfig - ''); + '') + '' + + # Setup symlinks for blas / lapack + ln -s $out/lib/libmkl_rt${stdenvNoCC.hostPlatform.extensions.sharedLibrary} $out/lib/libblas${stdenvNoCC.hostPlatform.extensions.sharedLibrary} + ln -s $out/lib/libmkl_rt${stdenvNoCC.hostPlatform.extensions.sharedLibrary} $out/lib/libcblas${stdenvNoCC.hostPlatform.extensions.sharedLibrary} + ln -s $out/lib/libmkl_rt${stdenvNoCC.hostPlatform.extensions.sharedLibrary} $out/lib/liblapack${stdenvNoCC.hostPlatform.extensions.sharedLibrary} + ln -s $out/lib/libmkl_rt${stdenvNoCC.hostPlatform.extensions.sharedLibrary} $out/lib/liblapacke${stdenvNoCC.hostPlatform.extensions.sharedLibrary} + ''; # fixDarwinDylibName fails for libmkl_cdft_core.dylib because the # larger updated load commands do not fit. Use install_name_tool diff --git a/pkgs/development/libraries/science/math/openblas/default.nix b/pkgs/development/libraries/science/math/openblas/default.nix index 23168d741ba..c55a5cb7878 100644 --- a/pkgs/development/libraries/science/math/openblas/default.nix +++ b/pkgs/development/libraries/science/math/openblas/default.nix @@ -176,6 +176,12 @@ Cflags: -I$out/include Libs: -L$out/lib -lopenblas EOF done + + # Setup symlinks for blas / lapack + ln -s $out/lib/libopenblas${stdenv.hostPlatform.extensions.sharedLibrary} $out/lib/libblas${stdenv.hostPlatform.extensions.sharedLibrary} + ln -s $out/lib/libopenblas${stdenv.hostPlatform.extensions.sharedLibrary} $out/lib/libcblas${stdenv.hostPlatform.extensions.sharedLibrary} + ln -s $out/lib/libopenblas${stdenv.hostPlatform.extensions.sharedLibrary} $out/lib/liblapack${stdenv.hostPlatform.extensions.sharedLibrary} + ln -s $out/lib/libopenblas${stdenv.hostPlatform.extensions.sharedLibrary} $out/lib/liblapacke${stdenv.hostPlatform.extensions.sharedLibrary} ''; meta = with stdenv.lib; { @@ -185,10 +191,4 @@ EOF platforms = platforms.unix; maintainers = with maintainers; [ ttuegel ]; }; - - # We use linkName to pass a different name to --with-blas-libs for - # fflas-ffpack and linbox, because we use blas on darwin but openblas - # elsewhere. - # See see https://github.com/NixOS/nixpkgs/pull/45013. - passthru.linkName = "openblas"; } diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix index 5ba9b723edd..6ebf2bcf8df 100644 --- a/pkgs/top-level/aliases.nix +++ b/pkgs/top-level/aliases.nix @@ -237,7 +237,7 @@ mapAliases ({ libGL_driver = mesa.drivers; libintlOrEmpty = stdenv.lib.optional (!stdenv.isLinux || stdenv.hostPlatform.libc != "glibc") gettext; # added 2018-03-14 libjson_rpc_cpp = libjson-rpc-cpp; # added 2017-02-28 - liblapackWithoutAtlas = liblapack; # added 2018-11-05 + liblapackWithoutAtlas = lapack-reference; # added 2018-11-05 liblrdf = lrdf; # added 2018-04-25 libqrencode = qrencode; # added 2019-01-01 librdf = lrdf; # added 2020-03-22 diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index a7b711d5277..1f11beb8ee3 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -11479,20 +11479,11 @@ in ffcast = callPackage ../tools/X11/ffcast { }; - fflas-ffpack = callPackage ../development/libraries/fflas-ffpack { - # We need to use blas instead of openblas on darwin, - # see https://github.com/NixOS/nixpkgs/pull/45013. - blas = if stdenv.isDarwin then blas else openblas; - }; + fflas-ffpack = callPackage ../development/libraries/fflas-ffpack { }; forge = callPackage ../development/libraries/forge { }; - linbox = callPackage ../development/libraries/linbox { - # We need to use blas instead of openblas on darwin, see - # https://github.com/NixOS/nixpkgs/pull/45013 and - # https://github.com/NixOS/nixpkgs/pull/45015. - blas = if stdenv.isDarwin then blas else openblas; - }; + linbox = callPackage ../development/libraries/linbox { }; ffmpeg_2_8 = callPackage ../development/libraries/ffmpeg/2.8.nix { inherit (darwin.apple_sdk.frameworks) Cocoa; @@ -24428,7 +24419,9 @@ in arpack = callPackage ../development/libraries/science/math/arpack { }; - blas = callPackage ../development/libraries/science/math/blas { }; + blas = callPackage ../build-support/alternatives/blas { }; + + blas-reference = callPackage ../development/libraries/science/math/blas { }; brial = callPackage ../development/libraries/science/math/brial { }; @@ -24448,12 +24441,15 @@ in jags = callPackage ../applications/science/math/jags { }; + lapack = callPackage ../build-support/alternatives/lapack { }; + + lapack-reference = callPackage ../development/libraries/science/math/liblapack { }; + liblapack = lapack-reference; + libbraiding = callPackage ../development/libraries/science/math/libbraiding { }; libhomfly = callPackage ../development/libraries/science/math/libhomfly { }; - liblapack = callPackage ../development/libraries/science/math/liblapack {}; - liblbfgs = callPackage ../development/libraries/science/math/liblbfgs { }; lrs = callPackage ../development/libraries/science/math/lrs { }; diff --git a/pkgs/top-level/release-small.nix b/pkgs/top-level/release-small.nix index ab7e4ce00d7..1c7f758ccff 100644 --- a/pkgs/top-level/release-small.nix +++ b/pkgs/top-level/release-small.nix @@ -78,9 +78,9 @@ with import ./release-lib.nix { inherit supportedSystems; }; kvm = linux; qemu = linux; qemu_kvm = linux; + lapack-reference = linux; less = all; lftp = all; - liblapack = linux; libtool = all; libtool_2 = all; libxml2 = all; From 1c8aba83340be3713f68410d1d273a8b15e7e007 Mon Sep 17 00:00:00 2001 From: Matthew Bauer Date: Tue, 31 Mar 2020 10:47:18 -0400 Subject: [PATCH 3/8] treewide: use blas and lapack MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This makes packages use lapack and blas, which can wrap different BLAS/LAPACK implementations. treewide: cleanup from blas/lapack changes A few issues in the original treewide: - can’t assume blas64 is a bool - unused commented code --- pkgs/applications/radio/gnss-sdr/default.nix | 8 +++--- .../science/biology/plink-ng/default.nix | 15 +++++++---- .../science/chemistry/octopus/default.nix | 10 +++++--- .../science/chemistry/openmolcas/default.nix | 4 ++- .../chemistry/quantum-espresso/default.nix | 4 +-- .../science/chemistry/siesta/default.nix | 8 +++--- .../machine-learning/shogun/default.nix | 8 +++--- pkgs/applications/science/math/R/default.nix | 10 +++++--- .../science/math/caffe/default.nix | 4 +-- .../science/math/calculix/calculix.patch | 2 +- .../science/math/calculix/default.nix | 4 +-- .../science/math/cntk/default.nix | 3 ++- .../science/math/csdp/default.nix | 4 +-- .../science/math/getdp/default.nix | 4 +-- .../science/math/giac/default.nix | 6 ++--- .../science/math/gmsh/default.nix | 6 +++-- .../science/math/jags/default.nix | 6 ++--- .../science/math/mxnet/default.nix | 6 ++--- .../science/math/sage/sage-env.nix | 7 ++++-- .../science/math/sage/sage-with-env.nix | 8 ++++-- .../science/math/sage/sagelib.nix | 8 ++++-- .../science/misc/openmodelica/default.nix | 8 +++--- .../molecular-dynamics/lammps/default.nix | 4 +-- .../science/physics/xfitter/default.nix | 4 +-- pkgs/development/compilers/halide/default.nix | 5 +++- pkgs/development/compilers/julia/1.3.nix | 24 ++++++------------ pkgs/development/compilers/julia/shared.nix | 20 ++++----------- .../haskell-modules/configuration-common.nix | 7 +----- .../interpreters/octave/default.nix | 25 ++++++------------- .../libraries/armadillo/default.nix | 6 ++--- .../libraries/arrayfire/default.nix | 22 ++++++++-------- pkgs/development/libraries/flint/default.nix | 4 +-- pkgs/development/libraries/givaro/default.nix | 3 ++- .../libraries/globalarrays/default.nix | 8 +++--- pkgs/development/libraries/iml/default.nix | 6 ++--- .../development/libraries/libcint/default.nix | 4 +-- pkgs/development/libraries/opencv/3.x.nix | 4 ++- pkgs/development/libraries/opencv/4.x.nix | 4 ++- .../libraries/qrupdate/default.nix | 11 ++++---- .../libraries/science/math/arpack/default.nix | 9 ++++--- .../science/math/cholmod-extra/default.nix | 15 ++++------- .../libraries/science/math/fenics/default.nix | 7 ++++-- .../libraries/science/math/ipopt/default.nix | 10 +++++--- .../libraries/science/math/magma/default.nix | 4 +-- .../libraries/science/math/petsc/default.nix | 8 +++--- .../science/math/scalapack/default.nix | 9 ++++--- .../libraries/science/math/scs/default.nix | 4 +-- .../science/math/suitesparse/4.2.nix | 10 ++++---- .../science/math/suitesparse/4.4.nix | 14 +++++------ .../science/math/suitesparse/default.nix | 10 ++++---- .../science/math/superlu/default.nix | 7 +++--- .../math/superlu/find-openblas-library.patch | 11 -------- pkgs/development/libraries/sundials/2.x.nix | 10 +++----- .../libraries/sundials/default.nix | 11 ++++---- .../ocaml-modules/lacaml/default.nix | 5 ++-- .../development/ocaml-modules/owl/default.nix | 7 ++++-- .../python-modules/cvxopt/default.nix | 11 +++++--- .../python-modules/numpy/default.nix | 20 +++++++++------ .../python-modules/prox-tv/default.nix | 13 ++-------- .../python-modules/prox-tv/use-openblas.patch | 11 -------- .../python-modules/pysparse/default.nix | 7 +++--- .../python-modules/scs/default.nix | 4 +-- pkgs/development/r-modules/default.nix | 6 ++--- .../tools/poetry2nix/poetry2nix/overrides.nix | 23 +++++++---------- pkgs/servers/mail/rspamd/default.nix | 4 +-- pkgs/tools/misc/hpl/default.nix | 7 +++--- pkgs/top-level/all-packages.nix | 12 ++------- pkgs/top-level/python-packages.nix | 10 ++------ 68 files changed, 272 insertions(+), 311 deletions(-) delete mode 100644 pkgs/development/libraries/science/math/superlu/find-openblas-library.patch delete mode 100644 pkgs/development/python-modules/prox-tv/use-openblas.patch diff --git a/pkgs/applications/radio/gnss-sdr/default.nix b/pkgs/applications/radio/gnss-sdr/default.nix index 005f83e0f54..4e423094e90 100644 --- a/pkgs/applications/radio/gnss-sdr/default.nix +++ b/pkgs/applications/radio/gnss-sdr/default.nix @@ -12,7 +12,7 @@ , pythonPackages , uhd , log4cpp -, openblas +, blas, lapack , matio , pugixml , protobuf @@ -46,7 +46,7 @@ stdenv.mkDerivation rec { # nothing to be gained by leaving it out. uhd log4cpp - openblas + blas lapack matio pugixml protobuf @@ -63,8 +63,8 @@ stdenv.mkDerivation rec { # armadillo is built using both, so skip checking for them. "-DBLAS=YES" "-DLAPACK=YES" - "-DBLAS_LIBRARIES=-lopenblas" - "-DLAPACK_LIBRARIES=-lopenblas" + "-DBLAS_LIBRARIES=-lblas" + "-DLAPACK_LIBRARIES=-llapack" # Similarly, it doesn't actually use gfortran despite checking for # its presence. diff --git a/pkgs/applications/science/biology/plink-ng/default.nix b/pkgs/applications/science/biology/plink-ng/default.nix index 13f00c53fe6..0a31ff6ba4f 100644 --- a/pkgs/applications/science/biology/plink-ng/default.nix +++ b/pkgs/applications/science/biology/plink-ng/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchFromGitHub, zlib, openblas, darwin}: +{ stdenv, fetchFromGitHub, zlib, blas, lapack, darwin}: stdenv.mkDerivation rec { pname = "plink-ng"; @@ -11,14 +11,20 @@ stdenv.mkDerivation rec { sha256 = "1zhffjbwpd50dxywccbnv1rxy9njwz73l4awc5j7i28rgj3davcq"; }; - buildInputs = [ zlib ] ++ (if stdenv.isDarwin then [ darwin.apple_sdk.frameworks.Accelerate ] else [ openblas ]) ; + buildInputs = [ zlib ] ++ (if stdenv.isDarwin then [ darwin.apple_sdk.frameworks.Accelerate ] else [ blas lapack ]) ; - buildPhase = '' + preBuild = '' sed -i 's|zlib-1.2.8/zlib.h|zlib.h|g' *.c *.h ${if stdenv.cc.isClang then "sed -i 's|g++|clang++|g' Makefile.std" else ""} - make ZLIB=-lz ${if stdenv.isDarwin then "" else "BLASFLAGS=-lopenblas"} -f Makefile.std + + makeFlagsArray+=( + ZLIB=-lz + BLASFLAGS="-lblas -lcblas -llapack" + ); ''; + makefile = "Makefile.std"; + installPhase = '' mkdir -p $out/bin cp plink $out/bin @@ -31,4 +37,3 @@ stdenv.mkDerivation rec { platforms = stdenv.lib.platforms.linux; }; } - diff --git a/pkgs/applications/science/chemistry/octopus/default.nix b/pkgs/applications/science/chemistry/octopus/default.nix index f8ce3e925fd..f30954367cf 100644 --- a/pkgs/applications/science/chemistry/octopus/default.nix +++ b/pkgs/applications/science/chemistry/octopus/default.nix @@ -1,7 +1,9 @@ { stdenv, fetchFromGitLab, symlinkJoin, gfortran, perl, procps -, libyaml, libxc, fftw, openblas, gsl, netcdf, arpack, autoreconfHook +, libyaml, libxc, fftw, blas, lapack, gsl, netcdf, arpack, autoreconfHook }: +assert (!blas.is64bit) && (!lapack.is64bit); + stdenv.mkDerivation rec { pname = "octopus"; version = "9.2"; @@ -14,12 +16,12 @@ stdenv.mkDerivation rec { }; nativeBuildInputs = [ perl procps autoreconfHook ]; - buildInputs = [ libyaml gfortran libxc openblas gsl fftw netcdf arpack ]; + buildInputs = [ libyaml gfortran libxc blas lapack gsl fftw netcdf arpack ]; configureFlags = [ "--with-yaml-prefix=${libyaml}" - "--with-blas=-lopenblas" - "--with-lapack=-lopenblas" + "--with-blas=-lblas" + "--with-lapack=-llapack" "--with-fftw-prefix=${fftw.dev}" "--with-gsl-prefix=${gsl}" "--with-libxc-prefix=${libxc}" diff --git a/pkgs/applications/science/chemistry/openmolcas/default.nix b/pkgs/applications/science/chemistry/openmolcas/default.nix index b1720e105fd..0d74e784d77 100644 --- a/pkgs/applications/science/chemistry/openmolcas/default.nix +++ b/pkgs/applications/science/chemistry/openmolcas/default.nix @@ -1,9 +1,11 @@ { stdenv, fetchFromGitLab, cmake, gfortran, perl -, openblas, hdf5-cpp, python3, texlive +, openblas, blas, lapack, hdf5-cpp, python3, texlive , armadillo, openmpi, globalarrays, openssh , makeWrapper, fetchpatch } : +assert blas.implementation == "openblas" && lapack.implementation == "openblas"; + let version = "19.11"; gitLabRev = "v${version}"; diff --git a/pkgs/applications/science/chemistry/quantum-espresso/default.nix b/pkgs/applications/science/chemistry/quantum-espresso/default.nix index bd420519ce0..2443e6b23ab 100644 --- a/pkgs/applications/science/chemistry/quantum-espresso/default.nix +++ b/pkgs/applications/science/chemistry/quantum-espresso/default.nix @@ -1,5 +1,5 @@ { stdenv, fetchurl -, gfortran, fftw, openblas +, gfortran, fftw, blas, lapack , mpi ? null }: @@ -20,7 +20,7 @@ stdenv.mkDerivation rec { patchShebangs configure ''; - buildInputs = [ fftw openblas gfortran ] + buildInputs = [ fftw blas lapack gfortran ] ++ (stdenv.lib.optionals (mpi != null) [ mpi ]); configureFlags = if (mpi != null) then [ "LD=${mpi}/bin/mpif90" ] else [ "LD=${gfortran}/bin/gfortran" ]; diff --git a/pkgs/applications/science/chemistry/siesta/default.nix b/pkgs/applications/science/chemistry/siesta/default.nix index 11f3e551431..c053c0a09cd 100644 --- a/pkgs/applications/science/chemistry/siesta/default.nix +++ b/pkgs/applications/science/chemistry/siesta/default.nix @@ -1,5 +1,5 @@ { stdenv, fetchurl -, gfortran, openblas +, gfortran, blas, lapack , mpi ? null, scalapack }: @@ -16,7 +16,7 @@ stdenv.mkDerivation { inherit mpi; }; - buildInputs = [ openblas gfortran ] + buildInputs = [ blas lapack gfortran ] ++ (stdenv.lib.optionals (mpi != null) [ mpi scalapack ]); enableParallelBuilding = true; @@ -33,11 +33,11 @@ stdenv.mkDerivation { makeFlagsArray=( CC="mpicc" FC="mpifort" FPPFLAGS="-DMPI" MPI_INTERFACE="libmpi_f90.a" MPI_INCLUDE="." - COMP_LIBS="" LIBS="-lopenblas -lscalapack" + COMP_LIBS="" LIBS="-lblas -llapack -lscalapack" ); '' else '' makeFlagsArray=( - COMP_LIBS="" LIBS="-lopenblas" + COMP_LIBS="" LIBS="-lblas -llapack" ); ''; diff --git a/pkgs/applications/science/machine-learning/shogun/default.nix b/pkgs/applications/science/machine-learning/shogun/default.nix index 988ea8c855c..33871df87f3 100644 --- a/pkgs/applications/science/machine-learning/shogun/default.nix +++ b/pkgs/applications/science/machine-learning/shogun/default.nix @@ -2,7 +2,7 @@ # data, compression , bzip2, curl, hdf5, json_c, lzma, lzo, protobuf, snappy # maths -, openblasCompat, eigen, nlopt, lp_solve, colpack, liblapack, glpk +, blas, lapack, eigen, nlopt, lp_solve, colpack, glpk # libraries , libarchive, libxml2 # extra support @@ -13,6 +13,8 @@ assert pythonSupport -> pythonPackages != null; assert opencvSupport -> opencv != null; +assert (!blas.is64bit) && (!lapack.is64bit); + let pname = "shogun"; version = "6.1.4"; @@ -64,8 +66,8 @@ stdenv.mkDerivation rec { CCACHE_DIR=".ccache"; buildInputs = with lib; [ - openblasCompat bzip2 cmake colpack curl ctags eigen hdf5 json_c lp_solve lzma lzo - protobuf nlopt snappy swig (libarchive.dev) libxml2 liblapack glpk + blas lapack bzip2 cmake colpack curl ctags eigen hdf5 json_c lp_solve lzma lzo + protobuf nlopt snappy swig (libarchive.dev) libxml2 lapack glpk ] ++ optionals (pythonSupport) (with pythonPackages; [ python ply numpy ]) ++ optional (opencvSupport) opencv; diff --git a/pkgs/applications/science/math/R/default.nix b/pkgs/applications/science/math/R/default.nix index 3ee62fad44d..836ce004fff 100644 --- a/pkgs/applications/science/math/R/default.nix +++ b/pkgs/applications/science/math/R/default.nix @@ -1,6 +1,6 @@ { stdenv, fetchurl, bzip2, gfortran, libX11, libXmu, libXt, libjpeg, libpng , libtiff, ncurses, pango, pcre, perl, readline, tcl, texLive, tk, xz, zlib -, less, texinfo, graphviz, icu, pkgconfig, bison, imake, which, jdk, openblas +, less, texinfo, graphviz, icu, pkgconfig, bison, imake, which, jdk, blas, lapack , curl, Cocoa, Foundation, libobjc, libcxx, tzdata, fetchpatch , withRecommendedPackages ? true , enableStrictBarrier ? false @@ -9,6 +9,8 @@ , static ? false }: +assert (!blas.is64bit) && (!lapack.is64bit); + stdenv.mkDerivation rec { name = "R-3.6.3"; @@ -22,7 +24,7 @@ stdenv.mkDerivation rec { buildInputs = [ bzip2 gfortran libX11 libXmu libXt libXt libjpeg libpng libtiff ncurses pango pcre perl readline texLive xz zlib less texinfo graphviz icu - pkgconfig bison imake which openblas curl tcl tk jdk + pkgconfig bison imake which blas lapack curl tcl tk jdk ] ++ stdenv.lib.optionals stdenv.isDarwin [ Cocoa Foundation libobjc libcxx ]; patches = [ @@ -43,8 +45,8 @@ stdenv.mkDerivation rec { configureFlagsArray=( --disable-lto --with${stdenv.lib.optionalString (!withRecommendedPackages) "out"}-recommended-packages - --with-blas="-L${openblas}/lib -lopenblas" - --with-lapack="-L${openblas}/lib -lopenblas" + --with-blas="-L${blas}/lib -lblas" + --with-lapack="-L${lapack}/lib -llapack" --with-readline --with-tcltk --with-tcl-config="${tcl}/lib/tclConfig.sh" --with-tk-config="${tk}/lib/tkConfig.sh" --with-cairo diff --git a/pkgs/applications/science/math/caffe/default.nix b/pkgs/applications/science/math/caffe/default.nix index ea87c4953ee..4a6a2dc6c7e 100644 --- a/pkgs/applications/science/math/caffe/default.nix +++ b/pkgs/applications/science/math/caffe/default.nix @@ -9,7 +9,7 @@ , opencv3 , protobuf , doxygen -, openblas +, blas , Accelerate, CoreGraphics, CoreVideo , lmdbSupport ? true, lmdb , leveldbSupport ? true, leveldb, snappy @@ -63,7 +63,7 @@ stdenv.mkDerivation rec { ++ ["-DUSE_LEVELDB=${toggle leveldbSupport}"] ++ ["-DUSE_LMDB=${toggle lmdbSupport}"]; - buildInputs = [ boost gflags glog protobuf hdf5-cpp opencv3 openblas ] + buildInputs = [ boost gflags glog protobuf hdf5-cpp opencv3 blas ] ++ lib.optional cudaSupport cudatoolkit ++ lib.optional cudnnSupport cudnn ++ lib.optional lmdbSupport lmdb diff --git a/pkgs/applications/science/math/calculix/calculix.patch b/pkgs/applications/science/math/calculix/calculix.patch index 311421f2ef5..5b8f492a8e7 100644 --- a/pkgs/applications/science/math/calculix/calculix.patch +++ b/pkgs/applications/science/math/calculix/calculix.patch @@ -15,7 +15,7 @@ index 9cab2fc..6e977b8 100755 OCCXMAIN = $(SCCXMAIN:.c=.o) -DIR=../../../SPOOLES.2.2 -+LIBS = -lpthread -lm -lc -lspooles -larpack -lopenblas ++LIBS = -lpthread -lm -lc -lspooles -larpack -lblas -llapack -LIBS = \ - $(DIR)/spooles.a \ diff --git a/pkgs/applications/science/math/calculix/default.nix b/pkgs/applications/science/math/calculix/default.nix index 6f2d61cd80f..44882594550 100644 --- a/pkgs/applications/science/math/calculix/default.nix +++ b/pkgs/applications/science/math/calculix/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, gfortran, arpack, spooles, openblas }: +{ stdenv, fetchurl, gfortran, arpack, spooles, blas, lapack }: stdenv.mkDerivation rec { pname = "calculix"; @@ -11,7 +11,7 @@ stdenv.mkDerivation rec { nativeBuildInputs = [ gfortran ]; - buildInputs = [ arpack spooles openblas ]; + buildInputs = [ arpack spooles blas lapack ]; NIX_CFLAGS_COMPILE = "-I${spooles}/include/spooles"; diff --git a/pkgs/applications/science/math/cntk/default.nix b/pkgs/applications/science/math/cntk/default.nix index e2db40a402e..401454a6b69 100644 --- a/pkgs/applications/science/math/cntk/default.nix +++ b/pkgs/applications/science/math/cntk/default.nix @@ -1,11 +1,12 @@ { lib, stdenv, fetchgit, fetchFromGitHub, cmake -, openblas, opencv3, libzip, boost, protobuf, openmpi +, openblas, blas, lapack, opencv3, libzip, boost, protobuf, openmpi , onebitSGDSupport ? false , cudaSupport ? false, addOpenGLRunpath, cudatoolkit, nvidia_x11 , cudnnSupport ? cudaSupport, cudnn }: assert cudnnSupport -> cudaSupport; +assert blas.implementation == "openblas" && lapack.implementation == "openblas"; let # Old specific version required for CNTK. diff --git a/pkgs/applications/science/math/csdp/default.nix b/pkgs/applications/science/math/csdp/default.nix index eef60829f8e..ef9d5e733ca 100644 --- a/pkgs/applications/science/math/csdp/default.nix +++ b/pkgs/applications/science/math/csdp/default.nix @@ -1,4 +1,4 @@ -{ lib, stdenv, fetchurl, blas, gfortran, liblapack }: +{ lib, stdenv, fetchurl, blas, gfortran, lapack }: stdenv.mkDerivation { name = "csdp-6.1.1"; @@ -8,7 +8,7 @@ stdenv.mkDerivation { sha256 = "1f9ql6cjy2gwiyc51ylfan24v1ca9sjajxkbhszlds1lqmma8n05"; }; - buildInputs = [ blas gfortran.cc.lib liblapack ]; + buildInputs = [ blas gfortran.cc.lib lapack ]; postPatch = '' substituteInPlace Makefile --replace /usr/local/bin $out/bin diff --git a/pkgs/applications/science/math/getdp/default.nix b/pkgs/applications/science/math/getdp/default.nix index 0ac2ea7d1b3..ae93e89f141 100644 --- a/pkgs/applications/science/math/getdp/default.nix +++ b/pkgs/applications/science/math/getdp/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, cmake, gfortran, openblas, openmpi, petsc, python3 }: +{ stdenv, fetchurl, cmake, gfortran, blas, lapack, openmpi, petsc, python3 }: stdenv.mkDerivation rec { name = "getdp-${version}"; @@ -9,7 +9,7 @@ stdenv.mkDerivation rec { }; nativeBuildInputs = [ cmake gfortran ]; - buildInputs = [ openblas openmpi petsc python3 ]; + buildInputs = [ blas lapack openmpi petsc python3 ]; meta = with stdenv.lib; { description = "A General Environment for the Treatment of Discrete Problems"; diff --git a/pkgs/applications/science/math/giac/default.nix b/pkgs/applications/science/math/giac/default.nix index b3777528ecd..feb30b990ab 100644 --- a/pkgs/applications/science/math/giac/default.nix +++ b/pkgs/applications/science/math/giac/default.nix @@ -1,5 +1,5 @@ -{ stdenv, lib, fetchurl, fetchpatch, texlive, bison, flex, liblapack -, gmp, mpfr, pari, ntl, gsl, blas, mpfi, ecm, glpk, nauty +{ stdenv, lib, fetchurl, fetchpatch, texlive, bison, flex, lapack, blas +, gmp, mpfr, pari, ntl, gsl, mpfi, ecm, glpk, nauty , readline, gettext, libpng, libao, gfortran, perl , enableGUI ? false, libGL ? null, libGLU ? null, xorg ? null, fltk ? null }: @@ -41,7 +41,7 @@ stdenv.mkDerivation rec { # gfortran.cc default output contains static libraries compiled without -fPIC # we want libgfortran.so.3 instead (stdenv.lib.getLib gfortran.cc) - liblapack + lapack blas ] ++ stdenv.lib.optionals enableGUI [ libGL libGLU fltk xorg.libX11 ]; diff --git a/pkgs/applications/science/math/gmsh/default.nix b/pkgs/applications/science/math/gmsh/default.nix index 2c4d5f254da..8ece2e7819c 100644 --- a/pkgs/applications/science/math/gmsh/default.nix +++ b/pkgs/applications/science/math/gmsh/default.nix @@ -1,6 +1,8 @@ -{ stdenv, fetchurl, cmake, openblasCompat, gfortran, gmm, fltk, libjpeg +{ stdenv, fetchurl, cmake, blas, lapack, gfortran, gmm, fltk, libjpeg , zlib, libGL, libGLU, xorg, opencascade-occt }: +assert (!blas.is64bit) && (!lapack.is64bit); + stdenv.mkDerivation rec { pname = "gmsh"; version = "4.5.6"; @@ -10,7 +12,7 @@ stdenv.mkDerivation rec { sha256 = "0gs65bgr1ph5lz7r6manqj8cra30s7c94pxilkd2z0p5vq6fpsj6"; }; - buildInputs = [ openblasCompat gmm fltk libjpeg zlib libGLU libGL + buildInputs = [ blas lapack gmm fltk libjpeg zlib libGLU libGL libGLU xorg.libXrender xorg.libXcursor xorg.libXfixes xorg.libXext xorg.libXft xorg.libXinerama xorg.libX11 xorg.libSM xorg.libICE opencascade-occt diff --git a/pkgs/applications/science/math/jags/default.nix b/pkgs/applications/science/math/jags/default.nix index 5ac1594e19a..122c6288847 100644 --- a/pkgs/applications/science/math/jags/default.nix +++ b/pkgs/applications/science/math/jags/default.nix @@ -1,4 +1,4 @@ -{stdenv, fetchurl, gfortran, openblas}: +{stdenv, fetchurl, gfortran, blas, lapack}: stdenv.mkDerivation rec { name = "JAGS-4.3.0"; @@ -6,8 +6,8 @@ stdenv.mkDerivation rec { url = "mirror://sourceforge/mcmc-jags/${name}.tar.gz"; sha256 = "1z3icccg2ic56vmhyrpinlsvpq7kcaflk1731rgpvz9bk1bxvica"; }; - buildInputs = [gfortran openblas]; - configureFlags = [ "--with-blas=-lopenblas" "--with-lapack=-lopenblas" ]; + buildInputs = [gfortran blas lapack]; + configureFlags = [ "--with-blas=-lblas" "--with-lapack=-llapack" ]; meta = with stdenv.lib; { description = "Just Another Gibbs Sampler"; diff --git a/pkgs/applications/science/math/mxnet/default.nix b/pkgs/applications/science/math/mxnet/default.nix index 5b7688f6051..87d46850f14 100644 --- a/pkgs/applications/science/math/mxnet/default.nix +++ b/pkgs/applications/science/math/mxnet/default.nix @@ -1,5 +1,5 @@ { config, stdenv, lib, fetchurl, bash, cmake -, opencv3, gtest, openblas, liblapack, perl +, opencv3, gtest, blas, perl , cudaSupport ? config.cudaSupport or false, cudatoolkit, nvidia_x11 , cudnnSupport ? cudaSupport, cudnn }: @@ -17,7 +17,7 @@ stdenv.mkDerivation rec { nativeBuildInputs = [ cmake perl ]; - buildInputs = [ opencv3 gtest openblas liblapack ] + buildInputs = [ opencv3 gtest blas ] ++ lib.optionals cudaSupport [ cudatoolkit nvidia_x11 ] ++ lib.optional cudnnSupport cudnn; @@ -34,7 +34,7 @@ stdenv.mkDerivation rec { substituteInPlace 3rdparty/mkldnn/tests/CMakeLists.txt \ --replace "/bin/bash" "${bash}/bin/bash" - # Build against the system version of OpenMP. + # Build against the system version of OpenMP. # https://github.com/apache/incubator-mxnet/pull/12160 rm -rf 3rdparty/openmp ''; diff --git a/pkgs/applications/science/math/sage/sage-env.nix b/pkgs/applications/science/math/sage/sage-env.nix index 68e0d134ace..c0dfeef1119 100644 --- a/pkgs/applications/science/math/sage/sage-env.nix +++ b/pkgs/applications/science/math/sage/sage-env.nix @@ -41,7 +41,8 @@ , lcalc , rubiks , flintqs -, openblasCompat +, blas +, lapack , flint , gmp , mpfr @@ -53,6 +54,8 @@ , less }: +assert (!blas.is64bit) && (!lapack.is64bit); + # This generates a `sage-env` shell file that will be sourced by sage on startup. # It sets up various environment variables, telling sage where to find its # dependencies. @@ -114,7 +117,7 @@ writeTextFile rec { # testsuite instead, but since all the packages are also runtime # dependencies it doesn't really hurt to include them here. singular - openblasCompat + blas lapack fflas-ffpack givaro gd libpng zlib diff --git a/pkgs/applications/science/math/sage/sage-with-env.nix b/pkgs/applications/science/math/sage/sage-with-env.nix index 524085e8c01..77bc65c2be1 100644 --- a/pkgs/applications/science/math/sage/sage-with-env.nix +++ b/pkgs/applications/science/math/sage/sage-with-env.nix @@ -2,7 +2,8 @@ , lib , makeWrapper , sage-env -, openblasCompat +, blas +, lapack , pkg-config , three , singular @@ -21,6 +22,9 @@ , pythonEnv }: +# lots of segfaults with (64 bit) blas +assert (!blas.is64bit) && (!lapack.is64bit); + # Wrapper that combined `sagelib` with `sage-env` to produce an actually # executable sage. No tests are run yet and no documentation is built. @@ -29,7 +33,7 @@ let pythonEnv # for patchShebangs makeWrapper pkg-config - openblasCompat # lots of segfaults with regular (64 bit) openblas + blas lapack singular three pynac diff --git a/pkgs/applications/science/math/sage/sagelib.nix b/pkgs/applications/science/math/sage/sagelib.nix index 69f7624078e..92b4e8efa2e 100644 --- a/pkgs/applications/science/math/sage/sagelib.nix +++ b/pkgs/applications/science/math/sage/sagelib.nix @@ -3,7 +3,8 @@ , perl , buildPythonPackage , arb -, openblasCompat +, blas +, lapack , brial , cliquer , cypari2 @@ -52,6 +53,8 @@ , pplpy }: +assert (!blas.is64bit) && (!lapack.is64bit); + # This is the core sage python package. Everything else is just wrappers gluing # stuff together. It is not very useful on its own though, since it will not # find many of its dependencies without `sage-env`, will not be tested without @@ -103,7 +106,8 @@ buildPythonPackage rec { m4rie mpfi ntl - openblasCompat + blas + lapack pari planarity ppl diff --git a/pkgs/applications/science/misc/openmodelica/default.nix b/pkgs/applications/science/misc/openmodelica/default.nix index ed4101bdb47..50d4dcc1a9f 100644 --- a/pkgs/applications/science/misc/openmodelica/default.nix +++ b/pkgs/applications/science/misc/openmodelica/default.nix @@ -1,5 +1,5 @@ {stdenv, fetchgit, fetchsvn, autoconf, automake, libtool, gfortran, clang, cmake, gnumake, -hwloc, jre, liblapack, blas, hdf5, expat, ncurses, readline, qt4, webkitgtk, which, +hwloc, jre, lapack, blas, hdf5, expat, ncurses, readline, qt4, webkitgtk, which, lp_solve, omniorb, sqlite, libatomic_ops, pkgconfig, file, gettext, flex, bison, doxygen, boost, openscenegraph, gnome2, xorg, git, bash, gtk2, makeWrapper }: @@ -15,7 +15,7 @@ stdenv.mkDerivation { src = fetchgit (import ./src-main.nix); buildInputs = [autoconf cmake automake libtool gfortran clang gnumake - hwloc jre liblapack blas hdf5 expat ncurses readline qt4 webkitgtk which + hwloc jre lapack blas hdf5 expat ncurses readline qt4 webkitgtk which lp_solve omniorb sqlite libatomic_ops pkgconfig file gettext flex bison doxygen boost openscenegraph gnome2.gtkglext xorg.libXmu git gtk2 makeWrapper]; @@ -40,7 +40,7 @@ stdenv.mkDerivation { for e in $(cd $out/bin && ls); do wrapProgram $out/bin/$e \ --prefix PATH : "${gnumake}/bin" \ - --prefix LIBRARY_PATH : "${stdenv.lib.makeLibraryPath [ liblapack blas ]}" + --prefix LIBRARY_PATH : "${stdenv.lib.makeLibraryPath [ lapack blas ]}" done ''; @@ -53,5 +53,3 @@ stdenv.mkDerivation { broken = true; }; } - - diff --git a/pkgs/applications/science/molecular-dynamics/lammps/default.nix b/pkgs/applications/science/molecular-dynamics/lammps/default.nix index ab706a88931..5dc31695c60 100644 --- a/pkgs/applications/science/molecular-dynamics/lammps/default.nix +++ b/pkgs/applications/science/molecular-dynamics/lammps/default.nix @@ -1,5 +1,5 @@ { stdenv, fetchFromGitHub -, libpng, gzip, fftw, openblas +, libpng, gzip, fftw, blas, lapack , mpi ? null }: let packages = [ @@ -27,7 +27,7 @@ stdenv.mkDerivation rec { inherit packages; }; - buildInputs = [ fftw libpng openblas gzip ] + buildInputs = [ fftw libpng blas lapack gzip ] ++ (stdenv.lib.optionals withMPI [ mpi ]); configurePhase = '' diff --git a/pkgs/applications/science/physics/xfitter/default.nix b/pkgs/applications/science/physics/xfitter/default.nix index f4d70e79079..b992851e40a 100644 --- a/pkgs/applications/science/physics/xfitter/default.nix +++ b/pkgs/applications/science/physics/xfitter/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, apfel, apfelgrid, applgrid, blas, gfortran, lhapdf, liblapack, libyaml, lynx, mela, root5, qcdnum, which }: +{ stdenv, fetchurl, apfel, apfelgrid, applgrid, blas, gfortran, lhapdf, lapack, libyaml, lynx, mela, root5, qcdnum, which }: stdenv.mkDerivation rec { pname = "xfitter"; @@ -37,7 +37,7 @@ stdenv.mkDerivation rec { nativeBuildInputs = [ gfortran which ]; buildInputs = - [ apfel apfelgrid applgrid blas lhapdf liblapack mela root5 qcdnum ] + [ apfel apfelgrid applgrid blas lhapdf lapack mela root5 qcdnum ] # pdf2yaml requires fmemopen and open_memstream which are not readily available on Darwin ++ stdenv.lib.optional (!stdenv.isDarwin) libyaml ; diff --git a/pkgs/development/compilers/halide/default.nix b/pkgs/development/compilers/halide/default.nix index 44c079af926..356ebe23172 100644 --- a/pkgs/development/compilers/halide/default.nix +++ b/pkgs/development/compilers/halide/default.nix @@ -1,7 +1,10 @@ { llvmPackages, lib, fetchFromGitHub, cmake -, libpng, libjpeg, mesa, eigen, openblas +, libpng, libjpeg, mesa, eigen +, openblas, blas, lapack }: +assert blas.implementation == "openblas" && lapack.implementation == "openblas"; + let version = "2019_08_27"; diff --git a/pkgs/development/compilers/julia/1.3.nix b/pkgs/development/compilers/julia/1.3.nix index 48034920e28..49dc17a27f4 100644 --- a/pkgs/development/compilers/julia/1.3.nix +++ b/pkgs/development/compilers/julia/1.3.nix @@ -7,28 +7,22 @@ # standard library dependencies , curl, fftwSinglePrec, fftw, gmp, libgit2, mpfr, openlibm, openspecfun, pcre2 # linear algebra -, openblas, arpack +, blas, lapack, arpack # Darwin frameworks , CoreServices, ApplicationServices }: +assert (!blas.is64bit) && (!lapack.is64bit); + with stdenv.lib; -# All dependencies must use the same OpenBLAS. let - arpack_ = arpack; -in -let - arpack = arpack_.override { inherit openblas; }; -in - -let majorVersion = "1"; minorVersion = "3"; maintenanceVersion = "1"; src_sha256 = "0q9a7yc3b235psrwl5ghyxgwly25lf8n818l8h6bkf2ymdbsv5p6"; version = "${majorVersion}.${minorVersion}.${maintenanceVersion}"; -in +in stdenv.mkDerivation rec { pname = "julia"; @@ -67,7 +61,7 @@ stdenv.mkDerivation rec { buildInputs = [ arpack fftw fftwSinglePrec gmp libgit2 libunwind mpfr - pcre2.dev openblas openlibm openspecfun readline utf8proc + pcre2.dev blas lapack openlibm openspecfun readline utf8proc zlib ] ++ stdenv.lib.optionals stdenv.isDarwin [CoreServices ApplicationServices] @@ -94,13 +88,9 @@ stdenv.mkDerivation rec { "SHELL=${stdenv.shell}" "USE_SYSTEM_BLAS=1" - "USE_BLAS64=${if openblas.blas64 then "1" else "0"}" - "LIBBLAS=-lopenblas" - "LIBBLASNAME=libopenblas" + "USE_BLAS64=${if blas.is64bit then "1" else "0"}" "USE_SYSTEM_LAPACK=1" - "LIBLAPACK=-lopenblas" - "LIBLAPACKNAME=libopenblas" "USE_SYSTEM_ARPACK=1" "USE_SYSTEM_FFTW=1" @@ -123,7 +113,7 @@ stdenv.mkDerivation rec { ]; LD_LIBRARY_PATH = makeLibraryPath [ - arpack fftw fftwSinglePrec gmp libgit2 mpfr openblas openlibm + arpack fftw fftwSinglePrec gmp libgit2 mpfr blas openlibm openspecfun pcre2 ]; diff --git a/pkgs/development/compilers/julia/shared.nix b/pkgs/development/compilers/julia/shared.nix index ec1818f9989..92e3d4a5c14 100644 --- a/pkgs/development/compilers/julia/shared.nix +++ b/pkgs/development/compilers/julia/shared.nix @@ -15,20 +15,14 @@ # standard library dependencies , curl, fftwSinglePrec, fftw, gmp, libgit2, mpfr, openlibm, openspecfun, pcre2 # linear algebra -, openblas, arpack +, blas, lapack, arpack # Darwin frameworks , CoreServices, ApplicationServices }: with stdenv.lib; -# All dependencies must use the same OpenBLAS. -let - arpack_ = arpack; -in -let - arpack = arpack_.override { inherit openblas; }; -in +assert (!blas.is64bit) && (!lapack.is64bit); let dsfmtVersion = "2.2.3"; @@ -118,7 +112,7 @@ stdenv.mkDerivation rec { buildInputs = [ arpack fftw fftwSinglePrec gmp libgit2 libunwind mpfr - pcre2.dev openblas openlibm openspecfun readline utf8proc + pcre2.dev blas lapack openlibm openspecfun readline utf8proc zlib ] ++ stdenv.lib.optionals stdenv.isDarwin [CoreServices ApplicationServices] @@ -143,13 +137,9 @@ stdenv.mkDerivation rec { "SHELL=${stdenv.shell}" "USE_SYSTEM_BLAS=1" - "USE_BLAS64=${if openblas.blas64 then "1" else "0"}" - "LIBBLAS=-lopenblas" - "LIBBLASNAME=libopenblas" + "USE_BLAS64=${if blas.is64bit then "1" else "0"}" "USE_SYSTEM_LAPACK=1" - "LIBLAPACK=-lopenblas" - "LIBLAPACKNAME=libopenblas" "USE_SYSTEM_ARPACK=1" "USE_SYSTEM_FFTW=1" @@ -173,7 +163,7 @@ stdenv.mkDerivation rec { ]; LD_LIBRARY_PATH = makeLibraryPath [ - arpack fftw fftwSinglePrec gmp libgit2 mpfr openblas openlibm + arpack fftw fftwSinglePrec gmp libgit2 mpfr blas lapack openlibm openspecfun pcre2 ]; diff --git a/pkgs/development/haskell-modules/configuration-common.nix b/pkgs/development/haskell-modules/configuration-common.nix index 29fcd5c7167..4cf9770c7a2 100644 --- a/pkgs/development/haskell-modules/configuration-common.nix +++ b/pkgs/development/haskell-modules/configuration-common.nix @@ -114,13 +114,8 @@ self: super: { # Depends on broken "hails" package. hails-bin = dontDistribute super.hails-bin; - # Switch levmar build to openblas. bindings-levmar = overrideCabal super.bindings-levmar (drv: { - preConfigure = '' - sed -i bindings-levmar.cabal \ - -e 's,extra-libraries: lapack blas,extra-libraries: openblas,' - ''; - extraLibraries = [ pkgs.openblasCompat ]; + extraLibraries = [ pkgs.blas ]; }); # The Haddock phase fails for one reason or another. diff --git a/pkgs/development/interpreters/octave/default.nix b/pkgs/development/interpreters/octave/default.nix index 4a63d186201..4d2bf40b329 100644 --- a/pkgs/development/interpreters/octave/default.nix +++ b/pkgs/development/interpreters/octave/default.nix @@ -21,7 +21,7 @@ , zlib , curl , qrupdate -, openblas +, blas, lapack , arpack , libwebp , gl2ps @@ -53,17 +53,7 @@ , darwin }: -let - suitesparseOrig = suitesparse; - qrupdateOrig = qrupdate; -in -# integer width is determined by openblas, so all dependencies must be built -# with exactly the same openblas -let - suitesparse = - if suitesparseOrig != null then suitesparseOrig.override { inherit openblas; } else null; - qrupdate = if qrupdateOrig != null then qrupdateOrig.override { inherit openblas; } else null; -in +assert (!blas.is64bit) && (!lapack.is64bit); stdenv.mkDerivation rec { version = "5.2.0"; @@ -85,7 +75,8 @@ stdenv.mkDerivation rec { fltk zlib curl - openblas + blas + lapack libsndfile fftw fftwSinglePrec @@ -134,15 +125,15 @@ stdenv.mkDerivation rec { enableParallelBuilding = true; # See https://savannah.gnu.org/bugs/?50339 - F77_INTEGER_8_FLAG = if openblas.blas64 then "-fdefault-integer-8" else ""; + F77_INTEGER_8_FLAG = if blas.is64bit then "-fdefault-integer-8" else ""; configureFlags = [ - "--with-blas=openblas" - "--with-lapack=openblas" + "--with-blas=blas" + "--with-lapack=lapack" + (if blas.is64bit then "--enable-64" else "--disable-64") ] ++ (if stdenv.isDarwin then [ "--enable-link-all-dependencies" ] else [ ]) ++ stdenv.lib.optionals enableReadline [ "--enable-readline" ] - ++ stdenv.lib.optionals openblas.blas64 [ "--enable-64" ] ++ stdenv.lib.optionals stdenv.isDarwin [ "--with-x=no" ] ++ stdenv.lib.optionals enableQt [ "--with-qt=5" ] ++ stdenv.lib.optionals enableJIT [ "--enable-jit" ] diff --git a/pkgs/development/libraries/armadillo/default.nix b/pkgs/development/libraries/armadillo/default.nix index f6710d4fc57..3251b1c9e0d 100644 --- a/pkgs/development/libraries/armadillo/default.nix +++ b/pkgs/development/libraries/armadillo/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, cmake, openblasCompat, superlu, hdf5 }: +{ stdenv, fetchurl, cmake, blas, lapack, superlu, hdf5 }: stdenv.mkDerivation rec { pname = "armadillo"; @@ -10,10 +10,10 @@ stdenv.mkDerivation rec { }; nativeBuildInputs = [ cmake ]; - buildInputs = [ openblasCompat superlu hdf5 ]; + buildInputs = [ blas lapack superlu hdf5 ]; cmakeFlags = [ - "-DLAPACK_LIBRARY=${openblasCompat}/lib/libopenblas${stdenv.hostPlatform.extensions.sharedLibrary}" + "-DLAPACK_LIBRARY=${lapack}/lib/liblapack${stdenv.hostPlatform.extensions.sharedLibrary}" "-DDETECT_HDF5=ON" ]; diff --git a/pkgs/development/libraries/arrayfire/default.nix b/pkgs/development/libraries/arrayfire/default.nix index 21e93a8cd49..e637aab48b2 100644 --- a/pkgs/development/libraries/arrayfire/default.nix +++ b/pkgs/development/libraries/arrayfire/default.nix @@ -1,14 +1,12 @@ { stdenv, fetchurl, fetchFromGitHub, cmake, pkgconfig -, cudatoolkit, opencl-clhpp, ocl-icd, fftw, fftwFloat, mkl -, blas, openblas, boost, mesa, libGLU, libGL +, opencl-clhpp, ocl-icd, fftw, fftwFloat, mkl +, blas, lapack, boost, mesa, libGLU, libGL , freeimage, python, clfft, clblas , doxygen, buildDocs ? false +, cudaSupport ? false, cudatoolkit }: -let - strOnLinux = stdenv.lib.optionalString stdenv.isLinux; - -in stdenv.mkDerivation rec { +stdenv.mkDerivation rec { pname = "arrayfire"; version = "3.6.4"; @@ -21,8 +19,7 @@ in stdenv.mkDerivation rec { "-DAF_BUILD_OPENCL=OFF" "-DAF_BUILD_EXAMPLES=OFF" "-DBUILD_TESTING=OFF" - (strOnLinux "-DCMAKE_LIBRARY_PATH=${cudatoolkit}/lib/stubs") - ]; + ] ++ stdenv.lib.optional cudaSupport "-DCMAKE_LIBRARY_PATH=${cudatoolkit}/lib/stubs"; patches = [ ./no-download.patch ]; @@ -35,7 +32,7 @@ in stdenv.mkDerivation rec { cp -R --no-preserve=mode,ownership ${opencl-clhpp}/include/CL/cl2.hpp ./build/include/CL/cl2.hpp ''; - preBuild = strOnLinux '' + preBuild = stdenv.lib.optionalString cudaSupport '' export CUDA_PATH="${cudatoolkit}" ''; @@ -50,12 +47,13 @@ in stdenv.mkDerivation rec { buildInputs = [ opencl-clhpp fftw fftwFloat mkl - openblas + blas lapack libGLU libGL mesa freeimage boost.out boost.dev - ] ++ (stdenv.lib.optional stdenv.isLinux [ cudatoolkit ocl-icd ]) - ++ (stdenv.lib.optional buildDocs [ doxygen ]); + ] ++ (stdenv.lib.optional stdenv.isLinux ocl-icd) + ++ (stdenv.lib.optional cudaSupport cudatoolkit) + ++ (stdenv.lib.optional buildDocs doxygen); meta = with stdenv.lib; { description = "A general-purpose library for parallel and massively-parallel computations"; diff --git a/pkgs/development/libraries/flint/default.nix b/pkgs/development/libraries/flint/default.nix index 48d7735498c..3c768fc472c 100644 --- a/pkgs/development/libraries/flint/default.nix +++ b/pkgs/development/libraries/flint/default.nix @@ -5,11 +5,11 @@ , mpir , mpfr , ntl -, openblas ? null +, openblas ? null, blas, lapack , withBlas ? true }: -assert withBlas -> openblas != null; +assert withBlas -> openblas != null && blas.implementation == "openblas" && lapack.implementation == "openblas"; stdenv.mkDerivation rec { pname = "flint"; diff --git a/pkgs/development/libraries/givaro/default.nix b/pkgs/development/libraries/givaro/default.nix index 6011dd03a46..fdaf518c611 100644 --- a/pkgs/development/libraries/givaro/default.nix +++ b/pkgs/development/libraries/givaro/default.nix @@ -12,7 +12,8 @@ stdenv.mkDerivation rec { enableParallelBuilding = true; nativeBuildInputs = [ autoreconfHook ]; - buildInputs = [autoconf automake libtool gmpxx]; + buildInputs = [autoconf automake libtool]; + propagatedBuildInputs = [ gmpxx ]; configureFlags = [ "--disable-optimization" diff --git a/pkgs/development/libraries/globalarrays/default.nix b/pkgs/development/libraries/globalarrays/default.nix index 654fcc31eb7..423272fcd45 100644 --- a/pkgs/development/libraries/globalarrays/default.nix +++ b/pkgs/development/libraries/globalarrays/default.nix @@ -1,5 +1,5 @@ { stdenv, fetchpatch, fetchFromGitHub, autoreconfHook -, openblas, gfortran, openssh, openmpi +, blas, gfortran, openssh, openmpi } : let @@ -17,7 +17,7 @@ in stdenv.mkDerivation { }; nativeBuildInputs = [ autoreconfHook ]; - buildInputs = [ openmpi openblas gfortran openssh ]; + buildInputs = [ openmpi blas gfortran openssh ]; preConfigure = '' configureFlagsArray+=( "--enable-i8" \ @@ -25,7 +25,7 @@ in stdenv.mkDerivation { "--with-mpi3" \ "--enable-eispack" \ "--enable-underscoring" \ - "--with-blas8=${openblas}/lib -lopenblas" ) + "--with-blas8=${blas}/lib -lblas" ) ''; enableParallelBuilding = true; @@ -38,5 +38,3 @@ in stdenv.mkDerivation { platforms = platforms.linux; }; } - - diff --git a/pkgs/development/libraries/iml/default.nix b/pkgs/development/libraries/iml/default.nix index 598d7a58ef9..cf1d9018fd5 100644 --- a/pkgs/development/libraries/iml/default.nix +++ b/pkgs/development/libraries/iml/default.nix @@ -1,4 +1,4 @@ -{stdenv, autoreconfHook, fetchurl, gmp, openblas}: +{stdenv, autoreconfHook, fetchurl, gmp, blas}: stdenv.mkDerivation rec { pname = "iml"; version = "1.0.5"; @@ -8,7 +8,7 @@ stdenv.mkDerivation rec { }; buildInputs = [ gmp - openblas + blas ]; nativeBuildInputs = [ autoreconfHook @@ -16,7 +16,7 @@ stdenv.mkDerivation rec { configureFlags = [ "--with-gmp-include=${gmp.dev}/include" "--with-gmp-lib=${gmp}/lib" - "--with-cblas=-lopenblas" + "--with-cblas=-lblas" ]; meta = { inherit version; diff --git a/pkgs/development/libraries/libcint/default.nix b/pkgs/development/libraries/libcint/default.nix index e56583e45ba..3191dc44467 100644 --- a/pkgs/development/libraries/libcint/default.nix +++ b/pkgs/development/libraries/libcint/default.nix @@ -2,7 +2,7 @@ , lib , fetchFromGitHub , cmake -, openblas +, blas # Check Inputs , python2 }: @@ -19,7 +19,7 @@ stdenv.mkDerivation rec { }; nativeBuildInputs = [ cmake ]; - buildInputs = [ openblas ]; + buildInputs = [ blas ]; cmakeFlags = [ "-DENABLE_TEST=1" "-DQUICK_TEST=1" diff --git a/pkgs/development/libraries/opencv/3.x.nix b/pkgs/development/libraries/opencv/3.x.nix index ed337c7ebfe..6f327ca396a 100644 --- a/pkgs/development/libraries/opencv/3.x.nix +++ b/pkgs/development/libraries/opencv/3.x.nix @@ -11,7 +11,7 @@ , enableEXR ? !stdenv.isDarwin, openexr, ilmbase , enableJPEG2K ? false, jasper # disable jasper by default (many CVE) , enableEigen ? true, eigen -, enableOpenblas ? true, openblas +, enableOpenblas ? true, openblas, blas, lapack , enableContrib ? true , enableCuda ? (config.cudaSupport or false) && @@ -35,6 +35,8 @@ , AVFoundation, Cocoa, VideoDecodeAcceleration, bzip2 }: +assert blas.implementation == "openblas" && lapack.implementation == "openblas"; + let version = "3.4.8"; diff --git a/pkgs/development/libraries/opencv/4.x.nix b/pkgs/development/libraries/opencv/4.x.nix index cec8a9aa363..abec6e1ace5 100644 --- a/pkgs/development/libraries/opencv/4.x.nix +++ b/pkgs/development/libraries/opencv/4.x.nix @@ -11,7 +11,7 @@ , enableEXR ? !stdenv.isDarwin, openexr, ilmbase , enableJPEG2K ? false, jasper # disable jasper by default (many CVE) , enableEigen ? true, eigen -, enableOpenblas ? true, openblas +, enableOpenblas ? true, openblas, blas, lapack , enableContrib ? true , enableCuda ? (config.cudaSupport or false) && @@ -35,6 +35,8 @@ , AVFoundation, Cocoa, VideoDecodeAcceleration, bzip2 }: +assert blas.implementation == "openblas" && lapack.implementation == "openblas"; + let version = "4.1.2"; diff --git a/pkgs/development/libraries/qrupdate/default.nix b/pkgs/development/libraries/qrupdate/default.nix index a31cc4e8ed4..f6c16583ad7 100644 --- a/pkgs/development/libraries/qrupdate/default.nix +++ b/pkgs/development/libraries/qrupdate/default.nix @@ -1,7 +1,8 @@ { stdenv , fetchurl , gfortran -, openblas +, blas +, lapack }: stdenv.mkDerivation { name = "qrupdate-1.1.2"; @@ -13,11 +14,11 @@ stdenv.mkDerivation { configurePhase = '' export PREFIX=$out - sed -i -e 's,^BLAS=.*,BLAS=-L${openblas}/lib -lopenblas,' \ - -e 's,^LAPACK=.*,LAPACK=-L${openblas}/lib -lopenblas,' \ + sed -i -e 's,^BLAS=.*,BLAS=-L${blas}/lib -lblas,' \ + -e 's,^LAPACK=.*,LAPACK=-L${lapack}/lib -llapack,' \ Makeconf '' - + stdenv.lib.optionalString openblas.blas64 + + stdenv.lib.optionalString blas.is64bit '' sed -i Makeconf -e '/^FFLAGS=.*/ s/$/-fdefault-integer-8/' ''; @@ -30,7 +31,7 @@ stdenv.mkDerivation { installTargets = stdenv.lib.optionals stdenv.isDarwin [ "install-staticlib" "install-shlib" ]; - buildInputs = [ gfortran openblas ]; + buildInputs = [ gfortran blas lapack ]; meta = with stdenv.lib; { description = "Library for fast updating of qr and cholesky decompositions"; diff --git a/pkgs/development/libraries/science/math/arpack/default.nix b/pkgs/development/libraries/science/math/arpack/default.nix index 961a1c544e6..a5fbb679df5 100644 --- a/pkgs/development/libraries/science/math/arpack/default.nix +++ b/pkgs/development/libraries/science/math/arpack/default.nix @@ -1,5 +1,5 @@ { stdenv, fetchFromGitHub, cmake -, gfortran, openblas, eigen }: +, gfortran, blas, lapack, eigen }: with stdenv.lib; @@ -18,15 +18,16 @@ stdenv.mkDerivation { }; nativeBuildInputs = [ cmake ]; - buildInputs = [ gfortran openblas eigen ]; + buildInputs = [ gfortran blas lapack eigen ]; doCheck = true; - BLAS_LIBS = "-L${openblas}/lib -lopenblas"; + BLAS_LIBS = "-L${blas}/lib -lblas"; + LAPACK_LIBS = "-L${lapack}/lib -llapack"; cmakeFlags = [ "-DBUILD_SHARED_LIBS=ON" - "-DINTERFACE64=${optionalString openblas.blas64 "1"}" + "-DINTERFACE64=${optionalString blas.is64bit "1"}" ]; preCheck = if stdenv.isDarwin then '' diff --git a/pkgs/development/libraries/science/math/cholmod-extra/default.nix b/pkgs/development/libraries/science/math/cholmod-extra/default.nix index 0f2d35329c4..c381f56277e 100644 --- a/pkgs/development/libraries/science/math/cholmod-extra/default.nix +++ b/pkgs/development/libraries/science/math/cholmod-extra/default.nix @@ -1,10 +1,5 @@ -{ stdenv, fetchFromGitHub, gfortran, suitesparse, openblas }: -let - suitesparse_ = suitesparse; -in let - # SuiteSparse must use the same openblas - suitesparse = suitesparse_.override { inherit openblas; }; -in stdenv.mkDerivation rec { +{ stdenv, fetchFromGitHub, gfortran, suitesparse, blas, lapack }: +stdenv.mkDerivation rec { pname = "cholmod-extra"; version = "1.2.0"; @@ -15,10 +10,10 @@ in stdenv.mkDerivation rec { sha256 = "0hz1lfp0zaarvl0dv0zgp337hyd8np41kmdpz5rr3fc6yzw7vmkg"; }; - buildInputs = [ suitesparse gfortran openblas ]; + buildInputs = [ suitesparse gfortran blas lapack ]; - buildFlags = [ - "BLAS=-lopenblas" + makeFlags = [ + "BLAS=-lcblas" ]; installFlags = [ diff --git a/pkgs/development/libraries/science/math/fenics/default.nix b/pkgs/development/libraries/science/math/fenics/default.nix index 2abf8e980b8..4e89aeebe2b 100644 --- a/pkgs/development/libraries/science/math/fenics/default.nix +++ b/pkgs/development/libraries/science/math/fenics/default.nix @@ -24,6 +24,8 @@ , suitesparse , swig , zlib +, blas +, lapack }: let version = "2019.1.0"; @@ -176,13 +178,14 @@ let hdf5 mpi numpy - (numpy.blas) + blas + lapack ply python scotch six sphinx - (suitesparse.override { openblas = numpy.blas; }) + suitesparse swig sympy ufl diff --git a/pkgs/development/libraries/science/math/ipopt/default.nix b/pkgs/development/libraries/science/math/ipopt/default.nix index a3bc1c380cf..647fd82ec0e 100644 --- a/pkgs/development/libraries/science/math/ipopt/default.nix +++ b/pkgs/development/libraries/science/math/ipopt/default.nix @@ -1,4 +1,6 @@ -{ stdenv, fetchurl, unzip, openblas, gfortran }: +{ stdenv, fetchurl, unzip, blas, lapack, gfortran }: + +assert (!blas.is64bit) && (!lapack.is64bit); stdenv.mkDerivation rec { pname = "ipopt"; @@ -12,13 +14,13 @@ stdenv.mkDerivation rec { CXXDEFS = [ "-DHAVE_RAND" "-DHAVE_CSTRING" "-DHAVE_CSTDIO" ]; configureFlags = [ - "--with-blas-lib=-lopenblas" - "--with-lapack-lib=-lopenblas" + "--with-blas-lib=-lblas" + "--with-lapack-lib=-llapack" ]; nativeBuildInputs = [ unzip ]; - buildInputs = [ gfortran openblas ]; + buildInputs = [ gfortran blas lapack ]; enableParallelBuilding = true; diff --git a/pkgs/development/libraries/science/math/magma/default.nix b/pkgs/development/libraries/science/math/magma/default.nix index 5e62ce75aa6..b34139e7f48 100644 --- a/pkgs/development/libraries/science/math/magma/default.nix +++ b/pkgs/development/libraries/science/math/magma/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, cmake, gfortran, cudatoolkit, libpthreadstubs, liblapack +{ stdenv, fetchurl, cmake, gfortran, cudatoolkit, libpthreadstubs, lapack, blas , mklSupport ? false, mkl ? null }: @@ -18,7 +18,7 @@ in stdenv.mkDerivation { }; buildInputs = [ gfortran cudatoolkit libpthreadstubs cmake ] - ++ (if mklSupport then [ mkl ] else [ liblapack ]); + ++ (if mklSupport then [ mkl ] else [ lapack blas ]); doCheck = false; diff --git a/pkgs/development/libraries/science/math/petsc/default.nix b/pkgs/development/libraries/science/math/petsc/default.nix index 911f0a1cf89..200dd58a435 100644 --- a/pkgs/development/libraries/science/math/petsc/default.nix +++ b/pkgs/development/libraries/science/math/petsc/default.nix @@ -1,4 +1,4 @@ -{ stdenv , fetchurl , blas , gfortran , liblapack , python }: +{ stdenv , fetchurl , blas , gfortran , lapack , python }: stdenv.mkDerivation rec { pname = "petsc"; @@ -9,7 +9,7 @@ stdenv.mkDerivation rec { sha256 = "0943bydmsq3sjwj3rxhb8hx58b1fm8vymny731557fs10g5zfbyz"; }; - nativeBuildInputs = [ blas gfortran.cc.lib liblapack python ]; + nativeBuildInputs = [ blas gfortran.cc.lib lapack python ]; prePatch = stdenv.lib.optionalString stdenv.isDarwin '' substituteInPlace config/install.py \ @@ -24,8 +24,8 @@ stdenv.mkDerivation rec { "--with-cxx=$CXX" "--with-fc=0" "--with-mpi=0" - "--with-blas-lib=[${blas}/lib/libblas.a,${gfortran.cc.lib}/lib/libgfortran.a]" - "--with-lapack-lib=[${liblapack}/lib/liblapack.a,${gfortran.cc.lib}/lib/libgfortran.a]" + "--with-blas-lib=[${blas}/lib/libblas.so,${gfortran.cc.lib}/lib/libgfortran.a]" + "--with-lapack-lib=[${lapack}/lib/liblapack.so,${gfortran.cc.lib}/lib/libgfortran.a]" ) ''; diff --git a/pkgs/development/libraries/science/math/scalapack/default.nix b/pkgs/development/libraries/science/math/scalapack/default.nix index f0a93c7be64..d2021986029 100644 --- a/pkgs/development/libraries/science/math/scalapack/default.nix +++ b/pkgs/development/libraries/science/math/scalapack/default.nix @@ -1,7 +1,8 @@ { stdenv, fetchFromGitHub, cmake, openssh -, gfortran, mpi, openblasCompat +, gfortran, mpi, blas, lapack } : +assert (!blas.is64bit) && (!lapack.is64bit); stdenv.mkDerivation rec { pname = "scalapack"; @@ -15,7 +16,7 @@ stdenv.mkDerivation rec { }; nativeBuildInputs = [ cmake openssh ]; - buildInputs = [ mpi gfortran openblasCompat ]; + buildInputs = [ mpi gfortran blas lapack ]; enableParallelBuilding = true; @@ -24,8 +25,8 @@ stdenv.mkDerivation rec { preConfigure = '' cmakeFlagsArray+=( -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=OFF - -DLAPACK_LIBRARIES="-lopenblas" - -DBLAS_LIBRARIES="-lopenblas" + -DLAPACK_LIBRARIES="-llapack" + -DBLAS_LIBRARIES="-lblas" ) ''; diff --git a/pkgs/development/libraries/science/math/scs/default.nix b/pkgs/development/libraries/science/math/scs/default.nix index db808b093fe..7f7171f67e5 100644 --- a/pkgs/development/libraries/science/math/scs/default.nix +++ b/pkgs/development/libraries/science/math/scs/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchFromGitHub, blas, liblapack, gfortran, fixDarwinDylibNames }: +{ stdenv, fetchFromGitHub, blas, lapack, gfortran, fixDarwinDylibNames }: stdenv.mkDerivation rec { pname = "scs"; @@ -20,7 +20,7 @@ stdenv.mkDerivation rec { nativeBuildInputs = stdenv.lib.optional stdenv.isDarwin fixDarwinDylibNames; - buildInputs = [ blas liblapack gfortran.cc.lib ]; + buildInputs = [ blas lapack gfortran.cc.lib ]; doCheck = true; diff --git a/pkgs/development/libraries/science/math/suitesparse/4.2.nix b/pkgs/development/libraries/science/math/suitesparse/4.2.nix index 755a9f5118b..34a1fb7ad9e 100644 --- a/pkgs/development/libraries/science/math/suitesparse/4.2.nix +++ b/pkgs/development/libraries/science/math/suitesparse/4.2.nix @@ -1,7 +1,7 @@ -{ stdenv, fetchurl, gfortran, openblas }: +{ stdenv, fetchurl, gfortran, blas, lapack }: let - int_t = if openblas.blas64 then "int64_t" else "int32_t"; + int_t = if blas.is64bit then "int64_t" else "int32_t"; in stdenv.mkDerivation rec { version = "4.2.1"; @@ -12,7 +12,7 @@ stdenv.mkDerivation rec { }; nativeBuildInputs = [ gfortran ]; - buildInputs = [ openblas ]; + buildInputs = [ blas lapack ]; preConfigure = '' mkdir -p $out/lib @@ -29,8 +29,8 @@ stdenv.mkDerivation rec { "PREFIX=\"$(out)\"" "INSTALL_LIB=$(out)/lib" "INSTALL_INCLUDE=$(out)/include" - "BLAS=-lopenblas" - "LAPACK=" + "BLAS=-lblas" + "LAPACK=-llapack" ]; meta = with stdenv.lib; { diff --git a/pkgs/development/libraries/science/math/suitesparse/4.4.nix b/pkgs/development/libraries/science/math/suitesparse/4.4.nix index 7f85f8e329e..b2b7e666b7e 100644 --- a/pkgs/development/libraries/science/math/suitesparse/4.4.nix +++ b/pkgs/development/libraries/science/math/suitesparse/4.4.nix @@ -1,12 +1,12 @@ -{ stdenv, fetchurl, gfortran, openblas -, enableCuda ? false, cudatoolkit +{ stdenv, fetchurl, gfortran, blas, lapack +, enableCuda ? false, cudatoolkit }: let version = "4.4.4"; name = "suitesparse-${version}"; - int_t = if openblas.blas64 then "int64_t" else "int32_t"; + int_t = if blas.is64bit then "int64_t" else "int32_t"; SHLIB_EXT = stdenv.hostPlatform.extensions.sharedLibrary; in stdenv.mkDerivation { @@ -51,8 +51,8 @@ stdenv.mkDerivation { "PREFIX=\"$(out)\"" "INSTALL_LIB=$(out)/lib" "INSTALL_INCLUDE=$(out)/include" - "BLAS=-lopenblas" - "LAPACK=" + "BLAS=-lblas" + "LAPACK=-llapack" ]; NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.isDarwin " -DNTIMER"; @@ -64,7 +64,7 @@ stdenv.mkDerivation { for i in "$out"/lib/lib*.a; do ar -x $i done - ${if enableCuda then cudatoolkit else stdenv.cc.outPath}/bin/${if enableCuda then "nvcc" else "cc"} *.o ${if stdenv.isDarwin then "-dynamiclib" else "--shared"} -o "$out/lib/libsuitesparse${SHLIB_EXT}" -lopenblas ${stdenv.lib.optionalString enableCuda "-lcublas"} + ${if enableCuda then cudatoolkit else stdenv.cc.outPath}/bin/${if enableCuda then "nvcc" else "cc"} *.o ${if stdenv.isDarwin then "-dynamiclib" else "--shared"} -o "$out/lib/libsuitesparse${SHLIB_EXT}" -lblas ${stdenv.lib.optionalString enableCuda "-lcublas"} ) for i in umfpack cholmod amd camd colamd spqr; do ln -s libsuitesparse${SHLIB_EXT} "$out"/lib/lib$i${SHLIB_EXT} @@ -88,7 +88,7 @@ stdenv.mkDerivation { ''; nativeBuildInputs = [ gfortran ]; - buildInputs = [ openblas ]; + buildInputs = [ blas lapack ]; meta = with stdenv.lib; { homepage = "http://faculty.cse.tamu.edu/davis/suitesparse.html"; diff --git a/pkgs/development/libraries/science/math/suitesparse/default.nix b/pkgs/development/libraries/science/math/suitesparse/default.nix index 938ffb59996..48177987a7a 100644 --- a/pkgs/development/libraries/science/math/suitesparse/default.nix +++ b/pkgs/development/libraries/science/math/suitesparse/default.nix @@ -1,7 +1,7 @@ { stdenv , fetchFromGitHub , gfortran -, openblas +, blas, lapack , metis , fixDarwinDylibNames , gnum4 @@ -27,7 +27,7 @@ stdenv.mkDerivation rec { ] ++ stdenv.lib.optional stdenv.isDarwin fixDarwinDylibNames; buildInputs = [ - openblas + blas lapack metis gfortran.cc.lib ] ++ stdenv.lib.optional enableCuda cudatoolkit; @@ -41,10 +41,10 @@ stdenv.mkDerivation rec { "INSTALL=${placeholder "out"}" "INSTALL_INCLUDE=${placeholder "dev"}/include" "JOBS=$(NIX_BUILD_CORES)" - "BLAS=-lopenblas" + "BLAS=-lblas" + "LAPACK=-llapack" "MY_METIS_LIB=-lmetis" - "LAPACK=" - ] ++ stdenv.lib.optionals openblas.blas64 [ + ] ++ stdenv.lib.optionals blas.is64bit [ "CFLAGS=-DBLAS64" ] ++ stdenv.lib.optionals enableCuda [ "CUDA_PATH=${cudatoolkit}" diff --git a/pkgs/development/libraries/science/math/superlu/default.nix b/pkgs/development/libraries/science/math/superlu/default.nix index dc43dc21ea4..05ceb21387d 100644 --- a/pkgs/development/libraries/science/math/superlu/default.nix +++ b/pkgs/development/libraries/science/math/superlu/default.nix @@ -1,5 +1,7 @@ { stdenv, fetchurl, cmake, - gfortran, openblasCompat}: + gfortran, blas, lapack}: + +assert (!blas.is64bit) && (!lapack.is64bit); stdenv.mkDerivation rec { version = "5.2.1"; @@ -12,7 +14,7 @@ stdenv.mkDerivation rec { buildInputs = [ cmake gfortran ]; - propagatedBuildInputs = [ openblasCompat ]; + propagatedBuildInputs = [ blas ]; cmakeFlags = [ "-DBUILD_SHARED_LIBS=true" @@ -20,7 +22,6 @@ stdenv.mkDerivation rec { ]; patches = [ - ./find-openblas-library.patch ./add-superlu-lib-as-dependency-for-the-unit-tests.patch ]; diff --git a/pkgs/development/libraries/science/math/superlu/find-openblas-library.patch b/pkgs/development/libraries/science/math/superlu/find-openblas-library.patch deleted file mode 100644 index ce7bc6974c9..00000000000 --- a/pkgs/development/libraries/science/math/superlu/find-openblas-library.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -75,6 +75,8 @@ set(CMAKE_C_FLAGS_RELEASE "-O3" CACHE STRING "") - ###################################################################### - # - #--------------------- BLAS --------------------- -+find_package(OpenBLAS) -+set(TPL_BLAS_LIBRARIES ${OpenBLAS_LIBRARIES}) - if(NOT enable_blaslib) - if (TPL_BLAS_LIBRARIES) - set(BLAS_FOUND TRUE) diff --git a/pkgs/development/libraries/sundials/2.x.nix b/pkgs/development/libraries/sundials/2.x.nix index 2d8a8f55c67..08cbd52ba39 100644 --- a/pkgs/development/libraries/sundials/2.x.nix +++ b/pkgs/development/libraries/sundials/2.x.nix @@ -4,15 +4,13 @@ , python # GNU Octave needs KLU for ODE solvers , suitesparse -, liblapack +, blas, lapack , gfortran , lapackSupport ? true }: -let liblapackShared = liblapack.override { - shared = true; -}; +assert (!blas.is64bit) && (!lapack.is64bit); -in stdenv.mkDerivation rec { +stdenv.mkDerivation rec { pname = "sundials"; version = "2.7.0"; @@ -44,7 +42,7 @@ in stdenv.mkDerivation rec { "-DKLU_INCLUDE_DIR=${suitesparse}/include" "-DKLU_LIBRARY_DIR=${suitesparse}/lib" "-DLAPACK_ENABLE=ON" - "-DLAPACK_LIBRARIES=${liblapackShared}/lib/liblapack${stdenv.hostPlatform.extensions.sharedLibrary};${liblapackShared}/lib/libblas${stdenv.hostPlatform.extensions.sharedLibrary}" + "-DLAPACK_LIBRARIES=${lapack}/lib/lapack${stdenv.hostPlatform.extensions.sharedLibrary};${blas}/lib/blas${stdenv.hostPlatform.extensions.sharedLibrary}" ]; # flaky tests, and patch in https://github.com/LLNL/sundials/pull/21 doesn't apply cleanly for sundials_3 diff --git a/pkgs/development/libraries/sundials/default.nix b/pkgs/development/libraries/sundials/default.nix index 2405b1b6fdc..8ed8d6cfcb5 100644 --- a/pkgs/development/libraries/sundials/default.nix +++ b/pkgs/development/libraries/sundials/default.nix @@ -2,17 +2,18 @@ , cmake , fetchurl , python -, openblas +, blas +, lapack , gfortran , lapackSupport ? true }: -let openblas32 = openblas.override { blas64 = false; }; +assert (!blas.is64bit) && (!lapack.is64bit); -in stdenv.mkDerivation rec { +stdenv.mkDerivation rec { pname = "sundials"; version = "5.1.0"; - buildInputs = [ python ] ++ stdenv.lib.optionals (lapackSupport) [ gfortran openblas32 ]; + buildInputs = [ python ] ++ stdenv.lib.optionals (lapackSupport) [ gfortran blas lapack ]; nativeBuildInputs = [ cmake ]; src = fetchurl { @@ -33,7 +34,7 @@ in stdenv.mkDerivation rec { ] ++ stdenv.lib.optionals (lapackSupport) [ "-DSUNDIALS_INDEX_TYPE=int32_t" "-DLAPACK_ENABLE=ON" - "-DLAPACK_LIBRARIES=${openblas32}/lib/libopenblas${stdenv.hostPlatform.extensions.sharedLibrary}" + "-DLAPACK_LIBRARIES=${lapack}/lib/liblapack${stdenv.hostPlatform.extensions.sharedLibrary}" ]; doCheck = true; diff --git a/pkgs/development/ocaml-modules/lacaml/default.nix b/pkgs/development/ocaml-modules/lacaml/default.nix index 41bfb3125e3..e4da2216a83 100644 --- a/pkgs/development/ocaml-modules/lacaml/default.nix +++ b/pkgs/development/ocaml-modules/lacaml/default.nix @@ -1,6 +1,7 @@ -{ stdenv, fetchFromGitHub, darwin, ocaml, findlib, dune, base, stdio, liblapack, blas }: +{ stdenv, fetchFromGitHub, darwin, ocaml, findlib, dune, base, stdio, lapack, blas }: assert stdenv.lib.versionAtLeast (stdenv.lib.getVersion ocaml) "4.05.0"; +assert (!blas.is64bit) && (!lapack.is64bit); stdenv.mkDerivation rec { pname = "ocaml${ocaml.version}-lacaml"; @@ -14,7 +15,7 @@ stdenv.mkDerivation rec { }; buildInputs = [ ocaml findlib dune base stdio ]; - propagatedBuildInputs = [ liblapack blas ] ++ + propagatedBuildInputs = [ lapack blas ] ++ stdenv.lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Accelerate ]; diff --git a/pkgs/development/ocaml-modules/owl/default.nix b/pkgs/development/ocaml-modules/owl/default.nix index 7fa912d808d..c84743a8da5 100644 --- a/pkgs/development/ocaml-modules/owl/default.nix +++ b/pkgs/development/ocaml-modules/owl/default.nix @@ -6,11 +6,14 @@ , eigen , stdio , stdlib-shims -, openblasCompat +, openblas, blas, lapack , owl-base , npy }: +assert (!blas.is64bit) && (!lapack.is64bit); +assert blas.implementation == "openblas" && lapack.implementation == "openblas"; + buildDunePackage rec { pname = "owl"; @@ -19,7 +22,7 @@ buildDunePackage rec { checkInputs = [ alcotest ]; buildInputs = [ dune-configurator ]; propagatedBuildInputs = [ - eigen stdio stdlib-shims openblasCompat owl-base npy + eigen stdio stdlib-shims openblas owl-base npy ]; doCheck = !stdenv.isDarwin; # https://github.com/owlbarn/owl/issues/462 diff --git a/pkgs/development/python-modules/cvxopt/default.nix b/pkgs/development/python-modules/cvxopt/default.nix index b48f6b99136..9266f406b15 100644 --- a/pkgs/development/python-modules/cvxopt/default.nix +++ b/pkgs/development/python-modules/cvxopt/default.nix @@ -4,7 +4,7 @@ , fetchPypi , isPyPy , python -, openblasCompat # build segfaults with regular openblas +, blas, lapack # build segfaults with 64-bit blas , suitesparse , glpk ? null , gsl ? null @@ -14,6 +14,8 @@ , withFftw ? true }: +assert (!blas.is64bit) && (!lapack.is64bit); + buildPythonPackage rec { pname = "cvxopt"; version = "1.2.4"; @@ -25,12 +27,13 @@ buildPythonPackage rec { sha256 = "1h9g79gxpgpy6xciqyypihw5q4ngp322lpkka1nkwk0ysybfsp7s"; }; + buildInputs = [ blas lapack ]; + # similar to Gsl, glpk, fftw there is also a dsdp interface # but dsdp is not yet packaged in nixpkgs preConfigure = '' - export CVXOPT_BLAS_LIB_DIR=${openblasCompat}/lib - export CVXOPT_BLAS_LIB=openblas - export CVXOPT_LAPACK_LIB=openblas + export CVXOPT_BLAS_LIB=blas + export CVXOPT_LAPACK_LIB=lapack export CVXOPT_SUITESPARSE_LIB_DIR=${lib.getLib suitesparse}/lib export CVXOPT_SUITESPARSE_INC_DIR=${lib.getDev suitesparse}/include '' + lib.optionalString withGsl '' diff --git a/pkgs/development/python-modules/numpy/default.nix b/pkgs/development/python-modules/numpy/default.nix index a863ef60d4a..949d5e5898b 100644 --- a/pkgs/development/python-modules/numpy/default.nix +++ b/pkgs/development/python-modules/numpy/default.nix @@ -5,21 +5,23 @@ , gfortran , pytest , blas +, lapack , writeTextFile , isPyPy , cython , setuptoolsBuildHook }: +assert (!blas.is64bit) && (!lapack.is64bit); + let - blasImplementation = lib.nameFromURL blas.name "-"; cfg = writeTextFile { name = "site.cfg"; text = (lib.generators.toINI {} { - ${blasImplementation} = { - include_dirs = "${blas}/include"; - library_dirs = "${blas}/lib"; - } // lib.optionalAttrs (blasImplementation == "mkl") { + ${blas.implementation} = { + include_dirs = "${blas}/include:${lapack}/include"; + library_dirs = "${blas}/lib:${lapack}/lib"; + } // lib.optionalAttrs (blas.implementation == "mkl") { mkl_libs = "mkl_rt"; lapack_libs = ""; }; @@ -37,7 +39,7 @@ in buildPythonPackage rec { }; nativeBuildInputs = [ gfortran pytest cython setuptoolsBuildHook ]; - buildInputs = [ blas ]; + buildInputs = [ blas lapack ]; patches = lib.optionals python.hasDistutilsCxxPatch [ # We patch cpython/distutils to fix https://bugs.python.org/issue1222585 @@ -68,8 +70,10 @@ in buildPythonPackage rec { ''; passthru = { - blas = blas; - inherit blasImplementation cfg; + # just for backwards compatibility + blas = blas.provider; + blasImplementation = blas.implementation; + inherit cfg; }; # Disable test diff --git a/pkgs/development/python-modules/prox-tv/default.nix b/pkgs/development/python-modules/prox-tv/default.nix index 60482d45551..1cc2ab89360 100644 --- a/pkgs/development/python-modules/prox-tv/default.nix +++ b/pkgs/development/python-modules/prox-tv/default.nix @@ -1,13 +1,11 @@ { lib , blas +, lapack , buildPythonPackage , cffi , fetchFromGitHub -, liblapack , nose , numpy -, openblas -, useOpenblas ? true }: buildPythonPackage { @@ -21,8 +19,6 @@ buildPythonPackage { sha256 = "0mlrjbb5rw78dgijkr3bspmsskk6jqs9y7xpsgs35i46dvb327q5"; }; - patches = lib.optional useOpenblas ./use-openblas.patch; - checkInputs = [ nose ]; @@ -32,12 +28,7 @@ buildPythonPackage { cffi ]; - buildInputs = ( - if useOpenblas then - [ openblas ] - else - [ blas liblapack ] - ); + buildInputs = [ blas lapack ]; enableParallelBuilding = true; diff --git a/pkgs/development/python-modules/prox-tv/use-openblas.patch b/pkgs/development/python-modules/prox-tv/use-openblas.patch deleted file mode 100644 index e96faa4d600..00000000000 --- a/pkgs/development/python-modules/prox-tv/use-openblas.patch +++ /dev/null @@ -1,11 +0,0 @@ -index f100b35..448bbaf 100644 ---- a/prox_tv/prox_tv_build.py -+++ b/prox_tv/prox_tv_build.py -@@ -109,6 +109,6 @@ ffi.set_source( - define_macros=[('NOMATLAB', 1)], - extra_compile_args=extra_compile_args, - extra_link_args=extra_link_args, -- libraries=['blas', 'lapack'], -+ libraries=['openblas'], - include_dirs=['/usr/include'] - ) diff --git a/pkgs/development/python-modules/pysparse/default.nix b/pkgs/development/python-modules/pysparse/default.nix index 41f67a4140d..fda5ad59608 100644 --- a/pkgs/development/python-modules/pysparse/default.nix +++ b/pkgs/development/python-modules/pysparse/default.nix @@ -3,7 +3,8 @@ , fetchFromGitHub , numpy , setuptools -, liblapack +, blas +, lapack , isPy27 , python }: @@ -24,8 +25,8 @@ buildPythonPackage { propagatedBuildInputs = [ numpy - numpy.blas - liblapack + blas + lapack ]; # Include patches from working version of PySparse 1.3-dev in diff --git a/pkgs/development/python-modules/scs/default.nix b/pkgs/development/python-modules/scs/default.nix index 4e500d68535..128e9276608 100644 --- a/pkgs/development/python-modules/scs/default.nix +++ b/pkgs/development/python-modules/scs/default.nix @@ -2,7 +2,7 @@ , buildPythonPackage , fetchFromGitHub , blas -, liblapack +, lapack , numpy , scipy , scs @@ -26,7 +26,7 @@ buildPythonPackage rec { ''; buildInputs = [ - liblapack + lapack blas ]; diff --git a/pkgs/development/r-modules/default.nix b/pkgs/development/r-modules/default.nix index 5ee2423c983..44ff794654d 100644 --- a/pkgs/development/r-modules/default.nix +++ b/pkgs/development/r-modules/default.nix @@ -252,7 +252,7 @@ let data_table = [pkgs.zlib.dev] ++ lib.optional stdenv.isDarwin pkgs.llvmPackages.openmp; devEMF = [ pkgs.xorg.libXft.dev pkgs.x11 ]; diversitree = [ pkgs.gsl_1 pkgs.fftw ]; - EMCluster = [ pkgs.liblapack ]; + EMCluster = [ pkgs.lapack ]; fftw = [ pkgs.fftw.dev ]; fftwtools = [ pkgs.fftw.dev ]; Formula = [ pkgs.gmp ]; @@ -808,11 +808,11 @@ let }); slfm = old.slfm.overrideDerivation (attrs: { - PKG_LIBS = "-L${pkgs.openblasCompat}/lib -lopenblas"; + PKG_LIBS = "-L${pkgs.blas}/lib -lblas -L${pkgs.lapack}/lib -llapack"; }); SamplerCompare = old.SamplerCompare.overrideDerivation (attrs: { - PKG_LIBS = "-L${pkgs.openblasCompat}/lib -lopenblas"; + PKG_LIBS = "-L${pkgs.blas}/lib -lblas -L${pkgs.lapack}/lib -llapack"; }); EMCluster = old.EMCluster.overrideDerivation (attrs: { diff --git a/pkgs/development/tools/poetry2nix/poetry2nix/overrides.nix b/pkgs/development/tools/poetry2nix/poetry2nix/overrides.nix index 8301dcd49b8..04340ac4e89 100644 --- a/pkgs/development/tools/poetry2nix/poetry2nix/overrides.nix +++ b/pkgs/development/tools/poetry2nix/poetry2nix/overrides.nix @@ -275,20 +275,15 @@ self: super: old: let blas = old.passthru.args.blas or pkgs.openblasCompat; - blasImplementation = lib.nameFromURL blas.name "-"; + lapack = old.passthru.args.lapack or pkgs.openblasCompat; cfg = pkgs.writeTextFile { name = "site.cfg"; - text = ( - lib.generators.toINI {} { - ${blasImplementation} = { - include_dirs = "${blas}/include"; - library_dirs = "${blas}/lib"; - } // lib.optionalAttrs (blasImplementation == "mkl") { - mkl_libs = "mkl_rt"; - lapack_libs = ""; - }; - } - ); + text = (lib.generators.toINI {} { + ${blas.implementation} = { + include_dirs = "${blas}/include:${lapack}/include"; + library_dirs = "${blas}/lib:${lapack}/lib"; + }; + }); }; in { @@ -299,8 +294,8 @@ self: super: ln -s ${cfg} site.cfg ''; passthru = old.passthru // { - blas = blas; - inherit blasImplementation cfg; + blsaImplementation = blas.implementation; + inherit blas cfg; }; } ); diff --git a/pkgs/servers/mail/rspamd/default.nix b/pkgs/servers/mail/rspamd/default.nix index 7b9e766f246..7f54b97a8e8 100644 --- a/pkgs/servers/mail/rspamd/default.nix +++ b/pkgs/servers/mail/rspamd/default.nix @@ -1,6 +1,6 @@ { stdenv, lib, fetchFromGitHub, cmake, perl , glib, luajit, openssl, pcre, pkgconfig, sqlite, ragel, icu -, hyperscan, jemalloc, openblas, lua, libsodium +, hyperscan, jemalloc, blas, lapack, lua, libsodium , withBlas ? true , withHyperscan ? stdenv.isx86_64 , withLuaJIT ? stdenv.isx86_64 @@ -22,7 +22,7 @@ stdenv.mkDerivation rec { nativeBuildInputs = [ cmake pkgconfig perl ]; buildInputs = [ glib openssl pcre sqlite ragel icu jemalloc libsodium ] ++ lib.optional withHyperscan hyperscan - ++ lib.optional withBlas openblas + ++ lib.optionals withBlas [ blas lapack ] ++ lib.optional withLuaJIT luajit ++ lib.optional (!withLuaJIT) lua; cmakeFlags = [ diff --git a/pkgs/tools/misc/hpl/default.nix b/pkgs/tools/misc/hpl/default.nix index 6cacbaf0b84..c131de02180 100644 --- a/pkgs/tools/misc/hpl/default.nix +++ b/pkgs/tools/misc/hpl/default.nix @@ -1,4 +1,6 @@ -{ stdenv, fetchurl, openblasCompat, mpi } : +{ stdenv, fetchurl, blas, lapack, mpi } : + +assert (!blas.is64bit) && (!lapack.is64bit); stdenv.mkDerivation rec { pname = "hpl"; @@ -18,7 +20,7 @@ stdenv.mkDerivation rec { install -D testing/ptest/HPL.dat $out/share/hpl/HPL.dat ''; - buildInputs = [ openblasCompat mpi ]; + buildInputs = [ blas lapack mpi ]; meta = with stdenv.lib; { description = "Portable Implementation of the Linpack Benchmark for Distributed-Memory Computers"; @@ -28,4 +30,3 @@ stdenv.mkDerivation rec { maintainers = [ maintainers.markuskowa ]; }; } - diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 1f11beb8ee3..3c9d5274abd 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -8702,25 +8702,21 @@ in julia_07 = callPackage ../development/compilers/julia/0.7.nix { gmp = gmp6; - openblas = openblasCompat; inherit (darwin.apple_sdk.frameworks) CoreServices ApplicationServices; }; julia_10 = callPackage ../development/compilers/julia/1.0.nix { gmp = gmp6; - openblas = openblasCompat; inherit (darwin.apple_sdk.frameworks) CoreServices ApplicationServices; }; julia_11 = callPackage ../development/compilers/julia/1.1.nix { gmp = gmp6; - openblas = openblasCompat; inherit (darwin.apple_sdk.frameworks) CoreServices ApplicationServices; }; julia_13 = callPackage ../development/compilers/julia/1.3.nix { gmp = gmp6; - openblas = openblasCompat; inherit (darwin.apple_sdk.frameworks) CoreServices ApplicationServices; }; @@ -9404,16 +9400,13 @@ in octave = callPackage ../development/interpreters/octave { python = python3; - openblas = if stdenv.isDarwin then openblasCompat else openblas; }; octave-jit = callPackage ../development/interpreters/octave { python = python3; - openblas = if stdenv.isDarwin then openblasCompat else openblas; enableJIT = true; }; octaveFull = (lowPrio (libsForQt512.callPackage ../development/interpreters/octave { python = python3; - openblas = if stdenv.isDarwin then openblasCompat else openblas; enableQt = true; overridePlatforms = ["x86_64-linux" "x86_64-darwin"]; })); @@ -15252,7 +15245,6 @@ in texLive = texlive.combine { inherit (texlive) scheme-small inconsolata helvetic texinfo fancyvrb cm-super; }; - openblas = openblasCompat; withRecommendedPackages = false; inherit (darwin.apple_sdk.frameworks) Cocoa Foundation; inherit (darwin) libobjc; @@ -24191,7 +24183,7 @@ in molden = callPackage ../applications/science/chemistry/molden { }; - octopus = callPackage ../applications/science/chemistry/octopus { openblas=openblasCompat; }; + octopus = callPackage ../applications/science/chemistry/octopus { }; openmolcas = callPackage ../applications/science/chemistry/openmolcas { }; @@ -24532,7 +24524,7 @@ in sympow = callPackage ../development/libraries/science/math/sympow { }; - ipopt = callPackage ../development/libraries/science/math/ipopt { openblas = openblasCompat; }; + ipopt = callPackage ../development/libraries/science/math/ipopt { }; gmsh = callPackage ../applications/science/math/gmsh { }; diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 81e75d808ff..ac6b5f59220 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4667,9 +4667,7 @@ in { Nuitka = callPackage ../development/python-modules/nuitka { }; numpy = let - numpy_ = callPackage ../development/python-modules/numpy { - blas = pkgs.openblasCompat; - }; + numpy_ = callPackage ../development/python-modules/numpy { }; numpy_2 = numpy_.overridePythonAttrs(oldAttrs: rec { version = "1.16.5"; src = oldAttrs.src.override { @@ -4952,11 +4950,7 @@ in { promise = callPackage ../development/python-modules/promise { }; - prox-tv = callPackage ../development/python-modules/prox-tv { - # We need to use blas instead of openblas on darwin, - # see https://github.com/NixOS/nixpkgs/pull/45013. - useOpenblas = ! stdenv.isDarwin; - }; + prox-tv = callPackage ../development/python-modules/prox-tv { }; pvlib = callPackage ../development/python-modules/pvlib { }; From 7841b4290f72af6041163cc1bdcab6a710b0d4a5 Mon Sep 17 00:00:00 2001 From: Matthew Bauer Date: Tue, 31 Mar 2020 02:39:39 -0400 Subject: [PATCH 4/8] pkgs/release-alternatives.nix: create Add some ability to test the different BLAS/LAPACK implementations together. --- pkgs/top-level/release-alternatives.nix | 91 +++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 pkgs/top-level/release-alternatives.nix diff --git a/pkgs/top-level/release-alternatives.nix b/pkgs/top-level/release-alternatives.nix new file mode 100644 index 00000000000..230e20417bc --- /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; +} From d83e9c95738df2e9f912c239201f50e53e40810b Mon Sep 17 00:00:00 2001 From: Matthew Bauer Date: Tue, 31 Mar 2020 14:53:02 -0400 Subject: [PATCH 5/8] setup-hooks/audit-blas.sh: init Add a simple hook that makes sure blas and lapack are linked to the right place. --- pkgs/build-support/setup-hooks/audit-blas.sh | 37 ++++++++++++++++++++ pkgs/top-level/all-packages.nix | 4 +++ 2 files changed, 41 insertions(+) create mode 100644 pkgs/build-support/setup-hooks/audit-blas.sh diff --git a/pkgs/build-support/setup-hooks/audit-blas.sh b/pkgs/build-support/setup-hooks/audit-blas.sh new file mode 100644 index 00000000000..6a40073fb23 --- /dev/null +++ b/pkgs/build-support/setup-hooks/audit-blas.sh @@ -0,0 +1,37 @@ +# Ensure that we are always linking against “libblas.so.3” and +# “liblapack.so.3”. + +auditBlas() { + local dir="$prefix" + [ -e "$dir" ] || return 0 + + local i + while IFS= read -r -d $'\0' i; do + if ! isELF "$i"; then continue; fi + + if $OBJDUMP -p "$i" | grep 'NEEDED' | awk '{ print $2; }' | grep -q '\(libmkl_rt.so\|libopenblas.so.0\)'; then + echo "$i refers to a specific implementation of BLAS or LAPACK." + echo "This prevents users from switching BLAS/LAPACK implementations." + echo "Add \`blas' or \`lapack' to buildInputs instead of \`mkl' or \`openblas'." + exit 1 + fi + + (IFS=: + for dir in "$(patchelf --print-rpath "$i")"; do + if [ -f "$dir/libblas.so.3" ] || [ -f "$dir/libblas.so" ]; then + if [ "$dir" != "@blas@/lib" ]; then + echo "$dir is not allowed to contain a library named libblas.so.3" + exit 1 + fi + fi + if [ -f "$dir/liblapack.so.3" ] || [ -f "$dir/liblapack.so" ]; then + if [ "$dir" != "@lapack@/lib" ]; then + echo "$dir is not allowed to contain a library named liblapack.so.3" + exit 1 + fi + fi + done) + done < <(find "$dir" -type f -print0) +} + +fixupOutputHooks+=(auditBlas) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 3c9d5274abd..37e000a25d7 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -104,6 +104,10 @@ in ### BUILD SUPPORT + auditBlasHook = makeSetupHook + { name = "auto-blas-hook"; deps = [ blas lapack ]; } + ../build-support/setup-hooks/audit-blas.sh; + autoreconfHook = makeSetupHook { deps = [ autoconf automake gettext libtool ]; } ../build-support/setup-hooks/autoreconf.sh; From 98fb0ede70388016a664e4d9b6543a95a79dd221 Mon Sep 17 00:00:00 2001 From: Matthew Bauer Date: Thu, 16 Apr 2020 18:06:49 -0500 Subject: [PATCH 6/8] arrayfire: remove mkl This is unfree. --- pkgs/development/libraries/arrayfire/default.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkgs/development/libraries/arrayfire/default.nix b/pkgs/development/libraries/arrayfire/default.nix index e637aab48b2..9dd4b1b93a9 100644 --- a/pkgs/development/libraries/arrayfire/default.nix +++ b/pkgs/development/libraries/arrayfire/default.nix @@ -1,5 +1,5 @@ { stdenv, fetchurl, fetchFromGitHub, cmake, pkgconfig -, opencl-clhpp, ocl-icd, fftw, fftwFloat, mkl +, opencl-clhpp, ocl-icd, fftw, fftwFloat , blas, lapack, boost, mesa, libGLU, libGL , freeimage, python, clfft, clblas , doxygen, buildDocs ? false @@ -46,7 +46,6 @@ stdenv.mkDerivation rec { buildInputs = [ opencl-clhpp fftw fftwFloat - mkl blas lapack libGLU libGL mesa freeimage From fcf33e24996b4cd92a817057b36aeaf86fdb3c7d Mon Sep 17 00:00:00 2001 From: Matthew Bauer Date: Fri, 17 Apr 2020 14:00:19 -0500 Subject: [PATCH 7/8] scs: breaks on 64bit blas --- pkgs/development/libraries/science/math/scs/default.nix | 2 ++ pkgs/top-level/release-alternatives.nix | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/pkgs/development/libraries/science/math/scs/default.nix b/pkgs/development/libraries/science/math/scs/default.nix index 7f7171f67e5..2dcb47f11ba 100644 --- a/pkgs/development/libraries/science/math/scs/default.nix +++ b/pkgs/development/libraries/science/math/scs/default.nix @@ -1,5 +1,7 @@ { stdenv, fetchFromGitHub, blas, lapack, gfortran, fixDarwinDylibNames }: +assert (!blas.is64bit) && (!lapack.is64bit); + stdenv.mkDerivation rec { pname = "scs"; version = "2.1.1"; diff --git a/pkgs/top-level/release-alternatives.nix b/pkgs/top-level/release-alternatives.nix index 230e20417bc..c31a03c8093 100644 --- a/pkgs/top-level/release-alternatives.nix +++ b/pkgs/top-level/release-alternatives.nix @@ -34,7 +34,7 @@ let ] ++ lib.optionals allowUnfree [ "magma" ]; blas64Users = [ "rspamd" "suitesparse_5_3" "suitesparse_4_4" - "suitesparse_4_2" "scs" "petsc" "magma" "cholmod-extra" + "suitesparse_4_2" "petsc" "cholmod-extra" "arpack" "qrupdate" "iml" "globalarrays" "arrayfire" "xfitter" "lammps" "plink-ng" "quantum-espresso" "calculix" "csdp" "getdp" "giac" "jags" From 97fc083fd4b88b4aa96a930c4b61c14120ddc7e5 Mon Sep 17 00:00:00 2001 From: Matthew Bauer Date: Fri, 17 Apr 2020 14:18:47 -0500 Subject: [PATCH 8/8] giac: broken on 64-bit blas --- pkgs/applications/science/math/giac/default.nix | 1 + pkgs/top-level/release-alternatives.nix | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/applications/science/math/giac/default.nix b/pkgs/applications/science/math/giac/default.nix index feb30b990ab..be3c1e6dcc8 100644 --- a/pkgs/applications/science/math/giac/default.nix +++ b/pkgs/applications/science/math/giac/default.nix @@ -5,6 +5,7 @@ }: assert enableGUI -> libGLU != null && libGL != null && xorg != null && fltk != null; +assert (!blas.is64bit) && (!lapack.is64bit); stdenv.mkDerivation rec { pname = "giac${lib.optionalString enableGUI "-with-xcas"}"; diff --git a/pkgs/top-level/release-alternatives.nix b/pkgs/top-level/release-alternatives.nix index c31a03c8093..eef239d4e0a 100644 --- a/pkgs/top-level/release-alternatives.nix +++ b/pkgs/top-level/release-alternatives.nix @@ -37,7 +37,7 @@ let "suitesparse_4_2" "petsc" "cholmod-extra" "arpack" "qrupdate" "iml" "globalarrays" "arrayfire" "xfitter" "lammps" "plink-ng" "quantum-espresso" - "calculix" "csdp" "getdp" "giac" "jags" + "calculix" "csdp" "getdp" "jags" "lammps" "lammps-mpi" # ["ocamlPackages" "lacaml"] ["haskellPackages" "bindings-levmar"]