aboutsummaryrefslogtreecommitdiff
path: root/Mk
diff options
context:
space:
mode:
authorThierry Thomas <thierry@FreeBSD.org>2021-03-02 21:16:04 +0000
committerThierry Thomas <thierry@FreeBSD.org>2021-03-02 21:16:04 +0000
commitb23553bac890c3d5846329c00fd8bf70dfe0f4f7 (patch)
tree4ecbd22c81b5e04ee191ad15fd109544e7c4347f /Mk
parentdce152b86dd8c7f98b6e75341c37dff5848d91fd (diff)
downloadports-b23553bac890c3d5846329c00fd8bf70dfe0f4f7.tar.gz
ports-b23553bac890c3d5846329c00fd8bf70dfe0f4f7.zip
Adding a new helper for MPI.
Its aim is to simplify the use of MPI in the ports Makefile. It makes it easier to provide an option for the user to choose between MPICH and OpenMPI when applicable. Note: mpich2 and openmpi3 are not handled, because they will be deprecated. Differential Revision: D28210
Notes
Notes: svn path=/head/; revision=566983
Diffstat (limited to 'Mk')
-rw-r--r--Mk/Uses/mpi.mk67
1 files changed, 67 insertions, 0 deletions
diff --git a/Mk/Uses/mpi.mk b/Mk/Uses/mpi.mk
new file mode 100644
index 000000000000..3f5962bca896
--- /dev/null
+++ b/Mk/Uses/mpi.mk
@@ -0,0 +1,67 @@
+# $FreeBSD$
+#
+# Handle dependencies on MPICH / OpenMPI
+#
+# Feature: mpi
+# Usage: USES=mpi or USES=mpi:ARGS
+# Valid ARGS: mpich (default) openmpi
+# Note: mpich2 and openmpi3 are not handled
+#
+# Provides: MPI_LIBS MPI_CFLAGS MPICC MPICXX MPIF90 MPIFC MPI_HOME \
+# MPIEXEC MPIRUN
+# Sets: LIB_DEPENDS
+# + CMAKE_ARGS if cmake is enabled to drive FindMPI.cmake
+#
+# Maintainer: thierry@FreeBSD.org
+
+.if !defined(_INCLUDE_USES_MPI_MK)
+_INCLUDE_USES_MPI_MK= yes
+
+_valid_ARGS= mpich openmpi
+
+_DEFAULT_MPI= mpich
+
+.if empty(mpi_ARGS)
+mpi_ARGS= ${_DEFAULT_MPI}
+.endif
+
+.if ! ${USES:Mpkgconfig}
+USES+= pkgconfig
+.endif
+
+.if ${mpi_ARGS} == mpich
+LIB_DEPENDS+= libmpich.so:net/mpich
+MPI_HOME= ${LOCALBASE}
+MPI_LIBS+= `pkgconf --libs mpich`
+. if ${USES:Mfortran}
+MPI_LIBS+= -lmpifort
+MPIFC= ${MPI_HOME}/bin/mpif90
+MPIF90= ${MPIFC}
+. endif
+MPI_CFLAGS+= `pkgconf --cflags mpich`
+.elif ${mpi_ARGS} == openmpi
+LIB_DEPENDS+= libmpi_cxx.so:net/openmpi
+MPI_HOME= ${LOCALBASE}/mpi/openmpi
+. if ${USES:Mfortran}
+MPI_LIBS+= `pkgconf --libs ompi-fort`
+MPIFC= ${MPI_HOME}/bin/mpif90
+MPIF90= ${MPIFC}
+. else
+MPI_LIBS+= `pkgconf --libs ompi`
+. endif
+MPI_CFLAGS+= `pkgconf --cflags ompi`
+.else
+IGNORE= USES=mpi: invalid arguments: ${mpi_ARGS}
+.endif
+
+MPICC= ${MPI_HOME}/bin/mpicc
+MPICXX= ${MPI_HOME}/bin/mpicxx
+MPIEXEC= ${MPI_HOME}/bin/mpiexec
+MPIRUN= ${MPI_HOME}/bin/mpirun
+
+.if ${USES:Mcmake}
+CMAKE_ARGS+= -DMPIEXEC_EXECUTABLE:FILEPATH="${MPIEXEC}" \
+ -DMPI_HOME:PATH="${MPI_HOME}"
+.endif
+
+.endif