tangled
alpha
login
or
join now
tjh.dev
/
nixpkgs
Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
0
fork
atom
overview
issues
pulls
pipelines
suitesparse: 4.4.4 -> 5.3.0
Jaakko Luttinen
7 years ago
8fb27604
46651b82
+153
-43
3 changed files
expand all
collapse all
unified
split
pkgs
development
libraries
science
math
suitesparse
4.4.nix
default.nix
top-level
all-packages.nix
+100
pkgs/development/libraries/science/math/suitesparse/4.4.nix
···
1
1
+
{ stdenv, fetchurl, gfortran, openblas
2
2
+
, enableCuda ? false, cudatoolkit
3
3
+
}:
4
4
+
5
5
+
let
6
6
+
version = "4.4.4";
7
7
+
name = "suitesparse-${version}";
8
8
+
9
9
+
int_t = if openblas.blas64 then "int64_t" else "int32_t";
10
10
+
SHLIB_EXT = stdenv.hostPlatform.extensions.sharedLibrary;
11
11
+
in
12
12
+
stdenv.mkDerivation {
13
13
+
inherit name;
14
14
+
15
15
+
src = fetchurl {
16
16
+
url = "http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-${version}.tar.gz";
17
17
+
sha256 = "1zdn1y0ij6amj7smmcslkqgbqv9yy5cwmbyzqc9v6drzdzllgbpj";
18
18
+
};
19
19
+
20
20
+
preConfigure = ''
21
21
+
mkdir -p $out/lib
22
22
+
mkdir -p $out/include
23
23
+
24
24
+
sed -i "SuiteSparse_config/SuiteSparse_config.mk" \
25
25
+
-e 's/METIS .*$/METIS =/' \
26
26
+
-e 's/METIS_PATH .*$/METIS_PATH =/' \
27
27
+
-e '/CHOLMOD_CONFIG/ s/$/-DNPARTITION -DLONGBLAS=${int_t}/' \
28
28
+
-e '/UMFPACK_CONFIG/ s/$/-DLONGBLAS=${int_t}/'
29
29
+
''
30
30
+
+ stdenv.lib.optionalString stdenv.isDarwin ''
31
31
+
sed -i "SuiteSparse_config/SuiteSparse_config.mk" \
32
32
+
-e 's/^[[:space:]]*\(LIB = -lm\) -lrt/\1/'
33
33
+
''
34
34
+
+ stdenv.lib.optionalString enableCuda ''
35
35
+
sed -i "SuiteSparse_config/SuiteSparse_config.mk" \
36
36
+
-e 's|^[[:space:]]*\(CUDA_ROOT =\)|CUDA_ROOT = ${cudatoolkit}|' \
37
37
+
-e 's|^[[:space:]]*\(GPU_BLAS_PATH =\)|GPU_BLAS_PATH = $(CUDA_ROOT)|' \
38
38
+
-e 's|^[[:space:]]*\(GPU_CONFIG =\)|GPU_CONFIG = -I$(CUDA_ROOT)/include -DGPU_BLAS -DCHOLMOD_OMP_NUM_THREADS=$(NIX_BUILD_CORES) |' \
39
39
+
-e 's|^[[:space:]]*\(CUDA_PATH =\)|CUDA_PATH = $(CUDA_ROOT)|' \
40
40
+
-e 's|^[[:space:]]*\(CUDART_LIB =\)|CUDART_LIB = $(CUDA_ROOT)/lib64/libcudart.so|' \
41
41
+
-e 's|^[[:space:]]*\(CUBLAS_LIB =\)|CUBLAS_LIB = $(CUDA_ROOT)/lib64/libcublas.so|' \
42
42
+
-e 's|^[[:space:]]*\(CUDA_INC_PATH =\)|CUDA_INC_PATH = $(CUDA_ROOT)/include/|' \
43
43
+
-e 's|^[[:space:]]*\(NV20 =\)|NV20 = -arch=sm_20 -Xcompiler -fPIC|' \
44
44
+
-e 's|^[[:space:]]*\(NV30 =\)|NV30 = -arch=sm_30 -Xcompiler -fPIC|' \
45
45
+
-e 's|^[[:space:]]*\(NV35 =\)|NV35 = -arch=sm_35 -Xcompiler -fPIC|' \
46
46
+
-e 's|^[[:space:]]*\(NVCC =\) echo|NVCC = $(CUDA_ROOT)/bin/nvcc|' \
47
47
+
-e 's|^[[:space:]]*\(NVCCFLAGS =\)|NVCCFLAGS = $(NV20) -O3 -gencode=arch=compute_20,code=sm_20 -gencode=arch=compute_30,code=sm_30 -gencode=arch=compute_35,code=sm_35 -gencode=arch=compute_60,code=sm_60|'
48
48
+
'';
49
49
+
50
50
+
makeFlags = [
51
51
+
"PREFIX=\"$(out)\""
52
52
+
"INSTALL_LIB=$(out)/lib"
53
53
+
"INSTALL_INCLUDE=$(out)/include"
54
54
+
"BLAS=-lopenblas"
55
55
+
"LAPACK="
56
56
+
];
57
57
+
58
58
+
NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.isDarwin " -DNTIMER";
59
59
+
60
60
+
postInstall = ''
61
61
+
# Build and install shared library
62
62
+
(
63
63
+
cd "$(mktemp -d)"
64
64
+
for i in "$out"/lib/lib*.a; do
65
65
+
ar -x $i
66
66
+
done
67
67
+
${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"}
68
68
+
)
69
69
+
for i in umfpack cholmod amd camd colamd spqr; do
70
70
+
ln -s libsuitesparse${SHLIB_EXT} "$out"/lib/lib$i${SHLIB_EXT}
71
71
+
done
72
72
+
73
73
+
# Install documentation
74
74
+
outdoc=$out/share/doc/${name}
75
75
+
mkdir -p $outdoc
76
76
+
cp -r AMD/Doc $outdoc/amd
77
77
+
cp -r BTF/Doc $outdoc/bft
78
78
+
cp -r CAMD/Doc $outdoc/camd
79
79
+
cp -r CCOLAMD/Doc $outdoc/ccolamd
80
80
+
cp -r CHOLMOD/Doc $outdoc/cholmod
81
81
+
cp -r COLAMD/Doc $outdoc/colamd
82
82
+
cp -r CXSparse/Doc $outdoc/cxsparse
83
83
+
cp -r KLU/Doc $outdoc/klu
84
84
+
cp -r LDL/Doc $outdoc/ldl
85
85
+
cp -r RBio/Doc $outdoc/rbio
86
86
+
cp -r SPQR/Doc $outdoc/spqr
87
87
+
cp -r UMFPACK/Doc $outdoc/umfpack
88
88
+
'';
89
89
+
90
90
+
nativeBuildInputs = [ gfortran ];
91
91
+
buildInputs = [ openblas ];
92
92
+
93
93
+
meta = with stdenv.lib; {
94
94
+
homepage = http://faculty.cse.tamu.edu/davis/suitesparse.html;
95
95
+
description = "A suite of sparse matrix algorithms";
96
96
+
license = with licenses; [ bsd2 gpl2Plus lgpl21Plus ];
97
97
+
maintainers = with maintainers; [ ttuegel ];
98
98
+
platforms = with platforms; unix;
99
99
+
};
100
100
+
}
+49
-40
pkgs/development/libraries/science/math/suitesparse/default.nix
···
1
1
-
{ stdenv, fetchurl, gfortran, openblas
1
1
+
{ stdenv, fetchurl, gfortran, openblas, cmake
2
2
, enableCuda ? false, cudatoolkit
3
3
}:
4
4
5
5
let
6
6
-
version = "4.4.4";
6
6
+
version = "5.3.0";
7
7
name = "suitesparse-${version}";
8
8
9
9
-
int_t = if openblas.blas64 then "int64_t" else "int32_t";
10
9
SHLIB_EXT = stdenv.hostPlatform.extensions.sharedLibrary;
11
10
in
12
12
-
stdenv.mkDerivation {
11
11
+
stdenv.mkDerivation rec {
13
12
inherit name;
14
13
15
14
src = fetchurl {
16
15
url = "http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-${version}.tar.gz";
17
17
-
sha256 = "1zdn1y0ij6amj7smmcslkqgbqv9yy5cwmbyzqc9v6drzdzllgbpj";
16
16
+
sha256 = "0gcn1xj3z87wpp26gxn11k8073bxv6jswfd8jmddlm64v09rgrlh";
18
17
};
19
18
19
19
+
dontUseCmakeConfigure = true;
20
20
+
20
21
preConfigure = ''
21
22
mkdir -p $out/lib
22
23
mkdir -p $out/include
24
24
+
mkdir -p $out/share/doc/${name}
23
25
24
26
sed -i "SuiteSparse_config/SuiteSparse_config.mk" \
25
27
-e 's/METIS .*$/METIS =/' \
26
28
-e 's/METIS_PATH .*$/METIS_PATH =/' \
27
27
-
-e '/CHOLMOD_CONFIG/ s/$/-DNPARTITION -DLONGBLAS=${int_t}/' \
28
28
-
-e '/UMFPACK_CONFIG/ s/$/-DLONGBLAS=${int_t}/'
29
29
+
-e '/CHOLMOD_CONFIG/ s/$/-DNPARTITION/'
29
30
''
30
31
+ stdenv.lib.optionalString stdenv.isDarwin ''
31
32
sed -i "SuiteSparse_config/SuiteSparse_config.mk" \
···
47
48
-e 's|^[[:space:]]*\(NVCCFLAGS =\)|NVCCFLAGS = $(NV20) -O3 -gencode=arch=compute_20,code=sm_20 -gencode=arch=compute_30,code=sm_30 -gencode=arch=compute_35,code=sm_35 -gencode=arch=compute_60,code=sm_60|'
48
49
'';
49
50
50
50
-
makeFlags = [
51
51
-
"PREFIX=\"$(out)\""
52
52
-
"INSTALL_LIB=$(out)/lib"
53
53
-
"INSTALL_INCLUDE=$(out)/include"
54
54
-
"BLAS=-lopenblas"
55
55
-
"LAPACK="
56
56
-
];
51
51
+
NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.isDarwin " -DNTIMER";
52
52
+
53
53
+
buildPhase = ''
54
54
+
runHook preBuild
57
55
58
58
-
NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.isDarwin " -DNTIMER";
56
56
+
# Build individual shared libraries
57
57
+
make library \
58
58
+
BLAS=-lopenblas \
59
59
+
LAPACK="" \
60
60
+
${stdenv.lib.optionalString openblas.blas64 "CFLAGS=-DBLAS64"}
59
61
60
60
-
postInstall = ''
61
61
-
# Build and install shared library
62
62
+
# Build libsuitesparse.so which bundles all the individual libraries.
63
63
+
# Bundling is done by building the static libraries, extracting objects from
64
64
+
# them and combining the objects into one shared library.
65
65
+
mkdir -p static
66
66
+
make static AR_TARGET=$(pwd)/static/'$(LIBRARY).a'
62
67
(
63
63
-
cd "$(mktemp -d)"
64
64
-
for i in "$out"/lib/lib*.a; do
68
68
+
cd static
69
69
+
for i in lib*.a; do
65
70
ar -x $i
66
71
done
67
67
-
${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"}
68
72
)
69
69
-
for i in umfpack cholmod amd camd colamd spqr; do
70
70
-
ln -s libsuitesparse${SHLIB_EXT} "$out"/lib/lib$i${SHLIB_EXT}
71
71
-
done
73
73
+
${if enableCuda then "${cudatoolkit}/bin/nvcc" else "${stdenv.cc.outPath}/bin/cc"} \
74
74
+
static/*.o \
75
75
+
${if stdenv.isDarwin then "-dynamiclib" else "--shared"} \
76
76
+
-o "lib/libsuitesparse${SHLIB_EXT}" \
77
77
+
-lopenblas \
78
78
+
${stdenv.lib.optionalString enableCuda "-lcublas"}
72
79
73
73
-
# Install documentation
74
74
-
outdoc=$out/share/doc/${name}
75
75
-
mkdir -p $outdoc
76
76
-
cp -r AMD/Doc $outdoc/amd
77
77
-
cp -r BTF/Doc $outdoc/bft
78
78
-
cp -r CAMD/Doc $outdoc/camd
79
79
-
cp -r CCOLAMD/Doc $outdoc/ccolamd
80
80
-
cp -r CHOLMOD/Doc $outdoc/cholmod
81
81
-
cp -r COLAMD/Doc $outdoc/colamd
82
82
-
cp -r CXSparse/Doc $outdoc/cxsparse
83
83
-
cp -r KLU/Doc $outdoc/klu
84
84
-
cp -r LDL/Doc $outdoc/ldl
85
85
-
cp -r RBio/Doc $outdoc/rbio
86
86
-
cp -r SPQR/Doc $outdoc/spqr
87
87
-
cp -r UMFPACK/Doc $outdoc/umfpack
80
80
+
runHook postBuild
88
81
'';
89
82
90
90
-
nativeBuildInputs = [ gfortran ];
91
91
-
buildInputs = [ openblas ];
83
83
+
installPhase = ''
84
84
+
runHook preInstall
85
85
+
86
86
+
mkdir -p $out
87
87
+
cp -r lib $out/
88
88
+
cp -r include $out/
89
89
+
cp -r share $out/
90
90
+
91
91
+
# Fix rpaths
92
92
+
cd $out
93
93
+
find -name \*.so\* -type f -exec \
94
94
+
patchelf --set-rpath "$out/lib:${stdenv.lib.makeLibraryPath buildInputs}" {} \;
95
95
+
96
96
+
runHook postInstall
97
97
+
'';
98
98
+
99
99
+
nativeBuildInputs = [ cmake ];
100
100
+
buildInputs = [ openblas gfortran.cc.lib ] ++ stdenv.lib.optionals enableCuda [cudatoolkit];
92
101
93
102
meta = with stdenv.lib; {
94
103
homepage = http://faculty.cse.tamu.edu/davis/suitesparse.html;
+4
-3
pkgs/top-level/all-packages.nix
···
1537
1537
riot-web = callPackage ../applications/networking/instant-messengers/riot/riot-web.nix {
1538
1538
conf = config.riot-web.conf or null;
1539
1539
};
1540
1540
-
1540
1540
+
1541
1541
roundcube = callPackage ../servers/roundcube { };
1542
1542
1543
1543
rsbep = callPackage ../tools/backup/rsbep { };
···
20953
20953
sageWithDoc = sage.override { withDoc = true; };
20954
20954
20955
20955
suitesparse_4_2 = callPackage ../development/libraries/science/math/suitesparse/4.2.nix { };
20956
20956
-
suitesparse_4_4 = callPackage ../development/libraries/science/math/suitesparse {};
20957
20957
-
suitesparse = suitesparse_4_4;
20956
20956
+
suitesparse_4_4 = callPackage ../development/libraries/science/math/suitesparse/4.4.nix {};
20957
20957
+
suitesparse_5_3 = callPackage ../development/libraries/science/math/suitesparse {};
20958
20958
+
suitesparse = suitesparse_5_3;
20958
20959
20959
20960
superlu = callPackage ../development/libraries/science/math/superlu {};
20960
20961