# # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # Copyright (c) 2013-2017, Aurelien Larcher. All rights reserved. # MPI_IMPLEMENTATIONS_LIST = mpich openmpi # Define compilers MPI.mpich = mpich MPICC.mpich = mpicc MPICXX.mpich = mpicxx MPIF77.mpich = mpif77 MPIFC.mpich = mpif90 MPI.openmpi = openmpi MPICC.openmpi = mpicc MPICXX.openmpi = mpicxx MPIF77.openmpi = mpif77 MPIFC.openmpi = mpif90 # Default to mpich MPI_IMPLEMENTATION ?= $(MPI.mpich) MPICC = $(MPICC.$(MPI_IMPLEMENTATION)) MPICXX = $(MPICXX.$(MPI_IMPLEMENTATION)) MPIF77 = $(MPIF77.$(MPI_IMPLEMENTATION)) MPIFC = $(MPIFC.$(MPI_IMPLEMENTATION)) # 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 MPI_BINDIR = $(MPI_BINDIR.$(BITS)) MPI_SBINDIR.32 = $(MPI_PREFIX.32)/sbin MPI_SBINDIR.64 = $(MPI_PREFIX.64)/sbin MPI_SBINDIR = $(MPI_SBINDIR.$(BITS)) MPI_LIBDIR.32 = $(MPI_PREFIX.32)/lib MPI_LIBDIR.64 = $(MPI_PREFIX.64)/lib 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_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) # 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))