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 language. */
14
#if defined(__cplusplus)
15
# define K_CPP
16
#endif
17
18
#if defined(__cplusplus_cli)
19
# define K_CPP_CLI
20
#endif
21
22
/* Detect the compiler family; fall back to GCC as default. */
23
#if defined(_MSC_VER)
24
# define K_MSVC
25
#elif defined(__TI_COMPILER_VERSION__)
26
# define K_TI_CCS
27
#else
28
# define K_GCC
29
#endif
30
31
/* Detect the OS; fall back to non-specific POSIX as default. */
32
#if defined(_WIN32) || defined(_WIN64)
33
# define K_WINDOWS
34
#elif defined(__TMS320C6X__)
35
# define K_TI_BIOS
36
# define K_DSP_BIOS
/* old definition, provided for compatibility with FS<=6.1.33.x */
37
#elif defined(_WRS_KERNEL)
38
# define K_VX_KERNEL
39
#else
40
# define K_POSIX
41
# if defined(__linux__)
42
# define K_LINUX
43
# endif
44
# if defined(__APPLE__)
45
# define K_DARWIN
46
# endif
47
# if defined(__QNXNTO__)
48
# define K_QNX
49
# endif
50
#endif
51
52
/* Code profiling always enabled in debug builds. */
53
#if defined(K_DEBUG)
54
# define K_PROFILE
55
#endif
56
57
#if defined(K_DEBUG)
58
# define K_DEBUG_ENABLED (1)
59
#else
60
# define K_DEBUG_ENABLED (0)
61
#endif
62
63
#if defined(K_PROFILE)
64
# define K_PROFILE_ENABLED (1)
65
#else
66
# define K_PROFILE_ENABLED (0)
67
#endif
68
69
/* Provide shorter symbol to use when checking for Cuda support. */
70
#if defined(K_HAVE_CUDA)
71
# define K_CUDA
72
#endif
73
74
/*
75
* Include some C standard headers that we heavily rely on. This list is subject to change;
76
* dependent code should not assume that these headers will always be included here.
77
*/
78
#if defined(K_MSVC) && defined(K_DEBUG)
79
# define _CRTDBG_MAP_ALLOC
80
# include <stdlib.h>
81
# include <crtdbg.h>
82
#else
83
# include <stdlib.h>
84
#endif
85
86
#include <stdarg.h>
87
#include <stddef.h>
88
#include <string.h>
89
90
#if defined(K_MSVC)
91
# include <intrin.h>
92
#endif
93
94
/* Utilty macros for stringizing macro arguments. */
95
#define xkStringize(X) #X
96
#define xkStringizeDefine(X) xkStringize(X)
97
98
/*
99
* Detect pointer size; raise an eror if the pointer size cannot be detected. The behaviour
100
* can be overridden by defining K_POINTER_SIZE as a compiler flag.
101
*/
102
#if !defined(K_POINTER_SIZE)
103
# if defined(_WIN64) || defined(WIN64)
104
# define K_POINTER_SIZE (8)
105
# elif defined(_WIN32) || defined(WIN32)
106
# define K_POINTER_SIZE (4)
107
# elif defined(__SIZEOF_POINTER__)
108
# define K_POINTER_SIZE (__SIZEOF_POINTER__)
109
# elif defined(__LP64__) || defined(__LLP64__) || defined(__SILP64__)
110
# define K_POINTER_SIZE (8)
111
# elif defined(__LP32__) || defined(__ILP32__)
112
# define K_POINTER_SIZE (4)
113
# elif defined(_TMS320C6X)
114
# define K_POINTER_SIZE (4)
115
# else
116
# error "Pointer size not detected; define K_POINTER_SIZE as compiler flag."
117
# endif
118
#endif
119
120
#if (K_POINTER_SIZE == 8)
121
# define K_POINTER_SHIFT (3)
122
#elif (K_POINTER_SIZE == 4)
123
# define K_POINTER_SHIFT (2)
124
#endif
125
126
/*
127
* Detect endianness; fall back to little endian as default. The behaviour can be overridden
128
* by defining K_ENDIANNESS as a compiler flag.
129
*/
130
#if !defined(K_ENDIANNESS)
131
# if defined(K_GCC) && defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
132
# define K_ENDIANNESS (kENDIANNESS_BIG)
133
# else
134
# define K_ENDIANNESS (kENDIANNESS_LITTLE)
135
# endif
136
#endif
137
138
#if defined(K_CPP)
139
# define kExtern extern "C"
140
#else
141
# define kExtern extern
142
#endif
143
144
#if defined(K_GCC)
145
# define K_ATTRIBUTE_UNUSED __attribute__((unused))
146
#else
147
# define K_ATTRIBUTE_UNUSED
148
#endif
149
150
/* Define primitive data types and calling conventions. */
151
#if defined(K_MSVC)
152
153
# define xkCall __stdcall
154
# define xkDlCall __cdecl
155
156
# define kExportFx(TYPE) kExtern __declspec(dllexport) TYPE kCall
157
# define kImportFx(TYPE) kExtern __declspec(dllimport) TYPE kCall
158
159
# define kExportCx(TYPE) kExtern __declspec(dllexport) TYPE xkDlCall
160
# define kImportCx(TYPE) kExtern __declspec(dllimport) TYPE xkDlCall
161
162
# define kInFx(TYPE) kExtern TYPE kCall
163
# define kInCx(TYPE) kExtern TYPE kCall
164
165
# define kExportDx(TYPE) __declspec(dllexport) TYPE
166
# define kImportDx(TYPE) __declspec(dllimport) TYPE
167
168
# define kInDx(TYPE) TYPE
169
170
# define kExportClass __declspec(dllexport)
171
# define kImportClass __declspec(dllimport)
172
173
# if _MSC_VER >= 1500
174
# define kInline __inline
175
# else
176
# define kInline
177
# endif
178
179
typedef
unsigned
__int8 xk8u;
180
typedef
unsigned
__int16 xk16u;
181
typedef
unsigned
__int32 xk32u;
182
typedef
unsigned
__int64 xk64u;
183
typedef
__int8 xk8s;
184
typedef
__int16 xk16s;
185
typedef
__int32 xk32s;
186
typedef
__int64 xk64s;
187
typedef
float
xk32f;
188
typedef
double
xk64f;
189
typedef
char
xkChar;
190
typedef
unsigned
char
xkByte;
191
192
# define xk64U(CONSTANT) (CONSTANT##ui64)
193
# define xk64S(CONSTANT) (CONSTANT##i64)
194
195
#elif defined(K_TI_CCS)
196
197
# define xkCall
198
# define xkDlCall
199
200
# define kExportFx(TYPE) kExtern TYPE kCall
201
# define kImportFx(TYPE) kExtern TYPE kCall
202
203
# define kExportCx(TYPE) kExtern TYPE kDlCall
204
# define kImportCx(TYPE) kExtern TYPE kDlCall
205
206
# define kInFx(TYPE) kExtern TYPE kCall
207
# define kInCx(TYPE) kExtern TYPE kCall
208
209
# define kExportDx(TYPE) TYPE
210
# define kImportDx(TYPE) TYPE
211
212
# define kInDx(TYPE) TYPE
213
214
# define kExportClass
215
# define kImportClass
216
217
# define kInline inline
218
219
typedef
unsigned
char
xk8u;
220
typedef
unsigned
short
xk16u;
221
typedef
unsigned
int
xk32u;
222
typedef
unsigned
long
long
xk64u;
223
typedef
signed
char
xk8s;
224
typedef
signed
short
xk16s;
225
typedef
signed
int
xk32s;
226
typedef
signed
long
long
xk64s;
227
typedef
float
xk32f;
228
typedef
double
xk64f;
229
typedef
char
xkChar;
230
typedef
unsigned
char
xkByte;
231
232
# define xk64U(CONSTANT) (CONSTANT##LLU)
233
# define xk64S(CONSTANT) (CONSTANT##LL)
234
235
#else
236
237
# define xkCall
238
# define xkDlCall
239
240
# define kExportFx(TYPE) kExtern TYPE kCall
241
# define kImportFx(TYPE) kExtern TYPE kCall
242
243
# define kExportCx(TYPE) kExtern TYPE kDlCall
244
# define kImportCx(TYPE) kExtern TYPE kDlCall
245
246
# define kInFx(TYPE) kExtern TYPE kCall
247
# define kInCx(TYPE) kExtern TYPE kCall
248
249
# define kExportDx(TYPE) TYPE
250
# define kImportDx(TYPE) TYPE
251
252
# define kInDx(TYPE) TYPE
253
254
# define kExportClass
255
# define kImportClass
256
257
# define kInline inline
258
259
typedef
unsigned
char
xk8u;
260
typedef
unsigned
short
xk16u;
261
typedef
unsigned
int
xk32u;
262
typedef
unsigned
long
long
xk64u;
263
typedef
signed
char
xk8s;
264
typedef
signed
short
xk16s;
265
typedef
signed
int
xk32s;
266
typedef
signed
long
long
xk64s;
267
typedef
float
xk32f;
268
typedef
double
xk64f;
269
typedef
char
xkChar;
270
typedef
unsigned
char
xkByte;
271
272
# define xk64U(CONSTANT) (CONSTANT##LLU)
273
# define xk64S(CONSTANT) (CONSTANT##LL)
274
275
#endif
276
277
#define xkInlineFx(TYPE) static kInline TYPE kCall
278
279
#if (K_POINTER_SIZE == 4)
280
281
typedef
xk32u xkSize;
282
# define xkSIZE_MAX k32U_MAX
283
284
typedef
xk32s xkSSize;
285
# define xkSSIZE_MIN k32S_MIN
286
# define xkSSIZE_MAX k32S_MAX
287
288
#elif (K_POINTER_SIZE == 8)
289
290
typedef
xk64u xkSize;
291
# define xkSIZE_MAX k64U_MAX
292
293
typedef
xk64s xkSSize;
294
# define xkSSIZE_MIN k64S_MIN
295
# define xkSSIZE_MAX k64S_MAX
296
297
#endif
298
299
#define kALIGN_ANY (3)
300
#define kALIGN_ANY_SIZE (1 << kALIGN_ANY)
301
302
#define kVarArgList va_list
303
304
#if defined(K_MSVC) || defined(K_TI_CCS)
305
# define kVarArgList_Start(ARG_PTR, PREV_PARAM) va_start(ARG_PTR, PREV_PARAM)
306
# define kVarArgList_End(ARG_PTR) va_end(ARG_PTR)
307
# define kVarArgList_Copy(ARG_PTR, SOURCE) ((ARG_PTR) = (SOURCE))
308
# define kVarArgList_Next(ARG_PTR, TYPE) va_arg(ARG_PTR, TYPE)
309
#else
310
# define kVarArgList_Start(ARG_PTR, PREV_PARAM) va_start(ARG_PTR, PREV_PARAM)
311
# define kVarArgList_End(ARG_PTR) va_end(ARG_PTR)
312
# define kVarArgList_Copy(ARG_PTR, SOURCE) va_copy(ARG_PTR, SOURCE)
313
# define kVarArgList_Next(ARG_PTR, TYPE) va_arg(ARG_PTR, TYPE)
314
#endif
315
316
317
/* Deprecation support. */
318
#if !defined(K_NO_DEPRECATION)
319
# if defined(K_MSVC)
320
# define xkDeprecate(SYMBOL) __pragma(deprecated(SYMBOL))
321
# else
322
# define xkDeprecate(SYMBOL)
323
# endif
324
#else
325
# define xkDeprecate(SYMBOL)
326
#endif
327
328
/* Warning support. */
329
#if defined(K_MSVC)
330
331
# define xkWarn(MESSAGE) __pragma(message(__FILE__ "(" xkStringizeDefine(__LINE__) "): warning: " MESSAGE))
332
333
#elif defined(K_GCC)
334
335
# define xkWarnHelper(x) _Pragma (#x)
336
# define xkWarn(MESSAGE) xkWarnHelper(GCC warning MESSAGE)
337
338
#else
339
340
# define xkWarn(MESSAGE)
341
342
#endif
343
344
/* Software breakpoint support. */
345
#if defined(K_DEBUG) && defined(K_MSVC)
346
# define xkDebugBreak() __debugbreak()
347
#else
348
# define xkDebugBreak()
349
#endif
350
351
#if defined (K_CPP)
352
# define kBeginCHeader() extern "C" {
353
# define kEndCHeader() }
354
#else
355
# define kBeginCHeader()
356
# define kEndCHeader()
357
#endif
358
359
360
/*
361
* Some source files require platform library headers to be included. And, at least
362
* for Windows, there can sometimes exist complicated rules about the particular order
363
* in which headers have to be included. The K_PLATFORM symbol helps to deal with
364
* these issues.
365
*
366
* Any kApi source file that requires platform headers should have #define K_PLATFORM as the
367
* first line in the source file. This ensures that the most common platform headers are
368
* included here, in the correct order.
369
*/
370
#if defined(K_PLATFORM)
371
372
/*
373
* Common for all platforms.
374
*/
375
# include <assert.h>
376
377
/*
378
* Platform specific includes.
379
*/
380
# if defined(K_WINDOWS)
381
# include <winsock2.h>
382
# include <mswsock.h>
383
# include <ws2tcpip.h>
384
# include <iphlpapi.h>
385
# include <windows.h>
386
# include <process.h>
387
# endif
388
# if defined(K_TI_BIOS)
389
# include <xdc/std.h>
390
# include <xdc/runtime/Types.h>
391
# include <xdc/runtime/Error.h>
392
# include <ti/sysbios/BIOS.h>
393
# include <ti/sysbios/knl/Clock.h>
394
# include <ti/sysbios/knl/Semaphore.h>
395
# include <ti/sysbios/knl/Task.h>
396
kBeginCHeader()
397
# include <netmain.h>
398
# include <nettools/nettools.h>
399
# include <nettools/inc/inet.h>
400
kEndCHeader()
401
# endif
402
# if defined(K_VX_KERNEL)
403
# if defined(K_DEBUG)
404
# pragma GCC optimize ("O2")
405
# include <errno.h>
/* work-around for error "ldarm: error in obj.o (.eh_frame); no .eh_frame_hdr table will be created." */
406
# pragma GCC reset_options
407
# endif
408
# include <vxWorks.h>
409
# include <sysLib.h>
410
# include <kernelLib.h>
411
# include <loadLib.h>
412
# include <intLib.h>
413
# include <symLib.h>
414
# include <sysSymTbl.h>
415
# include <taskLib.h>
416
# include <inline/semLibInline.h>
417
# include <unldLib.h>
418
# include <stdioLib.h>
419
# include <strLib.h>
420
# include <sockLib.h>
421
# include <inetLib.h>
422
# include <ioLib.h>
423
# include <fioLib.h>
424
# include <selectLib.h>
425
# include <netinet/in.h>
426
# include <netinet/tcp.h>
427
# include <wrapper/wrapperHostLib.h>
428
# include <netdb.h>
429
# include <sys/socket.h>
430
# include <net/if.h>
431
# include <net/if_ll.h>
432
# include <net/ifaddrs.h>
433
# include <net/ethernet.h>
434
# include <ipnet/ipioctl.h>
435
# include <ipcom_sock.h>
436
# include <ipcom_netlink.h>
437
# endif
438
# if defined(K_POSIX)
439
# include <errno.h>
440
# include <unistd.h>
441
# include <pthread.h>
442
# include <semaphore.h>
443
# include <sys/types.h>
444
# include <sys/stat.h>
445
# if defined(K_QNX)
446
# include <fcntl.h>
447
# else
448
# include <sys/fcntl.h>
449
# endif
450
# include <sys/socket.h>
451
# include <sys/select.h>
452
# include <sys/syscall.h>
453
# include <sys/ioctl.h>
454
# include <sys/resource.h>
455
# include <sys/time.h>
456
# include <sys/timeb.h>
457
# include <netinet/in.h>
458
# include <netinet/tcp.h>
459
# include <dlfcn.h>
460
# include <dirent.h>
461
# include <net/if.h>
462
# include <ifaddrs.h>
/* not technically posix, but seemingly supported everywhere that matters */
463
# include <netdb.h>
464
465
# endif
466
# if defined(K_DARWIN)
467
# include <mach-o/dyld.h>
468
# endif
469
# if defined (K_LINUX)
470
# include <signal.h>
471
# include <sys/prctl.h>
472
# include <sys/wait.h>
473
# include <linux/sockios.h>
474
# include <linux/ethtool.h>
475
# include <linux/netlink.h>
476
# include <linux/rtnetlink.h>
477
# endif
478
#endif
479
480
#if defined(K_VX_KERNEL)
481
typedef
xk32s xkAtomic32s;
482
typedef
xkSSize xkAtomicPointer;
483
#else
484
typedef
volatile
xk32s xkAtomic32s;
485
typedef
void
*
volatile
xkAtomicPointer;
486
#endif
487
488
#if defined(K_PLATFORM)
489
# if defined(K_WINDOWS)
490
# define kOS_INFINITE INFINITE
491
typedef
DWORD kThreadId;
492
# elif defined(K_TI_BIOS)
493
# define kOS_INFINITE ti_sysbios_BIOS_WAIT_FOREVER
494
typedef
ti_sysbios_knl_Task_Handle kThreadId;
495
# elif defined(K_VX_KERNEL)
496
# define kOS_INFINITE WAIT_FOREVER
497
typedef
TASK_ID kThreadId;
498
# elif defined(K_POSIX)
499
# define kOS_INFINITE 0
/* no special "infinite" value */
500
typedef
pthread_t kThreadId;
501
# endif
502
#endif
503
504
#if defined(K_VX_KERNEL)
505
# if defined(K_MAIN_DYNAMIC)
506
# undef kMain
507
# define kMain kMain_Dynamic
508
# else
509
# undef kMain
510
# define kMain kMain
511
# endif
512
# define kMAIN_DYNAMIC "kMain_Dynamic"
513
#else
514
# define kMAIN_DYNAMIC "kMain"
515
#endif
516
517
518
/*
519
* Deprecated (Stage 1): not recommended for further use, but not yet announced via kDeprecate
520
*/
521
522
#if defined (K_CPP)
523
524
//[Deprecated] No longer required; provided that any C functions are properly annotated.
525
//Use kBeginCHeader/kEndCHeader to include a C header from C++ if the header was not designed to support C++.
526
# define kBeginHeader() extern "C" {
527
528
//[Deprecated] No longer required; provided that any C functions are properly annotated.
529
//Use kBeginCHeader/kEndCHeader to include a C header from C++ if the header was not designed to support C++.
530
# define kEndHeader() }
531
532
#else
533
534
//[Deprecated] No longer required; provided that any C functions are properly annotated.
535
//Use kBeginCHeader/kEndCHeader to include a C header from C++ if the header was not designed to support C++.
536
# define kBeginHeader()
537
538
//[Deprecated] No longer required; provided that any C functions are properly annotated.
539
//Use kBeginCHeader/kEndCHeader to include a C header from C++ if the header was not designed to support C++.
540
# define kEndHeader()
541
542
#endif
543
544
#endif
kApiCfg.h
This site is best viewed with Firefox. Copyright (C) 2003-2016 by LMI Technologies.