CMakePlatformId.h.in 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  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_ARM)
  82. # if _M_ARM == 4
  83. # define ARCHITECTURE_ID "ARMV4I"
  84. # elif _M_ARM == 5
  85. # define ARCHITECTURE_ID "ARMV5I"
  86. # else
  87. # define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
  88. # endif
  89. # elif defined(_M_MIPS)
  90. # define ARCHITECTURE_ID "MIPS"
  91. # elif defined(_M_SH)
  92. # define ARCHITECTURE_ID "SHx"
  93. # else /* unknown architecture */
  94. # define ARCHITECTURE_ID ""
  95. # endif
  96. #elif defined(__WATCOMC__)
  97. # if defined(_M_I86)
  98. # define ARCHITECTURE_ID "I86"
  99. # elif defined(_M_IX86)
  100. # define ARCHITECTURE_ID "X86"
  101. # else /* unknown architecture */
  102. # define ARCHITECTURE_ID ""
  103. # endif
  104. #elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
  105. # if defined(__ICCARM__)
  106. # define ARCHITECTURE_ID "ARM"
  107. # elif defined(__ICCAVR__)
  108. # define ARCHITECTURE_ID "AVR"
  109. # else /* unknown architecture */
  110. # define ARCHITECTURE_ID ""
  111. # endif
  112. #else
  113. # define ARCHITECTURE_ID
  114. #endif
  115. /* Convert integer to decimal digit literals. */
  116. #define DEC(n) \
  117. ('0' + (((n) / 10000000)%10)), \
  118. ('0' + (((n) / 1000000)%10)), \
  119. ('0' + (((n) / 100000)%10)), \
  120. ('0' + (((n) / 10000)%10)), \
  121. ('0' + (((n) / 1000)%10)), \
  122. ('0' + (((n) / 100)%10)), \
  123. ('0' + (((n) / 10)%10)), \
  124. ('0' + ((n) % 10))
  125. /* Convert integer to hex digit literals. */
  126. #define HEX(n) \
  127. ('0' + ((n)>>28 & 0xF)), \
  128. ('0' + ((n)>>24 & 0xF)), \
  129. ('0' + ((n)>>20 & 0xF)), \
  130. ('0' + ((n)>>16 & 0xF)), \
  131. ('0' + ((n)>>12 & 0xF)), \
  132. ('0' + ((n)>>8 & 0xF)), \
  133. ('0' + ((n)>>4 & 0xF)), \
  134. ('0' + ((n) & 0xF))
  135. /* Construct a string literal encoding the version number components. */
  136. #ifdef COMPILER_VERSION_MAJOR
  137. char const info_version[] = {
  138. 'I', 'N', 'F', 'O', ':',
  139. 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
  140. COMPILER_VERSION_MAJOR,
  141. # ifdef COMPILER_VERSION_MINOR
  142. '.', COMPILER_VERSION_MINOR,
  143. # ifdef COMPILER_VERSION_PATCH
  144. '.', COMPILER_VERSION_PATCH,
  145. # ifdef COMPILER_VERSION_TWEAK
  146. '.', COMPILER_VERSION_TWEAK,
  147. # endif
  148. # endif
  149. # endif
  150. ']','\0'};
  151. #endif
  152. /* Construct a string literal encoding the version number components. */
  153. #ifdef SIMULATE_VERSION_MAJOR
  154. char const info_simulate_version[] = {
  155. 'I', 'N', 'F', 'O', ':',
  156. 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
  157. SIMULATE_VERSION_MAJOR,
  158. # ifdef SIMULATE_VERSION_MINOR
  159. '.', SIMULATE_VERSION_MINOR,
  160. # ifdef SIMULATE_VERSION_PATCH
  161. '.', SIMULATE_VERSION_PATCH,
  162. # ifdef SIMULATE_VERSION_TWEAK
  163. '.', SIMULATE_VERSION_TWEAK,
  164. # endif
  165. # endif
  166. # endif
  167. ']','\0'};
  168. #endif
  169. /* Construct the string literal in pieces to prevent the source from
  170. getting matched. Store it in a pointer rather than an array
  171. because some compilers will just produce instructions to fill the
  172. array rather than assigning a pointer to a static array. */
  173. char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
  174. char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";