Unverified Commit 2b5a672e authored by Markus Kowalewski's avatar Markus Kowalewski Committed by GitHub
Browse files

scalapack: modernize; fix build with cmake4 (#445431)

parents 30379471 e2861dce
Loading
Loading
Loading
Loading
+38 −31
Original line number Diff line number Diff line
@@ -4,26 +4,33 @@
  fetchFromGitHub,
  fetchpatch,
  cmake,
  gfortran,
  mpiCheckPhaseHook,
  mpi,
  blas,
  lapack,
  testers,
}:

assert blas.isILP64 == lapack.isILP64;

stdenv.mkDerivation rec {
stdenv.mkDerivation (finalAttrs: {
  pname = "scalapack";
  version = "2.2.2";

  src = fetchFromGitHub {
    owner = "Reference-ScaLAPACK";
    repo = "scalapack";
    tag = "v${version}";
    tag = "v${finalAttrs.version}";
    hash = "sha256-KDMW/D7ubGaD2L7eTwULJ04fAYDPAKl8xKPZGZMkeik=";
  };

  passthru = { inherit (blas) isILP64; };
  passthru = {
    inherit (blas) isILP64;
    tests.pkg-config = testers.hasPkgConfigModules {
      package = finalAttrs.finalPackage;
    };
  };

  __structuredAttrs = true;

@@ -37,7 +44,7 @@ stdenv.mkDerivation rec {

  # Required to activate ILP64.
  # See https://github.com/Reference-ScaLAPACK/scalapack/pull/19
  postPatch = lib.optionalString passthru.isILP64 ''
  postPatch = lib.optionalString finalAttrs.passthru.isILP64 ''
    sed -i 's/INTSZ = 4/INTSZ = 8/g'   TESTING/EIG/* TESTING/LIN/*
    sed -i 's/INTGSZ = 4/INTGSZ = 8/g' TESTING/EIG/* TESTING/LIN/*

@@ -50,36 +57,35 @@ stdenv.mkDerivation rec {
    "dev"
  ];

  nativeBuildInputs = [ cmake ];
  nativeBuildInputs = [
    cmake
    gfortran
  ];

  nativeCheckInputs = [ mpiCheckPhaseHook ];
  buildInputs = [

  propagatedBuildInputs = [
    blas
    lapack
  ];
  propagatedBuildInputs = [ mpi ];
  hardeningDisable = lib.optionals (stdenv.hostPlatform.isAarch64 && stdenv.hostPlatform.isDarwin) [
    "stackprotector"
    mpi
  ];

  # xslu and xsllt tests seem to time out on x86_64-darwin.
  # this line is left so those who force installation on x86_64-darwin can still build
  doCheck = !(stdenv.hostPlatform.isx86_64 && stdenv.hostPlatform.isDarwin);

  preConfigure = ''
    cmakeFlagsArray+=(
      -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=OFF
      -DLAPACK_LIBRARIES="-llapack"
      -DBLAS_LIBRARIES="-lblas"
      -DCMAKE_Fortran_COMPILER=${lib.getDev mpi}/bin/mpif90
      -DCMAKE_C_FLAGS="${
        lib.concatStringsSep " " [
  cmakeFlagsArray = [
    (lib.cmakeBool "BUILD_SHARED_LIBS" (!stdenv.hostPlatform.isStatic))
    (lib.cmakeFeature "LAPACK_LIBRARIES" "-llapack")
    (lib.cmakeFeature "BLAS_LIBRARIES" "-lblas")
    (lib.cmakeFeature "CMAKE_C_FLAGS" "${lib.concatStringsSep " " [
      "-Wno-implicit-function-declaration"
          (lib.optionalString passthru.isILP64 "-DInt=long")
      (lib.optionalString finalAttrs.passthru.isILP64 "-DInt=long")
    ]}")
  ]
      }"
      ${lib.optionalString passthru.isILP64 ''-DCMAKE_Fortran_FLAGS="-fdefault-integer-8"''}
      )
  '';
  ++ lib.optionals finalAttrs.passthru.isILP64 [
    (lib.cmakeFeature "CMAKE_Fortran_FLAGS" "-fdefault-integer-8")
  ];

  # Increase individual test timeout from 1500s to 10000s because hydra's builds
  # sometimes fail due to this
@@ -89,16 +95,17 @@ stdenv.mkDerivation rec {
    # _IMPORT_PREFIX, used to point to lib, points to dev output. Every package using the generated
    # cmake file will thus look for the library in the dev output instead of out.
    # Use the absolute path to $out instead to fix the issue.
    substituteInPlace  $dev/lib/cmake/scalapack-${version}/scalapack-targets-release.cmake \
    substituteInPlace  $dev/lib/cmake/scalapack-${finalAttrs.version}/scalapack-targets-release.cmake \
      --replace "\''${_IMPORT_PREFIX}" "$out"
  '';

  meta = with lib; {
  meta = {
    homepage = "http://www.netlib.org/scalapack/";
    description = "Library of high-performance linear algebra routines for parallel distributed memory machines";
    license = licenses.bsd3;
    platforms = platforms.unix;
    maintainers = with maintainers; [
    license = lib.licenses.bsd3;
    platforms = lib.platforms.unix;
    pkgConfigModules = [ "scalapack" ];
    maintainers = with lib.maintainers; [
      costrouc
      markuskowa
      gdinh
@@ -106,4 +113,4 @@ stdenv.mkDerivation rec {
    # xslu and xsllt tests fail on x86 darwin
    broken = stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isx86_64;
  };
}
})