1
1

clean up the OMPI_BUILDING #define. Rather than being defined to 1 if

we are part of the source tree and not defined otherwise, we are going
with an always defined if ompi_config.h is included policy.  If
ompi_config.h is included before mpi.h or before OMPI_BUILDING is set,
it will set OMPI_BUILDING to 1 and enable all the internal code that
is in ompi_config_bottom.h.  Otherwise, it will only include the
system configuration data (enough for defining the C and C++ interfaces
to MPI, but not perturbing the user environment).

This should fix the problems with bool and the like that the Eclipse
folks were seeing.  It also cleans up some build system hacks that
we had along the way.

Also, don't use int64_t as the default size of MPI_Offset, because it
requires us including stdint.h in mpi.h, which is something we really
shouldn't be doing.

And finally, fix a ROMIO Makefile that didn't set -DOMPI_BUILDING=1,
as ROMIO includes mpi.h, but not ompi_config.h

This commit was SVN r5430.
Этот коммит содержится в:
Brian Barrett 2005-04-19 03:51:20 +00:00
родитель 80af0b41c7
Коммит 0964152893
9 изменённых файлов: 87 добавлений и 97 удалений

Просмотреть файл

@ -37,10 +37,6 @@ BASECC="`basename $CC`"
CFLAGS="$ompi_cflags_save"
AC_DEFINE_UNQUOTED(OMPI_CC, "$CC", [OMPI underlying C compiler])
# When building OMPI, we need this everywhere
CPPFLAGS="$CPPFLAGS -DOMPI_BUILDING=1"
# Check for compilers that impersonate gcc
AC_MSG_CHECKING([for compilers that impersonate gcc])

Просмотреть файл

@ -1176,11 +1176,7 @@ AC_DEFINE_UNQUOTED(ompi_fortran_dblprec_t, $MPI_FORTRAN_DBLPREC_TYPE,
MPI_OFFSET_TYPE="not found"
MPI_OFFSET_DATATYPE="not found"
AC_MSG_CHECKING([checking for type of MPI_Offset])
if test "$ac_cv_type_int64_t" = "yes"; then
MPI_OFFSET_TYPE=int64_t
# Need to figure out MPI_OFFSET_DATATYPE below
MPI_OFFSET_SIZE=8
elif test "$ac_cv_type_long_long" = "yes" -a "$ac_cv_sizeof_long_long" = 8; then
if test "$ac_cv_type_long_long" = "yes" -a "$ac_cv_sizeof_long_long" = 8; then
MPI_OFFSET_TYPE="long long"
MPI_OFFSET_DATATYPE=MPI_LONG_LONG
MPI_OFFSET_SIZE=8
@ -1192,10 +1188,6 @@ elif test "ac_cv_sizeof_int" = 8; then
MPI_OFFSET_TYPE=int
MPI_OFFSET_DATATYPE=MPI_INT
MPI_OFFSET_SIZE=8
elif test "$ac_cv_type_int32_t" = "yes"; then
MPI_OFFSET_TYPE=int32_t
# Need to figure out MPI_OFFSET_DATATYPE below
MPI_OFFSET_SIZE=4
elif test "$ac_cv_type_long_long" = "yes" -a "$ac_cv_sizeof_long_long" = 4; then
MPI_OFFSET_TYPE="long long"
MPI_OFFSET_DATATYPE=MPI_LONG_LONG
@ -1218,30 +1210,9 @@ AC_DEFINE_UNQUOTED(MPI_Offset, $MPI_OFFSET_TYPE, [Type of MPI_Offset])
#
# If we haven't already, figure out an MPI datatype that corresponds
# to the back-end C type of MPI_Offset. We'll only not have figured
# this out already if the type of MPI_Offset is int32_t or int64_t.
# to the back-end C type of MPI_Offset.
#
AC_MSG_CHECKING([checking for an MPI datatype for MPI_Offset])
if test "$MPI_OFFSET_DATATYPE" = "not found"; then
if test "$MPI_OFFSET_TYPE" = "int64_t"; then
if test "$ac_cv_type_long_long" = "yes" -a "$ac_cv_sizeof_long_long" = 8; then
MPI_OFFSET_DATATYPE=MPI_LONG_LONG
elif test "$ac_cv_type_long" = "yes" -a "$ac_cv_sizeof_long" = 8; then
MPI_OFFSET_DATATYPE=MPI_LONG
elif test "ac_cv_sizeof_int" = 8; then
MPI_OFFSET_DATATYPE=MPI_INT
fi
elif test "$MPI_OFFSET_TYPE" = "int32_t"; then
if test "$ac_cv_type_long_long" = "yes" -a "$ac_cv_sizeof_long_long" = 4; then
MPI_OFFSET_DATATYPE=MPI_LONG_LONG
elif test "$ac_cv_type_long" = "yes" -a "$ac_cv_sizeof_long" = 4; then
MPI_OFFSET_DATATYPE=MPI_LONG
elif test "ac_cv_sizeof_int" = 4; then
MPI_OFFSET_DATATYPE=MPI_INT
fi
fi
fi
AC_MSG_RESULT([$MPI_OFFSET_DATATYPE])
if test "$MPI_OFFSET_DATATYPE" = "not found"; then
AC_MSG_WARN([*** Unable to find an MPI datatype corresponding to MPI_Offset])

Просмотреть файл

@ -17,6 +17,16 @@
#ifndef OMPI_MPI_H
#define OMPI_MPI_H
/*
* Turn off OMPI_BUILDING if we were included before ompi_config.h,
* which should happen whenever an MPI application is involved. This
* will turn off most of the includes / compatibility code in
* ompi_config_bottom.h, giving the user an expected experience.
*/
#ifndef OMPI_BUILDING
#define OMPI_BUILDING 0
#endif
#include "ompi_config.h"
/*
@ -34,7 +44,7 @@
* To accomodate programs written for MPI implementations that use a
* straight ROMIO import
*/
#if !defined(OMPI_BUILDING) || !OMPI_BUILDING
#if !OMPI_BUILDING
#define MPIO_Request MPI_Request
#define MPIO_Test MPI_Test
#define MPIO_Wait MPI_Wait
@ -1636,12 +1646,10 @@ OMPI_DECLSPEC double PMPI_Wtime(void);
* - We are using a C++ compiler
*/
#if defined(OMPI_WANT_CXX_BINDINGS)
#if !defined(OMPI_BUILDING) || !OMPI_BUILDING
#if defined(OMPI_WANT_CXX_BINDINGS) && !OMPI_BUILDING
#if defined(__cplusplus) || defined(c_plusplus)
#include "mpi/cxx/mpicxx.h"
#endif
#endif
#endif
#endif /* OMPI_MPI_H */

Просмотреть файл

@ -22,42 +22,82 @@
* need to #ifndef/#endif protection here.
*/
#ifndef OMPI_CONFIG_BOTTOM_H
#define OMPI_CONFIG_BOTTOM_H
#if defined(WIN32) && defined(OMPI_BUILDING) && OMPI_BUILDING
#include "win32/win_compat.h"
#define OMPI_COMP_EXPORT __declspec(dllexport)
#ifndef OMPI_CONFIG_H
#error "ompi_config_bottom.h should only be included from ompi_config.h"
#endif
#if defined(WIN32)
# if defined(OMPI_BUILDING)
# if OMPI_BUILDING
# define OMPI_DECLSPEC __declspec(dllexport)
# else
# define OMPI_DECLSPEC __declspec(dllimport)
# endif
# endif
# ifndef OMPI_DECLSPEC
/* this is for the applications. here WIN32 is defined, but no OMPI_BUILDING */
# define OMPI_DECLSPEC __declspec(dllimport)
# endif
/*
* OMPI_BUILDING will be true whenever ompi_config.h is included in a
* file that is "internal" to Open MPI, meaning something that is
* below the MPI layer. It will be false whenever we should provide
* the most "untampered" environment possible. The user is free to
* override this before including either mpi.h or ompi_config.h, if so
* desired.
*/
#ifndef OMPI_BUILDING
#define OMPI_BUILDING 1
#endif
#ifndef OMPI_DECLSPEC
#define OMPI_DECLSPEC
/***********************************************************************
*
* code that should be in ompi_config_bottom.h regardless of build
* status
*
**********************************************************************/
/* Do we have thread support? */
#define OMPI_HAVE_THREAD_SUPPORT (OMPI_ENABLE_MPI_THREADS || OMPI_ENABLE_PROGRESS_THREADS)
/* * C type for Fortran COMPLEX */
typedef struct {
ompi_fortran_real_t real;
ompi_fortran_real_t imag;
} ompi_fortran_complex_t;
/* * C type for Fortran DOUBLE COMPLEX */
typedef struct {
ompi_fortran_dblprec_t real;
ompi_fortran_dblprec_t imag;
} ompi_fortran_dblcomplex_t;
/***********************************************************************
*
* Windows library interface declaration code
*
**********************************************************************/
#if defined(WIN32)
# if OMPI_BUILDING
# include "win32/win_compat.h"
# define OMPI_COMP_EXPORT __declspec(dllexport)
# define OMPI_DECLSPEC __declspec(dllexport)
# else
# define OMPI_COMP_EXPORT
# define OMPI_DECLSPEC __declspec(dllimport)
# endif
#else
# define OMPI_COMP_EXPORT
# define OMPI_DECLSPEC
#endif
#ifndef OMPI_COMP_EXPORT
#define OMPI_COMP_EXPORT
#endif
/***********************************************************************
*
* Code that is only for when building Open MPI or utilities that are
* using the internals of Open MPI. It should not be included when
* building MPI applicatiosn
*
**********************************************************************/
#if OMPI_BUILDING
/*
* If we're in C, we may need to bring in the bool type and true/false
* constants. OMPI_NEED_C_BOOL will be true if the compiler either
* needs <stdbool.h> or doesn't define the bool type at all.
*/
#if !defined(__cplusplus) && defined(OMPI_BUILDING)
#if !defined(__cplusplus)
# if OMPI_NEED_C_BOOL
# if OMPI_USE_STDBOOL_H
/* If we're using <stdbool.h>, there is an implicit
@ -103,11 +143,6 @@ typedef long long bool;
#define OMPI_PATH_MAX 256
#endif
/*
* Do we have thread support?
*/
#define OMPI_HAVE_THREAD_SUPPORT (OMPI_ENABLE_MPI_THREADS || OMPI_ENABLE_PROGRESS_THREADS)
/*
* Do we have <stdint.h>?
*/
@ -135,10 +170,10 @@ typedef long long bool;
* So for 1, everyone must include <ompi_config.h> first. For 2, the
* C++ bindings will never include <ompi_config.h> -- they will only
* include <mpi.h>, which includes <ompi_config.h>, but after
* OMPI_MPI_H is defined. For 3, it's the same as 1 -- just include
* setting OMPI_BUILDING to 0 For 3, it's the same as 1 -- just include
* <ompi_config.h> first.
*/
#if OMPI_ENABLE_MEM_DEBUG && defined(OMPI_BUILDING) && OMPI_BUILDING && !defined(OMPI_MPI_H)
#if OMPI_ENABLE_MEM_DEBUG
/* It is safe to include util/malloc.h here because a) it will only
happen when we are building OMPI and therefore have a full OMPI
@ -173,29 +208,10 @@ typedef long long bool;
#endif
/*
* C type for Fortran COMPLEX
*/
typedef struct {
ompi_fortran_real_t real;
ompi_fortran_real_t imag;
} ompi_fortran_complex_t;
/*
* C type for Fortran DOUBLE COMPLEX
*/
typedef struct {
ompi_fortran_dblprec_t real;
ompi_fortran_dblprec_t imag;
} ompi_fortran_dblcomplex_t;
/*
* printf functions for portability (only when building Open MPI)
*/
#if defined(OMPI_BUILDING) && OMPI_BUILDING
#if !defined(HAVE_VASPRINTF) || !defined(HAVE_VSNPRINTF)
#include <stdarg.h>
#include <stdlib.h>
@ -220,7 +236,6 @@ typedef struct {
#ifndef HAVE_VSNPRINTF
# define vsnprintf ompi_vsnprintf
#endif
#endif
/*
* Define __func__-preprocessor directive if the compiler does not
@ -229,9 +244,8 @@ typedef struct {
* coming from (assuming that __func__ is typically used for
* printf-style debugging).
*/
#if defined(OMPI_BUILDING) && OMPI_BUILDING && defined(HAVE_DECL___FUNC__) && !HAVE_DECL___FUNC__
#if defined(HAVE_DECL___FUNC__) && !HAVE_DECL___FUNC__
#define __func__ __FILE__
#endif
#endif /* OMPI_CONFIG_BOTTOM_H */
#endif /* OMPI_BUILDING */

Просмотреть файл

@ -17,6 +17,7 @@
include $(top_ompi_srcdir)/config/Makefile.options
AM_CPPFLAGS = \
-DOMPI_BUILDING=1 \
-I$(top_ompi_builddir)/include \
-I$(top_ompi_srcdir)/src \
-I$(top_ompi_srcdir)/src/include \

Просмотреть файл

@ -14,7 +14,7 @@
* $HEADER$
*/
#undef OMPI_BUILDING
#define OMPI_BUILDING 0
#include "ompi_config.h"
#include "include/sys/atomic.h"

Просмотреть файл

@ -14,7 +14,7 @@
* $HEADER$
*/
#undef OMPI_BUILDING
#define OMPI_BUILDING 0
#include "ompi_config.h"
#undef NDEBUG

Просмотреть файл

@ -14,7 +14,7 @@
* $HEADER$
*/
#undef OMPI_BUILDING
#define OMPI_BUILDING 0
#include "ompi_config.h"
#ifdef HAVE_PTHREAD_H

Просмотреть файл

@ -14,7 +14,7 @@
* $HEADER$
*/
#undef OMPI_BUILDING
#define OMPI_BUILDING 0
#include "ompi_config.h"
#ifdef HAVE_PTHREAD_H