treewide: use blas and lapack

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
This commit is contained in:
Matthew Bauer
2020-04-17 16:24:09 -05:00
parent 43873351ff
commit 1c8aba8334
68 changed files with 272 additions and 311 deletions
@@ -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 ''
@@ -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 = [
@@ -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
@@ -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;
@@ -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;
@@ -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]"
)
'';
@@ -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"
)
'';
@@ -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;
@@ -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; {
@@ -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";
@@ -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}"
@@ -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
];
@@ -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)