Warning: That file was not part of the compilation database. It may have many parsing errors.

1/*
2 * Header file with preprocessor magic to figure out, which compiler the user has been calling!
3 *
4 * This code is adapted from the file other/portable_platform.h of GASnet-1.14.0:
5 * - Ripping out the required parts.
6 * - Get rid of brackets as it messes up autoconf
7 * - Delete version tests for older PGI versions (#include "omp.h" not acceptabe)
8 * - Indent ('#' should be in column 0)
9 *
10 * External packages (i.e., romio) depend on top_build_dir/ompi/include, therefore
11 * although this is not changed in the configure process, this has to be set as
12 * a .in file...
13 * ---------------------------------------------------------------------------
14 */
15#ifndef OPAL_PORTABLE_PLATFORM_H
16#define OPAL_PORTABLE_PLATFORM_H
17
18/* All files in this directory and all sub-directories (except where otherwise noted)
19 * are subject to the following licensing terms:
20 *
21 * ---------------------------------------------------------------------------
22 * "Copyright (c) 2000-2003 The Regents of the University of California.
23 * All rights reserved.
24 *
25 * Permission to use, copy, modify, and distribute this software and its
26 * documentation for any purpose, without fee, and without written agreement is
27 * hereby granted, provided that the above copyright notice and the following
28 * two paragraphs appear in all copies of this software.
29 *
30 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
31 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
32 * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
33 * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 *
35 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
36 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
37 * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
38 * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
39 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
40 * ---------------------------------------------------------------------------
41 *
42 * Please see the license.txt files within the gm-conduit, lapi-conduit and
43 * vapi-conduit directories for the licensing terms governing those
44 * contributed components.
45 *
46 * The authors/contributors of GASNet include:
47 *
48 * Dan Bonachea <bonachea@cs.berkeley.edu>:
49 * General infrastructure & documentation
50 * mpi-conduit
51 * elan-conduit
52 * smp-conduit
53 * udp-conduit
54 * extended-ref
55 * template-conduit
56 * Christian Bell <csbell@cs.berkeley.edu>: gm-conduit, shmem-conduit
57 * Mike Welcome <mlwelcome@lbl.gov>: lapi-conduit, portals-conduit
58 * Paul H. Hargrove <phhargrove@lbl.gov>: vapi-conduit, ibv-conduit
59 * Rajesh Nishtala <rajeshn@cs.berkeley.edu>: collectives, dcmf-conduit
60 * Parry Husbands (PJRHusbands@lbl.gov): lapi-conduit
61 *
62 * For more information about GASNet, visit our home page at:
63 * http://gasnet.cs.berkeley.edu/
64 * Or send email to:
65 * <upc@lbl.gov>
66 *
67 * Source code contributions (fixes, patches, extensions etc.) should be
68 * sent to <upc@lbl.gov> to be reviewed for acceptance into the primary
69 * distribution. Contributions are most likely to be accepted if they
70 * are provided as public domain, or under a BSD-style license such as
71 * the one above.
72 *
73 */
74#ifndef _STRINGIFY
75#define _STRINGIFY_HELPER(x) #x
76#define _STRINGIFY(x) _STRINGIFY_HELPER(x)
77#endif
78
79#if defined(__INTEL_COMPILER)
80# define PLATFORM_COMPILER_FAMILYNAME INTEL
81# define PLATFORM_COMPILER_FAMILYID 2
82# ifdef __cplusplus
83# define PLATFORM_COMPILER_INTEL_CXX 1
84# else
85# define PLATFORM_COMPILER_INTEL_C 1
86# endif
87# define _PLATFORM_COMPILER_INTEL_MIN_BUILDDATE 19700000 /* year 1970: predates most intel products :) */
88# ifdef __INTEL_COMPILER_BUILD_DATE
89# define _PLATFORM_INTEL_COMPILER_BUILD_DATE __INTEL_COMPILER_BUILD_DATE
90# else
91# define _PLATFORM_INTEL_COMPILER_BUILD_DATE _PLATFORM_COMPILER_INTEL_MIN_BUILDDATE
92# endif
93 /* patch number is a decimal build date: YYYYMMDD */
94# define PLATFORM_COMPILER_VERSION_INT(maj,min,pat) \
95 (((((maj) * 10) | (min)) << 20) | \
96 ((pat) < _PLATFORM_COMPILER_INTEL_MIN_BUILDDATE ? \
97 _PLATFORM_COMPILER_INTEL_MIN_BUILDDATE : ((pat)-_PLATFORM_COMPILER_INTEL_MIN_BUILDDATE)))
98# define PLATFORM_COMPILER_VERSION \
99 PLATFORM_COMPILER_VERSION_INT(__INTEL_COMPILER/10, __INTEL_COMPILER/100, _PLATFORM_INTEL_COMPILER_BUILD_DATE)
100# define PLATFORM_COMPILER_VERSION_STR \
101 _STRINGIFY(__INTEL_COMPILER) "." _STRINGIFY(_PLATFORM_INTEL_COMPILER_BUILD_DATE)
102
103#elif defined(__PATHSCALE__)
104# define PLATFORM_COMPILER_PATHSCALE 1
105# define PLATFORM_COMPILER_FAMILYNAME PATHSCALE
106# define PLATFORM_COMPILER_FAMILYID 3
107# ifdef __cplusplus
108# define PLATFORM_COMPILER_PATHSCALE_CXX 1
109# else
110# define PLATFORM_COMPILER_PATHSCALE_C 1
111# endif
112# define PLATFORM_COMPILER_VERSION \
113 PLATFORM_COMPILER_VERSION_INT(__PATHCC__,__PATHCC_MINOR__,__PATHCC_PATCHLEVEL__)
114# define PLATFORM_COMPILER_VERSION_STR __PATHSCALE__
115
116#elif defined(__PGI)
117# define PLATFORM_COMPILER_PGI 1
118# define PLATFORM_COMPILER_FAMILYNAME PGI
119# define PLATFORM_COMPILER_FAMILYID 4
120# ifdef __cplusplus
121# define PLATFORM_COMPILER_PGI_CXX 1
122# else
123# define PLATFORM_COMPILER_PGI_C 1
124# endif
125# if __PGIC__ == 99
126 /* bug 2230: PGI versioning was broken for some platforms in 7.0
127 no way to know exact version, but provide something slightly more accurate */
128# define PLATFORM_COMPILER_VERSION 0x070000
129# define PLATFORM_COMPILER_VERSION_STR "7.?-?"
130# elif defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__)
131# define PLATFORM_COMPILER_VERSION \
132 PLATFORM_COMPILER_VERSION_INT(__PGIC__,__PGIC_MINOR__,__PGIC_PATCHLEVEL__)
133# define PLATFORM_COMPILER_VERSION_STR \
134 _STRINGIFY(__PGIC__) "." _STRINGIFY(__PGIC_MINOR__) "-" _STRINGIFY(__PGIC_PATCHLEVEL__)
135# else
136 /* PGI before 6.1-4 lacks any version ID preprocessor macros - so use this filthy hack */
137 /* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
138 * We cannot do these within mpi.h.in, as we should not include ompi.h
139 * Hopefully, compilers with integrated preprocessors will not analyse code within the #if 0-block
140 * XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
141 */
142#if 0
143# ifdef PLATFORM_PGI_IS_ANCIENT
144 /* Include below might fail for ancient versions lacking this header, but testing shows it
145 works back to at least 5.1-3 (Nov 2003), and based on docs probably back to 3.2 (Sep 2000) */
146# define PLATFORM_COMPILER_VERSION 0
147# elif defined(__x86_64__) /* bug 1753 - 64-bit omp.h upgrade happenned in <6.0-8,6.1-1) */
148# include "omp.h"
149# if defined(_PGOMP_H)
150 /* 6.1.1 or newer */
151# define PLATFORM_COMPILER_VERSION 0x060101
152# define PLATFORM_COMPILER_VERSION_STR ">=6.1-1"
153# else
154 /* 6.0.8 or older */
155# define PLATFORM_COMPILER_VERSION 0
156# define PLATFORM_COMPILER_VERSION_STR "<=6.0-8"
157# endif
158# else /* 32-bit omp.h upgrade happenned in <5.2-4,6.0-8 */
159# include "omp.h"
160# if defined(_PGOMP_H)
161 /* 6.0-8 or newer */
162# define PLATFORM_COMPILER_VERSION 0x060008
163# define PLATFORM_COMPILER_VERSION_STR ">=6.0-8"
164# else
165 /* 5.2-4 or older */
166# define PLATFORM_COMPILER_VERSION 0
167# define PLATFORM_COMPILER_VERSION_STR "<=5.2-4"
168# endif
169# endif
170#endif /* 0 */
171 /* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX */
172# endif
173
174#elif defined(__xlC__)
175# define PLATFORM_COMPILER_XLC 1
176# define PLATFORM_COMPILER_FAMILYNAME XLC
177# define PLATFORM_COMPILER_FAMILYID 5
178# ifdef __cplusplus
179# define PLATFORM_COMPILER_XLC_CXX 1
180# else
181# define PLATFORM_COMPILER_XLC_C 1
182# endif
183# define PLATFORM_COMPILER_VERSION __xlC__
184# define PLATFORM_COMPILER_VERSION_INT(maj,min,pat) \
185 ( ((maj) << 8) | ((min) << 4) | (pat) )
186
187#elif defined(__DECC) || defined(__DECCXX)
188# define PLATFORM_COMPILER_COMPAQ 1
189# define PLATFORM_COMPILER_FAMILYNAME COMPAQ
190# define PLATFORM_COMPILER_FAMILYID 6
191# ifdef __cplusplus
192# define PLATFORM_COMPILER_COMPAQ_CXX 1
193# else
194# define PLATFORM_COMPILER_COMPAQ_C 1
195# endif
196# if defined(__DECC_VER)
197# define PLATFORM_COMPILER_VERSION __DECC_VER
198# elif defined(__DECCXX_VER)
199# define PLATFORM_COMPILER_VERSION __DECCXX_VER
200# endif
201
202# define PLATFORM_COMPILER_VERSION_INT(maj,min,pat) \
203 ( ((maj) * 10000000) + ((min) * 100000) + (90000) + (pat) )
204 /* 90000 = official ver, 80000 = customer special ver, 60000 = field test ver */
205
206#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
207# define PLATFORM_COMPILER_SUN 1
208# define PLATFORM_COMPILER_FAMILYNAME SUN
209# define PLATFORM_COMPILER_FAMILYID 7
210# ifdef __cplusplus
211# define PLATFORM_COMPILER_SUN_CXX 1
212# else
213# define PLATFORM_COMPILER_SUN_C 1
214# endif
215# if defined(__SUNPRO_C) && __SUNPRO_C > 0
216# define PLATFORM_COMPILER_VERSION __SUNPRO_C
217# elif defined(__SUNPRO_CC) && __SUNPRO_CC > 0
218# define PLATFORM_COMPILER_VERSION __SUNPRO_CC
219# endif
220# define PLATFORM_COMPILER_VERSION_INT(maj,min,pat) \
221 ( ((maj) << 8) | ((min) << 4) | (pat) )
222
223#elif defined(__HP_cc) || defined(__HP_aCC)
224# define PLATFORM_COMPILER_HP 1
225# define PLATFORM_COMPILER_FAMILYNAME HP
226# define PLATFORM_COMPILER_FAMILYID 8
227# ifdef __cplusplus
228# define PLATFORM_COMPILER_HP_CXX 1
229# else
230# define PLATFORM_COMPILER_HP_C 1
231# endif
232# if defined(__HP_cc) && __HP_cc > 0
233# define PLATFORM_COMPILER_VERSION __HP_cc
234# elif defined(__HP_aCC) && __HP_aCC > 0
235# define PLATFORM_COMPILER_VERSION __HP_aCC
236# endif
237# define PLATFORM_COMPILER_VERSION_INT(maj,min,pat) \
238 ( ((maj) << 16) | ((min) << 8) | (pat) )
239
240#elif defined(_SGI_COMPILER_VERSION) || \
241 (defined(_COMPILER_VERSION) && defined(__sgi) && !defined(__GNUC__)) /* 7.3.0 and earlier lack _SGI_COMPILER_VERSION */
242# define PLATFORM_COMPILER_SGI 1
243# define PLATFORM_COMPILER_FAMILYNAME SGI
244# define PLATFORM_COMPILER_FAMILYID 9
245# ifdef __cplusplus
246# define PLATFORM_COMPILER_SGI_CXX 1
247# else
248# define PLATFORM_COMPILER_SGI_C 1
249# endif
250# if defined(_SGI_COMPILER_VERSION) && _SGI_COMPILER_VERSION > 0
251# define PLATFORM_COMPILER_VERSION _SGI_COMPILER_VERSION
252# elif defined(_COMPILER_VERSION) && _COMPILER_VERSION > 0
253# define PLATFORM_COMPILER_VERSION _COMPILER_VERSION
254# endif
255# define PLATFORM_COMPILER_VERSION_INT(maj,min,pat) \
256 ( ((maj) << 8) | ((min) << 4) | (pat) )
257
258#elif defined(_CRAYC)
259# define PLATFORM_COMPILER_CRAY 1
260# define PLATFORM_COMPILER_FAMILYNAME CRAY
261# define PLATFORM_COMPILER_FAMILYID 10
262# ifdef __cplusplus
263# define PLATFORM_COMPILER_CRAY_CXX 1
264# else
265# define PLATFORM_COMPILER_CRAY_C 1
266# endif
267# if defined(_RELEASE) && defined(_RELEASE_MINOR) /* X1 and XT */
268# define PLATFORM_COMPILER_VERSION \
269 PLATFORM_COMPILER_VERSION_INT(_RELEASE,_RELEASE_MINOR,0)
270# elif defined(_RELEASE) /* T3E */
271# define PLATFORM_COMPILER_VERSION \
272 PLATFORM_COMPILER_VERSION_INT(_RELEASE,0,0)
273# endif
274# ifdef _RELEASE_STRING /* X1 and XT */
275# define PLATFORM_COMPILER_VERSION_STR _RELEASE_STRING
276# endif
277
278#elif defined(__KCC)
279# define PLATFORM_COMPILER_KAI 1
280# define PLATFORM_COMPILER_FAMILYNAME KAI
281# define PLATFORM_COMPILER_FAMILYID 11
282# ifdef __cplusplus
283# define PLATFORM_COMPILER_KAI_CXX 1
284# else
285# define PLATFORM_COMPILER_KAI_C 1
286# endif
287
288#elif defined(__MTA__)
289# define PLATFORM_COMPILER_MTA 1
290# define PLATFORM_COMPILER_FAMILYNAME MTA
291# define PLATFORM_COMPILER_FAMILYID 12
292# ifdef __cplusplus
293# define PLATFORM_COMPILER_MTA_CXX 1
294# else
295# define PLATFORM_COMPILER_MTA_C 1
296# endif
297
298#elif defined(_SX)
299# define PLATFORM_COMPILER_NECSX 1
300# define PLATFORM_COMPILER_FAMILYNAME NECSX
301# define PLATFORM_COMPILER_FAMILYID 13
302# ifdef __cplusplus
303# define PLATFORM_COMPILER_NECSX_CXX 1
304# else
305# define PLATFORM_COMPILER_NECSX_C 1
306# endif
307
308#elif defined(_MSC_VER)
309# define PLATFORM_COMPILER_MICROSOFT 1
310# define PLATFORM_COMPILER_FAMILYNAME MICROSOFT
311# define PLATFORM_COMPILER_FAMILYID 14
312# ifdef __cplusplus
313# define PLATFORM_COMPILER_MICROSOFT_CXX 1
314# else
315# define PLATFORM_COMPILER_MICROSOFT_C 1
316# endif
317# define PLATFORM_COMPILER_VERSION _MSC_VER
318
319#elif defined(__TINYC__)
320# define PLATFORM_COMPILER_TINY 1
321# define PLATFORM_COMPILER_FAMILYNAME TINY
322# define PLATFORM_COMPILER_FAMILYID 15
323# ifdef __cplusplus
324# define PLATFORM_COMPILER_TINY_CXX 1
325# else
326# define PLATFORM_COMPILER_TINY_C 1
327# endif
328
329#elif defined(__LCC__)
330# define PLATFORM_COMPILER_LCC 1
331# define PLATFORM_COMPILER_FAMILYNAME LCC
332# define PLATFORM_COMPILER_FAMILYID 16
333# ifdef __cplusplus
334# define PLATFORM_COMPILER_LCC_CXX 1
335# else
336# define PLATFORM_COMPILER_LCC_C 1
337# endif
338
339#else /* unknown compiler */
340# define PLATFORM_COMPILER_UNKNOWN 1
341#endif
342
343/* this stanza comes last, because many vendor compilers lie and claim
344 to be GNU C for compatibility reasons and/or because they share a frontend */
345#if defined(__GNUC__)
346# undef PLATFORM_COMPILER_UNKNOWN
347# ifndef PLATFORM_COMPILER_FAMILYID
348# define PLATFORM_COMPILER_GNU 1
349# define PLATFORM_COMPILER_FAMILYNAME GNU
350# define PLATFORM_COMPILER_FAMILYID 1
351# ifdef __cplusplus
352# define PLATFORM_COMPILER_GNU_CXX 1
353# else
354# define PLATFORM_COMPILER_GNU_C 1
355# endif
356# if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__)
357# define PLATFORM_COMPILER_VERSION \
358 PLATFORM_COMPILER_VERSION_INT(__GNUC__,__GNUC_MINOR__,__GNUC_PATCHLEVEL__)
359# elif defined(__GNUC_MINOR__) /* older versions of egcs lack __GNUC_PATCHLEVEL__ */
360# define PLATFORM_COMPILER_VERSION \
361 PLATFORM_COMPILER_VERSION_INT(__GNUC__,__GNUC_MINOR__,0)
362# else
363# define PLATFORM_COMPILER_VERSION \
364 PLATFORM_COMPILER_VERSION_INT(__GNUC__,0,0)
365# endif
366# define PLATFORM_COMPILER_VERSION_STR __PLATFORM_COMPILER_GNU_VERSION_STR
367# else
368# define _PLATFORM_COMPILER_GNU_VERSION_STR __PLATFORM_COMPILER_GNU_VERSION_STR
369# endif
370 /* gather any advertised GNU version number info, even for non-gcc compilers */
371# if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__)
372# define __PLATFORM_COMPILER_GNU_VERSION_STR \
373 _STRINGIFY(__GNUC__) "." _STRINGIFY(__GNUC_MINOR__) "." _STRINGIFY(__GNUC_PATCHLEVEL__)
374# elif defined(__GNUC_MINOR__)
375# define __PLATFORM_COMPILER_GNU_VERSION_STR \
376 _STRINGIFY(__GNUC__) "." _STRINGIFY(__GNUC_MINOR__) ".?"
377# else
378# define __PLATFORM_COMPILER_GNU_VERSION_STR \
379 _STRINGIFY(__GNUC__) ".?.?"
380# endif
381#elif defined(PLATFORM_COMPILER_UNKNOWN) /* unknown compiler */
382# define PLATFORM_COMPILER_FAMILYNAME UNKNOWN
383# define PLATFORM_COMPILER_FAMILYID 0
384#endif
385
386/* Default Values */
387#ifndef PLATFORM_COMPILER_VERSION
388# define PLATFORM_COMPILER_VERSION 0 /* don't know */
389#endif
390
391#ifndef PLATFORM_COMPILER_VERSION_STR
392# define PLATFORM_COMPILER_VERSION_STR _STRINGIFY(PLATFORM_COMPILER_VERSION)
393#endif
394
395#ifndef PLATFORM_COMPILER_VERSION_INT
396# define PLATFORM_COMPILER_VERSION_INT(maj,min,pat) \
397 (((maj) << 16) | ((min) << 8) | (pat))
398#endif
399
400
401#endif /* OPAL_PORTABLE_PLATFORM_H */
402

Warning: That file was not part of the compilation database. It may have many parsing errors.