![Jan Tojnar](/assets/img/avatar_default.png)
* Switch to default buildPhase & installPhase
* In preConfigure
* Do not add -DNPARTITION to CHOLMOD_CONFIG. That would disable the use of Metis but we already have that.
* Do not remove -lrt on Darwin, Darwin compiler can handle that and the code no longer exists anyway.
* With CUDA enabled
* Do not replace CUDA_ROOT. It does not exist any more. Instead we are setting CUDA_PATH in makeFlags.
* Do not replace GPU_BLAS_PATH, it defaults to CUDA_PATH so it will end up with the same value.
* Do not add -DCHOLMOD_OMP_NUM_THREADS to GPU_CONFIG. Why would be having the library use the same number of threads as the builder a good idea?
* Do not replace CUDA_PATH, we are setting it in makeFlags now.
* Do not replace CUDART_LIB and CUBLAS_LIB. They were being replaced incorrectly (cuda libs are located in lib directory, not lib64). Instead set the correct paths in makeFlags.
* Do not replace CUDA_INC_PATH. Its default looks like it will end up with the same value.
* Do not replace NV20, NV30, NV35 – not used any more.
* Do not replace NVCC, defaults to the same.
* Do not replace NVCCFLAGS, we just used the default from SourceSparse 4.4.7 with -gencode=arch=compute_60,code=compute_60 tacked on top. Current upstream default looks much better.
* Stop adding -DNTIMER to CFLAGS on Darwin – clock_gettime is supported by macOS 10.12 SDK.
* In buildPhase
* Move the make arguments to makeFlags and library to buildFlags, allowing us to drop the manual make call. I did not verify all of these are still needed.
* Remove the creation of libsuitesparse.so. As far as I could tell it is some kind of remnant of our old expression – perhaps due to past deficiencies of the build scripts, we created the individual libraries as symlinks to libsuitesparse.so: e36b3ec0a5
But since the build script can now build individual .so libraries, there should be no need for this abomination. No other distros do this either.
* In installPhase
* No need to copy things manually, there is an install target. We just need to pass INSTALL=$out flag to make to let it know where to install the files.
* I do not have means of verifying the darwin dylib name fix but it looks like it might be fixed in an upcoming release.
* I dropped the rpath fixup as it does not seem to be needed any more (ldd does not report any unresolved libraries).
91 lines
2.3 KiB
Nix
91 lines
2.3 KiB
Nix
{ stdenv
|
|
, fetchFromGitHub
|
|
, gfortran
|
|
, openblas
|
|
, metis
|
|
, fixDarwinDylibNames
|
|
, gnum4
|
|
, enableCuda ? false
|
|
, cudatoolkit
|
|
}:
|
|
|
|
stdenv.mkDerivation rec {
|
|
pname = "suitesparse";
|
|
version = "5.7.1";
|
|
|
|
outputs = [ "out" "dev" "doc" ];
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "DrTimothyAldenDavis";
|
|
repo = "SuiteSparse";
|
|
rev = "v${version}";
|
|
sha256 = "SA9SQKRDKUI1GilNMuCXljcvovLUwRKBUi/tiQ4dl5w=";
|
|
};
|
|
|
|
nativeBuildInputs = [
|
|
gnum4
|
|
] ++ stdenv.lib.optional stdenv.isDarwin fixDarwinDylibNames;
|
|
|
|
buildInputs = [
|
|
openblas
|
|
metis
|
|
gfortran.cc.lib
|
|
] ++ stdenv.lib.optional enableCuda cudatoolkit;
|
|
|
|
preConfigure = ''
|
|
# Mongoose and GraphBLAS are packaged separately
|
|
sed -i "Makefile" -e '/GraphBLAS\|Mongoose/d'
|
|
'';
|
|
|
|
makeFlags = [
|
|
"INSTALL=${placeholder "out"}"
|
|
"INSTALL_INCLUDE=${placeholder "dev"}/include"
|
|
"JOBS=$(NIX_BUILD_CORES)"
|
|
"BLAS=-lopenblas"
|
|
"MY_METIS_LIB=-lmetis"
|
|
"LAPACK="
|
|
] ++ stdenv.lib.optionals openblas.blas64 [
|
|
"CFLAGS=-DBLAS64"
|
|
] ++ stdenv.lib.optionals enableCuda [
|
|
"CUDA_PATH=${cudatoolkit}"
|
|
"CUDART_LIB=${cudatoolkit.lib}/lib/libcudart.so"
|
|
"CUBLAS_LIB=${cudatoolkit}/lib/libcublas.so"
|
|
];
|
|
|
|
buildFlags = [
|
|
# Build individual shared libraries, not demos
|
|
"library"
|
|
];
|
|
|
|
# Likely fixed after 5.7.1
|
|
# https://github.com/DrTimothyAldenDavis/SuiteSparse/commit/f6daae26ee391e475e2295e77c839aa7c1a8b784
|
|
postInstall = stdenv.lib.optionalString stdenv.isDarwin ''
|
|
# The fixDarwinDylibNames in nixpkgs can't seem to fix all the libraries.
|
|
# We manually fix them up here.
|
|
fixDarwinDylibNames() {
|
|
local flags=()
|
|
local old_id
|
|
|
|
for fn in "$@"; do
|
|
flags+=(-change "$PWD/lib/$(basename "$fn")" "$fn")
|
|
done
|
|
|
|
for fn in "$@"; do
|
|
if [ -L "$fn" ]; then continue; fi
|
|
echo "$fn: fixing dylib"
|
|
install_name_tool -id "$fn" "''${flags[@]}" "$fn"
|
|
done
|
|
}
|
|
|
|
fixDarwinDylibNames $(find "$out" -name "*.dylib")
|
|
'';
|
|
|
|
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 ];
|
|
platforms = with platforms; unix;
|
|
};
|
|
}
|