CMakePlatformId.h.in 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. #define STRINGIFY_HELPER(X) #X
  2. #define STRINGIFY(X) STRINGIFY_HELPER(X)
  3. /* Identify known platforms by name. */
  4. #if defined(__linux) || defined(__linux__) || defined(linux)
  5. # define PLATFORM_ID "Linux"
  6. #elif defined(__CYGWIN__)
  7. # define PLATFORM_ID "Cygwin"
  8. #elif defined(__MINGW32__)
  9. # define PLATFORM_ID "MinGW"
  10. #elif defined(__APPLE__)
  11. # define PLATFORM_ID "Darwin"
  12. #elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
  13. # define PLATFORM_ID "Windows"
  14. #elif defined(__FreeBSD__) || defined(__FreeBSD)
  15. # define PLATFORM_ID "FreeBSD"
  16. #elif defined(__NetBSD__) || defined(__NetBSD)
  17. # define PLATFORM_ID "NetBSD"
  18. #elif defined(__OpenBSD__) || defined(__OPENBSD)
  19. # define PLATFORM_ID "OpenBSD"
  20. #elif defined(__sun) || defined(sun)
  21. # define PLATFORM_ID "SunOS"
  22. #elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
  23. # define PLATFORM_ID "AIX"
  24. #elif defined(__sgi) || defined(__sgi__) || defined(_SGI)
  25. # define PLATFORM_ID "IRIX"
  26. #elif defined(__hpux) || defined(__hpux__)
  27. # define PLATFORM_ID "HP-UX"
  28. #elif defined(__HAIKU__)
  29. # define PLATFORM_ID "Haiku"
  30. #elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
  31. # define PLATFORM_ID "BeOS"
  32. #elif defined(__QNX__) || defined(__QNXNTO__)
  33. # define PLATFORM_ID "QNX"
  34. #elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
  35. # define PLATFORM_ID "Tru64"
  36. #elif defined(__riscos) || defined(__riscos__)
  37. # define PLATFORM_ID "RISCos"
  38. #elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
  39. # define PLATFORM_ID "SINIX"
  40. #elif defined(__UNIX_SV__)
  41. # define PLATFORM_ID "UNIX_SV"
  42. #elif defined(__bsdos__)
  43. # define PLATFORM_ID "BSDOS"
  44. #elif defined(_MPRAS) || defined(MPRAS)
  45. # define PLATFORM_ID "MP-RAS"
  46. #elif defined(__osf) || defined(__osf__)
  47. # define PLATFORM_ID "OSF1"
  48. #elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
  49. # define PLATFORM_ID "SCO_SV"
  50. #elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
  51. # define PLATFORM_ID "ULTRIX"
  52. #elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
  53. # define PLATFORM_ID "Xenix"
  54. #elif defined(__WATCOMC__)
  55. # if defined(__LINUX__)
  56. # define PLATFORM_ID "Linux"
  57. # elif defined(__DOS__)
  58. # define PLATFORM_ID "DOS"
  59. # elif defined(__OS2__)
  60. # define PLATFORM_ID "OS2"
  61. # elif defined(__WINDOWS__)
  62. # define PLATFORM_ID "Windows3x"
  63. # else /* unknown platform */
  64. # define PLATFORM_ID
  65. # endif
  66. #else /* unknown platform */
  67. # define PLATFORM_ID
  68. #endif
  69. /* For windows compilers MSVC and Intel we can determine
  70. the architecture of the compiler being used. This is because
  71. the compilers do not have flags that can change the architecture,
  72. but rather depend on which compiler is being used
  73. */
  74. #if defined(_WIN32) && defined(_MSC_VER)
  75. # if defined(_M_IA64)
  76. # define ARCHITECTURE_ID "IA64"
  77. # elif defined(_M_X64) || defined(_M_AMD64)
  78. # define ARCHITECTURE_ID "x64"
  79. # elif defined(_M_IX86)
  80. # define ARCHITECTURE_ID "X86"
  81. # elif defined(_M_ARM64)
  82. # define ARCHITECTURE_ID "ARM64"
  83. # elif defined(_M_ARM)
  84. # if _M_ARM == 4
  85. # define ARCHITECTURE_ID "ARMV4I"
  86. # elif _M_ARM == 5
  87. # define ARCHITECTURE_ID "ARMV5I"
  88. # else
  89. # define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
  90. # endif
  91. # elif defined(_M_MIPS)
  92. # define ARCHITECTURE_ID "MIPS"
  93. # elif defined(_M_SH)
  94. # define ARCHITECTURE_ID "SHx"
  95. # else /* unknown architecture */
  96. # define ARCHITECTURE_ID ""
  97. # endif
  98. #elif defined(__WATCOMC__)
  99. # if defined(_M_I86)
  100. # define ARCHITECTURE_ID "I86"
  101. # elif defined(_M_IX86)
  102. # define ARCHITECTURE_ID "X86"
  103. # else /* unknown architecture */
  104. # define ARCHITECTURE_ID ""
  105. # endif
  106. #elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
  107. # if defined(__ICCARM__)
  108. # define ARCHITECTURE_ID "ARM"
  109. # elif defined(__ICCAVR__)
  110. # define ARCHITECTURE_ID "AVR"
  111. # else /* unknown architecture */
  112. # define ARCHITECTURE_ID ""
  113. # endif
  114. #else
  115. # define ARCHITECTURE_ID
  116. #endif
  117. /* Convert integer to decimal digit literals. */
  118. #define DEC(n) \
  119. ('0' + (((n) / 10000000)%10)), \
  120. ('0' + (((n) / 1000000)%10)), \
  121. ('0' + (((n) / 100000)%10)), \
  122. ('0' + (((n) / 10000)%10)), \
  123. ('0' + (((n) / 1000)%10)), \
  124. ('0' + (((n) / 100)%10)), \
  125. ('0' + (((n) / 10)%10)), \
  126. ('0' + ((n) % 10))
  127. /* Convert integer to hex digit literals. */
  128. #define HEX(n) \
  129. ('0' + ((n)>>28 & 0xF)), \
  130. ('0' + ((n)>>24 & 0xF)), \
  131. ('0' + ((n)>>20 & 0xF)), \
  132. ('0' + ((n)>>16 & 0xF)), \
  133. ('0' + ((n)>>12 & 0xF)), \
  134. ('0' + ((n)>>8 & 0xF)), \
  135. ('0' + ((n)>>4 & 0xF)), \
  136. ('0' + ((n) & 0xF))
  137. /* Construct a string literal encoding the version number components. */
  138. #ifdef COMPILER_VERSION_MAJOR
  139. char const info_version[] = {
  140. 'I', 'N', 'F', 'O', ':',
  141. 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
  142. COMPILER_VERSION_MAJOR,
  143. # ifdef COMPILER_VERSION_MINOR
  144. '.', COMPILER_VERSION_MINOR,
  145. # ifdef COMPILER_VERSION_PATCH
  146. '.', COMPILER_VERSION_PATCH,
  147. # ifdef COMPILER_VERSION_TWEAK
  148. '.', COMPILER_VERSION_TWEAK,
  149. # endif
  150. # endif
  151. # endif
  152. ']','\0'};
  153. #endif
  154. /* Construct a string literal encoding the internal version number. */
  155. #ifdef COMPILER_VERSION_INTERNAL
  156. char const info_version_internal[] = {
  157. 'I', 'N', 'F', 'O', ':',
  158. 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
  159. 'i','n','t','e','r','n','a','l','[',
  160. COMPILER_VERSION_INTERNAL,']','\0'};
  161. #endif
  162. /* Construct a string literal encoding the version number components. */
  163. #ifdef SIMULATE_VERSION_MAJOR
  164. char const info_simulate_version[] = {
  165. 'I', 'N', 'F', 'O', ':',
  166. 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
  167. SIMULATE_VERSION_MAJOR,
  168. # ifdef SIMULATE_VERSION_MINOR
  169. '.', SIMULATE_VERSION_MINOR,
  170. # ifdef SIMULATE_VERSION_PATCH
  171. '.', SIMULATE_VERSION_PATCH,
  172. # ifdef SIMULATE_VERSION_TWEAK
  173. '.', SIMULATE_VERSION_TWEAK,
  174. # endif
  175. # endif
  176. # endif
  177. ']','\0'};
  178. #endif
  179. /* Construct the string literal in pieces to prevent the source from
  180. getting matched. Store it in a pointer rather than an array
  181. because some compilers will just produce instructions to fill the
  182. array rather than assigning a pointer to a static array. */
  183. char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
  184. char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";