1 | /** |
2 | * Copyright (C) The Software Authors. All rights reserved. |
3 | |
4 | * \file version.i |
5 | * \author Hechong.xyf |
6 | * \date Apr 2018 |
7 | * \version 1.0.0 |
8 | * \brief Definition of AiLego Version |
9 | */ |
10 | |
11 | #include "internal/platform.h" |
12 | |
13 | #ifndef AILEGO_VERSION_TO_STRING_ |
14 | #define AILEGO_VERSION_TO_STRING_(x) #x |
15 | #endif |
16 | |
17 | #ifndef AILEGO_VERSION_TO_STRING |
18 | #define AILEGO_VERSION_TO_STRING(x) AILEGO_VERSION_TO_STRING_(x) |
19 | #endif |
20 | |
21 | /*! http://nadeausoftware.com/articles/2012/01/ |
22 | * c_c_tip_how_use_compiler_predefined_macros_detect_operating_system |
23 | */ |
24 | #if defined(__linux) || defined(__linux__) |
25 | #define AILEGO_VERSION_PLATFORM "Linux" |
26 | #elif defined(__FreeBSD__) |
27 | #define AILEGO_VERSION_PLATFORM "FreeBSD" |
28 | #elif defined(__NetBSD__) |
29 | #define AILEGO_VERSION_PLATFORM "NetBSD" |
30 | #elif defined(__OpenBSD__) |
31 | #define AILEGO_VERSION_PLATFORM "OpenBSD" |
32 | #elif defined(__APPLE__) || defined(__MACH__) |
33 | #define AILEGO_VERSION_PLATFORM "Darwin" |
34 | #elif defined(__CYGWIN__) && !defined(_WIN32) |
35 | #define AILEGO_VERSION_PLATFORM "Cygwin" |
36 | #elif defined(_WIN64) |
37 | #define AILEGO_VERSION_PLATFORM "Microsoft Windows (64-bit)" |
38 | #elif defined(_WIN32) |
39 | #define AILEGO_VERSION_PLATFORM "Microsoft Windows (32-bit)" |
40 | #elif defined(__sun) && defined(__SVR4) |
41 | #define AILEGO_VERSION_PLATFORM "Solaris" |
42 | #elif defined(_AIX) |
43 | #define AILEGO_VERSION_PLATFORM "AIX" |
44 | #elif defined(__hpux) |
45 | #define AILEGO_VERSION_PLATFORM "HP-UX" |
46 | #elif defined(__unix) || defined(__unix__) |
47 | #define AILEGO_VERSION_PLATFORM "Unix" |
48 | #else |
49 | #define AILEGO_VERSION_PLATFORM "Unknown Platform" |
50 | #endif |
51 | |
52 | /*! http://nadeausoftware.com/articles/2012/10/ |
53 | * c_c_tip_how_detect_compiler_name_and_version_using_compiler_predefined_macros |
54 | */ |
55 | #if defined(__NVCC__) |
56 | #define AILEGO_VERSION_COMPILER_NAME "Nvidia CUDA Compiler" |
57 | #elif defined(__clang__) |
58 | #define AILEGO_VERSION_COMPILER_NAME "Clang/LLVM" |
59 | #elif defined(__ICC) || defined(__INTEL_COMPILER) |
60 | #define AILEGO_VERSION_COMPILER_NAME "Intel ICC/ICPC" |
61 | #elif defined(__GNUC__) || defined(__GNUG__) |
62 | #define AILEGO_VERSION_COMPILER_NAME "GNU GCC/G++" |
63 | #elif defined(__HP_cc) || defined(__HP_aCC) |
64 | #define AILEGO_VERSION_COMPILER_NAME "Hewlett-Packard C/aC++" |
65 | #elif defined(__IBMC__) || defined(__IBMCPP__) |
66 | #define AILEGO_VERSION_COMPILER_NAME "IBM XL C/C++" |
67 | #elif defined(_MSC_VER) |
68 | #define AILEGO_VERSION_COMPILER_NAME "Microsoft Visual C++" |
69 | #elif defined(__PGI) |
70 | #define AILEGO_VERSION_COMPILER_NAME "Portland Group PGCC/PGCPP" |
71 | #elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) |
72 | #define AILEGO_VERSION_COMPILER_NAME "Oracle Solaris Studio" |
73 | #else |
74 | #define AILEGO_VERSION_COMPILER_NAME "Unknown Compiler" |
75 | #endif |
76 | |
77 | #if defined(__CUDACC_VER_MAJOR__) |
78 | #define AILEGO_VERSION_COMPILER \ |
79 | AILEGO_VERSION_COMPILER_NAME \ |
80 | " (" AILEGO_VERSION_TO_STRING(__CUDACC_VER_MAJOR__) \ |
81 | "." AILEGO_VERSION_TO_STRING(__CUDACC_VER_MINOR__) \ |
82 | "." AILEGO_VERSION_TO_STRING(__CUDACC_VER_BUILD__) ")" |
83 | #elif defined(__VERSION__) |
84 | #define AILEGO_VERSION_COMPILER \ |
85 | AILEGO_VERSION_COMPILER_NAME " (" __VERSION__ ")" |
86 | #elif defined(_MSC_FULL_VER) |
87 | #define AILEGO_VERSION_COMPILER \ |
88 | AILEGO_VERSION_COMPILER_NAME " (" AILEGO_VERSION_TO_STRING(_MSC_FULL_VER) ")" |
89 | #elif defined(_MSC_VER) |
90 | #define AILEGO_VERSION_COMPILER \ |
91 | AILEGO_VERSION_COMPILER_NAME " (" AILEGO_VERSION_TO_STRING(_MSC_VER) ")" |
92 | #elif defined(__PGIC__) |
93 | #define AILEGO_VERSION_COMPILER \ |
94 | AILEGO_VERSION_COMPILER_NAME \ |
95 | " (" AILEGO_VERSION_TO_STRING(__PGIC__) "." AILEGO_VERSION_TO_STRING( \ |
96 | __PGIC_MINOR__) "." AILEGO_VERSION_TO_STRING(__PGIC_PATCHLEVEL__) ")" |
97 | #elif defined(__xlc__) |
98 | #define AILEGO_VERSION_COMPILER AILEGO_VERSION_COMPILER_NAME " (" __xlc__ ")" |
99 | #elif defined(__SUNPRO_C) |
100 | #define AILEGO_VERSION_COMPILER \ |
101 | AILEGO_VERSION_COMPILER_NAME " (" AILEGO_VERSION_TO_STRING(__SUNPRO_C) ")" |
102 | #elif defined(__HP_cc) |
103 | #define AILEGO_VERSION_COMPILER \ |
104 | AILEGO_VERSION_COMPILER_NAME " (" AILEGO_VERSION_TO_STRING(__HP_cc) ")" |
105 | #else |
106 | #define AILEGO_VERSION_COMPILER AILEGO_VERSION_COMPILER_NAME |
107 | #endif |
108 | |
109 | #if defined(__x86_64__) || defined(_M_X64) |
110 | #define AILEGO_VERSION_PROCESSOR "x86 64-bit Processor" |
111 | #elif defined(__i386) || defined(_M_IX86) |
112 | #define AILEGO_VERSION_PROCESSOR "x86 32-bit Processor" |
113 | #elif defined(__ARM_ARCH) |
114 | #if defined(__ARM_64BIT_STATE) |
115 | #define AILEGO_VERSION_PROCESSOR "ARM 64-bit Processor" |
116 | #else |
117 | #define AILEGO_VERSION_PROCESSOR "ARM 32-bit Processor" |
118 | #endif |
119 | #elif defined(__ia64) || defined(__itanium__) || defined(_M_IA64) |
120 | #define AILEGO_VERSION_PROCESSOR "Itanium Processor" |
121 | #elif defined(__powerpc64__) || defined(__ppc64__) || defined(__PPC64__) |
122 | #define AILEGO_VERSION_PROCESSOR "PowerPC 64-bit Processor" |
123 | #elif defined(__powerpc__) || defined(__ppc__) || defined(__PPC__) |
124 | #define AILEGO_VERSION_PROCESSOR "PowerPC 32-bit Processor" |
125 | #elif defined(__sparc) |
126 | #define AILEGO_VERSION_PROCESSOR "SPARC Processor" |
127 | #else |
128 | #define AILEGO_VERSION_PROCESSOR "Unknown Processor" |
129 | #endif |
130 | |
131 | #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ |
132 | #define AILEGO_VERSION_BYTE_ORDER " Little-endian Byte Order\n" |
133 | #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ |
134 | #define AILEGO_VERSION_BYTE_ORDER " Big-endian Byte Order\n" |
135 | #elif __BYTE_ORDER__ == __ORDER_PDP_ENDIAN__ |
136 | #define AILEGO_VERSION_BYTE_ORDER " PDP-endian Byte Order\n" |
137 | #else |
138 | #define AILEGO_VERSION_BYTE_ORDER "" |
139 | #endif |
140 | |
141 | #if defined(_DEBUG) || (!defined(__OPTIMIZE__) && !defined(NDEBUG)) |
142 | #define AILEGO_VERSION_DEBUG_INFO " Debug Information\n" |
143 | #else |
144 | #define AILEGO_VERSION_DEBUG_INFO "" |
145 | #endif |
146 | |
147 | #if defined(__SANITIZE_ADDRESS__) |
148 | #define AILEGO_VERSION_ASAN " Address Sanitizer\n" |
149 | #else |
150 | #define AILEGO_VERSION_ASAN "" |
151 | #endif |
152 | |
153 | #if defined(__STDC_VERSION__) |
154 | #define AILEGO_VERSION_STDC \ |
155 | " C Standard " AILEGO_VERSION_TO_STRING(__STDC_VERSION__) "\n" |
156 | #else |
157 | #define AILEGO_VERSION_STDC "" |
158 | #endif |
159 | |
160 | #if defined(__cplusplus) |
161 | #define AILEGO_VERSION_CPLUSPLUS \ |
162 | " C++ Standard " AILEGO_VERSION_TO_STRING(__cplusplus) "\n" |
163 | #else |
164 | #define AILEGO_VERSION_CPLUSPLUS "" |
165 | #endif |
166 | |
167 | #if defined(__GXX_ABI_VERSION) |
168 | #define AILEGO_VERSION_GXX_ABI \ |
169 | " GNU C++ ABI " AILEGO_VERSION_TO_STRING(__GXX_ABI_VERSION) "\n" |
170 | #else |
171 | #define AILEGO_VERSION_GXX_ABI "" |
172 | #endif |
173 | |
174 | #if defined(__GLIBC__) |
175 | #define AILEGO_VERSION_GLIBC \ |
176 | " GNU glibc " AILEGO_VERSION_TO_STRING( \ |
177 | __GLIBC__) "." AILEGO_VERSION_TO_STRING(__GLIBC_MINOR__) "\n" |
178 | #else |
179 | #define AILEGO_VERSION_GLIBC "" |
180 | #endif |
181 | |
182 | #if defined(WINVER) |
183 | #define AILEGO_VERSION_WINSDK \ |
184 | " Microsoft Windows SDK " AILEGO_VERSION_TO_STRING(WINVER) "\n" |
185 | #else |
186 | #define AILEGO_VERSION_WINSDK "" |
187 | #endif |
188 | |
189 | #if defined(__CLR_VER) |
190 | #define AILEGO_VERSION_CLR \ |
191 | " Microsoft CLR " AILEGO_VERSION_TO_STRING(__CLR_VER) "\n" |
192 | #else |
193 | #define AILEGO_VERSION_CLR "" |
194 | #endif |
195 | |
196 | #if defined(__LSB_VERSION__) |
197 | #define AILEGO_VERSION_LSB \ |
198 | " Linux Standards Base " AILEGO_VERSION_TO_STRING(__LSB_VERSION__) "\n" |
199 | #else |
200 | #define AILEGO_VERSION_LSB "" |
201 | #endif |
202 | |
203 | #if defined(_POSIX_VERSION) |
204 | #define AILEGO_VERSION_POSIX \ |
205 | " POSIX Specification " AILEGO_VERSION_TO_STRING(_POSIX_VERSION) "\n" |
206 | #else |
207 | #define AILEGO_VERSION_POSIX "" |
208 | #endif |
209 | |
210 | #if defined(_XOPEN_VERSION) |
211 | #define AILEGO_VERSION_XOPEN \ |
212 | " X/Open Specification " AILEGO_VERSION_TO_STRING(_XOPEN_VERSION) "\n" |
213 | #else |
214 | #define AILEGO_VERSION_XOPEN "" |
215 | #endif |
216 | |
217 | #if defined(_OPENMP) |
218 | #define AILEGO_VERSION_OPENMP \ |
219 | " OpenMP API " AILEGO_VERSION_TO_STRING(_OPENMP) "\n" |
220 | #else |
221 | #define AILEGO_VERSION_OPENMP "" |
222 | #endif |
223 | |
224 | #if defined(__ARM_NEON) |
225 | #define AILEGO_VERSION_SIMD " Arm Neon Instruction Set\n" |
226 | #elif defined(__AVX512F__) |
227 | #define AILEGO_VERSION_SIMD " AVX-512F Instruction Set\n" |
228 | #elif defined(__AVX2__) |
229 | #define AILEGO_VERSION_SIMD " AVX-2 Instruction Set\n" |
230 | #elif defined(__AVX__) |
231 | #define AILEGO_VERSION_SIMD " AVX Instruction Set\n" |
232 | #elif defined(__SSE4_2__) |
233 | #define AILEGO_VERSION_SIMD " SSE-4.2 Instruction Set\n" |
234 | #elif defined(__SSE4_1__) |
235 | #define AILEGO_VERSION_SIMD " SSE-4.1 Instruction Set\n" |
236 | #elif defined(__SSSE3__) |
237 | #define AILEGO_VERSION_SIMD " SSSE-3 Instruction Set\n" |
238 | #elif defined(__SSE3__) |
239 | #define AILEGO_VERSION_SIMD " SSE-3 Instruction Set\n" |
240 | #elif defined(__SSE2__) |
241 | #define AILEGO_VERSION_SIMD " SSE-2 Instruction Set\n" |
242 | #elif defined(__SSE__) |
243 | #define AILEGO_VERSION_SIMD " SSE Instruction Set\n" |
244 | #elif defined(__MMX__) |
245 | #define AILEGO_VERSION_SIMD " MMX Instruction Set\n" |
246 | #else |
247 | #define AILEGO_VERSION_SIMD "" |
248 | #endif |
249 | |
250 | #if defined(PY_VERSION) |
251 | #if PY_RELEASE_LEVEL == PY_RELEASE_LEVEL_ALPHA |
252 | #define AILEGO_VERSION_PYTHON \ |
253 | " Python API " PY_VERSION \ |
254 | " Alpha " AILEGO_VERSION_TO_STRING(PY_RELEASE_SERIAL) "\n" |
255 | #elif PY_RELEASE_LEVEL == PY_RELEASE_LEVEL_BETA |
256 | #define AILEGO_VERSION_PYTHON \ |
257 | " Python API " PY_VERSION \ |
258 | " Beta " AILEGO_VERSION_TO_STRING(PY_RELEASE_SERIAL) "\n" |
259 | #elif PY_RELEASE_LEVEL == PY_RELEASE_LEVEL_GAMMA |
260 | #define AILEGO_VERSION_PYTHON \ |
261 | " Python API " PY_VERSION \ |
262 | " Release Candidate " AILEGO_VERSION_TO_STRING(PY_RELEASE_SERIAL) "\n" |
263 | #elif PY_RELEASE_LEVEL == PY_RELEASE_LEVEL_FINAL |
264 | #define AILEGO_VERSION_PYTHON " Python API " PY_VERSION " Final\n" |
265 | #else |
266 | #define AILEGO_VERSION_PYTHON " Python API " PY_VERSION "\n" |
267 | #endif |
268 | #else |
269 | #define AILEGO_VERSION_PYTHON "" |
270 | #endif |
271 | |
272 | //! Gather information of compiling |
273 | #define AILEGO_VERSION_COMPILE_DETAILS(__PREFIX_INFO__) \ |
274 | __PREFIX_INFO__ \ |
275 | "Compiled by " AILEGO_VERSION_COMPILER \ |
276 | ".\n" \ |
277 | "Compiled for " AILEGO_VERSION_PROCESSOR \ |
278 | ".\n" \ |
279 | "Compiled on " AILEGO_VERSION_PLATFORM " on " __DATE__ " " __TIME__ \ |
280 | ".\n" \ |
281 | "Compiled with: \n" \ |
282 | "" AILEGO_VERSION_BYTE_ORDER "" AILEGO_VERSION_SIMD \ |
283 | "" AILEGO_VERSION_DEBUG_INFO "" AILEGO_VERSION_ASAN "" AILEGO_VERSION_STDC \ |
284 | "" AILEGO_VERSION_CPLUSPLUS "" AILEGO_VERSION_GXX_ABI \ |
285 | "" AILEGO_VERSION_POSIX "" AILEGO_VERSION_XOPEN "" AILEGO_VERSION_LSB \ |
286 | "" AILEGO_VERSION_GLIBC "" AILEGO_VERSION_WINSDK "" AILEGO_VERSION_CLR \ |
287 | "" AILEGO_VERSION_OPENMP "" AILEGO_VERSION_PYTHON "\n" |
288 | |