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