d7eaca83fa
What started as a simple ticket ended up reaching the way up to the MPI Forum. It turns out that we are supposed to have MPI_SIZEOF for all Fortran interfaces: mpif.h, the mpi module, and the mpi_f08 module. It further turns out that to properly support MPI_SIZEOF, your Fortran compiler *has* support the INTERFACE keyword and ISO_FORTRAN_ENV. We can't use "ignore TKR" functionality, because the whole point of MPI_SIZEOF is that the implementation knows what type was passed to it ("ignore TKR" functionality, by definition, throws that information away). Hence, we have to have an MPI_SIZEOF interface+implementation for all intrinsic types, kinds, and ranks. This commit therefore adds a perl script that generates both the interfaces and implementations for MPI_SIZEOF in each of mpif.h, the mpi module, and mpi_f08 module (yay consolidation!). The perl script uses the results of some new configure tests: * check if the Fortran compiler supports the INTERFACE keyword * check if the Fortran compiler supports ISO_FORTRAN_ENV * find the max array rank (i.e., dimension) that the compiler supports If the Fortran compiler supports both INTERFACE and ISO_FORTRAN_ENV, then we'll build the MPI_SIZEOF interfaces. If not, we'll skip MPI_SIZEOF in mpif.h and the mpi module. Note that we won't build the mpi_f08 module -- to include the MPI_SIZEOF interfaces -- if the Fortran compiler doesn't support INTERFACE, ISO_FORTRAN_ENV, and a whole bunch of ther modern Fortran stuff. Since MPI_SIZEOF interfaces are now generated by the perl script, this commit also removes all the old MPI_SIZEOF implementations (which were laden with a zillion #if blocks). cmr=v1.8.3 This commit was SVN r32764.
52 строки
1.8 KiB
Makefile
52 строки
1.8 KiB
Makefile
# -*- makefile -*-
|
|
# Copyright (c) 2004-2007 The Trustees of Indiana University and Indiana
|
|
# University Research and Technology
|
|
# Corporation. All rights reserved.
|
|
# Copyright (c) 2004-2005 The University of Tennessee and The University
|
|
# of Tennessee Research Foundation. All rights
|
|
# reserved.
|
|
# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
|
# University of Stuttgart. All rights reserved.
|
|
# Copyright (c) 2004-2005 The Regents of the University of California.
|
|
# All rights reserved.
|
|
# Copyright (c) 2006-2014 Cisco Systems, Inc. All rights reserved.
|
|
# $COPYRIGHT$
|
|
#
|
|
# Additional copyrights may follow
|
|
#
|
|
# $HEADER$
|
|
#
|
|
|
|
noinst_LTLIBRARIES =
|
|
|
|
EXTRA_DIST = \
|
|
attr-fn-int-callback-interfaces.h \
|
|
conversion-fn-null-int-interface.h \
|
|
gen-mpi-sizeof.pl
|
|
|
|
#-----------------------------------------------------------------------------
|
|
|
|
# If we're building any Fortran bindings, then we need to build the
|
|
# Fortran glue that will get slurped into libmpi
|
|
if OMPI_BUILD_FORTRAN_MPIFH_BINDINGS
|
|
noinst_LTLIBRARIES += libmpi_fortran_base.la
|
|
|
|
# This needs to be its own convenience library because it requires
|
|
# some specialized CPPFLAGS to set all the defines in various .h files
|
|
# properly (copied from ompi/mpi/fortran/mpif-h/Makefile.am) -- we
|
|
# unfortunately can't just suck the sources into the larger libmpi.la.
|
|
|
|
libmpi_fortran_base_la_CPPFLAGS = \
|
|
-DOMPI_PROFILE_LAYER=0 -DOMPI_COMPILING_FORTRAN_WRAPPERS=1
|
|
libmpi_fortran_base_la_SOURCES = \
|
|
constants.h \
|
|
datarep.h \
|
|
fint_2_int.h \
|
|
strings.h \
|
|
attr_fn_f.c \
|
|
conversion_fn_null_f.c \
|
|
f90_accessors.c \
|
|
strings.c \
|
|
test_constants_f.c
|
|
endif
|