15 #ifndef OPAL_PORTABLE_PLATFORM_H
16 #define OPAL_PORTABLE_PLATFORM_H
75 #define _STRINGIFY_HELPER(x) #x
76 #define _STRINGIFY(x) _STRINGIFY_HELPER(x)
79 #if defined(__INTEL_COMPILER)
80 # define PLATFORM_COMPILER_FAMILYNAME INTEL
81 # define PLATFORM_COMPILER_FAMILYID 2
83 # define PLATFORM_COMPILER_INTEL_CXX 1
85 # define PLATFORM_COMPILER_INTEL_C 1
87 # define _PLATFORM_COMPILER_INTEL_MIN_BUILDDATE 19700000
88 # ifdef __INTEL_COMPILER_BUILD_DATE
89 # define _PLATFORM_INTEL_COMPILER_BUILD_DATE __INTEL_COMPILER_BUILD_DATE
91 # define _PLATFORM_INTEL_COMPILER_BUILD_DATE _PLATFORM_COMPILER_INTEL_MIN_BUILDDATE
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)
103 #elif defined(__PATHSCALE__)
104 # define PLATFORM_COMPILER_PATHSCALE 1
105 # define PLATFORM_COMPILER_FAMILYNAME PATHSCALE
106 # define PLATFORM_COMPILER_FAMILYID 3
108 # define PLATFORM_COMPILER_PATHSCALE_CXX 1
110 # define PLATFORM_COMPILER_PATHSCALE_C 1
112 # define PLATFORM_COMPILER_VERSION \
113 PLATFORM_COMPILER_VERSION_INT(__PATHCC__,__PATHCC_MINOR__,__PATHCC_PATCHLEVEL__)
114 # define PLATFORM_COMPILER_VERSION_STR __PATHSCALE__
117 # define PLATFORM_COMPILER_PGI 1
118 # define PLATFORM_COMPILER_FAMILYNAME PGI
119 # define PLATFORM_COMPILER_FAMILYID 4
121 # define PLATFORM_COMPILER_PGI_CXX 1
123 # define PLATFORM_COMPILER_PGI_C 1
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__)
143 # ifdef PLATFORM_PGI_IS_ANCIENT
146 # define PLATFORM_COMPILER_VERSION 0
147 # elif defined(__x86_64__)
149 # if defined(_PGOMP_H)
151 # define PLATFORM_COMPILER_VERSION 0x060101
152 # define PLATFORM_COMPILER_VERSION_STR ">=6.1-1"
155 # define PLATFORM_COMPILER_VERSION 0
156 # define PLATFORM_COMPILER_VERSION_STR "<=6.0-8"
160 # if defined(_PGOMP_H)
162 # define PLATFORM_COMPILER_VERSION 0x060008
163 # define PLATFORM_COMPILER_VERSION_STR ">=6.0-8"
166 # define PLATFORM_COMPILER_VERSION 0
167 # define PLATFORM_COMPILER_VERSION_STR "<=5.2-4"
174 #elif defined(__xlC__)
175 # define PLATFORM_COMPILER_XLC 1
176 # define PLATFORM_COMPILER_FAMILYNAME XLC
177 # define PLATFORM_COMPILER_FAMILYID 5
179 # define PLATFORM_COMPILER_XLC_CXX 1
181 # define PLATFORM_COMPILER_XLC_C 1
183 # define PLATFORM_COMPILER_VERSION __xlC__
184 # define PLATFORM_COMPILER_VERSION_INT(maj,min,pat) \
185 ( ((maj) << 8) | ((min) << 4) | (pat) )
187 #elif defined(__DECC) || defined(__DECCXX)
188 # define PLATFORM_COMPILER_COMPAQ 1
189 # define PLATFORM_COMPILER_FAMILYNAME COMPAQ
190 # define PLATFORM_COMPILER_FAMILYID 6
192 # define PLATFORM_COMPILER_COMPAQ_CXX 1
194 # define PLATFORM_COMPILER_COMPAQ_C 1
196 # if defined(__DECC_VER)
197 # define PLATFORM_COMPILER_VERSION __DECC_VER
198 # elif defined(__DECCXX_VER)
199 # define PLATFORM_COMPILER_VERSION __DECCXX_VER
202 # define PLATFORM_COMPILER_VERSION_INT(maj,min,pat) \
203 ( ((maj) * 10000000) + ((min) * 100000) + (90000) + (pat) )
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
211 # define PLATFORM_COMPILER_SUN_CXX 1
213 # define PLATFORM_COMPILER_SUN_C 1
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
220 # define PLATFORM_COMPILER_VERSION_INT(maj,min,pat) \
221 ( ((maj) << 8) | ((min) << 4) | (pat) )
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
228 # define PLATFORM_COMPILER_HP_CXX 1
230 # define PLATFORM_COMPILER_HP_C 1
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
237 # define PLATFORM_COMPILER_VERSION_INT(maj,min,pat) \
238 ( ((maj) << 16) | ((min) << 8) | (pat) )
240 #elif defined(_SGI_COMPILER_VERSION) || \
241 (defined(_COMPILER_VERSION) && defined(__sgi) && !defined(__GNUC__))
242 # define PLATFORM_COMPILER_SGI 1
243 # define PLATFORM_COMPILER_FAMILYNAME SGI
244 # define PLATFORM_COMPILER_FAMILYID 9
246 # define PLATFORM_COMPILER_SGI_CXX 1
248 # define PLATFORM_COMPILER_SGI_C 1
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
255 # define PLATFORM_COMPILER_VERSION_INT(maj,min,pat) \
256 ( ((maj) << 8) | ((min) << 4) | (pat) )
258 #elif defined(_CRAYC)
259 # define PLATFORM_COMPILER_CRAY 1
260 # define PLATFORM_COMPILER_FAMILYNAME CRAY
261 # define PLATFORM_COMPILER_FAMILYID 10
263 # define PLATFORM_COMPILER_CRAY_CXX 1
265 # define PLATFORM_COMPILER_CRAY_C 1
267 # if defined(_RELEASE) && defined(_RELEASE_MINOR)
268 # define PLATFORM_COMPILER_VERSION \
269 PLATFORM_COMPILER_VERSION_INT(_RELEASE,_RELEASE_MINOR,0)
270 # elif defined(_RELEASE)
271 # define PLATFORM_COMPILER_VERSION \
272 PLATFORM_COMPILER_VERSION_INT(_RELEASE,0,0)
274 # ifdef _RELEASE_STRING
275 # define PLATFORM_COMPILER_VERSION_STR _RELEASE_STRING
279 # define PLATFORM_COMPILER_KAI 1
280 # define PLATFORM_COMPILER_FAMILYNAME KAI
281 # define PLATFORM_COMPILER_FAMILYID 11
283 # define PLATFORM_COMPILER_KAI_CXX 1
285 # define PLATFORM_COMPILER_KAI_C 1
288 #elif defined(__MTA__)
289 # define PLATFORM_COMPILER_MTA 1
290 # define PLATFORM_COMPILER_FAMILYNAME MTA
291 # define PLATFORM_COMPILER_FAMILYID 12
293 # define PLATFORM_COMPILER_MTA_CXX 1
295 # define PLATFORM_COMPILER_MTA_C 1
299 # define PLATFORM_COMPILER_NECSX 1
300 # define PLATFORM_COMPILER_FAMILYNAME NECSX
301 # define PLATFORM_COMPILER_FAMILYID 13
303 # define PLATFORM_COMPILER_NECSX_CXX 1
305 # define PLATFORM_COMPILER_NECSX_C 1
308 #elif defined(_MSC_VER)
309 # define PLATFORM_COMPILER_MICROSOFT 1
310 # define PLATFORM_COMPILER_FAMILYNAME MICROSOFT
311 # define PLATFORM_COMPILER_FAMILYID 14
313 # define PLATFORM_COMPILER_MICROSOFT_CXX 1
315 # define PLATFORM_COMPILER_MICROSOFT_C 1
317 # define PLATFORM_COMPILER_VERSION _MSC_VER
319 #elif defined(__TINYC__)
320 # define PLATFORM_COMPILER_TINY 1
321 # define PLATFORM_COMPILER_FAMILYNAME TINY
322 # define PLATFORM_COMPILER_FAMILYID 15
324 # define PLATFORM_COMPILER_TINY_CXX 1
326 # define PLATFORM_COMPILER_TINY_C 1
329 #elif defined(__LCC__)
330 # define PLATFORM_COMPILER_LCC 1
331 # define PLATFORM_COMPILER_FAMILYNAME LCC
332 # define PLATFORM_COMPILER_FAMILYID 16
334 # define PLATFORM_COMPILER_LCC_CXX 1
336 # define PLATFORM_COMPILER_LCC_C 1
340 # define PLATFORM_COMPILER_UNKNOWN 1
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
352 # define PLATFORM_COMPILER_GNU_CXX 1
354 # define PLATFORM_COMPILER_GNU_C 1
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__)
360 # define PLATFORM_COMPILER_VERSION \
361 PLATFORM_COMPILER_VERSION_INT(__GNUC__,__GNUC_MINOR__,0)
363 # define PLATFORM_COMPILER_VERSION \
364 PLATFORM_COMPILER_VERSION_INT(__GNUC__,0,0)
366 # define PLATFORM_COMPILER_VERSION_STR __PLATFORM_COMPILER_GNU_VERSION_STR
368 # define _PLATFORM_COMPILER_GNU_VERSION_STR __PLATFORM_COMPILER_GNU_VERSION_STR
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__)".?"
378 # define __PLATFORM_COMPILER_GNU_VERSION_STR \
379 _STRINGIFY(__GNUC__)".?.?"
381 #elif defined(PLATFORM_COMPILER_UNKNOWN)
382 # define PLATFORM_COMPILER_FAMILYNAME UNKNOWN
383 # define PLATFORM_COMPILER_FAMILYID 0
387 #ifndef PLATFORM_COMPILER_VERSION
388 # define PLATFORM_COMPILER_VERSION 0
391 #ifndef PLATFORM_COMPILER_VERSION_STR
392 # define PLATFORM_COMPILER_VERSION_STR _STRINGIFY(PLATFORM_COMPILER_VERSION)
395 #ifndef PLATFORM_COMPILER_VERSION_INT
396 # define PLATFORM_COMPILER_VERSION_INT(maj,min,pat) \
397 (((maj) << 16) | ((min) << 8) | (pat))