ips/sample_data/make-rules/mpi-macros.mk
2022-03-28 15:05:56 -03:00

156 lines
4.3 KiB
Makefile

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