bandwhich: 0.23.0 -> 0.23.1; move to by-name; nixfmt; useFetchCargoVendor (#356934)
[NixPkgs.git] / pkgs / by-name / sc / scalapack / package.nix
blob69caf221c5a6fcc656b1937df4713263154f09ba
2   lib,
3   stdenv,
4   fetchFromGitHub,
5   fetchpatch,
6   cmake,
7   mpiCheckPhaseHook,
8   mpi,
9   blas,
10   lapack,
13 assert blas.isILP64 == lapack.isILP64;
15 stdenv.mkDerivation rec {
16   pname = "scalapack";
17   version = "2.2.1";
19   src = fetchFromGitHub {
20     owner = "Reference-ScaLAPACK";
21     repo = pname;
22     rev = "v${version}";
23     sha256 = "sha256-GNVGWrIWdfyTfbz7c31Vjt9eDlVzCd/aLHoWq2DMyX4=";
24   };
26   passthru = { inherit (blas) isILP64; };
28   __structuredAttrs = true;
30   # upstream patch, remove with next release
31   patches = [
32     (fetchpatch {
33       name = "gcc-10";
34       url = "https://github.com/Reference-ScaLAPACK/scalapack/commit/a0f76fc0c1c16646875b454b7d6f8d9d17726b5a.patch";
35       sha256 = "0civn149ikghakic30bynqg1bal097hr7i12cm4kq3ssrhq073bp";
36     })
37   ];
39   # Required to activate ILP64.
40   # See https://github.com/Reference-ScaLAPACK/scalapack/pull/19
41   postPatch = lib.optionalString passthru.isILP64 ''
42     sed -i 's/INTSZ = 4/INTSZ = 8/g'   TESTING/EIG/* TESTING/LIN/*
43     sed -i 's/INTGSZ = 4/INTGSZ = 8/g' TESTING/EIG/* TESTING/LIN/*
45     # These tests are not adapted to ILP64
46     sed -i '/xssep/d;/xsgsep/d;/xssyevr/d' TESTING/CMakeLists.txt
47   '';
49   outputs = [
50     "out"
51     "dev"
52   ];
54   nativeBuildInputs = [ cmake ];
55   nativeCheckInputs = [ mpiCheckPhaseHook ];
56   buildInputs = [
57     blas
58     lapack
59   ];
60   propagatedBuildInputs = [ mpi ];
61   hardeningDisable = lib.optionals (stdenv.hostPlatform.isAarch64 && stdenv.hostPlatform.isDarwin) [
62     "stackprotector"
63   ];
65   # xslu and xsllt tests seem to time out on x86_64-darwin.
66   # this line is left so those who force installation on x86_64-darwin can still build
67   doCheck = !(stdenv.hostPlatform.isx86_64 && stdenv.hostPlatform.isDarwin);
69   preConfigure = ''
70     cmakeFlagsArray+=(
71       -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=OFF
72       -DLAPACK_LIBRARIES="-llapack"
73       -DBLAS_LIBRARIES="-lblas"
74       -DCMAKE_Fortran_COMPILER=${lib.getDev mpi}/bin/mpif90
75       -DCMAKE_C_FLAGS="${
76         lib.concatStringsSep " " [
77           "-Wno-implicit-function-declaration"
78           (lib.optionalString passthru.isILP64 "-DInt=long")
79         ]
80       }"
81       ${lib.optionalString passthru.isILP64 ''-DCMAKE_Fortran_FLAGS="-fdefault-integer-8"''}
82       )
83   '';
85   # Increase individual test timeout from 1500s to 10000s because hydra's builds
86   # sometimes fail due to this
87   checkFlags = [ "ARGS=--timeout 10000" ];
89   postFixup = ''
90     # _IMPORT_PREFIX, used to point to lib, points to dev output. Every package using the generated
91     # cmake file will thus look for the library in the dev output instead of out.
92     # Use the absolute path to $out instead to fix the issue.
93     substituteInPlace  $dev/lib/cmake/scalapack-${version}/scalapack-targets-release.cmake \
94       --replace "\''${_IMPORT_PREFIX}" "$out"
95   '';
97   meta = with lib; {
98     homepage = "http://www.netlib.org/scalapack/";
99     description = "Library of high-performance linear algebra routines for parallel distributed memory machines";
100     license = licenses.bsd3;
101     platforms = platforms.unix;
102     maintainers = with maintainers; [
103       costrouc
104       markuskowa
105       gdinh
106     ];
107     # xslu and xsllt tests fail on x86 darwin
108     broken = stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isx86_64;
109   };