CMakePlatformId.h.in 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  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. #else
  105. # define ARCHITECTURE_ID
  106. #endif
  107. /* Convert integer to decimal digit literals. */
  108. #define DEC(n) \
  109. ('0' + (((n) / 10000000)%10)), \
  110. ('0' + (((n) / 1000000)%10)), \
  111. ('0' + (((n) / 100000)%10)), \
  112. ('0' + (((n) / 10000)%10)), \
  113. ('0' + (((n) / 1000)%10)), \
  114. ('0' + (((n) / 100)%10)), \
  115. ('0' + (((n) / 10)%10)), \
  116. ('0' + ((n) % 10))
  117. /* Convert integer to hex digit literals. */
  118. #define HEX(n) \
  119. ('0' + ((n)>>28 & 0xF)), \
  120. ('0' + ((n)>>24 & 0xF)), \
  121. ('0' + ((n)>>20 & 0xF)), \
  122. ('0' + ((n)>>16 & 0xF)), \
  123. ('0' + ((n)>>12 & 0xF)), \
  124. ('0' + ((n)>>8 & 0xF)), \
  125. ('0' + ((n)>>4 & 0xF)), \
  126. ('0' + ((n) & 0xF))
  127. /* Construct a string literal encoding the version number components. */
  128. #ifdef COMPILER_VERSION_MAJOR
  129. char const info_version[] = {
  130. 'I', 'N', 'F', 'O', ':',
  131. 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
  132. COMPILER_VERSION_MAJOR,
  133. # ifdef COMPILER_VERSION_MINOR
  134. '.', COMPILER_VERSION_MINOR,
  135. # ifdef COMPILER_VERSION_PATCH
  136. '.', COMPILER_VERSION_PATCH,
  137. # ifdef COMPILER_VERSION_TWEAK
  138. '.', COMPILER_VERSION_TWEAK,
  139. # endif
  140. # endif
  141. # endif
  142. ']','\0'};
  143. #endif
  144. /* Construct a string literal encoding the version number components. */
  145. #ifdef SIMULATE_VERSION_MAJOR
  146. char const info_simulate_version[] = {
  147. 'I', 'N', 'F', 'O', ':',
  148. 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
  149. SIMULATE_VERSION_MAJOR,
  150. # ifdef SIMULATE_VERSION_MINOR
  151. '.', SIMULATE_VERSION_MINOR,
  152. # ifdef SIMULATE_VERSION_PATCH
  153. '.', SIMULATE_VERSION_PATCH,
  154. # ifdef SIMULATE_VERSION_TWEAK
  155. '.', SIMULATE_VERSION_TWEAK,
  156. # endif
  157. # endif
  158. # endif
  159. ']','\0'};
  160. #endif
  161. /* Construct the string literal in pieces to prevent the source from
  162. getting matched. Store it in a pointer rather than an array
  163. because some compilers will just produce instructions to fill the
  164. array rather than assigning a pointer to a static array. */
  165. char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
  166. char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";