Merge pull request #8182 from ttuegel/openblas

Numerical computing overhaul
This commit is contained in:
Thomas Tuegel 2015-06-12 08:06:03 -05:00
commit 2a2448bcb7
28 changed files with 346 additions and 845 deletions

View File

@ -153,6 +153,19 @@ nix-env -f "<nixpkgs>" -iA haskellPackages.cabal-install
</para>
</listitem>
<listitem>
<para>
The OpenBLAS library has been updated to version
<literal>0.2.14</literal>. Support for the
<literal>x86_64-darwin</literal> platform was added. Dynamic
architecture detection was enabled; OpenBLAS now selects
microarchitecture-optimized routines at runtime, so optimal
performance is achieved without the need to rebuild OpenBLAS
locally. OpenBLAS has replaced ATLAS in most packages which use an
optimized BLAS or LAPACK implementation.
</para>
</listitem>
</itemizedlist>
</para>

View File

@ -1,7 +1,7 @@
{ stdenv, fetchurl, blas, bzip2, gfortran, liblapack, libX11, libXmu, libXt
{ 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, atlas
, imake, which, jdk, openblas
, withRecommendedPackages ? true
}:
@ -13,10 +13,10 @@ stdenv.mkDerivation rec {
sha256 = "0dagyqgvi8i3nw158qi2zpwm04s4ffzvnmk5niaksvxs30zrbbpm";
};
buildInputs = [ blas bzip2 gfortran liblapack libX11 libXmu libXt
buildInputs = [ bzip2 gfortran libX11 libXmu libXt
libXt libjpeg libpng libtiff ncurses pango pcre perl readline tcl
texLive tk xz zlib less texinfo graphviz icu pkgconfig bison imake
which jdk atlas
which jdk openblas
];
patches = [ ./no-usr-local-search-paths.patch ];
@ -25,8 +25,8 @@ stdenv.mkDerivation rec {
configureFlagsArray=(
--disable-lto
--with${stdenv.lib.optionalString (!withRecommendedPackages) "out"}-recommended-packages
--with-blas="-L${atlas}/lib -lf77blas -latlas"
--with-lapack="-L${liblapack}/lib -llapack"
--with-blas="-L${openblas}/lib -lopenblas"
--with-lapack="-L${openblas}/lib -lopenblas"
--with-readline
--with-tcltk --with-tcl-config="${tcl}/lib/tclConfig.sh" --with-tk-config="${tk}/lib/tkConfig.sh"
--with-cairo

View File

@ -1,4 +1,4 @@
{stdenv, fetchurl, gfortran, liblapack, blas}:
{stdenv, fetchurl, gfortran, openblas}:
stdenv.mkDerivation rec {
name = "JAGS-3.4.0";
@ -6,7 +6,8 @@ stdenv.mkDerivation rec {
url = "mirror://sourceforge/mcmc-jags/${name}.tar.gz";
sha256 = "0ayqsz9kkmbss7mxlwr34ch2z1vsb65lryjzqpprab1ccyiaksib";
};
buildInputs = [gfortran liblapack blas];
buildInputs = [gfortran openblas];
configureFlags = [ "--with-blas=-lopenblas" "--with-lapack=-lopenblas" ];
meta = {
description = "Just Another Gibbs Sampler";

View File

@ -1,6 +1,6 @@
{ stdenv, fetchgit, gfortran, perl, m4, llvm, gmp, pcre, zlib
, readline, fftwSinglePrec, fftw, libunwind, suitesparse, glpk, fetchurl
, ncurses, libunistring, lighttpd, patchelf, openblas, liblapack
, ncurses, libunistring, lighttpd, patchelf, openblas
, tcl, tk, xproto, libX11, git, mpfr
} :
let
@ -71,7 +71,7 @@ stdenv.mkDerivation rec {
buildInputs = [ gfortran perl m4 gmp pcre llvm readline zlib
fftw fftwSinglePrec libunwind suitesparse glpk ncurses libunistring patchelf
openblas liblapack tcl tk xproto libX11 git mpfr
openblas tcl tk xproto libX11 git mpfr
];
configurePhase = ''
@ -91,14 +91,13 @@ stdenv.mkDerivation rec {
copy_kill_hash "${dsfmt_src}" deps/random
${if realGcc ==null then "" else
''export NIX_LDFLAGS="$NIX_LDFLAGS -L${realGcc}/lib -L${realGcc}/lib64 -lpcre -llapack -lm -lfftw3f -lfftw3 -lglpk -lunistring -lz -lgmp -lmpfr"''}
''export NIX_LDFLAGS="$NIX_LDFLAGS -L${realGcc}/lib -L${realGcc}/lib64 -lpcre -lopenblas -lm -lfftw3f -lfftw3 -lglpk -lunistring -lz -lgmp -lmpfr"''}
export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -fPIC "
export LDFLAGS="-L${suitesparse}/lib -L$out/lib/julia -Wl,-rpath,$out/lib/julia"
export GLPK_PREFIX="${glpk}/include"
mkdir -p "$out/lib"
sed -e "s@/usr/local/lib@$out/lib@g" -i deps/Makefile
sed -e "s@/usr/lib@$out/lib@g" -i deps/Makefile
@ -112,8 +111,11 @@ stdenv.mkDerivation rec {
preBuild = ''
mkdir -p usr/lib
echo "$out"
mkdir -p "$out/lib"
ln -s "${openblas}/lib/libopenblas.so" "$out/lib/libblas.so"
ln -s "${openblas}/lib/libopenblas.so" "$out/lib/liblapack.so"
echo "$out"
(
cd "$(mktemp -d)"
for i in "${suitesparse}"/lib/lib*.a; do

View File

@ -1,142 +1,138 @@
{ stdenv, fetchgit, gfortran, perl, m4, llvm, gmp, pcre, zlib
, readline, fftwSinglePrec, fftw, libunwind, suitesparse, glpk, fetchurl
, ncurses, libunistring, patchelf, openblas, liblapack
, tcl, tk, xproto, libX11, git, mpfr, which, wget
{ stdenv, fetchgit, fetchurl
# build tools
, gfortran, git, m4, patchelf, perl, which
# libjulia dependencies
, libunwind, llvm, readline, utf8proc, zlib
# standard library dependencies
, double_conversion, fftwSinglePrec, fftw, glpk, gmp, mpfr, pcre
, openblas, arpack, suitesparse
}:
assert stdenv.isLinux;
with stdenv.lib;
let
realGcc = stdenv.cc.cc;
in
stdenv.mkDerivation rec {
pname = "julia";
version = "0.3.6";
version = "0.3.9";
name = "${pname}-${version}";
src = fetchgit {
url = "git://github.com/JuliaLang/julia.git";
rev = "refs/tags/v${version}";
sha256 = "ad0820affefd04eb6fba7deb2603756974711846a251900a9202b8d2665a37cf";
name = "julia-git-v${version}";
};
patches = [ ./0001-work-around-buggy-wcwidth.patch ];
extraSrcs =
let
dsfmt_ver = "2.2";
grisu_ver = "1.1.1";
openblas_ver = "v0.2.13";
lapack_ver = "3.5.0";
arpack_ver = "3.1.5";
patchelf_ver = "0.8";
pcre_ver = "8.36";
utf8proc_ver = "1.1.6";
dsfmt_src = fetchurl {
url = "http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/dSFMT-src-${dsfmt_ver}.tar.gz";
name = "dsfmt-${dsfmt_ver}.tar.gz";
md5 = "cb61be3be7254eae39684612c524740d";
};
grisu_src = fetchurl {
url = "http://double-conversion.googlecode.com/files/double-conversion-${grisu_ver}.tar.gz";
md5 = "29b533ed4311161267bff1a9a97e2953";
};
openblas_src = fetchurl {
url = "https://github.com/xianyi/OpenBLAS/tarball/${openblas_ver}";
name = "openblas-${openblas_ver}.tar.gz";
md5 = "74adf4c0d0d82bff4774be5bf2134183";
};
arpack_src = fetchurl rec {
url = "https://github.com/opencollab/arpack-ng/archive/${arpack_ver}.tar.gz";
md5 = "d84e1b6108d9ee67c0d21aba7099e953";
name = "arpack-ng-${arpack_ver}.tar.gz";
};
lapack_src = fetchurl {
url = "http://www.netlib.org/lapack/lapack-${lapack_ver}.tgz";
name = "lapack-${lapack_ver}.tgz";
md5 = "b1d3e3e425b2e44a06760ff173104bdf";
};
patchelf_src = fetchurl {
url = "http://hydra.nixos.org/build/1524660/download/2/patchelf-${patchelf_ver}.tar.bz2";
md5 = "5087261514b4b5814a39c3d3a36eb6ef";
};
pcre_src = fetchurl {
url = "ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-${pcre_ver}.tar.bz2";
md5 = "b767bc9af0c20bc9c1fe403b0d41ad97";
};
utf8proc_src = fetchurl {
url = "http://www.public-software-group.org/pub/projects/utf8proc/v${utf8proc_ver}/utf8proc-v${utf8proc_ver}.tar.gz";
md5 = "2462346301fac2994c34f5574d6c3ca7";
};
src = fetchgit {
url = "git://github.com/JuliaLang/julia.git";
rev = "refs/tags/v${version}";
md5 = "d28e8f428485219f756d80c011d5dd32";
name = "julia-git-v${version}";
};
buildInputs = [ gfortran perl m4 gmp pcre llvm readline zlib
fftw fftwSinglePrec libunwind suitesparse glpk ncurses libunistring patchelf
openblas liblapack tcl tk xproto libX11 git mpfr which wget
];
configurePhase = ''
for i in GMP LLVM PCRE READLINE FFTW LIBUNWIND SUITESPARSE GLPK ZLIB MPFR;
do
makeFlags="$makeFlags USE_SYSTEM_$i=1 "
done
makeFlags="$makeFlags JULIA_CPU_TARGET=core2";
in [ dsfmt_src ];
prePatch = ''
copy_kill_hash(){
cp "$1" "$2/$(basename "$1" | sed -e 's/^[a-z0-9]*-//')"
}
for i in "${grisu_src}" "${dsfmt_src}" "${arpack_src}" "${patchelf_src}" \
"${pcre_src}" "${utf8proc_src}" "${lapack_src}" "${openblas_src}"; do
for i in $extraSrcs; do
copy_kill_hash "$i" deps
done
'';
${if realGcc ==null then "" else
''export NIX_LDFLAGS="$NIX_LDFLAGS -L${realGcc}/lib -L${realGcc}/lib64 -lpcre -llapack -lm -lfftw3f -lfftw3 -lglpk -lunistring -lz -lgmp -lmpfr -lblas -lopenblas -L$out/lib"''}
export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -fPIC "
export LDFLAGS="-L${suitesparse}/lib -L$out/lib/julia -Wl,-rpath,$out/lib/julia"
export GLPK_PREFIX="${glpk}/include"
mkdir -p "$out/lib"
sed -e "s@/usr/local/lib@$out/lib@g" -i deps/Makefile
sed -e "s@/usr/lib@$out/lib@g" -i deps/Makefile
export makeFlags="$makeFlags PREFIX=$out SHELL=${stdenv.shell} prefix=$out"
export dontPatchELF=1
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$PWD/usr/lib:$PWD/usr/lib/julia"
postPatch = ''
sed -i deps/Makefile \
-e "s@/usr/local/lib@$out/lib@g" \
-e "s@/usr/lib@$out/lib@g" \
-e "s@/usr/include/double-conversion@${double_conversion}/include/double-conversion@g"
patchShebangs . contrib
export PATH="$PATH:${stdenv.cc.libc}/sbin"
# ldconfig doesn't seem to ever work on NixOS; system-wide ldconfig cache
# is probably not what we want anyway on non-NixOS
sed -e "s@/sbin/ldconfig@true@" -i src/ccall.*
ln -s "${openblas}/lib/libopenblas.so" "$out/lib/libblas.so"
'';
preBuild = ''
mkdir -p usr/lib
buildInputs =
[ libunwind llvm readline utf8proc zlib
double_conversion fftw fftwSinglePrec glpk gmp mpfr pcre
openblas arpack suitesparse
];
echo "$out"
mkdir -p "$out/lib"
(
cd "$(mktemp -d)"
for i in "${suitesparse}"/lib/lib*.a; do
ar -x $i
done
gcc *.o --shared -o "$out/lib/libsuitesparse.so"
)
cp "$out/lib/libsuitesparse.so" usr/lib
for i in umfpack cholmod amd camd colamd spqr; do
ln -s libsuitesparse.so "$out"/lib/lib$i.so;
ln -s libsuitesparse.so "usr"/lib/lib$i.so;
done
nativeBuildInputs = [ gfortran git m4 patchelf perl which ];
makeFlags =
let
arch = head (splitString "-" stdenv.system);
march =
{ "x86_64-linux" = "x86-64";
"x86_64-darwin" = "x86-64";
"i686-linux" = "i686";
}."${stdenv.system}" or (throw "unsupported system: ${stdenv.system}");
in [
"ARCH=${arch}"
"MARCH=${march}"
"JULIA_CPU_TARGET=${march}"
"PREFIX=$(out)"
"prefix=$(out)"
"SHELL=${stdenv.shell}"
"USE_SYSTEM_BLAS=1"
"LIBBLAS=-lopenblas"
"LIBBLASNAME=libopenblas"
"USE_SYSTEM_LAPACK=1"
"LIBLAPACK=-lopenblas"
"LIBLAPACKNAME=libopenblas"
"USE_SYSTEM_ARPACK=1"
"USE_SYSTEM_FFTW=1"
"USE_SYSTEM_GLPK=1"
"USE_SYSTEM_GMP=1"
"USE_SYSTEM_GRISU=1"
"USE_SYSTEM_LIBUNWIND=1"
"USE_SYSTEM_LLVM=1"
"USE_SYSTEM_MPFR=1"
"USE_SYSTEM_PATCHELF=1"
"USE_SYSTEM_PCRE=1"
"USE_SYSTEM_READLINE=1"
"USE_SYSTEM_SUITESPARSE=1"
"USE_SYSTEM_UTF8PROC=1"
"USE_SYSTEM_ZLIB=1"
];
GLPK_PREFIX = "${glpk}/include";
NIX_CFLAGS_COMPILE = [ "-fPIC" ];
# Julia tries to load these libraries dynamically at runtime, but they can't be found.
# Easier by far to link against them as usual.
# These go in LDFLAGS, where they affect only Julia itself, and not NIX_LDFLAGS,
# where they would also be used for all the private libraries Julia builds.
LDFLAGS = [
"-larpack"
"-lfftw3_threads"
"-lfftw3f_threads"
"-lglpk"
"-lgmp"
"-lmpfr"
"-lopenblas"
"-lpcre"
"-lsuitesparse"
"-lz"
];
preConfigure = ''
export PATH="$PATH:${stdenv.cc.libc}/sbin"
'';
dontStrip = true;
dontPatchELF = true;
enableParallelBuilding = true;
@ -147,8 +143,8 @@ stdenv.mkDerivation rec {
description = "High-level performance-oriented dynamical language for technical computing";
homepage = "http://julialang.org/";
license = stdenv.lib.licenses.mit;
maintainers = [ stdenv.lib.maintainers.raskin ];
platforms = with stdenv.lib.platforms; linux;
maintainers = with stdenv.lib.maintainers; [ raskin ttuegel ];
platforms = [ "i686-linux" "x86_64-linux" "x86_64-darwin" ];
broken = false;
};
}

View File

@ -0,0 +1,24 @@
From b9070aeab0ab672ffe321089631f9afe263b0caa Mon Sep 17 00:00:00 2001
From: Thomas Tuegel <ttuegel@gmail.com>
Date: Thu, 4 Jun 2015 12:03:32 -0500
Subject: [PATCH] work around buggy wcwidth
---
test/unicode.jl | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/test/unicode.jl b/test/unicode.jl
index 52c3e6a..f1ef698 100644
--- a/test/unicode.jl
+++ b/test/unicode.jl
@@ -103,5 +103,6 @@ end
# handling of embedded NUL chars (#10958)
@test length("\0w") == length("\0α") == 2
-@test strwidth("\0w") == strwidth("\0α") == 1
+@test strwidth("\0w") == charwidth('\0') + charwidth('w')
+@test strwidth("\0α") == charwidth('\0') + charwidth('α')
@test normalize_string("\0W", casefold=true) == "\0w"
--
2.4.1

View File

@ -119,6 +119,22 @@ self: super: {
# Help libconfig find it's C language counterpart.
libconfig = (dontCheck super.libconfig).override { config = pkgs.libconfig; };
hmatrix = overrideCabal super.hmatrix (drv: {
configureFlags = (drv.configureFlags or []) ++ [ "-fopenblas" ];
extraLibraries = [ pkgs.openblasCompat ];
preConfigure = ''
sed -i hmatrix.cabal -e 's@/usr/lib/openblas/lib@${pkgs.openblasCompat}/lib@'
'';
});
bindings-levmar = overrideCabal super.bindings-levmar (drv: {
preConfigure = ''
sed -i bindings-levmar.cabal \
-e 's,extra-libraries: lapack blas,extra-libraries: openblas,'
'';
extraLibraries = [ pkgs.openblas ];
});
# The Haddock phase fails for one reason or another.
attoparsec-conduit = dontHaddock super.attoparsec-conduit;
base-noprelude = dontHaddock super.base-noprelude;

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, liblapack, readline, gettext, ncurses }:
{ stdenv, fetchurl, readline, gettext, ncurses }:
stdenv.mkDerivation rec {
name = "gnu-apl-${version}";
@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
sha256 = "0h4diq3wfbdwxp5nm0z4b0p1zq13lwip0y7v28r9v0mbbk8xsfh1";
};
buildInputs = [ liblapack readline gettext ncurses ];
buildInputs = [ readline gettext ncurses ];
postInstall = ''
cp -r support-files/ $out/share/doc/

View File

@ -1,10 +1,22 @@
{ stdenv, fetchurl, gfortran, readline, ncurses, perl, flex, texinfo, qhull
, libX11, graphicsmagick, pcre, liblapack, pkgconfig, mesa, fltk
, fftw, fftwSinglePrec, zlib, curl, qrupdate
, libX11, graphicsmagick, pcre, pkgconfig, mesa, fltk
, fftw, fftwSinglePrec, zlib, curl, qrupdate, openblas
, qt ? null, qscintilla ? null, ghostscript ? null, llvm ? null, hdf5 ? null,glpk ? null
, suitesparse ? null, gnuplot ? null, jdk ? null, python ? null
}:
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
stdenv.mkDerivation rec {
version = "4.0.0";
name = "octave-${version}";
@ -14,7 +26,7 @@ stdenv.mkDerivation rec {
};
buildInputs = [ gfortran readline ncurses perl flex texinfo qhull libX11
graphicsmagick pcre liblapack pkgconfig mesa fltk zlib curl
graphicsmagick pcre pkgconfig mesa fltk zlib curl openblas
fftw fftwSinglePrec qrupdate ]
++ (stdenv.lib.optional (qt != null) qt)
++ (stdenv.lib.optional (qscintilla != null) qscintilla)
@ -34,7 +46,13 @@ stdenv.mkDerivation rec {
# problems on Hydra
enableParallelBuilding = false;
configureFlags = [ "--enable-readline" "--enable-dl" ];
configureFlags =
[ "--enable-readline"
"--enable-dl"
"--with-blas=openblas"
"--with-lapack=openblas"
]
++ stdenv.lib.optional openblas.blas64 "--enable-64";
# Keep a copy of the octave tests detailed results in the output
# derivation, because someone may care

View File

@ -1,7 +1,7 @@
{ stdenv
, fetchurl
, gfortran
, liblapack
, openblas
}:
stdenv.mkDerivation {
name = "qrupdate-1.1.2";
@ -10,20 +10,25 @@ stdenv.mkDerivation {
sha256 = "024f601685phcm1pg8lhif3lpy5j9j0k6n0r46743g4fvh8wg8g2";
};
configurePhase = ''
configurePhase =
''
export PREFIX=$out
sed -i -e 's,^BLAS=.*,BLAS=-L${liblapack}/lib -L${liblapack.blas} -lcblas -lf77blas -latlas,' \
-e 's,^LAPACK=.*,LAPACK=-L${liblapack}/lib -llapack -lcblas -lf77blas -latlas,' \
sed -i -e 's,^BLAS=.*,BLAS=-L${openblas}/lib -lopenblas,' \
-e 's,^LAPACK=.*,LAPACK=-L${openblas}/lib -lopenblas,' \
Makeconf
''
+ stdenv.lib.optionalString openblas.blas64
''
sed -i Makeconf -e '/^FFLAGS=.*/ s/$/-fdefault-integer-8/'
'';
doCheck = true;
checkTarget = "test";
buildTarget = "lib";
buildFlags = [ "lib" "solib" ];
installTarget = "install-staticlib";
installTargets = "install";
buildInputs = [ gfortran liblapack ];
buildInputs = [ gfortran openblas ];
}

View File

@ -1,4 +1,6 @@
{ stdenv, fetchurl, gfortran, atlasWithLapack }:
{ stdenv, fetchurl, gfortran, openblas }:
with stdenv.lib;
let
version = "3.2.0";
@ -10,10 +12,15 @@ stdenv.mkDerivation {
sha256 = "1fwch6vipms1ispzg2djvbzv5wag36f1dmmr3xs3mbp6imfyhvff";
};
buildInputs = [ gfortran atlasWithLapack ];
buildInputs = [ gfortran openblas ];
# Auto-detection fails because gfortran brings in BLAS by default
configureFlags="--with-blas=-latlas --with-lapack=-latlas";
configureFlags = [
"--with-blas=-lopenblas"
"--with-lapack=-lopenblas"
];
FFLAGS = optional openblas.blas64 "-fdefault-integer-8";
meta = {
homepage = "http://forge.scilab.org/index.php/p/arpack-ng/";

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, unzip, blas, liblapack, gfortran }:
{ stdenv, fetchurl, unzip, openblas, gfortran }:
stdenv.mkDerivation rec {
version = "3.12.3";
@ -13,9 +13,14 @@ stdenv.mkDerivation rec {
export CXXDEFS="-DHAVE_RAND -DHAVE_CSTRING -DHAVE_CSTDIO"
'';
configureFlags = [
"--with-blas-lib=-lopenblas"
"--with-lapack-lib=-lopenblas"
];
nativeBuildInputs = [ unzip ];
buildInputs = [ gfortran blas liblapack ];
buildInputs = [ gfortran openblas ];
enableParallelBuilding = true;

View File

@ -1,37 +0,0 @@
{ stdenv, fetchurl, gfortran, perl, liblapack, config }:
let local = config.openblas.preferLocalBuild or false;
localTarget = config.openblas.target or "";
in
stdenv.mkDerivation rec {
version = "0.2.10";
name = "openblas-${version}";
src = fetchurl {
url = "https://github.com/xianyi/OpenBLAS/tarball/v${version}";
sha256 = "06i0q4qnd5q5xljzrgvda0gjsczc6l2pl9hw6dn2qjpw38al73za";
name = "openblas-${version}.tar.gz";
};
preBuild = "cp ${liblapack.src} lapack-${liblapack.meta.version}.tgz";
buildInputs = [gfortran perl];
cpu = builtins.head (stdenv.lib.splitString "-" stdenv.system);
target = if local then localTarget else
if cpu == "i686" then "P2" else
if cpu == "x86_64" then "CORE2" else
# allow autodetect
"";
makeFlags = "${if target != "" then "TARGET=" else ""}${target} FC=gfortran CC=cc PREFIX=\"\$(out)\" INTERFACE64=1";
meta = with stdenv.lib; {
description = "Basic Linear Algebra Subprograms";
license = licenses.bsd3;
homepage = "https://github.com/xianyi/OpenBLAS";
platforms = [ "x86_64-linux" ];
maintainers = with maintainers; [ ttuegel ];
};
}

View File

@ -1,37 +0,0 @@
{ stdenv, fetchurl, gfortran, perl, liblapack, config }:
let local = config.openblas.preferLocalBuild or false;
localTarget = config.openblas.target or "";
in
stdenv.mkDerivation rec {
version = "0.2.2";
name = "openblas-${version}";
src = fetchurl {
url = "https://github.com/xianyi/OpenBLAS/tarball/v${version}";
sha256 = "13kdx3knff5ajnmgn419g0dnh83plin07p7akwamr3v7z5qfrzqr";
name = "openblas-${version}.tar.gz";
};
preBuild = "cp ${liblapack.src} lapack-${liblapack.meta.version}.tgz";
buildInputs = [gfortran perl];
cpu = builtins.head (stdenv.lib.splitString "-" stdenv.system);
target = if local then localTarget else
if cpu == "i686" then "P2" else
if cpu == "x86_64" then "CORE2" else
# allow autodetect
"";
makeFlags = "${if target != "" then "TARGET=" else ""}${target} FC=gfortran CC=cc PREFIX=\"\$(out)\"";
meta = with stdenv.lib; {
description = "Basic Linear Algebra Subprograms";
license = licenses.bsd3;
homepage = "https://github.com/xianyi/OpenBLAS";
platforms = [ "x86_64-linux" ];
maintainers = with maintainers; [ ttuegel ];
};
}

View File

@ -1,22 +1,24 @@
{ stdenv, fetchurl, gfortran, perl, liblapack, config, coreutils }:
{ stdenv, fetchurl, gfortran, perl, liblapack, config, coreutils
# Most packages depending on openblas expect integer width to match pointer width,
# but some expect to use 32-bit integers always (for compatibility with reference BLAS).
, blas64 ? null
}:
with stdenv.lib;
let local = config.openblas.preferLocalBuild or false;
binary =
{
i686-linux = "32";
{ i686-linux = "32";
x86_64-linux = "64";
x86_64-darwin = "64";
}."${stdenv.system}" or (throw "unsupported system: ${stdenv.system}");
genericFlags =
[
"DYNAMIC_ARCH=1"
[ "DYNAMIC_ARCH=1"
"NUM_THREADS=64"
"BINARY=${binary}"
];
localFlags = config.openblas.flags or
optionals (hasAttr "target" config.openblas) [ "TARGET=${config.openblas.target}" ];
blas64Orig = blas64;
in
stdenv.mkDerivation rec {
version = "0.2.14";
@ -43,9 +45,13 @@ stdenv.mkDerivation rec {
# thus is not an explicit dependency.
"CC=${if stdenv.isDarwin then "clang" else "gcc"}"
''PREFIX="''$(out)"''
"INTERFACE64=1"
"BINARY=${binary}"
"USE_OPENMP=${if stdenv.isDarwin then "0" else "1"}"
"INTERFACE64=${if blas64 then "1" else "0"}"
];
blas64 = if blas64Orig != null then blas64Orig else hasPrefix "x86_64" stdenv.system;
meta = with stdenv.lib; {
description = "Basic Linear Algebra Subprograms";
license = licenses.bsd3;

View File

@ -1,36 +0,0 @@
From 456b26d0c9101adaa5876954baac0ca0e872dab6 Mon Sep 17 00:00:00 2001
From: Thomas Tuegel <ttuegel@gmail.com>
Date: Mon, 15 Dec 2014 10:18:01 -0600
Subject: [PATCH 1/3] disable metis
---
SuiteSparse_config/SuiteSparse_config.mk | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/SuiteSparse_config/SuiteSparse_config.mk b/SuiteSparse_config/SuiteSparse_config.mk
index ba2da23..e1514bf 100644
--- a/SuiteSparse_config/SuiteSparse_config.mk
+++ b/SuiteSparse_config/SuiteSparse_config.mk
@@ -212,8 +212,8 @@ XERBLA =
# The path is relative to where it is used, in CHOLMOD/Lib, CHOLMOD/MATLAB, etc.
# You may wish to use an absolute path. METIS is optional. Compile
# CHOLMOD with -DNPARTITION if you do not wish to use METIS.
-METIS_PATH = ../../metis-4.0
-METIS = ../../metis-4.0/libmetis.a
+# METIS_PATH = ../../metis-4.0
+# METIS = ../../metis-4.0/libmetis.a
#------------------------------------------------------------------------------
# UMFPACK configuration:
@@ -273,7 +273,7 @@ UMFPACK_CONFIG =
# -DNSUNPERF for Solaris only. If defined, do not use the Sun
# Performance Library
-CHOLMOD_CONFIG = $(GPU_CONFIG)
+CHOLMOD_CONFIG = $(GPU_CONFIG) -DNPARTITION
# uncomment this line to compile CHOLMOD without METIS:
# CHOLMOD_CONFIG = -DNPARTITION
--
2.1.3

View File

@ -1,27 +0,0 @@
From e0fee492a315ce1ef8697b056af210beb1465334 Mon Sep 17 00:00:00 2001
From: Thomas Tuegel <ttuegel@gmail.com>
Date: Mon, 15 Dec 2014 10:18:12 -0600
Subject: [PATCH 2/3] set install dir
---
SuiteSparse_config/SuiteSparse_config.mk | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/SuiteSparse_config/SuiteSparse_config.mk b/SuiteSparse_config/SuiteSparse_config.mk
index e1514bf..f1046a6 100644
--- a/SuiteSparse_config/SuiteSparse_config.mk
+++ b/SuiteSparse_config/SuiteSparse_config.mk
@@ -95,8 +95,8 @@ F77LIB =
# LIB = -lm
# For "make install"
-INSTALL_LIB = /usr/local/lib
-INSTALL_INCLUDE = /usr/local/include
+INSTALL_LIB = @out@/lib
+INSTALL_INCLUDE = @out@/include
# Which version of MAKE you are using (default is "make")
# MAKE = make
--
2.1.3

View File

@ -1,27 +0,0 @@
From a99cca30cfd965683564ae024e8ecc615c61697a Mon Sep 17 00:00:00 2001
From: Thomas Tuegel <ttuegel@gmail.com>
Date: Mon, 15 Dec 2014 10:24:08 -0600
Subject: [PATCH 3/3] blas lapack flags
---
SuiteSparse_config/SuiteSparse_config.mk | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/SuiteSparse_config/SuiteSparse_config.mk b/SuiteSparse_config/SuiteSparse_config.mk
index f1046a6..1710162 100644
--- a/SuiteSparse_config/SuiteSparse_config.mk
+++ b/SuiteSparse_config/SuiteSparse_config.mk
@@ -119,8 +119,8 @@ INSTALL_INCLUDE = @out@/include
# naming the BLAS and LAPACK library (*.a or *.so) files.
# This is probably slow ... it might connect to the Standard Reference BLAS:
- BLAS = -lblas -lgfortran
- LAPACK = -llapack
+ BLAS = @blasFlags@
+ LAPACK = @lapackFlags@
# MKL
# BLAS = -Wl,--start-group $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a $(MKLROOT)/lib/intel64/libmkl_core.a $(MKLROOT)/lib/intel64/libmkl_intel_thread.a -Wl,--end-group -lpthread -lm
--
2.1.3

View File

@ -1,4 +1,8 @@
{ stdenv, fetchurl, blas, liblapack, gfortran } :
{ stdenv, fetchurl, gfortran, openblas }:
let
int_t = if openblas.blas64 then "int64_t" else "int32_t";
in
stdenv.mkDerivation rec {
version = "4.2.1";
name = "suitesparse-${version}";
@ -6,17 +10,35 @@ stdenv.mkDerivation rec {
url = "http://www.cise.ufl.edu/research/sparse/SuiteSparse/SuiteSparse-${version}.tar.gz" ;
sha256 = "1ga69637x7kdkiy3w3lq9dvva7220bdangv2lch2wx1hpi83h0p8";
};
buildInputs = [blas liblapack gfortran] ;
patches = [./disable-metis.patch];
nativeBuildInputs = [ gfortran ];
buildInputs = [ openblas ];
preConfigure = ''
export PREFIX=$out
mkdir -p $out/lib
mkdir -p $out/include
sed -i "SuiteSparse_config/SuiteSparse_config.mk" \
-e 's/METIS .*$/METIS =/' \
-e 's/METIS_PATH .*$/METIS_PATH =/' \
-e '/CHOLMOD_CONFIG/ s/$/-DNPARTITION -DLONGBLAS=${int_t}/' \
-e '/UMFPACK_CONFIG/ s/$/-DLONGBLAS=${int_t}/'
'';
makeFlags = ''PREFIX=\"$(out)\" INSTALL_LIB=$(out)/lib INSTALL_INCLUDE=$(out)/include'';
makeFlags = [
"PREFIX=\"$(out)\""
"INSTALL_LIB=$(out)/lib"
"INSTALL_INCLUDE=$(out)/include"
"BLAS=-lopenblas"
"LAPACK="
];
NIX_CFLAGS = "-fPIC";
meta = with stdenv.lib; {
homepage = http://faculty.cse.tamu.edu/davis/suitesparse.html;
description = "A suite of sparse matrix algorithms";
license = with licenses; [ bsd2 gpl2Plus lgpl21Plus ];
maintainers = with maintainers; [ ttuegel ];
};
}

View File

@ -1,452 +0,0 @@
#===============================================================================
# SuiteSparse_config.mk: common configuration file for the SuiteSparse
#===============================================================================
# This file contains all configuration settings for all packages authored or
# co-authored by Tim Davis:
#
# Package Version Description
# ------- ------- -----------
# AMD 1.2 or later approximate minimum degree ordering
# COLAMD 2.4 or later column approximate minimum degree ordering
# CCOLAMD 1.0 or later constrained column approximate minimum degree ordering
# CAMD any constrained approximate minimum degree ordering
# UMFPACK 4.5 or later sparse LU factorization, with the BLAS
# CHOLMOD any sparse Cholesky factorization, update/downdate
# KLU 0.8 or later sparse LU factorization, BLAS-free
# BTF 0.8 or later permutation to block triangular form
# LDL 1.2 or later concise sparse LDL'
# CXSparse any extended version of CSparse (int/long, real/complex)
# SuiteSparseQR any sparse QR factorization
# RBio 2.0 or later read/write sparse matrices in Rutherford-Boeing format
#
# By design, this file is NOT included in the CSparse makefile.
# That package is fully stand-alone. CSparse is primarily for teaching;
# production code should use CXSparse.
#
# The SuiteSparse_config directory and the above packages should all appear in
# a single directory, in order for the Makefile's within each package to find
# this file.
#
# To enable an option of the form "# OPTION = ...", edit this file and
# delete the "#" in the first column of the option you wish to use.
#
# The use of METIS 4.0.1 is optional. To exclude METIS, you must compile with
# CHOLMOD_CONFIG set to -DNPARTITION. See below for details. However, if you
# do not have a metis-4.0 directory inside the SuiteSparse directory, the
# */Makefile's that optionally rely on METIS will automatically detect this
# and compile without METIS.
#------------------------------------------------------------------------------
# Generic configuration
#------------------------------------------------------------------------------
# Using standard definitions from the make environment, typically:
#
# CC cc C compiler
# CXX g++ C++ compiler
# CFLAGS [ ] flags for C and C++ compiler
# CPPFLAGS [ ] flags for C and C++ compiler
# TARGET_ARCH [ ] target architecture
# FFLAGS [ ] flags for Fortran compiler
# RM rm -f delete a file
# AR ar create a static *.a library archive
# ARFLAGS rv flags for ar
# MAKE make make itself (sometimes called gmake)
#
# You can redefine them here, but by default they are used from the
# default make environment.
# To use OpenMP add -openmp to the CFLAGS
# If OpenMP is used, it is recommended to define CHOLMOD_OMP_NUM_THREADS
# as the number of cores per socket on the machine being used to maximize
# memory performance
CFLAGS =
# CFLAGS = -g
# for the icc compiler and OpenMP:
# CFLAGS = -openmp
# C and C++ compiler flags. The first three are standard for *.c and *.cpp
# Add -DNTIMER if you do use any timing routines (otherwise -lrt is required).
# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC -DNTIMER
CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC
# for the MKL BLAS:
# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC -I$(MKLROOT)/include -D_GNU_SOURCE
# with no optimization:
# CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -fexceptions -fPIC
# ranlib, and ar, for generating libraries. If you don't need ranlib,
# just change it to RANLAB = echo
RANLIB = ranlib
ARCHIVE = $(AR) $(ARFLAGS)
# copy and delete a file
CP = cp -f
MV = mv -f
# Fortran compiler (not required for 'make' or 'make library')
F77 = gfortran
F77FLAGS = $(FFLAGS) -O
F77LIB =
# C and Fortran libraries. Remove -lrt if you don't have it.
LIB = -lm -lrt
# Using the following requires CF = ... -DNTIMER on POSIX C systems.
# LIB = -lm
# For "make install"
INSTALL_LIB = @out@/lib
INSTALL_INCLUDE = @out@/include
# Which version of MAKE you are using (default is "make")
# MAKE = make
# MAKE = gmake
#------------------------------------------------------------------------------
# BLAS and LAPACK configuration:
#------------------------------------------------------------------------------
# UMFPACK and CHOLMOD both require the BLAS. CHOLMOD also requires LAPACK.
# See Kazushige Goto's BLAS at http://www.cs.utexas.edu/users/flame/goto/ or
# http://www.tacc.utexas.edu/~kgoto/ for the best BLAS to use with CHOLMOD.
# LAPACK is at http://www.netlib.org/lapack/ . You can use the standard
# Fortran LAPACK along with Goto's BLAS to obtain very good performance.
# CHOLMOD gets a peak numeric factorization rate of 3.6 Gflops on a 3.2 GHz
# Pentium 4 (512K cache, 4GB main memory) with the Goto BLAS, and 6 Gflops
# on a 2.5Ghz dual-core AMD Opteron.
# These settings will probably not work, since there is no fixed convention for
# naming the BLAS and LAPACK library (*.a or *.so) files.
# This is probably slow ... it might connect to the Standard Reference BLAS:
BLAS = -lf77blas -latlas -lcblas -lgfortran
LAPACK = -llapack -latlas -lcblas
# MKL
# BLAS = -Wl,--start-group $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a $(MKLROOT)/lib/intel64/libmkl_core.a $(MKLROOT)/lib/intel64/libmkl_intel_thread.a -Wl,--end-group -lpthread -lm
# LAPACK =
# ACML
# BLAS = -lacml -lgfortran
# LAPACK =
# OpenBLAS
# BLAS = -lopenblas
# LAPACK =
# NOTE: this next option for the "Goto BLAS" has nothing to do with a "goto"
# statement. Rather, the Goto BLAS is written by Dr. Kazushige Goto.
# Using the Goto BLAS:
# BLAS = -lgoto -lgfortran -lgfortranbegin
# BLAS = -lgoto2 -lgfortran -lgfortranbegin -lpthread
# Using non-optimized versions:
# BLAS = -lblas_plain -lgfortran -lgfortranbegin
# LAPACK = -llapack_plain
# BLAS = -lblas_plain -lgfortran -lgfortranbegin
# LAPACK = -llapack
# The BLAS might not contain xerbla, an error-handling routine for LAPACK and
# the BLAS. Also, the standard xerbla requires the Fortran I/O library, and
# stops the application program if an error occurs. A C version of xerbla
# distributed with this software (SuiteSparse_config/xerbla/libcerbla.a)
# includes a Fortran-callable xerbla routine that prints nothing and does not
# stop the application program. This is optional.
# XERBLA = ../../SuiteSparse_config/xerbla/libcerbla.a
# If you wish to use the XERBLA in LAPACK and/or the BLAS instead,
# use this option:
XERBLA =
# If you wish to use the Fortran SuiteSparse_config/xerbla/xerbla.f instead,
# use this:
# XERBLA = ../../SuiteSparse_config/xerbla/libxerbla.a
#------------------------------------------------------------------------------
# GPU configuration for CHOLMOD and SPQR
#------------------------------------------------------------------------------
# no cuda
CUDA_ROOT =
GPU_BLAS_PATH =
GPU_CONFIG =
CUDA_PATH =
CUDART_LIB =
CUBLAS_LIB =
CUDA_INC_PATH =
NV20 =
NV30 =
NV35 =
NVCC = echo
NVCCFLAGS =
# with cuda for CHOLMOD
# CUDA_ROOT = /usr/local/cuda
# GPU_BLAS_PATH = $(CUDA_ROOT)
# with 4 cores (default):
# GPU_CONFIG = -I$(CUDA_ROOT)/include -DGPU_BLAS
# with 10 cores:
# GPU_CONFIG = -I$(CUDA_ROOT)/include -DGPU_BLAS -DCHOLMOD_OMP_NUM_THREADS=10
# CUDA_PATH = $(CUDA_ROOT)
# CUDART_LIB = $(CUDA_ROOT)/lib64/libcudart.so
# CUBLAS_LIB = $(CUDA_ROOT)/lib64/libcublas.so
# CUDA_INC_PATH = $(CUDA_ROOT)/include/
# NV20 = -arch=sm_20 -Xcompiler -fPIC
# NV30 = -arch=sm_30 -Xcompiler -fPIC
# NV35 = -arch=sm_35 -Xcompiler -fPIC
# NVCC = $(CUDA_ROOT)/bin/nvcc
# NVCCFLAGS = $(NV20) -O3 -gencode=arch=compute_20,code=sm_20 -gencode=arch=compute_30,code=sm_30 -gencode=arch=compute_35,code=sm_35
# was NVCC = $(CUDA_ROOT)/bin/nvcc $(NV35) $(NV30) $(NV20)
#------------------------------------------------------------------------------
# METIS, optionally used by CHOLMOD
#------------------------------------------------------------------------------
# If you do not have METIS, or do not wish to use it in CHOLMOD, you must
# compile CHOLMOD with the -DNPARTITION flag.
# The path is relative to where it is used, in CHOLMOD/Lib, CHOLMOD/MATLAB, etc.
# You may wish to use an absolute path. METIS is optional. Compile
# CHOLMOD with -DNPARTITION if you do not wish to use METIS.
# METIS_PATH = ../../metis-4.0
# METIS = ../../metis-4.0/libmetis.a
#------------------------------------------------------------------------------
# UMFPACK configuration:
#------------------------------------------------------------------------------
# Configuration flags for UMFPACK. See UMFPACK/Source/umf_config.h for details.
#
# -DNBLAS do not use the BLAS. UMFPACK will be very slow.
# -D'LONGBLAS=long' or -DLONGBLAS='long long' defines the integers used by
# LAPACK and the BLAS (defaults to 'int')
# -DNSUNPERF do not use the Sun Perf. Library (default is use it on Solaris)
# -DNRECIPROCAL do not multiply by the reciprocal
# -DNO_DIVIDE_BY_ZERO do not divide by zero
# -DNCHOLMOD do not use CHOLMOD as a ordering method. If -DNCHOLMOD is
# included in UMFPACK_CONFIG, then UMFPACK does not rely on
# CHOLMOD, CAMD, CCOLAMD, COLAMD, and METIS.
UMFPACK_CONFIG =
# uncomment this line to compile UMFPACK without CHOLMOD:
# UMFPACK_CONFIG = -DNCHOLMOD
#------------------------------------------------------------------------------
# CHOLMOD configuration
#------------------------------------------------------------------------------
# CHOLMOD Library Modules, which appear in libcholmod.a:
# Core requires: none
# Check requires: Core
# Cholesky requires: Core, AMD, COLAMD. optional: Partition, Supernodal
# MatrixOps requires: Core
# Modify requires: Core
# Partition requires: Core, CCOLAMD, METIS. optional: Cholesky
# Supernodal requires: Core, BLAS, LAPACK
#
# CHOLMOD test/demo Modules (all are GNU GPL, do not appear in libcholmod.a):
# Tcov requires: Core, Check, Cholesky, MatrixOps, Modify, Supernodal
# optional: Partition
# Valgrind same as Tcov
# Demo requires: Core, Check, Cholesky, MatrixOps, Supernodal
# optional: Partition
#
# Configuration flags:
# -DNCHECK do not include the Check module. License GNU LGPL
# -DNCHOLESKY do not include the Cholesky module. License GNU LGPL
# -DNPARTITION do not include the Partition module. License GNU LGPL
# also do not include METIS.
# -DNCAMD do not use CAMD, etc from Partition module. GNU LGPL
# -DNGPL do not include any GNU GPL Modules in the CHOLMOD library:
# -DNMATRIXOPS do not include the MatrixOps module. License GNU GPL
# -DNMODIFY do not include the Modify module. License GNU GPL
# -DNSUPERNODAL do not include the Supernodal module. License GNU GPL
#
# -DNPRINT do not print anything.
# -D'LONGBLAS=long' or -DLONGBLAS='long long' defines the integers used by
# LAPACK and the BLAS (defaults to 'int')
# -DNSUNPERF for Solaris only. If defined, do not use the Sun
# Performance Library
CHOLMOD_CONFIG = $(GPU_CONFIG) -DNPARTITION
# uncomment this line to compile CHOLMOD without METIS:
# CHOLMOD_CONFIG = -DNPARTITION
#------------------------------------------------------------------------------
# SuiteSparseQR configuration:
#------------------------------------------------------------------------------
# The SuiteSparseQR library can be compiled with the following options:
#
# -DNPARTITION do not include the CHOLMOD partition module
# -DNEXPERT do not include the functions in SuiteSparseQR_expert.cpp
# -DHAVE_TBB enable the use of Intel's Threading Building Blocks (TBB)
# default, without timing, without TBB:
SPQR_CONFIG = $(GPU_CONFIG)
# with TBB:
# SPQR_CONFIG = -DHAVE_TBB
# This is needed for IBM AIX: (but not for and C codes, just C++)
# SPQR_CONFIG = -DBLAS_NO_UNDERSCORE
# with TBB, you must select this:
# TBB = -ltbb
# without TBB:
TBB =
#------------------------------------------------------------------------------
# code formatting
#------------------------------------------------------------------------------
# Use "grep" only, if you do not have "indent"
# PRETTY = grep -v "^\#"
# PRETTY = grep -v "^\#" | indent -bl -nce -ss -bli0 -i4 -sob -l120
PRETTY = grep -v "^\#" | indent -bl -nce -bli0 -i4 -sob -l120
#------------------------------------------------------------------------------
# Linux
#------------------------------------------------------------------------------
# Using default compilers:
# CC = gcc
# CF = $(CFLAGS) -O3 -fexceptions
# alternatives:
# CF = $(CFLAGS) -g -fexceptions \
# -Wall -W -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
# -Wredundant-decls -Wnested-externs -Wdisabled-optimization -ansi \
# -funit-at-a-time
# CF = $(CFLAGS) -O3 -fexceptions \
# -Wall -W -Werror -Wshadow -Wmissing-prototypes -Wstrict-prototypes \
# -Wredundant-decls -Wnested-externs -Wdisabled-optimization -ansi
# CF = $(CFLAGS) -O3 -fexceptions -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
# CF = $(CFLAGS) -O3
# CF = $(CFLAGS) -O3 -g -fexceptions
# CF = $(CFLAGS) -g -fexceptions \
# -Wall -W -Wshadow \
# -Wredundant-decls -Wdisabled-optimization -ansi
# consider:
# -fforce-addr -fmove-all-movables -freduce-all-givs -ftsp-ordering
# -frename-registers -ffast-math -funroll-loops
# Using the Goto BLAS:
# BLAS = -lgoto -lfrtbegin -lg2c $(XERBLA) -lpthread
# Using Intel's icc and ifort compilers:
# (does not work for mexFunctions unless you add a mexopts.sh file)
# F77 = ifort
# CC = icc
# CF = $(CFLAGS) -O3 -xN -vec_report=0
# CF = $(CFLAGS) -g
# 64bit:
# F77FLAGS = -O -m64
# CF = $(CFLAGS) -O3 -fexceptions -m64
# BLAS = -lgoto64 -lfrtbegin -lg2c -lpthread $(XERBLA)
# LAPACK = -llapack64
# SUSE Linux 10.1, AMD Opteron, with GOTO Blas
# F77 = gfortran
# BLAS = -lgoto_opteron64 -lgfortran
# SUSE Linux 10.1, Intel Pentium, with GOTO Blas
# F77 = gfortran
# BLAS = -lgoto -lgfortran
#------------------------------------------------------------------------------
# Mac
#------------------------------------------------------------------------------
# As recommended by macports, http://suitesparse.darwinports.com/
# I've tested them myself on Mac OSX 10.6.1 and 10.6.8 (Snow Leopard),
# on my MacBook Air, and they work fine.
# F77 = gfortran
# CF = $(CFLAGS) -O3 -fno-common -fexceptions -DNTIMER
# BLAS = -framework Accelerate
# LAPACK = -framework Accelerate
# LIB = -lm
#------------------------------------------------------------------------------
# Solaris
#------------------------------------------------------------------------------
# 32-bit
# CF = $(CFLAGS) -KPIC -dalign -xc99=%none -Xc -xlibmieee -xO5 -xlibmil -m32
# 64-bit
# CF = $(CFLAGS) -fast -KPIC -xc99=%none -xlibmieee -xlibmil -m64 -Xc
# FFLAGS = -fast -KPIC -dalign -xlibmil -m64
# The Sun Performance Library includes both LAPACK and the BLAS:
# BLAS = -xlic_lib=sunperf
# LAPACK =
#------------------------------------------------------------------------------
# Compaq Alpha
#------------------------------------------------------------------------------
# 64-bit mode only
# CF = $(CFLAGS) -O2 -std1
# BLAS = -ldxml
# LAPACK =
#------------------------------------------------------------------------------
# IBM RS 6000
#------------------------------------------------------------------------------
# BLAS = -lessl
# LAPACK =
# 32-bit mode:
# CF = $(CFLAGS) -O4 -qipa -qmaxmem=16384 -qproto
# F77FLAGS = -O4 -qipa -qmaxmem=16384
# 64-bit mode:
# CF = $(CFLAGS) -O4 -qipa -qmaxmem=16384 -q64 -qproto
# F77FLAGS = -O4 -qipa -qmaxmem=16384 -q64
#------------------------------------------------------------------------------
# SGI IRIX
#------------------------------------------------------------------------------
# BLAS = -lscsl
# LAPACK =
# 32-bit mode
# CF = $(CFLAGS) -O
# 64-bit mode (32 bit int's and 64-bit long's):
# CF = $(CFLAGS) -64
# F77FLAGS = -64
# SGI doesn't have ranlib
# RANLIB = echo
#------------------------------------------------------------------------------
# AMD Opteron (64 bit)
#------------------------------------------------------------------------------
# BLAS = -lgoto_opteron64 -lg2c
# LAPACK = -llapack_opteron64
# SUSE Linux 10.1, AMD Opteron
# F77 = gfortran
# BLAS = -lgoto_opteron64 -lgfortran
# LAPACK = -llapack_opteron64
#------------------------------------------------------------------------------
# remove object files and profile output
#------------------------------------------------------------------------------
CLEAN = *.o *.obj *.ln *.bb *.bbg *.da *.tcov *.gcov gmon.out *.bak *.d *.gcda *.gcno

View File

@ -1,34 +1,53 @@
{ stdenv, fetchurl, substituteAll
, atlasWithLapack, gfortran }:
{ stdenv, fetchurl, gfortran, openblas }:
let
name = "suitesparse-4.4.1";
version = "4.4.4";
name = "suitesparse-${version}";
int_t = if openblas.blas64 then "int64_t" else "int32_t";
in
stdenv.mkDerivation {
inherit name;
src = fetchurl {
url = "http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-4.4.1.tar.gz";
sha256 = "0y8i6dizrr556xggpjyc7wijjv4jbizhssmjj4jv8n1s7zxy2z0n";
url = "http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-${version}.tar.gz";
sha256 = "1zdn1y0ij6amj7smmcslkqgbqv9yy5cwmbyzqc9v6drzdzllgbpj";
};
patches = [
./0001-disable-metis.patch
./0002-set-install-dir.patch
(substituteAll {
src = ./0003-blas-lapack-flags.patch;
blasFlags = "-lf77blas -latlas -lcblas -lgfortran";
lapackFlags= "-llapack -latlas -lcblas";
})
];
preConfigure = ''
substituteAllInPlace SuiteSparse_config/SuiteSparse_config.mk
mkdir -p $out/lib
mkdir -p $out/include
sed -i "SuiteSparse_config/SuiteSparse_config.mk" \
-e 's/METIS .*$/METIS =/' \
-e 's/METIS_PATH .*$/METIS_PATH =/' \
-e '/CHOLMOD_CONFIG/ s/$/-DNPARTITION -DLONGBLAS=${int_t}/' \
-e '/UMFPACK_CONFIG/ s/$/-DLONGBLAS=${int_t}/'
'';
makeFlags = [
"PREFIX=\"$(out)\""
"INSTALL_LIB=$(out)/lib"
"INSTALL_INCLUDE=$(out)/include"
"BLAS=-lopenblas"
"LAPACK="
];
NIX_CFLAGS = "-fPIC";
postInstall = ''
# Build and install shared library
(
cd "$(mktemp -d)"
for i in "$out"/lib/lib*.a; do
ar -x $i
done
gcc *.o --shared -o "$out/lib/libsuitesparse.so"
)
for i in umfpack cholmod amd camd colamd spqr; do
ln -s libsuitesparse.so "$out"/lib/lib$i.so;
done
# Install documentation
outdoc=$out/share/doc/${name}
mkdir -p $outdoc
@ -47,7 +66,7 @@ stdenv.mkDerivation {
'';
nativeBuildInputs = [ gfortran ];
buildInputs = [ atlasWithLapack ];
buildInputs = [ openblas ];
meta = with stdenv.lib; {
homepage = http://faculty.cse.tamu.edu/davis/suitesparse.html;

View File

@ -1,18 +0,0 @@
diff -Nrc SuiteSparse/UMFPACK/Demo/Makefile SuiteSparse-new/UMFPACK/Demo/Makefile
*** SuiteSparse/UMFPACK/Demo/Makefile 2009-11-11 21:09:45.000000000 +0100
--- SuiteSparse-new/UMFPACK/Demo/Makefile 2010-08-02 12:53:16.000000000 +0200
***************
*** 40,46 ****
../../CAMD/Lib/libcamd.a:
( cd ../../CAMD ; $(MAKE) library )
- $(METIS):
- ( cd $(METIS_PATH) && $(MAKE) )
UMFPACK = ../Lib/libumfpack.a ../../AMD/Lib/libamd.a \
--- 40,44 ----
../../CAMD/Lib/libcamd.a:
( cd ../../CAMD ; $(MAKE) library )
UMFPACK = ../Lib/libumfpack.a ../../AMD/Lib/libamd.a \

View File

@ -11,9 +11,7 @@ stdenv.mkDerivation rec {
sha256 = "1ryjlcnpfm7fpkq6444ybi576hbnh2l0w7kjhbqady5lxwjyg3pf";
};
installPhase = ''
make install prefix=$out
'';
makeFlags = [ "prefix=$(out)" ];
meta = with stdenv.lib; {
description = "A clean C library for processing UTF-8 Unicode data";

View File

@ -3,14 +3,14 @@
python,
# Name of package (e.g. numpy or scipy)
pkgName,
# Atlas math library
atlas
# OpenBLAS math library
openblas
}:
{
# Re-export atlas here so that it can be sure that the same one will be used
# Re-export openblas here so that it can be sure that the same one will be used
# in the propagatedBuildInputs.
inherit atlas;
inherit openblas;
# First "install" the package, then import what was installed, and call the
# .test() function, which will run the test suite.
@ -48,9 +48,9 @@
preBuild = ''
echo "Creating site.cfg file..."
cat << EOF > site.cfg
[atlas]
include_dirs = ${atlas}/include
library_dirs = ${atlas}/lib
[openblas]
include_dirs = ${openblas}/include
library_dirs = ${openblas}/lib
EOF
'';
}

View File

@ -997,7 +997,7 @@ let
});
Mposterior = old.Mposterior.overrideDerivation (attrs: {
PKG_LIBS = "-L${pkgs.atlas}/lib -lf77blas -latlas";
PKG_LIBS = "-L${pkgs.openblasCompat}/lib -lopenblas";
});
qtbase = old.qtbase.overrideDerivation (attrs: {
@ -1037,11 +1037,11 @@ let
});
slfm = old.slfm.overrideDerivation (attrs: {
PKG_LIBS = "-L${pkgs.atlas}/lib -lf77blas -latlas";
PKG_LIBS = "-L${pkgs.openblasCompat}/lib -lopenblas";
});
SamplerCompare = old.SamplerCompare.overrideDerivation (attrs: {
PKG_LIBS = "-L${pkgs.atlas}/lib -lf77blas -latlas";
PKG_LIBS = "-L${pkgs.openblasCompat}/lib -lopenblas";
});
gputools = old.gputools.overrideDerivation (attrs: {
@ -1087,6 +1087,7 @@ let
BayesLogit = old.BayesLogit.overrideDerivation (attrs: {
patches = [ ./patches/BayesLogit.patch ];
buildInputs = (attrs.buildInputs or []) ++ [ pkgs.openblasCompat ];
});
BayesBridge = old.BayesBridge.overrideDerivation (attrs: {

View File

@ -6,7 +6,7 @@ diff -ru -x '*~' BayesLogit_orig/src/Makevars BayesLogit/src/Makevars
OBJECTS = Matrix.o MatrixFrame.o RRNG.o RNG.o FSF_nmix.o LogitWrapper.o \
PolyaGamma.o PolyaGammaAlt.o PolyaGammaSP.o InvertY.o
-PKG_LIBS = $(BLAS_LIBS) $(FLIBS) $(LAPACK_LIBS)
+PKG_LIBS = $(BLAS_LIBS) $(FLIBS) $(LAPACK_LIBS) -llapack -lf77blas -lcblas -latlas -lgfortran
+PKG_LIBS = $(BLAS_LIBS) $(FLIBS) $(LAPACK_LIBS) -lopenblas
# PKG_CPPFLAGS = -DUSE_R -DNDEBUG -DDISABLE_SINGLE -DNTHROW -Wall -pedantic -Wextra
PKG_CPPFLAGS = -DUSE_R -DNDEBUG -DDISABLE_SINGLE -DNTHROW

View File

@ -4022,18 +4022,11 @@ let
jikes = callPackage ../development/compilers/jikes { };
julia02 = callPackage ../development/compilers/julia/0.2.nix {
liblapack = liblapack.override {shared = true;};
llvm = llvm_33;
suitesparse = suitesparse_4_2;
};
julia03 = let
liblapack = liblapack_3_5_0.override {shared = true;};
in callPackage ../development/compilers/julia/0.3.nix {
inherit liblapack;
suitesparse = suitesparse_4_2.override {
inherit liblapack;
};
julia03 = callPackage ../development/compilers/julia/0.3.nix {
llvm = llvm_33;
};
julia = julia03;
@ -4859,6 +4852,7 @@ let
glpk = null;
suitesparse = null;
jdk = null;
openblas = openblasCompat;
};
octaveFull = (lowPrio (callPackage ../development/interpreters/octave {
fltk = fltk13.override { cfg.xftSupport = true; };
@ -8596,6 +8590,7 @@ let
R = callPackage ../applications/science/math/R {
inherit (xlibs) libX11 libXt;
texLive = texLiveAggregationFun { paths = [ texLive texLiveExtra ]; };
openblas = openblasCompat;
withRecommendedPackages = false;
};
@ -13935,9 +13930,11 @@ let
liblbfgs = callPackage ../development/libraries/science/math/liblbfgs { };
openblas = callPackage ../development/libraries/science/math/openblas {
liblapack = liblapack_3_5_0;
};
openblas = callPackage ../development/libraries/science/math/openblas { };
# A version of OpenBLAS using 32-bit integers on all platforms for compatibility with
# standard BLAS and LAPACK.
openblasCompat = openblas.override { blas64 = false; };
mathematica = callPackage ../applications/science/math/mathematica { };
mathematica9 = callPackage ../applications/science/math/mathematica/9.nix { };
@ -13945,9 +13942,10 @@ let
sage = callPackage ../applications/science/math/sage { };
suitesparse_4_2 = callPackage ../development/libraries/science/math/suitesparse/4.2.nix { };
suitesparse_4_4_1 = callPackage ../development/libraries/science/math/suitesparse {};
suitesparse_4_4 = callPackage ../development/libraries/science/math/suitesparse {};
suitesparse = suitesparse_4_4;
ipopt = callPackage ../development/libraries/science/math/ipopt { };
ipopt = callPackage ../development/libraries/science/math/ipopt { openblas = openblasCompat; };
### SCIENCE/MOLECULAR-DYNAMICS

View File

@ -1068,7 +1068,12 @@ let
sha256 = "f856ea2e9e2947abc1a6557625cc6b0e45228984f397a90c420b2f468dc4cb97";
};
doCheck = false;
buildInputs = with pkgs; [ liblapack blas ];
buildInputs = with pkgs; [ openblasCompat ];
preConfigure = ''
export CVXOPT_BLAS_LIB_DIR=${pkgs.openblasCompat}/lib
export CVXOPT_BLAS_LIB=openblas
export CVXOPT_LAPACK_LIB=openblas
'';
meta = {
homepage = "http://cvxopt.org/";
description = "Python Software for Convex Optimization";
@ -7850,7 +7855,7 @@ let
numpy = let
support = import ../development/python-modules/numpy-scipy-support.nix {
inherit python;
atlas = pkgs.atlasWithLapack;
openblas = pkgs.openblasCompat;
pkgName = "numpy";
};
in buildPythonPackage ( rec {
@ -7873,7 +7878,7 @@ let
setupPyBuildFlags = ["--fcompiler='gnu95'"];
buildInputs = [ pkgs.gfortran self.nose ];
propagatedBuildInputs = [ support.atlas ];
propagatedBuildInputs = [ support.openblas ];
meta = {
description = "Scientific tools for Python";
@ -11322,7 +11327,7 @@ let
scipy = let
support = import ../development/python-modules/numpy-scipy-support.nix {
inherit python;
atlas = pkgs.atlasWithLapack;
openblas = pkgs.openblasCompat;
pkgName = "numpy";
};
in buildPythonPackage rec {
@ -11360,15 +11365,14 @@ let
};
buildInputs = with self; [ nose pillow pkgs.gfortran pkgs.glibcLocales ];
propagatedBuildInputs = with self; [ numpy scipy pkgs.atlas ];
propagatedBuildInputs = with self; [ numpy scipy pkgs.openblas ];
buildPhase = ''
export ATLAS=${pkgs.atlas}
${self.python.executable} setup.py build_ext -i --fcompiler='gnu95'
'';
checkPhase = ''
LC_ALL="en_US.UTF-8" HOME=$TMPDIR ATLAS="" nosetests
LC_ALL="en_US.UTF-8" HOME=$TMPDIR OMP_NUM_THREADS=1 nosetests
'';
meta = {