Zen API
Home
Topics
Types
Files
All
Classes
Files
Functions
Variables
Typedefs
Friends
Macros
Modules
Pages
kApiCfg.h
Go to the documentation of this file.
1
10
#ifndef K_API_API_CFG_H
11
#define K_API_API_CFG_H
12
13
/* Detect the compiler family; fall back to GCC as default. */
14
#if defined(_MSC_VER)
15
# define K_MSVC
16
#elif defined(__TI_COMPILER_VERSION__)
17
# define K_TI_CCS
18
#else
19
# define K_GCC
20
#endif
21
22
/* Detect the OS; fall back to non-specific POSIX as default. */
23
#if defined(_WIN32) || defined(_WIN64)
24
# define K_WINDOWS
25
#elif defined(K_TI_CCS)
26
# define K_DSP_BIOS
27
#elif defined(_WRS_KERNEL)
28
# define K_VX_KERNEL
29
#else
30
# define K_POSIX
31
# if defined(__linux__)
32
# define K_LINUX
33
# endif
34
# if defined(__APPLE__)
35
# define K_DARWIN
36
# endif
37
# if defined(__QNXNTO__)
38
# define K_QNX
39
# endif
40
#endif
41
42
#if defined(K_DEBUG)
43
# define K_DEBUG_ENABLED (1)
44
#else
45
# define K_DEBUG_ENABLED (0)
46
#endif
47
48
#if defined(K_PROFILE)
49
# define K_PROFILE_ENABLED (1)
50
#else
51
# define K_PROFILE_ENABLED (0)
52
#endif
53
54
/*
55
* Include some C standard headers that we heavily rely on. This list is subject to change;
56
* dependent code should not assume that these headers will always be included here.
57
*/
58
#if defined(K_MSVC) && defined(K_DEBUG)
59
# define _CRTDBG_MAP_ALLOC
60
# include <stdlib.h>
61
# include <crtdbg.h>
62
#else
63
# include <stdlib.h>
64
#endif
65
66
#include <stdarg.h>
67
#include <stddef.h>
68
#include <string.h>
69
#include <assert.h>
70
71
/*
72
* Detect pointer size; raise an eror if the pointer size cannot be detected. The behaviour
73
* can be overridden by defining K_POINTER_SIZE as a compiler flag.
74
*/
75
#if !defined(K_POINTER_SIZE)
76
# if defined(_WIN64) || defined(WIN64)
77
# define K_POINTER_SIZE (8)
78
# elif defined(_WIN32) || defined(WIN32)
79
# define K_POINTER_SIZE (4)
80
# elif defined(__SIZEOF_POINTER__)
81
# define K_POINTER_SIZE (__SIZEOF_POINTER__)
82
# elif defined(__LP64__) || defined(__LLP64__) || defined(__SILP64__)
83
# define K_POINTER_SIZE (8)
84
# elif defined(__LP32__) || defined(__ILP32__)
85
# define K_POINTER_SIZE (4)
86
# elif defined(_TMS320C6X)
87
# define K_POINTER_SIZE (4)
88
# else
89
# error "Pointer size not detected; define K_POINTER_SIZE as compiler flag."
90
# endif
91
#endif
92
93
/*
94
* Detect endianness; fall back to little endian as default. The behaviour can be overridden
95
* by defining K_ENDIANNESS as a compiler flag.
96
*/
97
#if !defined(K_ENDIANNESS)
98
# if defined(K_GCC) && defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
99
# define K_ENDIANNESS (kENDIANNESS_BIG)
100
# else
101
# define K_ENDIANNESS (kENDIANNESS_LITTLE)
102
# endif
103
#endif
104
105
/* Define primative data types and calling conventions. */
106
#if defined(K_MSVC)
107
108
# define kxCall __stdcall
109
# define kxDlCall __cdecl
110
111
# define kExportFx(TYPE) __declspec(dllexport) TYPE kCall
112
# define kImportFx(TYPE) __declspec(dllimport) TYPE kCall
113
114
# define kExportCx(TYPE) __declspec(dllexport) TYPE kxDlCall
115
# define kImportCx(TYPE) __declspec(dllimport) TYPE kxDlCall
116
117
# define kInFx(TYPE) TYPE kCall
118
# define kInCx(TYPE) TYPE kCall
119
120
# define kExportDx(TYPE) __declspec(dllexport) TYPE
121
# define kImportDx(TYPE) __declspec(dllimport) TYPE
122
123
# define kInDx(TYPE) TYPE
124
125
typedef
unsigned
__int8 kx8u;
126
typedef
unsigned
__int16 kx16u;
127
typedef
unsigned
__int32 kx32u;
128
typedef
unsigned
__int64 kx64u;
129
typedef
__int8 kx8s;
130
typedef
__int16 kx16s;
131
typedef
__int32 kx32s;
132
typedef
__int64 kx64s;
133
typedef
float
kx32f;
134
typedef
double
kx64f;
135
typedef
char
kxChar;
136
typedef
unsigned
char
kxByte;
137
138
# define kx64U(CONSTANT) (CONSTANT##ui64)
139
# define kx64S(CONSTANT) (CONSTANT##i64)
140
141
#elif defined(K_TI_CCS)
142
143
# define kxCall
144
# define kxDlCall
145
146
# define kExportFx(TYPE) TYPE kCall
147
# define kImportFx(TYPE) TYPE kCall
148
149
# define kExportCx(TYPE) TYPE kDlCall
150
# define kImportCx(TYPE) TYPE kDlCall
151
152
# define kInFx(TYPE) TYPE kCall
153
# define kInCx(TYPE) TYPE kCall
154
155
# define kExportDx(TYPE) TYPE
156
# define kImportDx(TYPE) TYPE
157
158
# define kInDx(TYPE) TYPE
159
160
typedef
unsigned
char
kx8u;
161
typedef
unsigned
short
kx16u;
162
typedef
unsigned
int
kx32u;
163
typedef
unsigned
long
long
kx64u;
164
typedef
signed
char
kx8s;
165
typedef
signed
short
kx16s;
166
typedef
signed
int
kx32s;
167
typedef
signed
long
long
kx64s;
168
typedef
float
kx32f;
169
typedef
double
kx64f;
170
typedef
char
kxChar;
171
typedef
unsigned
char
kxByte;
172
173
# define kx64U(CONSTANT) (CONSTANT##LLU)
174
# define kx64S(CONSTANT) (CONSTANT##LL)
175
176
#else
177
178
# define kxCall
179
# define kxDlCall
180
181
# define kExportFx(TYPE) TYPE kCall
182
# define kImportFx(TYPE) TYPE kCall
183
184
# define kExportCx(TYPE) TYPE kDlCall
185
# define kImportCx(TYPE) TYPE kDlCall
186
187
# define kInFx(TYPE) TYPE kCall
188
# define kInCx(TYPE) TYPE kCall
189
190
# define kExportDx(TYPE) TYPE
191
# define kImportDx(TYPE) TYPE
192
193
# define kInDx(TYPE) TYPE
194
195
typedef
unsigned
char
kx8u;
196
typedef
unsigned
short
kx16u;
197
typedef
unsigned
int
kx32u;
198
typedef
unsigned
long
long
kx64u;
199
typedef
signed
char
kx8s;
200
typedef
signed
short
kx16s;
201
typedef
signed
int
kx32s;
202
typedef
signed
long
long
kx64s;
203
typedef
float
kx32f;
204
typedef
double
kx64f;
205
typedef
char
kxChar;
206
typedef
unsigned
char
kxByte;
207
208
# define kx64U(CONSTANT) (CONSTANT##LLU)
209
# define kx64S(CONSTANT) (CONSTANT##LL)
210
211
#endif
212
213
#if (K_POINTER_SIZE == 4)
214
215
typedef
kx32u kxSize;
216
# define kxSIZE_MAX k32U_MAX
217
218
typedef
kx32s kxSSize;
219
# define kxSSIZE_MIN k32S_MIN
220
# define kxSSIZE_MAX k32S_MAX
221
222
#elif (K_POINTER_SIZE == 8)
223
224
typedef
kx64u kxSize;
225
# define kxSIZE_MAX k64U_MAX
226
227
typedef
kx64s kxSSize;
228
# define kxSSIZE_MIN k64S_MIN
229
# define kxSSIZE_MAX k64S_MAX
230
231
#endif
232
233
#define kALIGN_ANY (3)
234
#define kALIGN_ANY_SIZE (1 << kALIGN_ANY)
235
236
#define kVarArgList va_list
237
238
#if defined(K_MSVC) || defined(K_TI_CCS)
239
# define kVarArgList_Start_(ARG_PTR, PREV_PARAM) va_start(ARG_PTR, PREV_PARAM)
240
# define kVarArgList_End_(ARG_PTR) va_end(ARG_PTR)
241
# define kVarArgList_Copy_(ARG_PTR, SOURCE) ((ARG_PTR) = (SOURCE))
242
# define kVarArgList_Next_(ARG_PTR, TYPE) va_arg(ARG_PTR, TYPE)
243
#else
244
# define kVarArgList_Start_(ARG_PTR, PREV_PARAM) va_start(ARG_PTR, PREV_PARAM)
245
# define kVarArgList_End_(ARG_PTR) va_end(ARG_PTR)
246
# define kVarArgList_Copy_(ARG_PTR, SOURCE) va_copy(ARG_PTR, SOURCE)
247
# define kVarArgList_Next_(ARG_PTR, TYPE) va_arg(ARG_PTR, TYPE)
248
#endif
249
250
/*
251
* The kBeginHeader/kEndHeader macros are used to wrap header files. This enables any required
252
* definitions, pragmas, etc., to be pushed/popped as part of header processing.
253
*/
254
#if defined (__cplusplus)
255
# define kBeginHeader() extern "C" {
256
# define kEndHeader() }
257
#else
258
# define kBeginHeader()
259
# define kEndHeader()
260
#endif
261
262
/*
263
* Some source files require platform library headers to be included. And, at least
264
* for Windows, there can sometimes exist complicated rules about the particular order
265
* in which headers have to be included. The K_PLATFORM symbol helps to deal with
266
* these issues.
267
*
268
* Any kApi source file that requires platform headers should have #define K_PLATFORM as the
269
* first line in the source file. This ensures that the most common platform headers are
270
* included here, in the correct order.
271
*/
272
#if defined(K_PLATFORM)
273
# if defined(K_WINDOWS)
274
# include <winsock2.h>
275
# include <ws2tcpip.h>
276
# include <iphlpapi.h>
277
# include <windows.h>
278
# include <process.h>
279
# endif
280
# if defined(K_DSP_BIOS)
281
# include <std.h>
282
# include <gbl.h>
283
# include <clk.h>
284
# include <tsk.h>
285
# include <lck.h>
286
# include <sem.h>
287
# include <prd.h>
288
# include <netmain.h>
289
# include <nettools/nettools.h>
290
# include <nettools/inc/inet.h>
291
# endif
292
# if defined(K_VX_KERNEL)
293
# include <vxWorks.h>
294
# include <sysLib.h>
295
# include <kernelLib.h>
296
# include <intLib.h>
297
# include <taskLib.h>
298
# include <stdioLib.h>
299
# include <strLib.h>
300
# include <sockLib.h>
301
# include <inetLib.h>
302
# include <ioLib.h>
303
# include <fioLib.h>
304
# include <selectLib.h>
305
# include <netinet/in.h>
306
# include <netinet/tcp.h>
307
# include <wrapper/wrapperHostLib.h>
308
# include <netdb.h>
309
# include <sys/socket.h>
310
# include <net/if.h>
311
# include <ipnet/ipioctl.h>
312
# endif
313
# if defined(K_POSIX)
314
# include <errno.h>
315
# include <unistd.h>
316
# include <pthread.h>
317
# include <semaphore.h>
318
# include <sys/types.h>
319
# include <sys/stat.h>
320
# include <sys/fcntl.h>
321
# include <sys/socket.h>
322
# include <sys/select.h>
323
# include <sys/ioctl.h>
324
# include <sys/time.h>
325
# include <sys/timeb.h>
326
# include <netinet/in.h>
327
# include <netinet/tcp.h>
328
# include <dlfcn.h>
329
# include <dirent.h>
330
# include <net/if.h>
331
# include <netdb.h>
332
# endif
333
# if defined(K_DARWIN)
334
# include <ifaddrs.h>
335
# include <mach-o/dyld.h>
336
# include <libkern/OSAtomic.h>
337
# endif
338
#endif
339
340
#if defined(K_VX_KERNEL)
341
# include <base/b_atomic_t.h>
342
343
typedef
atomic32Val_t kxAtomic32s;
344
typedef
atomicVal_t kxAtomicPointer;
345
#else
346
typedef
volatile
kx32s kxAtomic32s;
347
typedef
void
*
volatile
kxAtomicPointer;
348
#endif
349
350
#if defined(K_PLATFORM)
351
# if defined(K_WINDOWS)
352
# define K_OS_INFINITE INFINITE
353
typedef
DWORD kThreadId;
354
# elif defined(K_DSP_BIOS)
355
# define K_OS_INFINITE SYS_FOREVER
356
typedef
TSK_Handle kThreadId;
357
# elif defined(K_VX_KERNEL)
358
# define K_OS_INFINITE WAIT_FOREVER
359
typedef
TASK_ID kThreadId;
360
# elif defined(K_POSIX)
361
# define K_OS_INFINITE kINFINITE
/* no special "infinite" value */
362
typedef
pthread_t kThreadId;
363
# endif
364
#endif
365
366
#if defined(K_COMPAT_5)
367
368
/* Simple renaming (handled by porting script). */
369
# define KAPI_ALIGN_SHIFT kALIGN_ANY
370
# define KAPI_ALIGN kALIGN_ANY_SIZE
371
372
/*
373
* These flags probably shouldn't exist; but since they're going to be
374
* required for some time (FS 5 compatibility), we may as well use an
375
* up-to-date style.
376
*/
377
# if defined(K_DSP)
378
# define KAPI_DSP
379
# elif defined(K_HOST)
380
# define KAPI_HOST
381
# elif defined(K_VIRTUAL)
382
# define KAPI_VIRTUAL
383
# endif
384
385
# if defined(K_WINDOWS)
386
# define KAPI_MS_WINDOWS
387
# elif defined(K_DSP_BIOS)
388
# define KAPI_TI_DSP_BIOS
389
# endif
390
391
#endif
392
393
#endif
kApiCfg.h
This site is best viewed with Firefox. Copyright (C) 2003-2015 by LMI Technologies.