2004-01-07 22:33:37 +03:00
|
|
|
/*
|
2004-11-22 04:38:40 +03:00
|
|
|
* Copyright (c) 2004-2005 The Trustees of Indiana University.
|
|
|
|
* All rights reserved.
|
|
|
|
* Copyright (c) 2004-2005 The Trustees of the University of Tennessee.
|
|
|
|
* All rights reserved.
|
2004-11-28 23:09:25 +03:00
|
|
|
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
|
|
|
* University of Stuttgart. All rights reserved.
|
2005-03-24 15:43:37 +03:00
|
|
|
* Copyright (c) 2004-2005 The Regents of the University of California.
|
|
|
|
* All rights reserved.
|
2004-11-22 04:38:40 +03:00
|
|
|
* $COPYRIGHT$
|
|
|
|
*
|
|
|
|
* Additional copyrights may follow
|
|
|
|
*
|
2004-01-07 22:33:37 +03:00
|
|
|
* $HEADER$
|
|
|
|
*
|
2004-06-07 19:33:53 +04:00
|
|
|
* This file is included at the bottom of ompi_config.h, and is
|
2004-01-07 22:33:37 +03:00
|
|
|
* therefore a) after all the #define's that were output from
|
2004-08-06 18:30:18 +04:00
|
|
|
* configure, and b) included in most/all files in Open MPI.
|
2004-01-07 22:33:37 +03:00
|
|
|
*
|
2004-06-07 19:33:53 +04:00
|
|
|
* Since this file is *only* ever included by ompi_config.h, and
|
|
|
|
* ompi_config.h already has #ifndef/#endif protection, there is no
|
2004-01-07 22:33:37 +03:00
|
|
|
* need to #ifndef/#endif protection here.
|
|
|
|
*/
|
|
|
|
|
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.
2005-04-19 07:51:20 +04:00
|
|
|
#ifndef OMPI_CONFIG_H
|
|
|
|
#error "ompi_config_bottom.h should only be included from ompi_config.h"
|
2004-11-02 16:22:08 +03:00
|
|
|
#endif
|
|
|
|
|
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.
2005-04-19 07:51:20 +04:00
|
|
|
/*
|
2005-04-20 05:30:06 +04:00
|
|
|
* OMPI_BUILDING and OMPI_BUILDING_WIN_DSO define how ompi_config.h
|
|
|
|
* handles configuring all of Open MPI's "compatibility" code. Both
|
|
|
|
* constants will always be defined by the end of ompi_config.h.
|
|
|
|
*
|
|
|
|
* OMPI_BUILDING affects how much compatibility code is included by
|
|
|
|
* ompi_config.h. It will always be 1 or 0. The user can set the
|
|
|
|
* value before including either mpi.h or ompi_config.h and it will be
|
|
|
|
* respected. If ompi_config.h is included before mpi.h, it will
|
|
|
|
* default to 1. If mpi.h is included before ompi_config.h, it will
|
|
|
|
* default to 0.
|
|
|
|
*
|
|
|
|
* If OMPI_BUILDING is 1, ompi_config.h will:
|
|
|
|
* - everything that happens with OMPI_BUILDING set to 0
|
|
|
|
* - include a bunch of header files (stdint.h, stdtypes.h, etc.)
|
|
|
|
* - potentially override malloc, free, etc. for memory debugging
|
|
|
|
* - provide C bool type
|
|
|
|
* - set ompi_building code to import all OMPI interfaces (windows)
|
|
|
|
*
|
|
|
|
* If OMPI_BUILDING is 0, ompi_config.h will:
|
|
|
|
* - set configuration #defines
|
|
|
|
* - define the fortran complex types
|
|
|
|
* - set the ompi_building code to export all the interfaces
|
|
|
|
* (unless OMPI_BUILDING_WIN_DSO is set to 1) (windows)
|
|
|
|
*
|
|
|
|
* If OMPI_BUILDING_WIN_DSO is 1, ompi_config.h will:
|
|
|
|
* - configure the OMPI_DECLSPEC defines to assume we are building a
|
|
|
|
* dynamic shared object for a component on Windows. This will set
|
|
|
|
* all the import/export flags appropriately.
|
|
|
|
*
|
|
|
|
* If OMPI_BUILDING_WIN_DSO is 0 (or unset), ompi_config.h will:
|
|
|
|
* - configure the OMPI_DECLSPEC defines to assume we are not building
|
|
|
|
* a DSO component for Windows .
|
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.
2005-04-19 07:51:20 +04:00
|
|
|
*/
|
|
|
|
#ifndef OMPI_BUILDING
|
|
|
|
#define OMPI_BUILDING 1
|
2004-11-02 18:14:04 +03:00
|
|
|
#endif
|
2004-10-22 20:06:05 +04:00
|
|
|
|
2005-04-20 05:30:06 +04:00
|
|
|
#ifndef OMPI_BUILDING_WIN_DSO
|
|
|
|
#define OMPI_BUILDING_WIN_DSO 0
|
|
|
|
#endif
|
|
|
|
|
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.
2005-04-19 07:51:20 +04:00
|
|
|
/***********************************************************************
|
|
|
|
*
|
|
|
|
* code that should be in ompi_config_bottom.h regardless of build
|
|
|
|
* status
|
|
|
|
*
|
|
|
|
**********************************************************************/
|
2004-10-22 20:06:05 +04:00
|
|
|
|
2005-05-20 03:56:02 +04:00
|
|
|
/* MPI_Fint is the same as ompi_fortran_INTEGER_t */
|
|
|
|
#define MPI_Fint ompi_fortran_integer_t
|
|
|
|
|
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.
2005-04-19 07:51:20 +04:00
|
|
|
/* Do we have thread support? */
|
|
|
|
#define OMPI_HAVE_THREAD_SUPPORT (OMPI_ENABLE_MPI_THREADS || OMPI_ENABLE_PROGRESS_THREADS)
|
|
|
|
|
2005-05-20 03:56:02 +04:00
|
|
|
#if OMPI_HAVE_FORTRAN_REAL && OMPI_HAVE_FORTRAN_COMPLEX
|
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.
2005-04-19 07:51:20 +04:00
|
|
|
/* * C type for Fortran COMPLEX */
|
|
|
|
typedef struct {
|
|
|
|
ompi_fortran_real_t real;
|
|
|
|
ompi_fortran_real_t imag;
|
|
|
|
} ompi_fortran_complex_t;
|
2005-05-20 03:56:02 +04:00
|
|
|
#endif
|
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.
2005-04-19 07:51:20 +04:00
|
|
|
|
2005-05-20 03:56:02 +04:00
|
|
|
#if OMPI_HAVE_FORTRAN_REAL4 && OMPI_HAVE_FORTRAN_COMPLEX8
|
A bunch of changes to support MPI_INTEGER*x, MPI_REAL*x,
MPI_COMPLEX*x, and some optional C datatypes in MPI reduction
operations. These types are not technically supported by the letter
of the MPI standard, but are implied by the spirit of it (and there
are definitely users that use them in real applications)
- Add checks in configure for back-end C types for MPI_INTEGER*x and
MPI_REAL*x
- Create C data structs for MPI_COMPLEX*x
- Fixed typo for MPI_INTEGER8 in mpi.h
- Updated configure macros to create MPI_FORTRAN_INTEGER* defines, as
opposed to MPI_FORTRAN_INT, which was causing [me] lots of confusion
(between C "*_INT" names and Fortran "*_INT" names). This caused
some trivial updates in ddt, ompi_info, and the MPI layer to match.
- Update ompi_info to show whether we have each MPI_INTEGER*x,
MPI_REAL*x, and MPI_COMPLEX*x
- Extended reduction operations for optional datatypes:
- "C integer" now includes long long int, long long, and unsigned
long long
- "Fortran integer" now includes MPI_INTEGER*x
- "Floating point" now includes MPI_REAL*x
- "Complex" now includes MPI_COMPLEX*x
This commit was SVN r5511.
2005-04-27 14:23:06 +04:00
|
|
|
/* * C type for Fortran COMPLEX*8 */
|
|
|
|
typedef struct {
|
|
|
|
ompi_fortran_real4_t real;
|
|
|
|
ompi_fortran_real4_t imag;
|
|
|
|
} ompi_fortran_complex8_t;
|
|
|
|
#endif
|
|
|
|
|
2005-05-20 03:56:02 +04:00
|
|
|
#if OMPI_HAVE_FORTRAN_REAL8 && OMPI_HAVE_FORTRAN_COMPLEX16
|
A bunch of changes to support MPI_INTEGER*x, MPI_REAL*x,
MPI_COMPLEX*x, and some optional C datatypes in MPI reduction
operations. These types are not technically supported by the letter
of the MPI standard, but are implied by the spirit of it (and there
are definitely users that use them in real applications)
- Add checks in configure for back-end C types for MPI_INTEGER*x and
MPI_REAL*x
- Create C data structs for MPI_COMPLEX*x
- Fixed typo for MPI_INTEGER8 in mpi.h
- Updated configure macros to create MPI_FORTRAN_INTEGER* defines, as
opposed to MPI_FORTRAN_INT, which was causing [me] lots of confusion
(between C "*_INT" names and Fortran "*_INT" names). This caused
some trivial updates in ddt, ompi_info, and the MPI layer to match.
- Update ompi_info to show whether we have each MPI_INTEGER*x,
MPI_REAL*x, and MPI_COMPLEX*x
- Extended reduction operations for optional datatypes:
- "C integer" now includes long long int, long long, and unsigned
long long
- "Fortran integer" now includes MPI_INTEGER*x
- "Floating point" now includes MPI_REAL*x
- "Complex" now includes MPI_COMPLEX*x
This commit was SVN r5511.
2005-04-27 14:23:06 +04:00
|
|
|
/* * C type for Fortran COMPLEX*16 */
|
|
|
|
typedef struct {
|
|
|
|
ompi_fortran_real8_t real;
|
|
|
|
ompi_fortran_real8_t imag;
|
|
|
|
} ompi_fortran_complex16_t;
|
|
|
|
#endif
|
|
|
|
|
2005-05-20 03:56:02 +04:00
|
|
|
#if OMPI_HAVE_FORTRAN_REAL16 && OMPI_HAVE_FORTRAN_COMPLEX32
|
A bunch of changes to support MPI_INTEGER*x, MPI_REAL*x,
MPI_COMPLEX*x, and some optional C datatypes in MPI reduction
operations. These types are not technically supported by the letter
of the MPI standard, but are implied by the spirit of it (and there
are definitely users that use them in real applications)
- Add checks in configure for back-end C types for MPI_INTEGER*x and
MPI_REAL*x
- Create C data structs for MPI_COMPLEX*x
- Fixed typo for MPI_INTEGER8 in mpi.h
- Updated configure macros to create MPI_FORTRAN_INTEGER* defines, as
opposed to MPI_FORTRAN_INT, which was causing [me] lots of confusion
(between C "*_INT" names and Fortran "*_INT" names). This caused
some trivial updates in ddt, ompi_info, and the MPI layer to match.
- Update ompi_info to show whether we have each MPI_INTEGER*x,
MPI_REAL*x, and MPI_COMPLEX*x
- Extended reduction operations for optional datatypes:
- "C integer" now includes long long int, long long, and unsigned
long long
- "Fortran integer" now includes MPI_INTEGER*x
- "Floating point" now includes MPI_REAL*x
- "Complex" now includes MPI_COMPLEX*x
This commit was SVN r5511.
2005-04-27 14:23:06 +04:00
|
|
|
/* * C type for Fortran COMPLEX*32 */
|
|
|
|
typedef struct {
|
|
|
|
ompi_fortran_real16_t real;
|
|
|
|
ompi_fortran_real16_t imag;
|
|
|
|
} ompi_fortran_complex32_t;
|
|
|
|
#endif
|
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.
2005-04-19 07:51:20 +04:00
|
|
|
|
2005-05-20 03:56:02 +04:00
|
|
|
#if OMPI_HAVE_FORTRAN_DOUBLE_PRECISION
|
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.
2005-04-19 07:51:20 +04:00
|
|
|
/* * C type for Fortran DOUBLE COMPLEX */
|
|
|
|
typedef struct {
|
2005-05-20 03:56:02 +04:00
|
|
|
ompi_fortran_double_precision_t real;
|
|
|
|
ompi_fortran_double_precision_t imag;
|
|
|
|
} ompi_fortran_double_complex_t;
|
|
|
|
#endif
|
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.
2005-04-19 07:51:20 +04:00
|
|
|
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
*
|
|
|
|
* Windows library interface declaration code
|
|
|
|
*
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
|
|
#if defined(WIN32)
|
2005-04-19 20:01:42 +04:00
|
|
|
# if OMPI_BUILDING
|
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.
2005-04-19 07:51:20 +04:00
|
|
|
# include "win32/win_compat.h"
|
2005-04-20 05:30:06 +04:00
|
|
|
# endif
|
|
|
|
# if OMPI_BUILDING_WIN_DSO
|
|
|
|
/* building a component - need to import libmpi and export our
|
|
|
|
struct */
|
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.
2005-04-19 07:51:20 +04:00
|
|
|
# define OMPI_COMP_EXPORT __declspec(dllexport)
|
2005-04-20 05:30:06 +04:00
|
|
|
# define OMPI_DECLSPEC __declspec(dllimport)
|
|
|
|
# elif OMPI_BUILDING
|
|
|
|
/* building libmpi (or something in libmpi) - need to export libmpi
|
|
|
|
interface */
|
|
|
|
# define OMPI_COMP_EXPORT
|
2005-04-19 20:01:42 +04:00
|
|
|
# define OMPI_DECLSPEC __declspec(dllexport)
|
|
|
|
# else
|
2005-04-20 05:30:06 +04:00
|
|
|
/* building something using libmpi - export the libmpi interface */
|
2005-04-19 20:01:42 +04:00
|
|
|
# define OMPI_COMP_EXPORT
|
|
|
|
# define OMPI_DECLSPEC __declspec(dllimport)
|
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.
2005-04-19 07:51:20 +04:00
|
|
|
# endif
|
|
|
|
#else
|
2005-04-20 05:30:06 +04:00
|
|
|
/* On Unix - get rid of the defines */
|
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.
2005-04-19 07:51:20 +04:00
|
|
|
# define OMPI_COMP_EXPORT
|
|
|
|
# define OMPI_DECLSPEC
|
2004-10-22 20:06:05 +04:00
|
|
|
#endif
|
|
|
|
|
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.
2005-04-19 07:51:20 +04:00
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
*
|
|
|
|
* 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
|
|
|
|
*
|
|
|
|
**********************************************************************/
|
2005-04-19 20:01:42 +04:00
|
|
|
#if OMPI_BUILDING
|
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.
2005-04-19 07:51:20 +04:00
|
|
|
|
2004-10-22 20:06:05 +04:00
|
|
|
/*
|
2004-10-23 00:30:59 +04:00
|
|
|
* 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.
|
2004-01-14 10:06:57 +03:00
|
|
|
*/
|
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.
2005-04-19 07:51:20 +04:00
|
|
|
#if !defined(__cplusplus)
|
2004-10-23 00:30:59 +04:00
|
|
|
# if OMPI_NEED_C_BOOL
|
|
|
|
# if OMPI_USE_STDBOOL_H
|
|
|
|
/* If we're using <stdbool.h>, there is an implicit
|
|
|
|
assumption that the C++ bool is the same size and has
|
|
|
|
the same alignment. */
|
|
|
|
# include <stdbool.h>
|
|
|
|
# elif defined(WIN32)
|
|
|
|
# define bool BOOL
|
|
|
|
# define false FALSE
|
|
|
|
# define true TRUE
|
|
|
|
# else
|
|
|
|
/* We need to create a bool type and ensure that it's the
|
|
|
|
same size / alignment as the C++ bool size /
|
|
|
|
alignment */
|
|
|
|
# define false 0
|
|
|
|
# define true 1
|
|
|
|
# if SIZEOF_BOOL == SIZEOF_CHAR && OMPI_ALIGNMENT_CXX_BOOL == OMPI_ALIGNMENT_CHAR
|
2004-11-24 13:48:31 +03:00
|
|
|
typedef char bool;
|
2004-10-23 00:30:59 +04:00
|
|
|
# elif SIZEOF_BOOL == SIZEOF_SHORT && OMPI_ALIGNMENT_CXX_BOOL == OMPI_ALIGNMENT_SHORT
|
2004-11-24 13:48:31 +03:00
|
|
|
typedef short bool;
|
2004-10-23 00:30:59 +04:00
|
|
|
# elif SIZEOF_BOOL == SIZEOF_INT && OMPI_ALIGNMENT_CXX_BOOL == OMPI_ALIGNMENT_INT
|
2004-11-24 13:48:31 +03:00
|
|
|
typedef int bool;
|
2004-10-23 00:30:59 +04:00
|
|
|
# elif SIZEOF_BOOL == SIZEOF_LONG && OMPI_ALIGNMENT_CXX_BOOL == OMPI_ALIGNMENT_LONG
|
2004-11-24 13:48:31 +03:00
|
|
|
typedef long bool;
|
2004-10-23 00:30:59 +04:00
|
|
|
# elif defined(SIZEOF_LONG_LONG) && defined(OMPI_ALIGNMENT_LONG) && SIZEOF_BOOL == SIZEOF_LONG && OMPI_ALIGNMENT_CXX_BOOL == OMPI_ALIGNMENT_LONG
|
2004-11-24 13:48:31 +03:00
|
|
|
typedef long long bool;
|
2004-10-23 00:30:59 +04:00
|
|
|
# else
|
|
|
|
# error Cannot find a C type that corresponds to the size and alignment of C++ bool!
|
|
|
|
# endif
|
|
|
|
# endif
|
|
|
|
# endif
|
2004-01-07 22:33:37 +03:00
|
|
|
#endif
|
2004-01-09 21:40:26 +03:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Maximum size of a filename path.
|
|
|
|
*/
|
2004-01-14 10:06:57 +03:00
|
|
|
#include <limits.h>
|
2004-01-09 21:40:26 +03:00
|
|
|
#if defined(PATH_MAX)
|
2004-06-07 19:33:53 +04:00
|
|
|
#define OMPI_PATH_MAX (PATH_MAX + 1)
|
2004-01-09 21:40:26 +03:00
|
|
|
#elif defined(_POSIX_PATH_MAX)
|
2004-06-07 19:33:53 +04:00
|
|
|
#define OMPI_PATH_MAX (_POSIX_PATH_MAX + 1)
|
2004-01-09 21:40:26 +03:00
|
|
|
#else
|
2004-06-07 19:33:53 +04:00
|
|
|
#define OMPI_PATH_MAX 256
|
2004-01-09 21:40:26 +03:00
|
|
|
#endif
|
2004-01-14 10:06:57 +03:00
|
|
|
|
2004-01-17 07:10:01 +03:00
|
|
|
/*
|
|
|
|
* Do we have <stdint.h>?
|
|
|
|
*/
|
2004-08-16 03:54:30 +04:00
|
|
|
#ifdef HAVE_STDINT_H
|
2004-10-18 20:08:35 +04:00
|
|
|
#if defined(__cplusplus) && !defined(__STDC_LIMIT_MACROS)
|
|
|
|
/* When using a C++ compiler, the max / min value #defines for std
|
|
|
|
types are only included if __STDC_LIMIT_MACROS is set before
|
|
|
|
including stdint.h */
|
|
|
|
#define __STDC_LIMIT_MACROS
|
|
|
|
#endif
|
2004-01-17 07:10:01 +03:00
|
|
|
#include <stdint.h>
|
2004-03-17 22:21:56 +03:00
|
|
|
#else
|
2004-06-07 19:33:53 +04:00
|
|
|
#include "ompi_stdint.h"
|
2004-01-17 07:10:01 +03:00
|
|
|
#endif
|
2004-02-10 03:07:09 +03:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Do we want memory debugging?
|
2004-07-14 19:13:32 +04:00
|
|
|
*
|
|
|
|
* A few scenarios:
|
|
|
|
*
|
|
|
|
* 1. In the OMPI C library: we want these defines in all cases
|
|
|
|
* 2. In the OMPI C++ bindings: we do not want them
|
|
|
|
* 3. In the OMPI C++ executables: we do want them
|
|
|
|
*
|
|
|
|
* 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
|
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.
2005-04-19 07:51:20 +04:00
|
|
|
* setting OMPI_BUILDING to 0 For 3, it's the same as 1 -- just include
|
2004-07-14 19:13:32 +04:00
|
|
|
* <ompi_config.h> first.
|
2004-02-10 03:07:09 +03:00
|
|
|
*/
|
2005-04-19 20:01:42 +04:00
|
|
|
#if OMPI_ENABLE_MEM_DEBUG
|
2004-02-10 03:07:09 +03:00
|
|
|
|
2004-06-15 23:07:45 +04:00
|
|
|
/* It is safe to include util/malloc.h here because a) it will only
|
2004-06-07 19:33:53 +04:00
|
|
|
happen when we are building OMPI and therefore have a full OMPI
|
2004-02-10 03:07:09 +03:00
|
|
|
source tree [including headers] available, and b) we guaranteed to
|
2004-11-27 01:13:52 +03:00
|
|
|
*not* to include anything else via util/malloc.h, so we won't
|
2004-02-10 03:07:09 +03:00
|
|
|
have Cascading Includes Of Death. */
|
2004-11-27 15:43:19 +03:00
|
|
|
# include "util/malloc.h"
|
|
|
|
# if defined(malloc)
|
|
|
|
# undef malloc
|
|
|
|
# endif
|
|
|
|
# define malloc(size) ompi_malloc((size), __FILE__, __LINE__)
|
|
|
|
# if defined(calloc)
|
|
|
|
# undef calloc
|
|
|
|
# endif
|
|
|
|
# define calloc(nmembers, size) ompi_calloc((nmembers), (size), __FILE__, __LINE__)
|
|
|
|
# if defined(realloc)
|
|
|
|
# undef realloc
|
|
|
|
# endif
|
|
|
|
# define realloc(ptr, size) ompi_realloc((ptr), (size), __FILE__, __LINE__)
|
|
|
|
# if defined(free)
|
|
|
|
# undef free
|
|
|
|
# endif
|
|
|
|
# define free(ptr) ompi_free((ptr), __FILE__, __LINE__)
|
|
|
|
|
|
|
|
/*
|
|
|
|
* If we're mem debugging, make the OMPI_DEBUG_ZERO resolve to memset
|
|
|
|
*/
|
|
|
|
# include <string.h>
|
2005-03-22 03:31:17 +03:00
|
|
|
# define OMPI_DEBUG_ZERO(obj) memset(&(obj), 0, sizeof(obj))
|
2004-11-27 15:43:19 +03:00
|
|
|
#else
|
|
|
|
# define OMPI_DEBUG_ZERO(obj)
|
2004-02-10 03:07:09 +03:00
|
|
|
#endif
|
2004-02-13 08:39:46 +03:00
|
|
|
|
|
|
|
|
2005-03-29 06:48:50 +04:00
|
|
|
|
2004-08-11 02:41:17 +04:00
|
|
|
/*
|
2005-03-29 06:48:50 +04:00
|
|
|
* printf functions for portability (only when building Open MPI)
|
2004-08-11 02:41:17 +04:00
|
|
|
*/
|
2004-08-19 23:27:15 +04:00
|
|
|
#if !defined(HAVE_VASPRINTF) || !defined(HAVE_VSNPRINTF)
|
|
|
|
#include <stdarg.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#endif
|
|
|
|
|
2005-02-16 18:38:37 +03:00
|
|
|
#if !defined(HAVE_ASPRINTF) || !defined(HAVE_SNPRINTF) || !defined(HAVE_VASPRINTF) || !defined(HAVE_VSNPRINTF)
|
|
|
|
#include "util/printf.h"
|
|
|
|
#endif
|
|
|
|
|
2004-08-11 02:41:17 +04:00
|
|
|
#ifndef HAVE_ASPRINTF
|
|
|
|
# define asprintf ompi_asprintf
|
|
|
|
#endif
|
2004-08-19 23:27:15 +04:00
|
|
|
|
2004-08-11 02:41:17 +04:00
|
|
|
#ifndef HAVE_SNPRINTF
|
|
|
|
# define snprintf ompi_snprintf
|
|
|
|
#endif
|
2004-08-19 23:27:15 +04:00
|
|
|
|
2004-08-11 02:41:17 +04:00
|
|
|
#ifndef HAVE_VASPRINTF
|
|
|
|
# define vasprintf ompi_vasprintf
|
|
|
|
#endif
|
2004-08-19 23:27:15 +04:00
|
|
|
|
2004-08-11 02:41:17 +04:00
|
|
|
#ifndef HAVE_VSNPRINTF
|
|
|
|
# define vsnprintf ompi_vsnprintf
|
|
|
|
#endif
|
2005-03-29 06:48:50 +04:00
|
|
|
|
2005-03-29 00:25:39 +04:00
|
|
|
/*
|
|
|
|
* Define __func__-preprocessor directive if the compiler does not
|
|
|
|
* already define it. Define it to __FILE__ so that we at least have
|
|
|
|
* a clue where the developer is trying to indicate where the error is
|
|
|
|
* coming from (assuming that __func__ is typically used for
|
|
|
|
* printf-style debugging).
|
|
|
|
*/
|
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.
2005-04-19 07:51:20 +04:00
|
|
|
#if defined(HAVE_DECL___FUNC__) && !HAVE_DECL___FUNC__
|
2004-10-29 23:14:11 +04:00
|
|
|
#define __func__ __FILE__
|
|
|
|
#endif
|
|
|
|
|
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.
2005-04-19 07:51:20 +04:00
|
|
|
#endif /* OMPI_BUILDING */
|