Loading pkgs/by-name/mu/mumps/package.nix +104 −45 Original line number Diff line number Diff line Loading @@ -6,10 +6,55 @@ lapack, lib, metis, parmetis, withParmetis ? false, # default to false due to unfree license scotch, withPtScotch ? mpiSupport, stdenv, fixDarwinDylibNames, mpi, mpiSupport ? false, mpiCheckPhaseHook, scalapack, }: assert withParmetis -> mpiSupport; assert withPtScotch -> mpiSupport; let profile = if mpiSupport then "debian.PAR" else "debian.SEQ"; metisFlags = if withParmetis then '' IMETIS="-I${parmetis}/include -I${metis}/include" \ LMETIS="-L${parmetis}/lib -lparmetis -L${metis}/lib -lmetis" '' else '' IMETIS=-I${metis}/include \ LMETIS="-L${metis}/lib -lmetis" ''; scotchFlags = if withPtScotch then '' ISCOTCH=-I${scotch.dev}/include \ LSCOTCH="-L${scotch}/lib -lptscotch -lptesmumps -lptscotcherr" '' else '' ISCOTCH=-I${scotch.dev}/include \ LSCOTCH="-L${scotch}/lib -lesmumps -lscotch -lscotcherr" ''; macroFlags = "-Dmetis -Dpord -Dscotch" + lib.optionalString withParmetis " -Dparmetis" + lib.optionalString withPtScotch " -Dptscotch"; # Optimized options # Disable -fopenmp in lines below to benefit from OpenMP optFlags = '' OPTF="-O3 -fallow-argument-mismatch" \ OPTL="-O3" \ OPTC="-O3" ''; in stdenv.mkDerivation (finalAttrs: { name = "mumps"; version = "5.7.3"; Loading @@ -26,28 +71,31 @@ stdenv.mkDerivation (finalAttrs: { ''; configurePhase = '' cp Make.inc/Makefile.debian.SEQ ./Makefile.inc cp Make.inc/Makefile.${profile} ./Makefile.inc ''; enableParallelBuilding = true; preBuild = '' makeFlagsArray+=(${metisFlags} ${scotchFlags} ORDERINGSF="${macroFlags}" ${optFlags}) ''; makeFlags = lib.optionals stdenv.hostPlatform.isDarwin [ "SONAME=" "LIBEXT_SHARED=.dylib" ] ++ [ "LSCOTCHDIR=${scotch}/lib" "ISCOTCH=-I${scotch.dev}/include" "LMETISDIR=${metis}/lib" "IMETIS=-I${metis}/include" "SCALAP=-lscalapack" "allshared" ]; installPhase = '' installPhase = '' mkdir $out cp -r include lib $out '' + lib.optionalString (!mpiSupport) '' # Install mumps_seq headers install -Dm 444 -t $out/include/mumps_seq libseq/*.h Loading @@ -55,15 +103,15 @@ stdenv.mkDerivation (finalAttrs: { ln -s $out/include/mumps_seq/mpi.h $out/include/mumps_mpi.h ''; nativeBuildInputs = lib.optionals stdenv.hostPlatform.isDarwin [ fixDarwinDylibNames ] ++ [ nativeBuildInputs = [ gfortran ]; ] ++ lib.optional stdenv.hostPlatform.isDarwin fixDarwinDylibNames ++ lib.optional mpiSupport mpi; buildInputs = [ # Parmetis should be placed before scotch to avoid conflict of header file "parmetis.h" buildInputs = lib.optional withParmetis parmetis ++ lib.optional mpiSupport scalapack ++ [ blas lapack metis Loading @@ -71,30 +119,41 @@ stdenv.mkDerivation (finalAttrs: { ]; doInstallCheck = true; installCheckPhase = lib.optionalString stdenv.hostPlatform.isDarwin '' export DYLD_LIBRARY_PATH=$out/lib '' + '' nativeInstallCheckInputs = lib.optional mpiSupport mpiCheckPhaseHook; installCheckPhase = '' runHook preInstallCheck ${lib.optionalString stdenv.hostPlatform.isDarwin "export DYLD_LIBRARY_PATH=$out/lib\n"} ${lib.optionalString mpiSupport "export MPIRUN='mpirun -n 2'\n"} cd examples make all ./ssimpletest <input_simpletest_real ./dsimpletest <input_simpletest_real ./csimpletest <input_simpletest_cmplx ./zsimpletest <input_simpletest_cmplx ./c_example ./multiple_arithmetics_example ./ssimpletest_save_restore <input_simpletest_real ./dsimpletest_save_restore <input_simpletest_real ./csimpletest_save_restore <input_simpletest_cmplx ./zsimpletest_save_restore <input_simpletest_cmplx ./c_example_save_restore $MPIRUN ./ssimpletest <input_simpletest_real $MPIRUN ./dsimpletest <input_simpletest_real $MPIRUN ./csimpletest <input_simpletest_cmplx $MPIRUN ./zsimpletest <input_simpletest_cmplx $MPIRUN ./c_example $MPIRUN ./multiple_arithmetics_example $MPIRUN ./ssimpletest_save_restore <input_simpletest_real $MPIRUN ./dsimpletest_save_restore <input_simpletest_real $MPIRUN ./csimpletest_save_restore <input_simpletest_cmplx $MPIRUN ./zsimpletest_save_restore <input_simpletest_cmplx $MPIRUN ./c_example_save_restore runHook postInstallCheck ''; passthru = { inherit withParmetis withPtScotch mpiSupport; }; meta = { description = "MUltifrontal Massively Parallel sparse direct Solver"; homepage = "http://mumps-solver.org/"; license = lib.licenses.cecill-c; maintainers = with lib.maintainers; [ nim65s ]; maintainers = with lib.maintainers; [ nim65s qbisi ]; platforms = lib.platforms.unix; # Dependency of scalapack for mpiSupport is broken on darwin platform broken = mpiSupport && stdenv.hostPlatform.isDarwin; }; }) pkgs/top-level/all-packages.nix +2 −0 Original line number Diff line number Diff line Loading @@ -681,6 +681,8 @@ with pkgs; inherit (darwin) DarwinTools; }; mumps_par = callPackage ../by-name/mu/mumps/package.nix { mpiSupport = true; }; mix2nix = callPackage ../development/tools/mix2nix { }; n98-magerun = callPackage ../development/tools/misc/n98-magerun { }; Loading
pkgs/by-name/mu/mumps/package.nix +104 −45 Original line number Diff line number Diff line Loading @@ -6,10 +6,55 @@ lapack, lib, metis, parmetis, withParmetis ? false, # default to false due to unfree license scotch, withPtScotch ? mpiSupport, stdenv, fixDarwinDylibNames, mpi, mpiSupport ? false, mpiCheckPhaseHook, scalapack, }: assert withParmetis -> mpiSupport; assert withPtScotch -> mpiSupport; let profile = if mpiSupport then "debian.PAR" else "debian.SEQ"; metisFlags = if withParmetis then '' IMETIS="-I${parmetis}/include -I${metis}/include" \ LMETIS="-L${parmetis}/lib -lparmetis -L${metis}/lib -lmetis" '' else '' IMETIS=-I${metis}/include \ LMETIS="-L${metis}/lib -lmetis" ''; scotchFlags = if withPtScotch then '' ISCOTCH=-I${scotch.dev}/include \ LSCOTCH="-L${scotch}/lib -lptscotch -lptesmumps -lptscotcherr" '' else '' ISCOTCH=-I${scotch.dev}/include \ LSCOTCH="-L${scotch}/lib -lesmumps -lscotch -lscotcherr" ''; macroFlags = "-Dmetis -Dpord -Dscotch" + lib.optionalString withParmetis " -Dparmetis" + lib.optionalString withPtScotch " -Dptscotch"; # Optimized options # Disable -fopenmp in lines below to benefit from OpenMP optFlags = '' OPTF="-O3 -fallow-argument-mismatch" \ OPTL="-O3" \ OPTC="-O3" ''; in stdenv.mkDerivation (finalAttrs: { name = "mumps"; version = "5.7.3"; Loading @@ -26,28 +71,31 @@ stdenv.mkDerivation (finalAttrs: { ''; configurePhase = '' cp Make.inc/Makefile.debian.SEQ ./Makefile.inc cp Make.inc/Makefile.${profile} ./Makefile.inc ''; enableParallelBuilding = true; preBuild = '' makeFlagsArray+=(${metisFlags} ${scotchFlags} ORDERINGSF="${macroFlags}" ${optFlags}) ''; makeFlags = lib.optionals stdenv.hostPlatform.isDarwin [ "SONAME=" "LIBEXT_SHARED=.dylib" ] ++ [ "LSCOTCHDIR=${scotch}/lib" "ISCOTCH=-I${scotch.dev}/include" "LMETISDIR=${metis}/lib" "IMETIS=-I${metis}/include" "SCALAP=-lscalapack" "allshared" ]; installPhase = '' installPhase = '' mkdir $out cp -r include lib $out '' + lib.optionalString (!mpiSupport) '' # Install mumps_seq headers install -Dm 444 -t $out/include/mumps_seq libseq/*.h Loading @@ -55,15 +103,15 @@ stdenv.mkDerivation (finalAttrs: { ln -s $out/include/mumps_seq/mpi.h $out/include/mumps_mpi.h ''; nativeBuildInputs = lib.optionals stdenv.hostPlatform.isDarwin [ fixDarwinDylibNames ] ++ [ nativeBuildInputs = [ gfortran ]; ] ++ lib.optional stdenv.hostPlatform.isDarwin fixDarwinDylibNames ++ lib.optional mpiSupport mpi; buildInputs = [ # Parmetis should be placed before scotch to avoid conflict of header file "parmetis.h" buildInputs = lib.optional withParmetis parmetis ++ lib.optional mpiSupport scalapack ++ [ blas lapack metis Loading @@ -71,30 +119,41 @@ stdenv.mkDerivation (finalAttrs: { ]; doInstallCheck = true; installCheckPhase = lib.optionalString stdenv.hostPlatform.isDarwin '' export DYLD_LIBRARY_PATH=$out/lib '' + '' nativeInstallCheckInputs = lib.optional mpiSupport mpiCheckPhaseHook; installCheckPhase = '' runHook preInstallCheck ${lib.optionalString stdenv.hostPlatform.isDarwin "export DYLD_LIBRARY_PATH=$out/lib\n"} ${lib.optionalString mpiSupport "export MPIRUN='mpirun -n 2'\n"} cd examples make all ./ssimpletest <input_simpletest_real ./dsimpletest <input_simpletest_real ./csimpletest <input_simpletest_cmplx ./zsimpletest <input_simpletest_cmplx ./c_example ./multiple_arithmetics_example ./ssimpletest_save_restore <input_simpletest_real ./dsimpletest_save_restore <input_simpletest_real ./csimpletest_save_restore <input_simpletest_cmplx ./zsimpletest_save_restore <input_simpletest_cmplx ./c_example_save_restore $MPIRUN ./ssimpletest <input_simpletest_real $MPIRUN ./dsimpletest <input_simpletest_real $MPIRUN ./csimpletest <input_simpletest_cmplx $MPIRUN ./zsimpletest <input_simpletest_cmplx $MPIRUN ./c_example $MPIRUN ./multiple_arithmetics_example $MPIRUN ./ssimpletest_save_restore <input_simpletest_real $MPIRUN ./dsimpletest_save_restore <input_simpletest_real $MPIRUN ./csimpletest_save_restore <input_simpletest_cmplx $MPIRUN ./zsimpletest_save_restore <input_simpletest_cmplx $MPIRUN ./c_example_save_restore runHook postInstallCheck ''; passthru = { inherit withParmetis withPtScotch mpiSupport; }; meta = { description = "MUltifrontal Massively Parallel sparse direct Solver"; homepage = "http://mumps-solver.org/"; license = lib.licenses.cecill-c; maintainers = with lib.maintainers; [ nim65s ]; maintainers = with lib.maintainers; [ nim65s qbisi ]; platforms = lib.platforms.unix; # Dependency of scalapack for mpiSupport is broken on darwin platform broken = mpiSupport && stdenv.hostPlatform.isDarwin; }; })
pkgs/top-level/all-packages.nix +2 −0 Original line number Diff line number Diff line Loading @@ -681,6 +681,8 @@ with pkgs; inherit (darwin) DarwinTools; }; mumps_par = callPackage ../by-name/mu/mumps/package.nix { mpiSupport = true; }; mix2nix = callPackage ../development/tools/mix2nix { }; n98-magerun = callPackage ../development/tools/misc/n98-magerun { };