Aurélien Larcher
2017-01-24 9ec9c201a80d6624f03416586fb1fd0a9d13f60c
Add mpi-rule to support multiple MPI component build
1 files modified
77 ■■■■ changed files
make-rules/mpi-macros.mk 77 ●●●● patch | view | raw | blame | history
make-rules/mpi-macros.mk
@@ -18,11 +18,12 @@
#
# CDDL HEADER END
#
# Copyright (c) 2013, Aurelien Larcher. All rights reserved.
# Copyright (c) 2013-2017, Aurelien Larcher. All rights reserved.
#
MPI_IMPLEMENTATIONS_LIST = mpich openmpi
# Define compilers
MPI.mpich =         mpich
MPICC.mpich =       mpicc
@@ -41,18 +42,17 @@
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 immplementatio 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
@@ -78,4 +78,65 @@
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