about summary refs log tree commit diff
path: root/pkgs/by-name/pe
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/by-name/pe')
-rw-r--r--pkgs/by-name/pe/pegtl/package.nix39
-rw-r--r--pkgs/by-name/pe/pest/package.nix2
-rw-r--r--pkgs/by-name/pe/petsc/filter_mpi_warnings.patch112
-rw-r--r--pkgs/by-name/pe/petsc/package.nix131
4 files changed, 283 insertions, 1 deletions
diff --git a/pkgs/by-name/pe/pegtl/package.nix b/pkgs/by-name/pe/pegtl/package.nix
new file mode 100644
index 0000000000000..d7a57caa58fe0
--- /dev/null
+++ b/pkgs/by-name/pe/pegtl/package.nix
@@ -0,0 +1,39 @@
+{
+  cmake,
+  fetchFromGitHub,
+  gitUpdater,
+  lib,
+  ninja,
+  stdenv,
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "pegtl";
+  version = "3.2.7";
+
+  src = fetchFromGitHub {
+    owner = "taocpp";
+    repo = "PEGTL";
+    rev = finalAttrs.version;
+    hash = "sha256-IV5YNGE4EWVrmg2Sia/rcU8jCuiBynQGJM6n3DCWTQU=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  passthru.updateScript = gitUpdater { };
+
+  meta = {
+    homepage = "https://github.com/taocpp/pegtl";
+    description = "Parsing Expression Grammar Template Library";
+    longDescription = ''
+      Zero-dependency C++ header-only parser combinator library
+      for creating parsers according to a Parsing Expression Grammar (PEG).
+    '';
+    license = lib.licenses.boost;
+    maintainers = with lib.maintainers; [ ];
+    platforms = lib.platforms.all;
+  };
+})
diff --git a/pkgs/by-name/pe/pest/package.nix b/pkgs/by-name/pe/pest/package.nix
index 6b7231ec8f8e9..6157da0d8a810 100644
--- a/pkgs/by-name/pe/pest/package.nix
+++ b/pkgs/by-name/pe/pest/package.nix
@@ -21,6 +21,6 @@ php.buildComposerProject (finalAttrs: {
     homepage = "https://pestphp.com";
     license = lib.licenses.mit;
     mainProgram = "pest";
-    maintainers = with lib.maintainers; [ patka ];
+    maintainers = with lib.maintainers; [ ];
   };
 })
diff --git a/pkgs/by-name/pe/petsc/filter_mpi_warnings.patch b/pkgs/by-name/pe/petsc/filter_mpi_warnings.patch
new file mode 100644
index 0000000000000..79f44558b3518
--- /dev/null
+++ b/pkgs/by-name/pe/petsc/filter_mpi_warnings.patch
@@ -0,0 +1,112 @@
+diff --git a/src/snes/tutorials/makefile b/src/snes/tutorials/makefile
+index fa15faad39e..7670e80931e 100644
+--- a/src/snes/tutorials/makefile
++++ b/src/snes/tutorials/makefile
+@@ -13,6 +13,7 @@ ex55: ex55.o ex55k.o
+ #  these tests are used by the makefile in PETSC_DIR for basic tests of the install and should not be removed
+ testex5f: ex5f.PETSc
+ 	-@${MPIEXEC} -n 1 ${MPIEXEC_TAIL} ./ex5f -snes_rtol 1e-4 > ex5f_1.tmp 2>&1; \
++        sed -i '/hwloc\/linux/d ; /ERROR scandir(\/sys\/class\/net) failed/d ; /ERROR opendir(\/sys\/class\/net) failed/d' ex5f_1.tmp; \
+         if (${DIFF} output/ex5f_1.testout ex5f_1.tmp > /dev/null 2>&1) then \
+           echo "Fortran example src/snes/tutorials/ex5f run successfully with 1 MPI process"; \
+         else \
+@@ -25,6 +26,7 @@ testex5f: ex5f.PETSc
+         ${MAKE} PETSC_ARCH=${PETSC_ARCH} PETSC_DIR=${PETSC_DIR} ex5f.rm;
+ testex19: ex19.PETSc
+ 	-@${MPIEXEC} -n 1 ${MPIEXEC_TAIL} ./ex19 -da_refine 3 -pc_type mg -ksp_type fgmres  > ex19_1.tmp 2>&1; \
++        sed -i '/hwloc\/linux/d ; /ERROR scandir(\/sys\/class\/net) failed/d ; /ERROR opendir(\/sys\/class\/net) failed/d' ex19_1.tmp; \
+         if (${DIFF} output/ex19_1.testout ex19_1.tmp > /dev/null 2>&1) then \
+           echo "C/C++ example src/snes/tutorials/ex19 run successfully with 1 MPI process"; \
+         else \
+@@ -36,6 +38,7 @@ testex19: ex19.PETSc
+         ${RM} -f ex19_1.tmp;
+ testex19_mpi:
+ 	-@${MPIEXEC} -n 2 ${MPIEXEC_TAIL} ./ex19 -da_refine 3 -pc_type mg -ksp_type fgmres  > ex19_1.tmp 2>&1; \
++        sed -i '/hwloc\/linux/d ; /ERROR scandir(\/sys\/class\/net) failed/d ; /ERROR opendir(\/sys\/class\/net) failed/d' ex19_1.tmp; \
+         if (${DIFF} output/ex19_1.testout ex19_1.tmp > /dev/null 2>&1) then \
+           echo "C/C++ example src/snes/tutorials/ex19 run successfully with 2 MPI processes"; \
+         else \
+@@ -48,6 +51,7 @@ testex19_mpi:
+ #use unpreconditioned norm because HYPRE device installations use different AMG parameters
+ runex19_hypre:
+ 	-@${MPIEXEC} -n 2 ${MPIEXEC_TAIL} ./ex19 -da_refine 3 -snes_monitor_short -ksp_norm_type unpreconditioned -pc_type hypre > ex19_1.tmp 2>&1; \
++        sed -i '/hwloc\/linux/d ; /ERROR scandir(\/sys\/class\/net) failed/d ; /ERROR opendir(\/sys\/class\/net) failed/d' ex19_1.tmp; \
+           if (${DIFF} output/ex19_hypre.out ex19_1.tmp) then \
+             echo "C/C++ example src/snes/tutorials/ex19 run successfully with HYPRE"; \
+           else  \
+@@ -57,6 +61,7 @@ runex19_hypre:
+           ${RM} -f ex19_1.tmp
+ runex19_hypre_cuda:
+ 	-@${MPIEXEC} -n 2 ${MPIEXEC_TAIL} ./ex19 -dm_vec_type cuda -dm_mat_type aijcusparse -da_refine 3 -snes_monitor_short -ksp_norm_type unpreconditioned -pc_type hypre > ex19_1.tmp 2>&1; \
++        sed -i '/hwloc\/linux/d ; /ERROR scandir(\/sys\/class\/net) failed/d ; /ERROR opendir(\/sys\/class\/net) failed/d' ex19_1.tmp; \
+ 	   if (${DIFF} output/ex19_hypre.out ex19_1.tmp) then \
+            echo "C/C++ example src/snes/tutorials/ex19 run successfully with HYPRE/CUDA"; \
+            else  \
+@@ -66,6 +71,7 @@ runex19_hypre_cuda:
+ 	   ${RM} -f ex19_1.tmp
+ runex19_hypre_hip:
+ 	-@${MPIEXEC} -n 2 ${MPIEXEC_TAIL} ./ex19 -dm_vec_type hip -da_refine 3 -snes_monitor_short -ksp_norm_type unpreconditioned -pc_type hypre > ex19_1.tmp 2>&1; \
++        sed -i '/hwloc\/linux/d ; /ERROR scandir(\/sys\/class\/net) failed/d ; /ERROR opendir(\/sys\/class\/net) failed/d' ex19_1.tmp; \
+ 	   if (${DIFF} output/ex19_hypre.out ex19_1.tmp) then \
+            echo "C/C++ example src/snes/tutorials/ex19 run successfully with HYPRE/HIP"; \
+            else \
+@@ -75,6 +81,7 @@ runex19_hypre_hip:
+ 	   ${RM} -f ex19_1.tmp
+ runex19_cuda:
+ 	-@${MPIEXEC} -n 1 ${MPIEXEC_TAIL} ./ex19 -snes_monitor -dm_mat_type seqaijcusparse -dm_vec_type seqcuda -pc_type gamg -ksp_monitor -mg_levels_ksp_max_it 1 > ex19_1.tmp 2>&1; \
++        sed -i '/hwloc\/linux/d ; /ERROR scandir(\/sys\/class\/net) failed/d ; /ERROR opendir(\/sys\/class\/net) failed/d' ex19_1.tmp; \
+ 	   if (${DIFF} output/ex19_cuda_1.out ex19_1.tmp) then \
+            echo "C/C++ example src/snes/tutorials/ex19 run successfully with CUDA"; \
+            else  \
+@@ -84,6 +91,7 @@ runex19_cuda:
+ 	   ${RM} -f ex19_1.tmp
+ runex19_ml:
+ 	-@${MPIEXEC} -n 2 ${MPIEXEC_TAIL} ./ex19 -da_refine 3 -snes_monitor_short -pc_type ml > ex19_1.tmp 2>&1; \
++        sed -i '/hwloc\/linux/d ; /ERROR scandir(\/sys\/class\/net) failed/d ; /ERROR opendir(\/sys\/class\/net) failed/d' ex19_1.tmp; \
+ 	   if (${DIFF} output/ex19_ml.out ex19_1.tmp) then  \
+            echo "C/C++ example src/snes/tutorials/ex19 run successfully with ML"; \
+            else \
+@@ -93,6 +101,7 @@ runex19_ml:
+            ${RM} -f ex19_1.tmp
+ runex19_fieldsplit_mumps:
+ 	-@${MPIEXEC} -n 2 ${MPIEXEC_TAIL} ./ex19 -pc_type fieldsplit -pc_fieldsplit_block_size 4 -pc_fieldsplit_type SCHUR -pc_fieldsplit_0_fields 0,1,2 -pc_fieldsplit_1_fields 3 -fieldsplit_0_pc_type lu -fieldsplit_1_pc_type lu -snes_monitor_short -ksp_monitor_short  -fieldsplit_0_pc_factor_mat_solver_type mumps -fieldsplit_1_pc_factor_mat_solver_type mumps > ex19_6.tmp 2>&1; \
++        sed -i '/hwloc\/linux/d ; /ERROR scandir(\/sys\/class\/net) failed/d ; /ERROR opendir(\/sys\/class\/net) failed/d' ex19_6.tmp; \
+ 	   if (${DIFF} output/ex19_fieldsplit_5.out ex19_6.tmp) then  \
+            echo "C/C++ example src/snes/tutorials/ex19 run successfully with MUMPS"; \
+            else  \
+@@ -102,6 +111,7 @@ runex19_fieldsplit_mumps:
+            ${RM} -f ex19_6.tmp
+ runex19_superlu_dist:
+ 	-@${MPIEXEC} -n 1 ${MPIEXEC_TAIL} ./ex19 -da_grid_x 20 -da_grid_y 20 -pc_type lu -pc_factor_mat_solver_type superlu_dist > ex19.tmp 2>&1; \
++        sed -i '/hwloc\/linux/d ; /ERROR scandir(\/sys\/class\/net) failed/d ; /ERROR opendir(\/sys\/class\/net) failed/d' ex19.tmp; \
+ 	   if (${DIFF} output/ex19_superlu.out ex19.tmp) then \
+            echo "C/C++ example src/snes/tutorials/ex19 run successfully with SuperLU_DIST"; \
+            else  \
+@@ -111,6 +121,7 @@ runex19_superlu_dist:
+ 	   ${RM} -f ex19.tmp
+ runex19_suitesparse:
+ 	-@${MPIEXEC} -n 1 ${MPIEXEC_TAIL} ./ex19 -da_refine 3 -snes_monitor_short -pc_type lu -pc_factor_mat_solver_type umfpack > ex19_1.tmp 2>&1; \
++        sed -i '/hwloc\/linux/d ; /ERROR scandir(\/sys\/class\/net) failed/d ; /ERROR opendir(\/sys\/class\/net) failed/d' ex19_1.tmp; \
+ 	   if (${DIFF} output/ex19_suitesparse.out ex19_1.tmp) then \
+            echo "C/C++ example src/snes/tutorials/ex19 run successfully with SuiteSparse"; \
+            else \
+@@ -120,6 +131,7 @@ runex19_suitesparse:
+ 	   ${RM} -f ex19_1.tmp
+ runex3k_kokkos: ex3k.PETSc
+ 	-@OMP_PROC_BIND=false ${MPIEXEC} -n 2 ${MPIEXEC_TAIL} ./ex3k -view_initial -dm_vec_type kokkos -dm_mat_type aijkokkos -use_gpu_aware_mpi 0 -snes_monitor > ex3k_1.tmp 2>&1 ;\
++        sed -i '/hwloc\/linux/d ; /ERROR scandir(\/sys\/class\/net) failed/d ; /ERROR opendir(\/sys\/class\/net) failed/d' ex3k_1.tmp; \
+ 	if (${DIFF} output/ex3k_1.out ex3k_1.tmp) then \
+           echo "C/C++ example src/snes/tutorials/ex3k run successfully with Kokkos Kernels"; \
+         else \
+diff --git a/src/vec/vec/tests/makefile b/src/vec/vec/tests/makefile
+index d1f047820ec..aab400535dd 100644
+--- a/src/vec/vec/tests/makefile
++++ b/src/vec/vec/tests/makefile
+@@ -5,6 +5,7 @@ include ${PETSC_DIR}/lib/petsc/conf/rules
+ 
+ runex47: ex47.PETSc
+ 	-@H5OUT=`mktemp -t petsc.h5.XXXXXX`; ${MPIEXEC} -n 1 ${MPIEXEC_TAIL} ./ex47 -filename $${H5OUT} > ex47_1.tmp 2>&1; \
++       sed -i '/hwloc\/linux/d ; /ERROR opendir(\/sys\/class\/net) failed/d' ex47_1.tmp; \
+ 	   if (${DIFF} output/ex47_1.out ex47_1.tmp) then \
+              echo "C/C++ example src/vec/vec/tests/ex47 run successfully with HDF5"; \
+            else \
diff --git a/pkgs/by-name/pe/petsc/package.nix b/pkgs/by-name/pe/petsc/package.nix
new file mode 100644
index 0000000000000..5a547144b491e
--- /dev/null
+++ b/pkgs/by-name/pe/petsc/package.nix
@@ -0,0 +1,131 @@
+{
+  lib,
+  stdenv,
+  fetchzip,
+  darwin,
+  gfortran,
+  python3,
+  blas,
+  lapack,
+  mpiSupport ? true,
+  mpi, # generic mpi dependency
+  openssh, # required for openmpi tests
+  petsc-withp4est ? false,
+  hdf5-support ? false,
+  hdf5,
+  metis,
+  parmetis,
+  pkg-config,
+  p4est,
+  zlib, # propagated by p4est but required by petsc
+  petsc-optimized ? false,
+  petsc-scalar-type ? "real",
+  petsc-precision ? "double",
+}:
+
+# This version of PETSc does not support a non-MPI p4est build
+assert petsc-withp4est -> p4est.mpiSupport;
+
+stdenv.mkDerivation rec {
+  pname = "petsc";
+  version = "3.21.0";
+
+  src = fetchzip {
+    url = "https://web.cels.anl.gov/projects/petsc/download/release-snapshots/petsc-${version}.tar.gz";
+    hash = "sha256-2J6jtIKz1ZT9qwN8tuYQNBIeBJdE4Gt9cE3b5rTIeF4=";
+  };
+
+  inherit mpiSupport;
+  withp4est = petsc-withp4est;
+
+  strictDeps = true;
+  nativeBuildInputs = [
+    python3
+    gfortran
+    pkg-config
+  ] ++ lib.optional mpiSupport mpi ++ lib.optional (mpiSupport && mpi.pname == "openmpi") openssh;
+  buildInputs = [
+    blas
+    lapack
+  ] ++ lib.optional hdf5-support hdf5 ++ lib.optional withp4est p4est;
+
+  prePatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace config/install.py \
+      --replace /usr/bin/install_name_tool ${darwin.cctools}/bin/install_name_tool
+  '';
+
+  # Both OpenMPI and MPICH get confused by the sandbox environment and spew errors like this (both to stdout and stderr):
+  #     [hwloc/linux] failed to find sysfs cpu topology directory, aborting linux discovery.
+  #     [1684747490.391106] [localhost:14258:0]       tcp_iface.c:837  UCX  ERROR opendir(/sys/class/net) failed: No such file or directory
+  # These messages contaminate test output, which makes the quicktest suite to fail. The patch adds filtering for these messages.
+  patches = [ ./filter_mpi_warnings.patch ];
+
+  preConfigure = ''
+    patchShebangs ./lib/petsc/bin
+    configureFlagsArray=(
+      $configureFlagsArray
+      ${
+        if !mpiSupport then
+          ''
+            "--with-mpi=0"
+          ''
+        else
+          ''
+            "--CC=mpicc"
+            "--with-cxx=mpicxx"
+            "--with-fc=mpif90"
+            "--with-mpi=1"
+            "--with-metis=1"
+            "--with-metis-dir=${metis}"
+            "--with-parmetis=1"
+            "--with-parmetis-dir=${parmetis}"
+          ''
+      }
+      ${lib.optionalString withp4est ''
+        "--with-p4est=1"
+        "--with-zlib-include=${zlib.dev}/include"
+        "--with-zlib-lib=-L${zlib}/lib -lz"
+      ''}
+      ${lib.optionalString hdf5-support ''
+        "--with-hdf5=1"
+        "--with-hdf5-fortran-bindings=1"
+        "--with-hdf5-lib=-L${hdf5}/lib -lhdf5"
+        "--with-hdf5-include=${hdf5.dev}/include"
+      ''}
+      "--with-blas=1"
+      "--with-lapack=1"
+      "--with-scalar-type=${petsc-scalar-type}"
+      "--with-precision=${petsc-precision}"
+      ${lib.optionalString petsc-optimized ''
+        "--with-debugging=0"
+        COPTFLAGS='-O3'
+        FOPTFLAGS='-O3'
+        CXXOPTFLAGS='-O3'
+        CXXFLAGS='-O3'
+      ''}
+    )
+  '';
+
+  hardeningDisable = lib.optionals (!petsc-optimized) [
+    "fortify"
+    "fortify3"
+  ];
+
+  configureScript = "python ./configure";
+
+  enableParallelBuilding = true;
+
+  # This is needed as the checks need to compile and link the test cases with
+  # -lpetsc, which is not available in the checkPhase, which is executed before
+  # the installPhase. The installCheckPhase comes after the installPhase, so
+  # the library is installed and available.
+  doInstallCheck = true;
+  installCheckTarget = "check_install";
+
+  meta = with lib; {
+    description = "Portable Extensible Toolkit for Scientific computation";
+    homepage = "https://petsc.org/release/";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ cburstedde ];
+  };
+}