// Copyright (C) 2006 Douglas Gregor // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) /** @file config.hpp * * This header provides MPI configuration details that expose the * capabilities of the underlying MPI implementation, and provides * auto-linking support on Windows. */ #ifndef BOOST_MPI_CONFIG_HPP #define BOOST_MPI_CONFIG_HPP /* Force MPICH not to define SEEK_SET, SEEK_CUR, and SEEK_END, which conflict with the versions in and . */ #define MPICH_IGNORE_CXX_SEEK 1 #include #include /** @brief Define this macro to avoid expensice MPI_Pack/Unpack calls on * homogeneous machines. */ //#define BOOST_MPI_HOMOGENEOUS // If this is an MPI-2 implementation, define configuration macros for // the features we are interested in. #if defined(MPI_VERSION) && MPI_VERSION >= 2 /** @brief Determine if the MPI implementation has support for memory * allocation. * * This macro will be defined when the underlying MPI implementation * has support for the MPI-2 memory allocation routines @c * MPI_Alloc_mem and @c MPI_Free_mem. When defined, the @c allocator * class template will provide Standard Library-compliant access to * these memory-allocation routines. */ # define BOOST_MPI_HAS_MEMORY_ALLOCATION /** @brief Determine if the MPI implementation has supports initialization * without command-line arguments. * * This macro will be defined when the underlying implementation * supports initialization of MPI without passing along command-line * arguments, e.g., @c MPI_Init(NULL, NULL). When defined, the @c * environment class will provide a default constructor. This macro is * always defined for MPI-2 implementations. */ # define BOOST_MPI_HAS_NOARG_INITIALIZATION #else // If this is an MPI-1.x implementation, no arg initialization for // mpi environement could still be available, but not mandatory. // Undef this if no arg init is available: //# define BOOST_MPI_HAS_NOARG_INITIALIZATION #endif #if defined(MPIAPI) # define BOOST_MPI_CALLING_CONVENTION MPIAPI #else /** @brief Specifies the calling convention that will be used for callbacks * from the underlying C MPI. * * This is a Windows-specific macro, which will be used internally to state * the calling convention of any function that is to be used as a callback * from MPI. For example, the internally-defined functions that are used in * a call to @c MPI_Op_create. This macro is likely only to be useful to * users that wish to bypass Boost.MPI, registering their own callbacks in * certain cases, e.g., through @c MPI_Op_create. */ # define BOOST_MPI_CALLING_CONVENTION #endif #if defined(LAM_MPI) // Configuration for LAM/MPI # define BOOST_MPI_HAS_MEMORY_ALLOCATION # define BOOST_MPI_HAS_NOARG_INITIALIZATION #elif defined(MPICH_NAME) // Configuration for MPICH #endif /***************************************************************************** * * * DLL import/export options * * * *****************************************************************************/ #if (defined(BOOST_MPI_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)) && !defined(BOOST_MPI_STATIC_LINK) # if defined(BOOST_MPI_SOURCE) # define BOOST_MPI_DECL BOOST_SYMBOL_EXPORT # define BOOST_MPI_BUILD_DLL # else # define BOOST_MPI_DECL BOOST_SYMBOL_IMPORT # endif #endif #ifndef BOOST_MPI_DECL # define BOOST_MPI_DECL #endif #if !defined(BOOST_MPI_NO_LIB) && !defined(BOOST_MPI_SOURCE) && !defined(BOOST_ALL_NO_LIB) && defined(__cplusplus) # define BOOST_LIB_NAME boost_mpi # if defined(BOOST_MPI_DYN_LINK) || defined(BOOST_ALL_DYN_LINK) # define BOOST_DYN_LINK # endif # ifdef BOOST_MPI_DIAG # define BOOST_LIB_DIAGNOSTIC # endif # include #endif #endif // BOOST_MPI_CONFIG_HPP