# # Copyright (c) 2004-2007 The Trustees of Indiana University and Indiana # University Research and Technology # Corporation. All rights reserved. # Copyright (c) 2004-2013 The University of Tennessee and The University # of Tennessee Research Foundation. All rights # reserved. # Copyright (c) 2004-2009 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-2021 Cisco Systems, Inc. All rights reserved. # Copyright (c) 2011-2013 Inria. All rights reserved. # Copyright (c) 2011-2013 Universite Bordeaux 1 # Copyright (c) 2013-2018 Los Alamos National Security, LLC. All rights # reserved. # Copyright (c) 2015-2021 Research Organization for Information Science # and Technology (RIST). All rights reserved. # Copyright (c) 2016 IBM Corporation. All rights reserved. # Copyright (c) 2018 FUJITSU LIMITED. All rights reserved. # Copyright (c) 2021-2022 Triad National Security, LLC. All rights # reserved. # # $COPYRIGHT$ # # Additional copyrights may follow # # $HEADER$ # include $(top_srcdir)/Makefile.ompi-rules SUBDIRS = profile AM_CPPFLAGS = -DOMPI_BUILD_MPI_PROFILING=0 -DOMPI_COMPILING_FORTRAN_WRAPPERS=1 # The top directory only builds MPI_* bindings and some support # glue. The bottom directory only builds PMPI_* bindings. Each # directory is built when certain conditions are met. If the mpif.h # bindings are disabled, nothing in the top or bottom directory is # built. # # If the mpif.h MPI API bindings are enabled, the glue functions in # the top directory are always built. # # The cases where the MPI API functions are build top directory needs # to be built are: # # 1. When profiling is disabled # 2. When profiling is enabled but weak symbol support is absent # lib_LTLIBRARIES = CLEANFILES = # Note that we invoke some OPAL functions directly in libmpi_mpifh.la, # so we need to link in the OPAL library directly (pulling it in # indirectly via libmpi.la does not work on all platforms). lib@OMPI_LIBMPI_NAME@_mpifh_la_LIBADD = \ $(top_builddir)/ompi/lib@OMPI_LIBMPI_NAME@.la \ $(OMPI_MPIEXT_MPIFH_LIBS) \ $(OMPI_TOP_BUILDDIR)/opal/lib@OPAL_LIB_NAME@.la lib@OMPI_LIBMPI_NAME@_mpifh_la_LDFLAGS = -version-info $(libmpi_mpifh_so_version) # Are we building the mpif.h bindings at all? if OMPI_BUILD_FORTRAN_MPIFH_BINDINGS # If yes, then we need to build the installable library and the glue # convenience library that will be sucked up into the main libmpi. lib_LTLIBRARIES += lib@OMPI_LIBMPI_NAME@_mpifh.la # Do we need to suck in the convenience library from the lower # directory? if BUILD_PMPI_FORTRAN_MPIFH_BINDINGS_LAYER lib@OMPI_LIBMPI_NAME@_mpifh_la_LIBADD += profile/libmpi_mpifh_pmpi.la endif endif headers = \ bindings.h \ prototypes_mpi.h \ status-conversion.h # # These files are only built and added to libmpi_mpifh.la in certain cases. # lib@OMPI_LIBMPI_NAME@_mpifh_la_SOURCES = # sizeof_f.f90 is generated based on some results from configure tests. CLEANFILES += sizeof_f.f90 # If we're building the MPI_SIZEOF interfaces, generate the source # code in sizeof_f.f90 (via a perl script). Normally, we'd just add # sizeof_f.f90 to the libmpi_mpif_la_SOURCES and be done with it. # However, since this is the first *actual Fortran* source that we've # added to libmpi_mpif_la_SOURCEs, this causes Libtool to use the # *Fortran* linker to create the final libmpi_mpif.la library # (vs. using the C linker, as it has done for years). This exposes an # unfortunate bug in the Absoft linker: it does not honor the order of # -Wl arguments, which basically causes the resulting libmpi_mpif.so # to be borked. # # To get around this, we compile sizeof_f.f90 into its own LT # convenience library, and then we LIBADD that convenience library # into the main libmpi_mpifh.la. In this way, we basically trick # Libtool into still using the C linker to create libmpi_mpif.la, and # our -Wl flags therefore don't get re-ordered. # # All this being said, we can't rely on Automake/Libtool not figuring # out this workaround indefinitely. So Jeff advised Absoft to fix # this bug in Sep 2014. noinst_LTLIBRARIES= if BUILD_FORTRAN_SIZEOF noinst_LTLIBRARIES += libmpi_mpifh_sizeof.la # Do not dist this file; it is generated nodist_libmpi_mpifh_sizeof_la_SOURCES = sizeof_f.f90 lib@OMPI_LIBMPI_NAME@_mpifh_la_LIBADD += libmpi_mpifh_sizeof.la endif sizeof_pl = $(top_srcdir)/ompi/mpi/fortran/base/gen-mpi-sizeof.pl sizeof_f.f90: $(top_builddir)/config.status sizeof_f.f90: $(sizeof_pl) sizeof_f.f90: $(OMPI_V_GEN) $(sizeof_pl) \ --impl=$@ --ierror=mandatory --mpi \ --maxrank=$(OMPI_FORTRAN_MAX_ARRAY_RANK) \ --generate=$(OMPI_FORTRAN_BUILD_SIZEOF) \ --real2=$(OMPI_HAVE_FORTRAN_REAL2) \ --iso_real16=$(OMPI_FORTRAN_HAVE_ISO_FORTRAN_ENV_REAL16) \ --real16=$(OMPI_HAVE_FORTRAN_REAL16) \ --complex4=$(OMPI_HAVE_FORTRAN_COMPLEX4) \ --complex32=$(OMPI_HAVE_FORTRAN_COMPLEX32) if BUILD_MPI_FORTRAN_MPIFH_BINDINGS_LAYER lib@OMPI_LIBMPI_NAME@_mpifh_la_SOURCES += \ abort_f.c \ add_error_class_f.c \ add_error_code_f.c \ add_error_string_f.c \ aint_add_f.c \ aint_diff_f.c \ allgather_f.c \ allgather_init_f.c \ allgatherv_f.c \ allgatherv_init_f.c \ alloc_mem_f.c \ allreduce_f.c \ allreduce_init_f.c \ alltoall_f.c \ alltoall_init_f.c \ alltoallv_f.c \ alltoallv_init_f.c \ alltoallw_f.c \ alltoallw_init_f.c \ attr_delete_f.c \ attr_get_f.c \ attr_put_f.c \ barrier_f.c \ barrier_init_f.c \ bcast_f.c \ bcast_init_f.c \ bsend_f.c \ bsend_init_f.c \ buffer_attach_f.c \ buffer_detach_f.c \ cancel_f.c \ cart_coords_f.c \ cart_create_f.c \ cartdim_get_f.c \ cart_get_f.c \ cart_map_f.c \ cart_rank_f.c \ cart_shift_f.c \ cart_sub_f.c \ close_port_f.c \ comm_accept_f.c \ comm_call_errhandler_f.c \ comm_compare_f.c \ comm_connect_f.c \ comm_create_errhandler_f.c \ comm_create_f.c \ comm_create_from_group_f.c \ comm_create_group_f.c \ comm_create_keyval_f.c \ comm_delete_attr_f.c \ comm_disconnect_f.c \ comm_dup_f.c \ comm_dup_with_info_f.c \ comm_idup_f.c \ comm_idup_with_info_f.c \ comm_free_f.c \ comm_free_keyval_f.c \ comm_get_attr_f.c \ comm_get_errhandler_f.c \ comm_get_info_f.c \ comm_get_name_f.c \ comm_get_parent_f.c \ comm_group_f.c \ comm_join_f.c \ comm_rank_f.c \ comm_remote_group_f.c \ comm_remote_size_f.c \ comm_set_attr_f.c \ comm_set_errhandler_f.c \ comm_set_info_f.c \ comm_set_name_f.c \ comm_size_f.c \ comm_spawn_f.c \ comm_spawn_multiple_f.c \ comm_split_f.c \ comm_split_type_f.c \ comm_test_inter_f.c \ dist_graph_create_adjacent_f.c \ dist_graph_create_f.c \ dist_graph_neighbors_f.c \ dist_graph_neighbors_count_f.c \ dims_create_f.c \ errhandler_free_f.c \ error_class_f.c \ error_string_f.c \ exscan_f.c \ exscan_init_f.c \ f_sync_reg_f.c \ file_call_errhandler_f.c \ file_close_f.c \ file_create_errhandler_f.c \ file_delete_f.c \ file_get_amode_f.c \ file_get_atomicity_f.c \ file_get_byte_offset_f.c \ file_get_errhandler_f.c \ file_get_group_f.c \ file_get_info_f.c \ file_get_position_f.c \ file_get_position_shared_f.c \ file_get_size_f.c \ file_get_type_extent_f.c \ file_get_view_f.c \ file_iread_at_f.c \ file_iread_f.c \ file_iread_at_all_f.c \ file_iread_all_f.c \ file_iread_shared_f.c \ file_iwrite_at_f.c \ file_iwrite_f.c \ file_iwrite_at_all_f.c \ file_iwrite_all_f.c \ file_iwrite_shared_f.c \ file_open_f.c \ file_preallocate_f.c \ file_read_all_begin_f.c \ file_read_all_end_f.c \ file_read_all_f.c \ file_read_at_all_begin_f.c \ file_read_at_all_end_f.c \ file_read_at_all_f.c \ file_read_at_f.c \ file_read_f.c \ file_read_ordered_begin_f.c \ file_read_ordered_end_f.c \ file_read_ordered_f.c \ file_read_shared_f.c \ file_seek_f.c \ file_seek_shared_f.c \ file_set_atomicity_f.c \ file_set_errhandler_f.c \ file_set_info_f.c \ file_set_size_f.c \ file_set_view_f.c \ file_sync_f.c \ file_write_all_begin_f.c \ file_write_all_end_f.c \ file_write_all_f.c \ file_write_at_all_begin_f.c \ file_write_at_all_end_f.c \ file_write_at_all_f.c \ file_write_at_f.c \ file_write_f.c \ file_write_ordered_begin_f.c \ file_write_ordered_end_f.c \ file_write_ordered_f.c \ file_write_shared_f.c \ finalized_f.c \ finalize_f.c \ free_mem_f.c \ gather_f.c \ gather_init_f.c \ gatherv_f.c \ gatherv_init_f.c \ get_address_f.c \ get_count_f.c \ get_elements_f.c \ get_elements_x_f.c \ get_library_version_f.c \ get_processor_name_f.c \ get_version_f.c \ graph_create_f.c \ graphdims_get_f.c \ graph_get_f.c \ graph_map_f.c \ graph_neighbors_count_f.c \ graph_neighbors_f.c \ grequest_complete_f.c \ grequest_start_f.c \ group_compare_f.c \ group_difference_f.c \ group_excl_f.c \ group_from_session_pset_f.c \ group_free_f.c \ group_incl_f.c \ group_intersection_f.c \ group_range_excl_f.c \ group_range_incl_f.c \ group_rank_f.c \ group_size_f.c \ group_translate_ranks_f.c \ group_union_f.c \ iallgather_f.c \ iallgatherv_f.c \ iallreduce_f.c \ ialltoall_f.c \ ialltoallv_f.c \ ialltoallw_f.c \ ibarrier_f.c \ ibcast_f.c \ ibsend_f.c \ iexscan_f.c \ igather_f.c \ igatherv_f.c \ improbe_f.c \ imrecv_f.c \ ineighbor_allgather_f.c \ ineighbor_allgatherv_f.c \ ineighbor_alltoall_f.c \ ineighbor_alltoallv_f.c \ ineighbor_alltoallw_f.c \ info_create_f.c \ info_create_env_f.c \ info_delete_f.c \ info_dup_f.c \ info_free_f.c \ info_get_f.c \ info_get_nkeys_f.c \ info_get_nthkey_f.c \ info_get_string_f.c \ info_get_valuelen_f.c \ info_set_f.c \ init_f.c \ initialized_f.c \ init_thread_f.c \ intercomm_create_f.c \ intercomm_create_from_groups_f.c \ intercomm_merge_f.c \ iprobe_f.c \ irecv_f.c \ ireduce_f.c \ ireduce_scatter_f.c \ ireduce_scatter_block_f.c \ irsend_f.c \ isend_f.c \ isendrecv_f.c \ isendrecv_replace_f.c \ iscan_f.c \ iscatter_f.c \ iscatterv_f.c \ issend_f.c \ is_thread_main_f.c \ keyval_create_f.c \ keyval_free_f.c \ lookup_name_f.c \ mprobe_f.c \ mrecv_f.c \ neighbor_allgather_f.c \ neighbor_allgather_init_f.c \ neighbor_allgatherv_f.c \ neighbor_allgatherv_init_f.c \ neighbor_alltoall_f.c \ neighbor_alltoall_init_f.c \ neighbor_alltoallv_f.c \ neighbor_alltoallv_init_f.c \ neighbor_alltoallw_f.c \ neighbor_alltoallw_init_f.c \ op_commutative_f.c \ op_create_f.c \ open_port_f.c \ op_free_f.c \ pack_external_f.c \ pack_external_size_f.c \ pack_f.c \ pack_size_f.c \ parrived_f.c \ pcontrol_f.c \ pready_f.c \ pready_list_f.c \ pready_range_f.c \ precv_init_f.c \ probe_f.c \ psend_init_f.c \ publish_name_f.c \ query_thread_f.c \ recv_f.c \ recv_init_f.c \ reduce_f.c \ reduce_init_f.c \ reduce_local_f.c \ reduce_scatter_f.c \ reduce_scatter_init_f.c \ reduce_scatter_block_f.c \ reduce_scatter_block_init_f.c \ register_datarep_f.c \ request_free_f.c \ request_get_status_f.c \ rsend_f.c \ rsend_init_f.c \ scan_f.c \ scan_init_f.c \ scatter_f.c \ scatter_init_f.c \ scatterv_f.c \ scatterv_init_f.c \ send_f.c \ send_init_f.c \ sendrecv_f.c \ sendrecv_replace_f.c \ session_call_errhandler_f.c \ session_create_errhandler_f.c \ session_get_errhandler_f.c \ session_get_info_f.c \ session_get_nth_pset_f.c \ session_get_num_psets_f.c \ session_get_pset_info_f.c \ session_init_f.c \ session_finalize_f.c \ session_set_errhandler_f.c \ ssend_f.c \ ssend_init_f.c \ startall_f.c \ start_f.c \ status_f082f_f.c \ status_f2f08_f.c \ status_set_cancelled_f.c \ status_set_elements_f.c \ status_set_elements_x_f.c \ testall_f.c \ testany_f.c \ test_cancelled_f.c \ test_f.c \ testsome_f.c \ topo_test_f.c \ type_commit_f.c \ type_contiguous_f.c \ type_create_darray_f.c \ type_create_f90_complex_f.c \ type_create_f90_integer_f.c \ type_create_f90_real_f.c \ type_create_hindexed_f.c \ type_create_hvector_f.c \ type_create_indexed_block_f.c \ type_create_hindexed_block_f.c \ type_create_keyval_f.c \ type_create_resized_f.c \ type_create_struct_f.c \ type_create_subarray_f.c \ type_delete_attr_f.c \ type_dup_f.c \ type_free_f.c \ type_free_keyval_f.c \ type_get_attr_f.c \ type_get_contents_f.c \ type_get_envelope_f.c \ type_get_extent_f.c \ type_get_extent_x_f.c \ type_get_name_f.c \ type_get_true_extent_f.c \ type_get_true_extent_x_f.c \ type_indexed_f.c \ type_match_size_f.c \ type_set_attr_f.c \ type_set_name_f.c \ type_size_f.c \ type_size_x_f.c \ type_vector_f.c \ unpack_external_f.c \ unpack_f.c \ unpublish_name_f.c \ waitall_f.c \ waitany_f.c \ wait_f.c \ waitsome_f.c \ wtick_f.c \ wtime_f.c \ accumulate_f.c \ raccumulate_f.c \ get_f.c \ rget_f.c \ get_accumulate_f.c \ rget_accumulate_f.c \ put_f.c \ rput_f.c \ compare_and_swap_f.c \ fetch_and_op_f.c \ win_allocate_f.c \ win_allocate_shared_f.c \ win_attach_f.c \ win_call_errhandler_f.c \ win_complete_f.c \ win_create_dynamic_f.c \ win_create_errhandler_f.c \ win_create_f.c \ win_create_keyval_f.c \ win_delete_attr_f.c \ win_detach_f.c \ win_fence_f.c \ win_free_f.c \ win_free_keyval_f.c \ win_get_attr_f.c \ win_get_errhandler_f.c \ win_get_group_f.c \ win_get_info_f.c \ win_get_name_f.c \ win_lock_f.c \ win_lock_all_f.c \ win_post_f.c \ win_set_attr_f.c \ win_set_errhandler_f.c \ win_set_info_f.c \ win_set_name_f.c \ win_shared_query_f.c \ win_start_f.c \ win_sync_f.c \ win_test_f.c \ win_unlock_f.c \ win_unlock_all_f.c \ win_wait_f.c \ win_flush_f.c \ win_flush_all_f.c \ win_flush_local_f.c \ win_flush_local_all_f.c # The following functions were removed from the MPI standard, but are # retained for ABI compliance reasons. They are listed independently # of the other MPI functions in case we one day change behavior around # ABI compliance. lib@OMPI_LIBMPI_NAME@_mpifh_la_SOURCES += \ address_f.c \ errhandler_create_f.c \ errhandler_get_f.c \ errhandler_set_f.c \ type_extent_f.c \ type_hindexed_f.c \ type_hvector_f.c \ type_lb_f.c \ type_struct_f.c \ type_ub_f.c endif # # Conditionally install the header files # if WANT_INSTALL_HEADERS ompidir = $(ompiincludedir)/$(subdir) ompi_HEADERS = $(headers) endif