diff options
Diffstat (limited to 'pkgs/development/libraries/science/math')
15 files changed, 179 insertions, 695 deletions
diff --git a/pkgs/development/libraries/science/math/arpack/default.nix b/pkgs/development/libraries/science/math/arpack/default.nix index 01bb3371f5e..58326a6fa50 100644 --- a/pkgs/development/libraries/science/math/arpack/default.nix +++ b/pkgs/development/libraries/science/math/arpack/default.nix @@ -1,4 +1,6 @@ -{ stdenv, fetchurl, gfortran, atlasWithLapack }: +{ stdenv, fetchurl, gfortran, openblas }: + +with stdenv.lib; let version = "3.2.0"; @@ -10,16 +12,21 @@ 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/"; + homepage = "http://github.com/opencollab/arpack-ng"; description = '' A collection of Fortran77 subroutines to solve large scale eigenvalue - problems + problems. ''; license = stdenv.lib.licenses.bsd3; maintainers = [ stdenv.lib.maintainers.ttuegel ]; diff --git a/pkgs/development/libraries/science/math/ipopt/default.nix b/pkgs/development/libraries/science/math/ipopt/default.nix index 544ab215345..89d2a242f96 100644 --- a/pkgs/development/libraries/science/math/ipopt/default.nix +++ b/pkgs/development/libraries/science/math/ipopt/default.nix @@ -1,21 +1,26 @@ -{ stdenv, fetchurl, unzip, blas, liblapack, gfortran }: +{ stdenv, fetchurl, unzip, openblas, gfortran }: stdenv.mkDerivation rec { - version = "3.12.1"; + version = "3.12.3"; name = "ipopt-${version}"; src = fetchurl { url = "http://www.coin-or.org/download/source/Ipopt/Ipopt-${version}.zip"; - sha256 = "0x0wcc21d2bfs3zq8nvhva1nv7xi86wjbyixvvxvcrg2kqjlybdy"; + sha256 = "0h8qx3hq2m21qrg4v3n26v2qbhl6saxrpa7rbhnmkkcfj5s942yr"; }; preConfigure = '' 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; diff --git a/pkgs/development/libraries/science/math/liblapack/3.5.0.nix b/pkgs/development/libraries/science/math/liblapack/3.5.0.nix index 0b4badf26e7..ef89c0bfee2 100644 --- a/pkgs/development/libraries/science/math/liblapack/3.5.0.nix +++ b/pkgs/development/libraries/science/math/liblapack/3.5.0.nix @@ -1,10 +1,22 @@ -{ stdenv, fetchurl, gfortran, atlas, cmake, python, shared ? false }: +{ + stdenv, + fetchurl, + gfortran, + cmake, + python, + atlas ? null, + shared ? false +}: let - atlasMaybeShared = atlas.override { inherit shared; }; + atlasMaybeShared = if atlas != null then atlas.override { inherit shared; } + else null; usedLibExtension = if shared then ".so" else ".a"; + inherit (stdenv.lib) optional optionals concatStringsSep; + inherit (builtins) hasAttr attrNames; + version = "3.5.0"; in + stdenv.mkDerivation rec { - version = "3.5.0"; name = "liblapack-${version}"; src = fetchurl { url = "http://www.netlib.org/lapack/lapack-${version}.tgz"; @@ -17,11 +29,16 @@ stdenv.mkDerivation rec { cmakeFlags = [ "-DUSE_OPTIMIZED_BLAS=ON" - "-DBLAS_ATLAS_f77blas_LIBRARY=${atlasMaybeShared}/lib/libf77blas${usedLibExtension}" - "-DBLAS_ATLAS_atlas_LIBRARY=${atlasMaybeShared}/lib/libatlas${usedLibExtension}" "-DCMAKE_Fortran_FLAGS=-fPIC" ] - ++ (stdenv.lib.optional shared "-DBUILD_SHARED_LIBS=ON") + ++ (optionals (atlas != null) [ + "-DBLAS_ATLAS_f77blas_LIBRARY=${atlasMaybeShared}/lib/libf77blas${usedLibExtension}" + "-DBLAS_ATLAS_atlas_LIBRARY=${atlasMaybeShared}/lib/libatlas${usedLibExtension}" + ]) + ++ (optional shared "-DBUILD_SHARED_LIBS=ON") + # If we're on darwin, CMake will automatically detect impure paths. This switch + # prevents that. + ++ (optional stdenv.isDarwin "-DCMAKE_OSX_SYSROOT:PATH=''") ; doCheck = ! shared; @@ -37,13 +54,13 @@ stdenv.mkDerivation rec { blas = atlas; }; - meta = { + meta = with stdenv.lib; { inherit version; description = "Linear Algebra PACKage"; homepage = "http://www.netlib.org/lapack/"; - license = "revised-BSD"; + license = licenses.bsd3; - platforms = stdenv.lib.platforms.all; - maintainers = [ stdenv.lib.maintainers.simons ]; + platforms = platforms.all; + maintainers = [ maintainers.simons ]; }; } diff --git a/pkgs/development/libraries/science/math/liblapack/default.nix b/pkgs/development/libraries/science/math/liblapack/default.nix index 9f4f43311a4..f3832ba0a20 100644 --- a/pkgs/development/libraries/science/math/liblapack/default.nix +++ b/pkgs/development/libraries/science/math/liblapack/default.nix @@ -1,9 +1,21 @@ -{ stdenv, fetchurl, gfortran, atlas, cmake, python, shared ? false }: +{ + stdenv, + fetchurl, + gfortran, + cmake, + python, + atlas ? null, + shared ? false +}: let - atlasMaybeShared = atlas.override { inherit shared; }; + atlasMaybeShared = if atlas != null then atlas.override { inherit shared; } + else null; usedLibExtension = if shared then ".so" else ".a"; + inherit (stdenv.lib) optional optionals concatStringsSep; + inherit (builtins) hasAttr attrNames; version = "3.4.1"; in + stdenv.mkDerivation rec { name = "liblapack-${version}"; src = fetchurl { @@ -17,11 +29,16 @@ stdenv.mkDerivation rec { cmakeFlags = [ "-DUSE_OPTIMIZED_BLAS=ON" - "-DBLAS_ATLAS_f77blas_LIBRARY=${atlasMaybeShared}/lib/libf77blas${usedLibExtension}" - "-DBLAS_ATLAS_atlas_LIBRARY=${atlasMaybeShared}/lib/libatlas${usedLibExtension}" "-DCMAKE_Fortran_FLAGS=-fPIC" ] - ++ (stdenv.lib.optional shared "-DBUILD_SHARED_LIBS=ON") + ++ (optionals (atlas != null) [ + "-DBLAS_ATLAS_f77blas_LIBRARY=${atlasMaybeShared}/lib/libf77blas${usedLibExtension}" + "-DBLAS_ATLAS_atlas_LIBRARY=${atlasMaybeShared}/lib/libatlas${usedLibExtension}" + ]) + ++ (optional shared "-DBUILD_SHARED_LIBS=ON") + # If we're on darwin, CMake will automatically detect impure paths. This switch + # prevents that. + ++ (optional stdenv.isDarwin "-DCMAKE_OSX_SYSROOT:PATH=''") ; doCheck = ! shared; @@ -37,13 +54,13 @@ stdenv.mkDerivation rec { blas = atlas; }; - meta = { + meta = with stdenv.lib; { inherit version; description = "Linear Algebra PACKage"; homepage = "http://www.netlib.org/lapack/"; - license = "revised-BSD"; + license = licenses.bsd3; - platforms = stdenv.lib.platforms.all; - maintainers = [ stdenv.lib.maintainers.simons ]; + platforms = platforms.all; + maintainers = [ maintainers.simons ]; }; } diff --git a/pkgs/development/libraries/science/math/metis/default.nix b/pkgs/development/libraries/science/math/metis/default.nix new file mode 100644 index 00000000000..3ce94f28ac2 --- /dev/null +++ b/pkgs/development/libraries/science/math/metis/default.nix @@ -0,0 +1,20 @@ +{ stdenv, fetchurl, unzip, cmake }: + +stdenv.mkDerivation { + name = "metis-5.1.0"; + + src = fetchurl { + url = "http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/metis-5.1.0.tar.gz"; + sha256 = "1cjxgh41r8k6j029yxs8msp3z6lcnpm16g5pvckk35kc7zhfpykn"; + }; + + cmakeFlags = [ "-DGKLIB_PATH=../GKlib" ]; + buildInputs = [ unzip cmake ]; + + meta = { + description = "Serial graph partitioning and fill-reducing matrix ordering"; + homepage = http://glaros.dtc.umn.edu/gkhome/metis/metis/overview; + license = stdenv.lib.licenses.asl20; + platforms = stdenv.lib.platforms.all; + }; +} diff --git a/pkgs/development/libraries/science/math/openblas/0.2.10.nix b/pkgs/development/libraries/science/math/openblas/0.2.10.nix deleted file mode 100644 index ec4422ce895..00000000000 --- a/pkgs/development/libraries/science/math/openblas/0.2.10.nix +++ /dev/null @@ -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 ]; - }; -} diff --git a/pkgs/development/libraries/science/math/openblas/0.2.2.nix b/pkgs/development/libraries/science/math/openblas/0.2.2.nix deleted file mode 100644 index c476dac955a..00000000000 --- a/pkgs/development/libraries/science/math/openblas/0.2.2.nix +++ /dev/null @@ -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 ]; - }; -} diff --git a/pkgs/development/libraries/science/math/openblas/default.nix b/pkgs/development/libraries/science/math/openblas/default.nix index e779957a6fb..a4bf1efbb73 100644 --- a/pkgs/development/libraries/science/math/openblas/default.nix +++ b/pkgs/development/libraries/science/math/openblas/default.nix @@ -1,21 +1,24 @@ -{ stdenv, fetchurl, gfortran, perl, liblapack, config }: +{ 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"; @@ -29,23 +32,31 @@ stdenv.mkDerivation rec { preBuild = "cp ${liblapack.src} lapack-${liblapack.meta.version}.tgz"; - nativeBuildInputs = [gfortran perl]; + nativeBuildInputs = optionals stdenv.isDarwin [coreutils] ++ [gfortran perl]; makeFlags = (if local then localFlags else genericFlags) ++ + optionals stdenv.isDarwin ["MACOSX_DEPLOYMENT_TARGET=10.9"] + ++ [ "FC=gfortran" - "CC=gcc" + # Note that clang is available through the stdenv on OSX and + # 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; homepage = "https://github.com/xianyi/OpenBLAS"; - platforms = with platforms; linux; + platforms = with platforms; unix; maintainers = with maintainers; [ ttuegel ]; }; } diff --git a/pkgs/development/libraries/science/math/suitesparse/0001-disable-metis.patch b/pkgs/development/libraries/science/math/suitesparse/0001-disable-metis.patch deleted file mode 100644 index b0f7715f755..00000000000 --- a/pkgs/development/libraries/science/math/suitesparse/0001-disable-metis.patch +++ /dev/null @@ -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 - diff --git a/pkgs/development/libraries/science/math/suitesparse/0002-set-install-dir.patch b/pkgs/development/libraries/science/math/suitesparse/0002-set-install-dir.patch deleted file mode 100644 index ef861f68091..00000000000 --- a/pkgs/development/libraries/science/math/suitesparse/0002-set-install-dir.patch +++ /dev/null @@ -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 - diff --git a/pkgs/development/libraries/science/math/suitesparse/0003-blas-lapack-flags.patch b/pkgs/development/libraries/science/math/suitesparse/0003-blas-lapack-flags.patch deleted file mode 100644 index db0b1c45655..00000000000 --- a/pkgs/development/libraries/science/math/suitesparse/0003-blas-lapack-flags.patch +++ /dev/null @@ -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 - diff --git a/pkgs/development/libraries/science/math/suitesparse/4.2.nix b/pkgs/development/libraries/science/math/suitesparse/4.2.nix index 4d27701b135..16174a80212 100644 --- a/pkgs/development/libraries/science/math/suitesparse/4.2.nix +++ b/pkgs/development/libraries/science/math/suitesparse/4.2.nix @@ -1,22 +1,44 @@ -{ 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}"; src = fetchurl { url = "http://www.cise.ufl.edu/research/sparse/SuiteSparse/SuiteSparse-${version}.tar.gz" ; - sha256 = "1ga69637x7kdkiy3w3lq9dvva7220bdangv2lch2wx1hpi83h0p8"; + 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 ]; + }; } diff --git a/pkgs/development/libraries/science/math/suitesparse/SuiteSparse_config.mk b/pkgs/development/libraries/science/math/suitesparse/SuiteSparse_config.mk deleted file mode 100644 index 157a20d7b5a..00000000000 --- a/pkgs/development/libraries/science/math/suitesparse/SuiteSparse_config.mk +++ /dev/null @@ -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 diff --git a/pkgs/development/libraries/science/math/suitesparse/default.nix b/pkgs/development/libraries/science/math/suitesparse/default.nix index add4ca9a08f..f30db472b0d 100644 --- a/pkgs/development/libraries/science/math/suitesparse/default.nix +++ b/pkgs/development/libraries/science/math/suitesparse/default.nix @@ -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; diff --git a/pkgs/development/libraries/science/math/suitesparse/disable-metis.patch b/pkgs/development/libraries/science/math/suitesparse/disable-metis.patch deleted file mode 100644 index 5b735eb7d3c..00000000000 --- a/pkgs/development/libraries/science/math/suitesparse/disable-metis.patch +++ /dev/null @@ -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 \ |