#
|
# 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))
|