28
28
*/
29
29
/* Publish and enforce version number for the public interface to this header */
30
30
/* YOU ARE NOT PERMITTED TO CHANGE THIS SECTION WITHOUT DIRECT APPROVAL FROM DAN BONACHEA */
31
- #if _PORTABLE_PLATFORM_H != PLATFORM_HEADER_VERSION \
32
- || PLATFORM_HEADER_VERSION < 16
31
+ #if !defined(_PORTABLE_PLATFORM_H) || !defined(PLATFORM_HEADER_VERSION) \
32
+ || _PORTABLE_PLATFORM_H != PLATFORM_HEADER_VERSION \
33
+ || PLATFORM_HEADER_VERSION < 22
33
34
#undef PLATFORM_HEADER_VERSION
34
- #define PLATFORM_HEADER_VERSION 16
35
+ #define PLATFORM_HEADER_VERSION 22
35
36
#undef _PORTABLE_PLATFORM_H
36
37
#define _PORTABLE_PLATFORM_H PLATFORM_HEADER_VERSION
37
38
/* End Header versioning handshake */
115
116
#undef PLATFORM_COMPILER_UNKNOWN
116
117
117
118
#undef PLATFORM_OS_FAMILYNAME
119
+ #undef PLATFORM_OS_SUBFAMILYNAME
118
120
#undef PLATFORM_OS_CATAMOUNT
119
- #undef PLATFORM_OS_CNL
120
121
#undef PLATFORM_OS_BGP
121
122
#undef PLATFORM_OS_BGQ
122
- #undef PLATFORM_OS_WSL
123
123
#undef PLATFORM_OS_K42
124
124
#undef PLATFORM_OS_UCLINUX
125
125
#undef PLATFORM_OS_LINUX
126
+ #undef PLATFORM_OS_CNL
127
+ #undef PLATFORM_OS_SUBFAMILY_CNL
128
+ #undef PLATFORM_OS_WSL
129
+ #undef PLATFORM_OS_SUBFAMILY_WSL
126
130
#undef PLATFORM_OS_BLRTS
127
131
#undef PLATFORM_OS_CYGWIN
128
132
#undef PLATFORM_OS_MSWINDOWS
167
171
#undef PLATFORM_ARCH_AARCH64
168
172
#undef PLATFORM_ARCH_TILE
169
173
#undef PLATFORM_ARCH_S390
174
+ #undef PLATFORM_ARCH_RISCV
170
175
#undef PLATFORM_ARCH_UNKNOWN
171
176
172
177
/* prevent known old/broken versions of this header from loading */
291
296
PLATFORM_COMPILER_VERSION_INT (__PATHCC__,__PATHCC_MINOR__,__PATHCC_PATCHLEVEL__+0 )
292
297
#define PLATFORM_COMPILER_VERSION_STR __PATHSCALE__
293
298
294
- #elif defined(__NVCOMPILER) // Must occur prior to PGI and CLANG
299
+ #elif defined(__NVCOMPILER) /* Must occur prior to PGI and CLANG */
295
300
#define PLATFORM_COMPILER_NVHPC 1
296
301
#define PLATFORM_COMPILER_FAMILYNAME NVHPC
297
302
#define PLATFORM_COMPILER_FAMILYID 20
330
335
/* Include below might fail for ancient versions lacking this header, but testing shows it
331
336
works back to at least 5.1-3 (Nov 2003), and based on docs probably back to 3.2 (Sep 2000) */
332
337
#define PLATFORM_COMPILER_VERSION 0
333
- #elif defined(__x86_64__) /* bug 1753 - 64-bit omp.h upgrade happened in <6.0-8,6.1-1] */
338
+ #elif defined(__x86_64__) /* bug 1753 - 64-bit omp.h upgrade happenned in <6.0-8,6.1-1] */
334
339
#include " omp.h"
335
340
#if defined(_PGOMP_H)
336
341
/* 6.1.1 or newer */
341
346
#define PLATFORM_COMPILER_VERSION 0
342
347
#define PLATFORM_COMPILER_VERSION_STR " <=6.0-8"
343
348
#endif
344
- #else /* 32-bit omp.h upgrade happened in <5.2-4,6.0-8] */
349
+ #else /* 32-bit omp.h upgrade happenned in <5.2-4,6.0-8] */
345
350
#include " omp.h"
346
351
#if defined(_PGOMP_H)
347
352
/* 6.0-8 or newer */
590
595
#define PLATFORM_COMPILER_VERSION_STR __clang_version__
591
596
#endif
592
597
593
- // NOTE: PLATFORM_COMPILER_FAMILYID "20" is allocated to NVHPC, appearing earlier
598
+ /* NOTE: PLATFORM_COMPILER_FAMILYID "20" is allocted to NVHPC, appearing earlier */
594
599
595
600
#else /* unknown compiler */
596
601
#define PLATFORM_COMPILER_UNKNOWN 1
750
755
PLATFORM_OS_<family>:
751
756
defined to a positive value if OS belongs to a given family, undef otherwise
752
757
PLATFORM_OS_FAMILYNAME:
753
- unquoted token which provides the compiler family name
758
+ unquoted token which provides the OS family name
759
+
760
+ Some systems also define a subfamily:
761
+ PLATFORM_OS_SUBFAMILY_<subfamily>: positive value or undef
762
+ PLATFORM_OS_SUBFAMILYNAME: unquoted token for subfamily name or undef
754
763
*/
755
764
756
765
#if defined(__LIBCATAMOUNT__) || defined(__QK_USER__)
757
766
#define PLATFORM_OS_CATAMOUNT 1
758
767
#define PLATFORM_OS_FAMILYNAME CATAMOUNT
759
768
760
- #elif defined(__CRAYXT_COMPUTE_LINUX_TARGET)
761
- #define PLATFORM_OS_CNL 1
762
- #define PLATFORM_OS_FAMILYNAME CNL
763
-
764
769
#elif defined(GASNETI_ARCH_BGP) || defined(__bgp__)
765
770
#define PLATFORM_OS_BGP 1
766
771
#define PLATFORM_OS_FAMILYNAME BGP
769
774
#define PLATFORM_OS_BGQ 1
770
775
#define PLATFORM_OS_FAMILYNAME BGQ
771
776
772
- #elif defined(GASNETI_ARCH_WSL)
773
- #define PLATFORM_OS_WSL 1
774
- #define PLATFORM_OS_FAMILYNAME WSL
775
-
776
777
#elif defined(__K42)
777
778
#define PLATFORM_OS_K42 1
778
779
#define PLATFORM_OS_FAMILYNAME K42
784
785
#elif defined(__linux) || defined(__linux__) || defined(__gnu_linux__)
785
786
#define PLATFORM_OS_LINUX 1
786
787
#define PLATFORM_OS_FAMILYNAME LINUX
788
+ #if defined(GASNETI_ARCH_WSL)
789
+ #define PLATFORM_OS_SUBFAMILY_WSL 1
790
+ #define PLATFORM_OS_SUBFAMILYNAME WSL
791
+ #elif defined(__CRAYXT_COMPUTE_LINUX_TARGET)
792
+ /* NOTE: As of 2022-07 this is ONLY defined for the Cray cc/CC wrappers, and not the raw PrgEnv compilers */
793
+ #define PLATFORM_OS_SUBFAMILY_CNL 1
794
+ #define PLATFORM_OS_SUBFAMILYNAME CNL
795
+ #endif
787
796
788
797
#elif defined(__blrts) || defined(__blrts__) || defined(__gnu_blrts__)
789
798
#define PLATFORM_OS_BLRTS 1
1031
1040
#define _PLATFORM_ARCH_32 1
1032
1041
#endif
1033
1042
1043
+ #elif defined(__riscv)
1044
+ #define PLATFORM_ARCH_RISCV 1
1045
+ #define PLATFORM_ARCH_FAMILYNAME RISCV
1046
+ #define _PLATFORM_ARCH_LITTLE_ENDIAN 1
1047
+ #if __riscv_xlen == 32
1048
+ #define _PLATFORM_ARCH_32 1
1049
+ #else /* (__riscv_xlen == 64) || (__riscv_xlen == 128) */
1050
+ #define _PLATFORM_ARCH_64 1
1051
+ #endif
1052
+
1034
1053
#else /* unknown CPU */
1035
1054
#define PLATFORM_ARCH_UNKNOWN 1
1036
1055
#define PLATFORM_ARCH_FAMILYNAME UNKNOWN
@@ -1128,16 +1147,21 @@ int main(void) {
1128
1147
PLATFORM_DISPX (COMPILER_VERSION);
1129
1148
PLATFORM_DISP (COMPILER_VERSION_STR);
1130
1149
PLATFORM_DISP (COMPILER_IDSTR);
1131
- #if PLATFORM_COMPILER_C_LANGLVL
1150
+ #ifdef PLATFORM_COMPILER_C_LANGLVL
1132
1151
PLATFORM_DISPI (COMPILER_C_LANGLVL);
1133
- #elif PLATFORM_COMPILER_CXX_LANGLVL
1152
+ #elif defined( PLATFORM_COMPILER_CXX_LANGLVL)
1134
1153
PLATFORM_DISPI (COMPILER_CXX_LANGLVL);
1135
1154
#else
1136
1155
printf (" WARNING: Missing PLATFORM_COMPILER_C(XX)_LANGLVL!" );
1137
1156
#endif
1138
1157
PLATFORM_DISP (OS_FAMILYNAME);
1158
+ #ifdef PLATFORM_OS_SUBFAMILYNAME
1159
+ { const char * OS_SUBFAMILYNAME = PLATFORM_STRINGIFY (PLATFORM_OS_SUBFAMILYNAME);
1160
+ PLATFORM_DISP (OS_SUBFAMILYNAME);
1161
+ }
1162
+ #endif
1139
1163
PLATFORM_DISP (ARCH_FAMILYNAME);
1140
- #if PLATFORM_ARCH_32
1164
+ #ifdef PLATFORM_ARCH_32
1141
1165
PLATFORM_DISPI (ARCH_32);
1142
1166
assert (sizeof (void *) == 4 );
1143
1167
#else
@@ -1146,7 +1170,7 @@ int main(void) {
1146
1170
#endif
1147
1171
{ int x = 0x00FF ;
1148
1172
unsigned char *p = (unsigned char *)&x;
1149
- #if PLATFORM_ARCH_BIG_ENDIAN
1173
+ #ifdef PLATFORM_ARCH_BIG_ENDIAN
1150
1174
PLATFORM_DISPI (ARCH_BIG_ENDIAN);
1151
1175
assert (*p == 0 );
1152
1176
#else
0 commit comments