Platform.h 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. //
  2. // Platform.h
  3. //
  4. // $Id: //poco/1.4/Foundation/include/Poco/Platform.h#5 $
  5. //
  6. // Library: Foundation
  7. // Package: Core
  8. // Module: Platform
  9. //
  10. // Platform and architecture identification macros.
  11. //
  12. // NOTE: This file may be included from both C++ and C code, so it
  13. // must not contain any C++ specific things.
  14. //
  15. // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
  16. // and Contributors.
  17. //
  18. // SPDX-License-Identifier: BSL-1.0
  19. //
  20. #ifndef Foundation_Platform_INCLUDED
  21. #define Foundation_Platform_INCLUDED
  22. //
  23. // Platform Identification
  24. //
  25. #define POCO_OS_FREE_BSD 0x0001
  26. #define POCO_OS_AIX 0x0002
  27. #define POCO_OS_HPUX 0x0003
  28. #define POCO_OS_TRU64 0x0004
  29. #define POCO_OS_LINUX 0x0005
  30. #define POCO_OS_MAC_OS_X 0x0006
  31. #define POCO_OS_NET_BSD 0x0007
  32. #define POCO_OS_OPEN_BSD 0x0008
  33. #define POCO_OS_IRIX 0x0009
  34. #define POCO_OS_SOLARIS 0x000a
  35. #define POCO_OS_QNX 0x000b
  36. #define POCO_OS_VXWORKS 0x000c
  37. #define POCO_OS_CYGWIN 0x000d
  38. #define POCO_OS_UNKNOWN_UNIX 0x00ff
  39. #define POCO_OS_WINDOWS_NT 0x1001
  40. #define POCO_OS_WINDOWS_CE 0x1011
  41. #define POCO_OS_VMS 0x2001
  42. #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
  43. #define POCO_OS_FAMILY_UNIX 1
  44. #define POCO_OS_FAMILY_BSD 1
  45. #define POCO_OS POCO_OS_FREE_BSD
  46. #elif defined(_AIX) || defined(__TOS_AIX__)
  47. #define POCO_OS_FAMILY_UNIX 1
  48. #define POCO_OS POCO_OS_AIX
  49. #elif defined(hpux) || defined(_hpux) || defined(__hpux)
  50. #define POCO_OS_FAMILY_UNIX 1
  51. #define POCO_OS POCO_OS_HPUX
  52. #elif defined(__digital__) || defined(__osf__)
  53. #define POCO_OS_FAMILY_UNIX 1
  54. #define POCO_OS POCO_OS_TRU64
  55. #elif defined(linux) || defined(__linux) || defined(__linux__) || defined(__TOS_LINUX__) || defined(EMSCRIPTEN)
  56. #define POCO_OS_FAMILY_UNIX 1
  57. #define POCO_OS POCO_OS_LINUX
  58. #elif defined(__APPLE__) || defined(__TOS_MACOS__)
  59. #define POCO_OS_FAMILY_UNIX 1
  60. #define POCO_OS_FAMILY_BSD 1
  61. #define POCO_OS POCO_OS_MAC_OS_X
  62. #elif defined(__NetBSD__)
  63. #define POCO_OS_FAMILY_UNIX 1
  64. #define POCO_OS_FAMILY_BSD 1
  65. #define POCO_OS POCO_OS_NET_BSD
  66. #elif defined(__OpenBSD__)
  67. #define POCO_OS_FAMILY_UNIX 1
  68. #define POCO_OS_FAMILY_BSD 1
  69. #define POCO_OS POCO_OS_OPEN_BSD
  70. #elif defined(sgi) || defined(__sgi)
  71. #define POCO_OS_FAMILY_UNIX 1
  72. #define POCO_OS POCO_OS_IRIX
  73. #elif defined(sun) || defined(__sun)
  74. #define POCO_OS_FAMILY_UNIX 1
  75. #define POCO_OS POCO_OS_SOLARIS
  76. #elif defined(__QNX__)
  77. #define POCO_OS_FAMILY_UNIX 1
  78. #define POCO_OS POCO_OS_QNX
  79. #elif defined(__CYGWIN__)
  80. #define POCO_OS_FAMILY_UNIX 1
  81. #define POCO_OS POCO_OS_CYGWIN
  82. #elif defined(POCO_VXWORKS)
  83. #define POCO_OS_FAMILY_UNIX 1
  84. #define POCO_OS POCO_OS_VXWORKS
  85. #elif defined(unix) || defined(__unix) || defined(__unix__)
  86. #define POCO_OS_FAMILY_UNIX 1
  87. #define POCO_OS POCO_OS_UNKNOWN_UNIX
  88. #elif defined(_WIN32_WCE)
  89. #define POCO_OS_FAMILY_WINDOWS 1
  90. #define POCO_OS POCO_OS_WINDOWS_CE
  91. #elif defined(_WIN32) || defined(_WIN64)
  92. #define POCO_OS_FAMILY_WINDOWS 1
  93. #define POCO_OS POCO_OS_WINDOWS_NT
  94. #elif defined(__VMS)
  95. #define POCO_OS_FAMILY_VMS 1
  96. #define POCO_OS POCO_OS_VMS
  97. #endif
  98. #if !defined(POCO_OS)
  99. #error "Unknown Platform."
  100. #endif
  101. #ifndef POCO_OS_FAMILY_UNIX
  102. #define GCC_DIAG_OFF(x)
  103. #define GCC_DIAG_ON(x)
  104. #endif
  105. //
  106. // Hardware Architecture and Byte Order
  107. //
  108. #define POCO_ARCH_ALPHA 0x01
  109. #define POCO_ARCH_IA32 0x02
  110. #define POCO_ARCH_IA64 0x03
  111. #define POCO_ARCH_MIPS 0x04
  112. #define POCO_ARCH_HPPA 0x05
  113. #define POCO_ARCH_PPC 0x06
  114. #define POCO_ARCH_POWER 0x07
  115. #define POCO_ARCH_SPARC 0x08
  116. #define POCO_ARCH_AMD64 0x09
  117. #define POCO_ARCH_ARM 0x0a
  118. #define POCO_ARCH_M68K 0x0b
  119. #define POCO_ARCH_S390 0x0c
  120. #define POCO_ARCH_SH 0x0d
  121. #define POCO_ARCH_NIOS2 0x0e
  122. #define POCO_ARCH_AARCH64 0x0f
  123. #if defined(__ALPHA) || defined(__alpha) || defined(__alpha__) || defined(_M_ALPHA)
  124. #define POCO_ARCH POCO_ARCH_ALPHA
  125. #define POCO_ARCH_LITTLE_ENDIAN 1
  126. #elif defined(i386) || defined(__i386) || defined(__i386__) || defined(_M_IX86) || defined(EMSCRIPTEN)
  127. #define POCO_ARCH POCO_ARCH_IA32
  128. #define POCO_ARCH_LITTLE_ENDIAN 1
  129. #elif defined(_IA64) || defined(__IA64__) || defined(__ia64__) || defined(__ia64) || defined(_M_IA64)
  130. #define POCO_ARCH POCO_ARCH_IA64
  131. #if defined(hpux) || defined(_hpux)
  132. #define POCO_ARCH_BIG_ENDIAN 1
  133. #else
  134. #define POCO_ARCH_LITTLE_ENDIAN 1
  135. #endif
  136. #elif defined(__x86_64__) || defined(_M_X64)
  137. #define POCO_ARCH POCO_ARCH_AMD64
  138. #define POCO_ARCH_LITTLE_ENDIAN 1
  139. #elif defined(__mips__) || defined(__mips) || defined(__MIPS__) || defined(_M_MRX000)
  140. #define POCO_ARCH POCO_ARCH_MIPS
  141. #if defined(POCO_OS_FAMILY_WINDOWS)
  142. // Is this OK? Supports windows only little endian??
  143. #define POCO_ARCH_LITTLE_ENDIAN 1
  144. #elif defined(__MIPSEB__) || defined(_MIPSEB) || defined(__MIPSEB)
  145. #define POCO_ARCH_BIG_ENDIAN 1
  146. #elif defined(__MIPSEL__) || defined(_MIPSEL) || defined(__MIPSEL)
  147. #define POCO_ARCH_LITTLE_ENDIAN 1
  148. #else
  149. #error "MIPS but neither MIPSEL nor MIPSEB?"
  150. #endif
  151. #elif defined(__hppa) || defined(__hppa__)
  152. #define POCO_ARCH POCO_ARCH_HPPA
  153. #define POCO_ARCH_BIG_ENDIAN 1
  154. #elif defined(__PPC) || defined(__POWERPC__) || defined(__powerpc) || defined(__PPC__) || \
  155. defined(__powerpc__) || defined(__ppc__) || defined(__ppc) || defined(_ARCH_PPC) || defined(_M_PPC)
  156. #define POCO_ARCH POCO_ARCH_PPC
  157. #define POCO_ARCH_BIG_ENDIAN 1
  158. #elif defined(_POWER) || defined(_ARCH_PWR) || defined(_ARCH_PWR2) || defined(_ARCH_PWR3) || \
  159. defined(_ARCH_PWR4) || defined(__THW_RS6000)
  160. #define POCO_ARCH POCO_ARCH_POWER
  161. #define POCO_ARCH_BIG_ENDIAN 1
  162. #elif defined(__sparc__) || defined(__sparc) || defined(sparc)
  163. #define POCO_ARCH POCO_ARCH_SPARC
  164. #define POCO_ARCH_BIG_ENDIAN 1
  165. #elif defined(__arm__) || defined(__arm) || defined(ARM) || defined(_ARM_) || defined(__ARM__) || defined(_M_ARM)
  166. #define POCO_ARCH POCO_ARCH_ARM
  167. #if defined(__ARMEB__)
  168. #define POCO_ARCH_BIG_ENDIAN 1
  169. #else
  170. #define POCO_ARCH_LITTLE_ENDIAN 1
  171. #endif
  172. #elif defined(__arm64__) || defined(__arm64)
  173. #define POCO_ARCH POCO_ARCH_ARM64
  174. #if defined(__ARMEB__)
  175. #define POCO_ARCH_BIG_ENDIAN 1
  176. #elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
  177. #define POCO_ARCH_BIG_ENDIAN 1
  178. #else
  179. #define POCO_ARCH_LITTLE_ENDIAN 1
  180. #endif
  181. #elif defined(__m68k__)
  182. #define POCO_ARCH POCO_ARCH_M68K
  183. #define POCO_ARCH_BIG_ENDIAN 1
  184. #elif defined(__s390__)
  185. #define POCO_ARCH POCO_ARCH_S390
  186. #define POCO_ARCH_BIG_ENDIAN 1
  187. #elif defined(__sh__) || defined(__sh) || defined(SHx) || defined(_SHX_)
  188. #define POCO_ARCH POCO_ARCH_SH
  189. #if defined(__LITTLE_ENDIAN__) || (POCO_OS == POCO_OS_WINDOWS_CE)
  190. #define POCO_ARCH_LITTLE_ENDIAN 1
  191. #else
  192. #define POCO_ARCH_BIG_ENDIAN 1
  193. #endif
  194. #elif defined (nios2) || defined(__nios2) || defined(__nios2__)
  195. #define POCO_ARCH POCO_ARCH_NIOS2
  196. #if defined(__nios2_little_endian) || defined(nios2_little_endian) || defined(__nios2_little_endian__)
  197. #define POCO_ARCH_LITTLE_ENDIAN 1
  198. #else
  199. #define POCO_ARCH_BIG_ENDIAN 1
  200. #endif
  201. #elif defined(__AARCH64EL__)
  202. #define POCO_ARCH POCO_ARCH_AARCH64
  203. #define POCO_ARCH_LITTLE_ENDIAN 1
  204. #elif defined(__AARCH64EB__)
  205. #define POCO_ARCH POCO_ARCH_AARCH64
  206. #define POCO_ARCH_BIG_ENDIAN 1
  207. #endif
  208. #if defined(_MSC_VER)
  209. #define POCO_COMPILER_MSVC
  210. #elif defined(__clang__)
  211. #define POCO_COMPILER_CLANG
  212. #elif defined (__GNUC__)
  213. #define POCO_COMPILER_GCC
  214. #elif defined (__MINGW32__) || defined (__MINGW64__)
  215. #define POCO_COMPILER_MINGW
  216. #elif defined (__INTEL_COMPILER) || defined(__ICC) || defined(__ECC) || defined(__ICL)
  217. #define POCO_COMPILER_INTEL
  218. #elif defined (__SUNPRO_CC)
  219. #define POCO_COMPILER_SUN
  220. #elif defined (__MWERKS__) || defined(__CWCC__)
  221. #define POCO_COMPILER_CODEWARRIOR
  222. #elif defined (__sgi) || defined(sgi)
  223. #define POCO_COMPILER_SGI
  224. #elif defined (__HP_aCC)
  225. #define POCO_COMPILER_HP_ACC
  226. #elif defined (__BORLANDC__) || defined(__CODEGEARC__)
  227. #define POCO_COMPILER_CBUILDER
  228. #elif defined (__DMC__)
  229. #define POCO_COMPILER_DMARS
  230. #elif defined (__HP_aCC)
  231. #define POCO_COMPILER_HP_ACC
  232. #elif (defined (__xlc__) || defined (__xlC__)) && defined(__IBMCPP__)
  233. #define POCO_COMPILER_IBM_XLC // IBM XL C++
  234. #elif defined (__IBMCPP__) && defined(__COMPILER_VER__)
  235. #define POCO_COMPILER_IBM_XLC_ZOS // IBM z/OS C++
  236. #endif
  237. #if !defined(POCO_ARCH)
  238. #error "Unknown Hardware Architecture."
  239. #endif
  240. #if defined(POCO_OS_FAMILY_WINDOWS)
  241. #define POCO_DEFAULT_NEWLINE_CHARS "\r\n"
  242. #else
  243. #define POCO_DEFAULT_NEWLINE_CHARS "\n"
  244. #endif
  245. #endif // Foundation_Platform_INCLUDED