CMakePlatformId.h.in 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  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(__MSYS__)
  7. # define PLATFORM_ID "MSYS"
  8. #elif defined(__CYGWIN__)
  9. # define PLATFORM_ID "Cygwin"
  10. #elif defined(__MINGW32__)
  11. # define PLATFORM_ID "MinGW"
  12. #elif defined(__APPLE__)
  13. # define PLATFORM_ID "Darwin"
  14. #elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
  15. # define PLATFORM_ID "Windows"
  16. #elif defined(__FreeBSD__) || defined(__FreeBSD)
  17. # define PLATFORM_ID "FreeBSD"
  18. #elif defined(__NetBSD__) || defined(__NetBSD)
  19. # define PLATFORM_ID "NetBSD"
  20. #elif defined(__OpenBSD__) || defined(__OPENBSD)
  21. # define PLATFORM_ID "OpenBSD"
  22. #elif defined(__sun) || defined(sun)
  23. # define PLATFORM_ID "SunOS"
  24. #elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
  25. # define PLATFORM_ID "AIX"
  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. # elif defined(__VXWORKS__)
  64. # define PLATFORM_ID "VxWorks"
  65. # else /* unknown platform */
  66. # define PLATFORM_ID
  67. # endif
  68. #elif defined(__INTEGRITY)
  69. # if defined(INT_178B)
  70. # define PLATFORM_ID "Integrity178"
  71. # else /* regular Integrity */
  72. # define PLATFORM_ID "Integrity"
  73. # endif
  74. # elif defined(_ADI_COMPILER)
  75. # define PLATFORM_ID "ADSP"
  76. #else /* unknown platform */
  77. # define PLATFORM_ID
  78. #endif
  79. /* For windows compilers MSVC and Intel we can determine
  80. the architecture of the compiler being used. This is because
  81. the compilers do not have flags that can change the architecture,
  82. but rather depend on which compiler is being used
  83. */
  84. #if defined(_WIN32) && defined(_MSC_VER)
  85. # if defined(_M_IA64)
  86. # define ARCHITECTURE_ID "IA64"
  87. # elif defined(_M_ARM64EC)
  88. # define ARCHITECTURE_ID "ARM64EC"
  89. # elif defined(_M_X64) || defined(_M_AMD64)
  90. # define ARCHITECTURE_ID "x64"
  91. # elif defined(_M_IX86)
  92. # define ARCHITECTURE_ID "X86"
  93. # elif defined(_M_ARM64)
  94. # define ARCHITECTURE_ID "ARM64"
  95. # elif defined(_M_ARM)
  96. # if _M_ARM == 4
  97. # define ARCHITECTURE_ID "ARMV4I"
  98. # elif _M_ARM == 5
  99. # define ARCHITECTURE_ID "ARMV5I"
  100. # else
  101. # define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
  102. # endif
  103. # elif defined(_M_MIPS)
  104. # define ARCHITECTURE_ID "MIPS"
  105. # elif defined(_M_SH)
  106. # define ARCHITECTURE_ID "SHx"
  107. # else /* unknown architecture */
  108. # define ARCHITECTURE_ID ""
  109. # endif
  110. #elif defined(__WATCOMC__)
  111. # if defined(_M_I86)
  112. # define ARCHITECTURE_ID "I86"
  113. # elif defined(_M_IX86)
  114. # define ARCHITECTURE_ID "X86"
  115. # else /* unknown architecture */
  116. # define ARCHITECTURE_ID ""
  117. # endif
  118. #elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
  119. # if defined(__ICCARM__)
  120. # define ARCHITECTURE_ID "ARM"
  121. # elif defined(__ICCRX__)
  122. # define ARCHITECTURE_ID "RX"
  123. # elif defined(__ICCRH850__)
  124. # define ARCHITECTURE_ID "RH850"
  125. # elif defined(__ICCRL78__)
  126. # define ARCHITECTURE_ID "RL78"
  127. # elif defined(__ICCRISCV__)
  128. # define ARCHITECTURE_ID "RISCV"
  129. # elif defined(__ICCAVR__)
  130. # define ARCHITECTURE_ID "AVR"
  131. # elif defined(__ICC430__)
  132. # define ARCHITECTURE_ID "MSP430"
  133. # elif defined(__ICCV850__)
  134. # define ARCHITECTURE_ID "V850"
  135. # elif defined(__ICC8051__)
  136. # define ARCHITECTURE_ID "8051"
  137. # elif defined(__ICCSTM8__)
  138. # define ARCHITECTURE_ID "STM8"
  139. # else /* unknown architecture */
  140. # define ARCHITECTURE_ID ""
  141. # endif
  142. #elif defined(__ghs__)
  143. # if defined(__PPC64__)
  144. # define ARCHITECTURE_ID "PPC64"
  145. # elif defined(__ppc__)
  146. # define ARCHITECTURE_ID "PPC"
  147. # elif defined(__ARM__)
  148. # define ARCHITECTURE_ID "ARM"
  149. # elif defined(__x86_64__)
  150. # define ARCHITECTURE_ID "x64"
  151. # elif defined(__i386__)
  152. # define ARCHITECTURE_ID "X86"
  153. # else /* unknown architecture */
  154. # define ARCHITECTURE_ID ""
  155. # endif
  156. #elif defined(__clang__) && defined(__ti__)
  157. # if defined(__ARM_ARCH)
  158. # define ARCHITECTURE_ID "Arm"
  159. # else /* unknown architecture */
  160. # define ARCHITECTURE_ID ""
  161. # endif
  162. #elif defined(__TI_COMPILER_VERSION__)
  163. # if defined(__TI_ARM__)
  164. # define ARCHITECTURE_ID "ARM"
  165. # elif defined(__MSP430__)
  166. # define ARCHITECTURE_ID "MSP430"
  167. # elif defined(__TMS320C28XX__)
  168. # define ARCHITECTURE_ID "TMS320C28x"
  169. # elif defined(__TMS320C6X__) || defined(_TMS320C6X)
  170. # define ARCHITECTURE_ID "TMS320C6x"
  171. # else /* unknown architecture */
  172. # define ARCHITECTURE_ID ""
  173. # endif
  174. # elif defined(__ADSPSHARC__)
  175. # define ARCHITECTURE_ID "SHARC"
  176. # elif defined(__ADSPBLACKFIN__)
  177. # define ARCHITECTURE_ID "Blackfin"
  178. #elif defined(__TASKING__)
  179. # if defined(__CTC__) || defined(__CPTC__)
  180. # define ARCHITECTURE_ID "TriCore"
  181. # elif defined(__CMCS__)
  182. # define ARCHITECTURE_ID "MCS"
  183. # elif defined(__CARM__)
  184. # define ARCHITECTURE_ID "ARM"
  185. # elif defined(__CARC__)
  186. # define ARCHITECTURE_ID "ARC"
  187. # elif defined(__C51__)
  188. # define ARCHITECTURE_ID "8051"
  189. # elif defined(__CPCP__)
  190. # define ARCHITECTURE_ID "PCP"
  191. # else
  192. # define ARCHITECTURE_ID ""
  193. # endif
  194. #else
  195. # define ARCHITECTURE_ID
  196. #endif
  197. /* Convert integer to decimal digit literals. */
  198. #define DEC(n) \
  199. ('0' + (((n) / 10000000)%10)), \
  200. ('0' + (((n) / 1000000)%10)), \
  201. ('0' + (((n) / 100000)%10)), \
  202. ('0' + (((n) / 10000)%10)), \
  203. ('0' + (((n) / 1000)%10)), \
  204. ('0' + (((n) / 100)%10)), \
  205. ('0' + (((n) / 10)%10)), \
  206. ('0' + ((n) % 10))
  207. /* Convert integer to hex digit literals. */
  208. #define HEX(n) \
  209. ('0' + ((n)>>28 & 0xF)), \
  210. ('0' + ((n)>>24 & 0xF)), \
  211. ('0' + ((n)>>20 & 0xF)), \
  212. ('0' + ((n)>>16 & 0xF)), \
  213. ('0' + ((n)>>12 & 0xF)), \
  214. ('0' + ((n)>>8 & 0xF)), \
  215. ('0' + ((n)>>4 & 0xF)), \
  216. ('0' + ((n) & 0xF))
  217. /* Construct a string literal encoding the version number. */
  218. #ifdef COMPILER_VERSION
  219. char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]";
  220. /* Construct a string literal encoding the version number components. */
  221. #elif defined(COMPILER_VERSION_MAJOR)
  222. char const info_version[] = {
  223. 'I', 'N', 'F', 'O', ':',
  224. 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
  225. COMPILER_VERSION_MAJOR,
  226. # ifdef COMPILER_VERSION_MINOR
  227. '.', COMPILER_VERSION_MINOR,
  228. # ifdef COMPILER_VERSION_PATCH
  229. '.', COMPILER_VERSION_PATCH,
  230. # ifdef COMPILER_VERSION_TWEAK
  231. '.', COMPILER_VERSION_TWEAK,
  232. # endif
  233. # endif
  234. # endif
  235. ']','\0'};
  236. #endif
  237. /* Construct a string literal encoding the internal version number. */
  238. #ifdef COMPILER_VERSION_INTERNAL
  239. char const info_version_internal[] = {
  240. 'I', 'N', 'F', 'O', ':',
  241. 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
  242. 'i','n','t','e','r','n','a','l','[',
  243. COMPILER_VERSION_INTERNAL,']','\0'};
  244. #elif defined(COMPILER_VERSION_INTERNAL_STR)
  245. char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]";
  246. #endif
  247. /* Construct a string literal encoding the version number components. */
  248. #ifdef SIMULATE_VERSION_MAJOR
  249. char const info_simulate_version[] = {
  250. 'I', 'N', 'F', 'O', ':',
  251. 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
  252. SIMULATE_VERSION_MAJOR,
  253. # ifdef SIMULATE_VERSION_MINOR
  254. '.', SIMULATE_VERSION_MINOR,
  255. # ifdef SIMULATE_VERSION_PATCH
  256. '.', SIMULATE_VERSION_PATCH,
  257. # ifdef SIMULATE_VERSION_TWEAK
  258. '.', SIMULATE_VERSION_TWEAK,
  259. # endif
  260. # endif
  261. # endif
  262. ']','\0'};
  263. #endif
  264. /* Construct the string literal in pieces to prevent the source from
  265. getting matched. Store it in a pointer rather than an array
  266. because some compilers will just produce instructions to fill the
  267. array rather than assigning a pointer to a static array. */
  268. char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
  269. char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";