Andreas Wacknitz
2024-04-05 ac4c8f5b8ab57563cc350482b75a32a55871d58c
make-rules/mpi-macros.mk
@@ -18,13 +18,12 @@
#
# CDDL HEADER END
#
# Copyright (c) 2013, Aurelien Larcher. All rights reserved.
# Copyright (c) 2013-2017, Aurelien Larcher. All rights reserved.
#
include $(WS_MAKE_RULES)/shared-macros.mk
MPI_IMPLEMENTATIONS_LIST = mpich openmpi
# Define compilers
MPI.mpich =         mpich
MPICC.mpich =       mpicc
@@ -41,20 +40,30 @@
# Default to mpich
MPI_IMPLEMENTATION ?= $(MPI.mpich)
MPI_COMPILER = $(COMPILER)
MPI_BUNDLE =        $(MPI_IMPLEMENTATION)-$(MPI_COMPILER)
MPI_PREFIX.32 =     $(USRLIBDIR)/$(MPI_IMPLEMENTATION)/$(MPI_COMPILER)
MPI_PREFIX.64 =     $(USRLIBDIR64)/$(MPI_IMPLEMENTATION)/$(MPI_COMPILER)
MPI_PREFIX =       $(MPI_PREFIX.$(BITS))
MPICC =             $(MPICC.$(MPI_IMPLEMENTATION))
MPICXX =            $(MPICXX.$(MPI_IMPLEMENTATION))
MPIF77 =            $(MPIF77.$(MPI_IMPLEMENTATION))
MPIFC =             $(MPIFC.$(MPI_IMPLEMENTATION))
CONFIGURE_DEFAULT_DIRS=no
# Define compiler enviromnent
MPI_COMPILER = $(COMPILER)
MPI_COMPILER_ROOT=
MPI_COMPILER_LIBDIR=
ifeq ($(strip $(MPI_COMPILER)),gcc)
MPI_COMPILER_ROOT=$(GCC_ROOT)
MPI_COMPILER_LIBDIR=$(MPI_COMPILER_ROOT)/lib/$(ARCHLIBSUBDIR$(BITS))
endif
# Define implementation specific paths
MPI_BUNDLE =        $(MPI_IMPLEMENTATION)-$(MPI_COMPILER)
MPI_PREFIX.32 =     $(USRLIBDIR)/$(MPI_IMPLEMENTATION)/$(MPI_COMPILER)
MPI_PREFIX.64 =     $(USRLIBDIR64)/$(MPI_IMPLEMENTATION)/$(MPI_COMPILER)
MPI_PREFIX    =       $(MPI_PREFIX.$(BITS))
MPI_BINDIR.32 =     $(MPI_PREFIX.32)/bin
MPI_BINDIR.64 =     $(MPI_PREFIX.64)/bin
@@ -66,18 +75,82 @@
MPI_LIBDIR.32 =     $(MPI_PREFIX.32)/lib
MPI_LIBDIR.64 =     $(MPI_PREFIX.64)/lib
MPI_LIBDIR =        $(MPI_LIBDIR.$(BITS))
MPI_LIBDIR    =     $(MPI_LIBDIR.$(BITS))
MPI_ETCDIR.32 =     $(MPI_PREFIX.32)/etc
MPI_ETCDIR.64 =     $(MPI_PREFIX.64)/etc
MPI_ETCDIR =        $(MPI_ETCDIR.$(BITS))
MPI_ETCDIR    =     $(MPI_ETCDIR.$(BITS))
MPI_INCDIR =        $(USRINCDIR)/$(MPI_IMPLEMENTATION)
MPI_SHAREDIR =      $(USRSHAREDIR)
MPI_DATADIR =       $(MPI_SHAREDIR)/$(MPI_IMPLEMENTATION)
MPI_DOCDIR =        $(USRSHAREDOCDIR)/$(MPI_IMPLEMENTATION)
MPI_HTMLDIR =       $(USRSHAREDOCDIR)/www
MPI_MANDIR =        $(USRSHAREMANDIR)
MPI_DATADIR  =      $(MPI_SHAREDIR)/$(MPI_IMPLEMENTATION)
MPI_DOCDIR   =      $(USRSHAREDOCDIR)/$(MPI_IMPLEMENTATION)
MPI_HTMLDIR  =      $(USRSHAREDOCDIR)/www
MPI_MANDIR   =      $(USRSHAREMANDIR)
# Create meta rule to trigger build for each listed implementation
ifneq ($(strip $(COMPONENT_MPI_BUILD)),)
$(BUILD_DIR_32)/%/.configured:   BITS=32
$(BUILD_DIR_64)/%/.configured:   BITS=64
$(BUILD_DIR_32)/%/.built:   BITS=32
$(BUILD_DIR_64)/%/.built:   BITS=64
BUILD_32=
BUILD_64=
$(BUILD_DIR_32)/%/.installed: BITS=32
$(BUILD_DIR_64)/%/.installed: BITS=64
INSTALL_32=
INSTALL_64=
$(BUILD_DIR_32)/%/.tested:      BITS=32
$(BUILD_DIR_64)/%/.tested:      BITS=64
$(BUILD_DIR_32)/%/.tested-and-compared:      BITS=32
$(BUILD_DIR_64)/%/.tested-and-compared:      BITS=64
TEST_32=
TEST_64=
define mpi-rule
BUILD_DIR_32_$(1) =   $$(BUILD_DIR)/$$(MACH32)/$(1)
BUILD_DIR_64_$(1) =   $$(BUILD_DIR)/$$(MACH64)/$(1)
$(BUILD_DIR)/%/$(1)/.configured:  MPI_IMPLEMENTATION=$(1)
$(BUILD_DIR)/%/$(1)/.built:       MPI_IMPLEMENTATION=$(1)
BUILD_32+= $$(BUILD_DIR_32_$(1))/.built
BUILD_64+= $$(BUILD_DIR_64_$(1))/.built
$(BUILD_DIR)/%/$(1)/.installed:   MPI_IMPLEMENTATION=$(1)
INSTALL_32+= $$(BUILD_DIR_32_$(1))/.installed
INSTALL_64+= $$(BUILD_DIR_64_$(1))/.installed
$(BUILD_DIR)/%/$(1)/.tested:      MPI_IMPLEMENTATION=$(1)
$(BUILD_DIR)/%/$(1)/.tested-and-compared:      MPI_IMPLEMENTATION=$(1)
ifeq ($(strip $(wildcard $(COMPONENT_TEST_RESULTS_DIR)/results-*.master)),)
TEST_32+= $$(BUILD_DIR_32_$(1))/.tested
TEST_64+= $$(BUILD_DIR_64_$(1))/.tested
else
TEST_32+= $$(BUILD_DIR_32_$(1))/.tested-and-compared
TEST_64+= $$(BUILD_DIR_64_$(1))/.tested-and-compared
endif
endef
$(foreach mpi, $(COMPONENT_MPI_BUILD), $(eval $(call mpi-rule,$(mpi))))
endif
COMPONENT_MPI_BUILD_DIR= $(BUILD_DIR_$(BITS)_$(MPI_IMPLEMENTATION))