CONFIG: rationalize mpi config tuning (#1910)

- prefix FOAM_MPI and library directories with 'sys-' for system
  versions for uniform identication.

  WM_MPLIB      | libdir (FOAM_MPI)  | old naming |
  SYSTEMMPI     | sys-mpi            | mpi        |
  SYSTEMOPENMPI | sys-openmpi        | openmpi-system |

- prefix preferences with 'prefs.' to make them more easily
  identifiable, and update bin/tools/create-mpi-config accordingly

      Old name: config.{csh,sh}/openmpi
      New name: config.{csh,sh}/prefs.openmpi

- additional mpi preferences now available:
    * prefs.intelmpi
    * prefs.mpich
    ...

CONFIG: added hook for EASYBUILDMPI (eb-mpi), somewhat like USERMPI

- EasyBuild uses mpicc when compiling, so no explicit wmake rules are
  used

ENH: support different major versions for system openmpi

- for example, with

     WM_MPLIB=SYSTEMOPENMPI2

  defines FOAM_MPI=sys-openmpi2 and thus creates lib/sys-openmpi2

ENH: centralize handling of mpi as 'mpi-rules'

    Before:
        sinclude $(GENERAL_RULES)/mplib$(WM_MPLIB)
        sinclude $(DEFAULT_RULES)/mplib$(WM_MPLIB)

        ifeq (,$(FOAM_MPI_LIBBIN))
            FOAM_MPI_LIBBIN := $(FOAM_LIBBIN)/$(FOAM_MPI)
        endif

    After:
        include $(GENERAL_RULES)/mpi-rules

- also allows variants such as SYSTEMOPENMPI2 to be handled separately
This commit is contained in:
Mark Olesen
2020-11-11 09:34:07 +01:00
parent 26ec9b5a17
commit c91fc6f41c
45 changed files with 722 additions and 536 deletions

View File

@ -1,8 +1,7 @@
#-------------------------------*- makefile -*---------------------------------
#------------------------------------------------------------------------------
# ADIOS2 includes/libraries
sinclude $(GENERAL_RULES)/mplib$(WM_MPLIB)
sinclude $(DEFAULT_RULES)/mplib$(WM_MPLIB)
include $(GENERAL_RULES)/mpi-rules
# May need to strip off rpath ...

View File

@ -0,0 +1,8 @@
#------------------------------------------------------------------------------
# Use openmpi mpicc to obtain settings - mpicc must be available
PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX
PINC = $(shell mpicc --showme:compile)
PLIBS = $(shell mpicc --showme:link)
#------------------------------------------------------------------------------

View File

@ -0,0 +1,32 @@
#------------------------------------------------------------------------------
# MPI rules
PFLAGS =
PINC =
PLIBS =
# The stem name. Eg, SYSTEMOPENMPI4 -> SYSTEMOPENMPI
MPLIB_STEMNAME = $(shell echo "$(WM_MPLIB)" | sed -e 's/[-.0-9]*$$//')
ifneq ("$(MPLIB_STEMNAME)","$(WM_MPLIB)")
sinclude $(GENERAL_RULES)/mplib$(MPLIB_STEMNAME)
sinclude $(DEFAULT_RULES)/mplib$(MPLIB_STEMNAME)
ifneq ("$(RULES)","$(DEFAULT_RULES)")
sinclude $(RULES)/mplib$(MPLIB_STEMNAME)
endif
endif
ifneq ("","$(WM_MPLIB)")
sinclude $(GENERAL_RULES)/mplib$(WM_MPLIB)
sinclude $(DEFAULT_RULES)/mplib$(WM_MPLIB)
ifneq ("$(RULES)","$(DEFAULT_RULES)")
sinclude $(RULES)/mplib$(WM_MPLIB)
endif
endif
# Default target MPI libdir is PROJECT lib/<mpi-name>
ifeq (,$(FOAM_MPI_LIBBIN))
FOAM_MPI_LIBBIN := $(FOAM_LIBBIN)/$(FOAM_MPI)
endif
#------------------------------------------------------------------------------

View File

@ -1 +0,0 @@
no-mpi

View File

@ -0,0 +1,8 @@
#------------------------------------------------------------------------------
# HPMPI rules (i386)
PFLAGS =
PINC = -isystem $(MPI_ARCH_PATH)/include -D_MPICC_H
PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_ia32 -lmpi
#------------------------------------------------------------------------------

View File

@ -0,0 +1,8 @@
#------------------------------------------------------------------------------
# HPMPI rules (ia64)
PFLAGS =
PINC = -isystem $(MPI_ARCH_PATH)/include -D_MPICC_H
PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_ia64 -lmpi
#------------------------------------------------------------------------------

View File

@ -0,0 +1,8 @@
#------------------------------------------------------------------------------
# HPMPI rules (x86_64)
PFLAGS =
PINC = -isystem $(MPI_ARCH_PATH)/include -D_MPICC_H
PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_amd64 -lmpi
#------------------------------------------------------------------------------

View File

@ -0,0 +1,8 @@
#------------------------------------------------------------------------------
# INTELMPI rules (x86_64)
PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX
PINC = -isystem $(MPI_ARCH_PATH)/intel64/include
PLIBS = -L$(MPI_ARCH_PATH)/intel64/lib -lmpi
#------------------------------------------------------------------------------

View File

@ -1 +1,6 @@
#------------------------------------------------------------------------------
# Cray MPICH is MPICH
include $(GENERAL_RULES)/mplibMPICH
#------------------------------------------------------------------------------

View File

@ -1,3 +1,7 @@
#------------------------------------------------------------------------------
PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX
PINC = -isystem $(MPI_ARCH_PATH)/include
PLIBS = -L$(MPI_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) -L$(MPI_ARCH_PATH)/lib -lmpi -lrt
#------------------------------------------------------------------------------

View File

@ -1,3 +1,7 @@
#------------------------------------------------------------------------------
PFLAGS =
PINC = -isystem $(MPI_ARCH_PATH)/include
PLIBS = -L$(MPI_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) -L$(MPI_ARCH_PATH)/lib -lmpich -L$(GM_LIB_PATH) -lgm
#------------------------------------------------------------------------------

View File

@ -1,3 +1,7 @@
#------------------------------------------------------------------------------
PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX
PINC = -isystem $(MPI_ARCH_PATH)/include
PLIBS = -L$(MPI_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) -L$(MPI_ARCH_PATH)/lib -lmpi
#------------------------------------------------------------------------------

View File

@ -1,3 +1,7 @@
#------------------------------------------------------------------------------
PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX
PINC = -isystem $(MPI_ARCH_PATH)/include
PLIBS = -L$(MPI_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) -L$(MPI_ARCH_PATH)/lib -lmpi
#------------------------------------------------------------------------------

View File

@ -1,3 +1,7 @@
#------------------------------------------------------------------------------
PFLAGS =
PINC = -isystem $(MPI_ARCH_PATH)/include
PLIBS = -L$(MPI_ARCH_PATH)/lib -lmpi
#------------------------------------------------------------------------------

View File

@ -1,3 +1,7 @@
#------------------------------------------------------------------------------
PFLAGS = -DSGIMPI -DMPI_NO_CPPBIND
PINC = -isystem $(MPI_ARCH_PATH)/include
PLIBS = -L$(MPI_ARCH_PATH)/lib -lmpi
#------------------------------------------------------------------------------

View File

@ -1,5 +1,8 @@
# Use the system installed mpi - depends on specific environment variables
#------------------------------------------------------------------------------
# System installed mpi - depends on specific environment variables
PFLAGS = $(MPI_ARCH_FLAGS)
PINC = $(MPI_ARCH_INC)
PLIBS = $(MPI_ARCH_LIBS)
#------------------------------------------------------------------------------

View File

@ -1,5 +1,6 @@
# Use the system installed openmpi - mpicc must be installed
#------------------------------------------------------------------------------
# Use openmpi mpicc to obtain settings - mpicc must be available
PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX
PINC = $(shell mpicc --showme:compile)
PLIBS = $(shell mpicc --showme:link)
include $(GENERAL_RULES)/mpi-mpicc-openmpi
#------------------------------------------------------------------------------

View File

@ -1,7 +1,8 @@
#------------------------------------------------------------------------------
# Empty flags for not compiling/linking MPI
PFLAGS =
PINC =
PLIBS =
PFLAGS =
PINC =
PLIBS =
#------------------------------------------------------------------------------

View File

@ -1,3 +1 @@
PFLAGS =
PINC = -isystem $(MPI_ARCH_PATH)/include -D_MPICC_H
PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_amd64 -lmpi
include $(GENERAL_RULES)/mplib-x86_64-HPMPI

View File

@ -1,3 +1 @@
PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX
PINC = -isystem $(MPI_ARCH_PATH)/intel64/include
PLIBS = -L$(MPI_ARCH_PATH)/intel64/lib -lmpi
include $(GENERAL_RULES)/mplib-x86_64-INTELMPI

View File

@ -1,3 +1 @@
PFLAGS =
PINC = -isystem $(MPI_ARCH_PATH)/include -D_MPICC_H
PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_amd64 -lmpi
include $(GENERAL_RULES)/mplib-x86_64-HPMPI

View File

@ -1,3 +1 @@
PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX
PINC = -isystem $(MPI_ARCH_PATH)/intel64/include
PLIBS = -L$(MPI_ARCH_PATH)/intel64/lib -lmpi
include $(GENERAL_RULES)/mplib-x86_64-INTELMPI

View File

@ -1,3 +1 @@
PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX
PINC = -isystem $(MPI_ARCH_PATH)/intel64/include
PLIBS = -L$(MPI_ARCH_PATH)/intel64/lib -lmpi
include $(GENERAL_RULES)/mplib-x86_64-INTELMPI

View File

@ -1,3 +1 @@
PFLAGS =
PINC = -isystem $(MPI_ARCH_PATH)/include -D_MPICC_H
PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_amd64 -lmpi
include $(GENERAL_RULES)/mplib-x86_64-HPMPI

View File

@ -1,3 +1 @@
PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX
PINC = -isystem $(MPI_ARCH_PATH)/intel64/include
PLIBS = -L$(MPI_ARCH_PATH)/intel64/lib -lmpi
include $(GENERAL_RULES)/mplib-x86_64-INTELMPI

View File

@ -1,3 +1 @@
PFLAGS =
PINC = -isystem $(MPI_ARCH_PATH)/include -D_MPICC_H
PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_amd64 -lmpi
include $(GENERAL_RULES)/mplib-x86_64-HPMPI

View File

@ -1,3 +1 @@
PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX
PINC = -isystem $(MPI_ARCH_PATH)/intel64/include
PLIBS = -L$(MPI_ARCH_PATH)/intel64/lib -lmpi
include $(GENERAL_RULES)/mplib-x86_64-INTELMPI

View File

@ -1,3 +1 @@
PFLAGS =
PINC = -isystem $(MPI_ARCH_PATH)/include -D_MPICC_H
PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_ia32 -lmpi
include $(GENERAL_RULES)/mplib-ia32-HPMPI

View File

@ -1,3 +1 @@
PFLAGS =
PINC = -isystem $(MPI_ARCH_PATH)/include -D_MPICC_H
PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_ia32 -lmpi
include $(GENERAL_RULES)/mplib-ia32-HPMPI

View File

@ -1,3 +1 @@
PFLAGS =
PINC = -isystem $(MPI_ARCH_PATH)/include -D_MPICC_H
PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_ia64 -lmpi
include $(GENERAL_RULES)/mplib-ia64-HPMPI

View File

@ -1,3 +1 @@
PFLAGS =
PINC = -isystem $(MPI_ARCH_PATH)/include -D_MPICC_H
PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_ia64 -lmpi
include $(GENERAL_RULES)/mplib-ia64-HPMPI

View File

@ -1,3 +0,0 @@
PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX
PINC = -isystem $(MPI_ARCH_PATH)/intel64/include
PLIBS = -L$(MPI_ARCH_PATH)/intel64/lib -lmpi

View File

@ -1,3 +1 @@
PFLAGS =
PINC = -isystem $(MPI_ARCH_PATH)/include -D_MPICC_H
PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_ia32 -lmpi
include $(GENERAL_RULES)/mplib-ia32-HPMPI