10 #ifndef K_API_API_CFG_H
11 #define K_API_API_CFG_H
14 #if defined(__cplusplus)
18 #if defined(__cplusplus_cli)
25 #elif defined(__TI_COMPILER_VERSION__)
32 #if defined(_WIN32) || defined(_WIN64)
34 #elif defined(__TMS320C6X__)
37 #elif defined(_WRS_KERNEL)
41 # if defined(__linux__)
44 # if defined(__APPLE__)
47 # if defined(__QNXNTO__)
58 # define K_DEBUG_ENABLED (1)
60 # define K_DEBUG_ENABLED (0)
63 #if defined(K_PROFILE)
64 # define K_PROFILE_ENABLED (1)
66 # define K_PROFILE_ENABLED (0)
73 #if defined(K_MSVC) && defined(K_DEBUG)
74 # define _CRTDBG_MAP_ALLOC
86 #define xkStringize(X) #X
87 #define xkStringizeDefine(X) xkStringize(X)
93 #if !defined(K_POINTER_SIZE)
94 # if defined(_WIN64) || defined(WIN64)
95 # define K_POINTER_SIZE (8)
96 # elif defined(_WIN32) || defined(WIN32)
97 # define K_POINTER_SIZE (4)
98 # elif defined(__SIZEOF_POINTER__)
99 # define K_POINTER_SIZE (__SIZEOF_POINTER__)
100 # elif defined(__LP64__) || defined(__LLP64__) || defined(__SILP64__)
101 # define K_POINTER_SIZE (8)
102 # elif defined(__LP32__) || defined(__ILP32__)
103 # define K_POINTER_SIZE (4)
104 # elif defined(_TMS320C6X)
105 # define K_POINTER_SIZE (4)
107 # error "Pointer size not detected; define K_POINTER_SIZE as compiler flag."
111 #if (K_POINTER_SIZE == 8)
112 # define K_POINTER_SHIFT (3)
113 #elif (K_POINTER_SIZE == 4)
114 # define K_POINTER_SHIFT (2)
121 #if !defined(K_ENDIANNESS)
122 # if defined(K_GCC) && defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
123 # define K_ENDIANNESS (kENDIANNESS_BIG)
125 # define K_ENDIANNESS (kENDIANNESS_LITTLE)
130 # define kExtern extern "C"
132 # define kExtern extern
136 # define K_ATTRIBUTE_UNUSED __attribute__((unused))
138 # define K_ATTRIBUTE_UNUSED
144 # define xkCall __stdcall
145 # define xkDlCall __cdecl
147 # define kExportFx(TYPE) kExtern __declspec(dllexport) TYPE kCall
148 # define kImportFx(TYPE) kExtern __declspec(dllimport) TYPE kCall
150 # define kExportCx(TYPE) kExtern __declspec(dllexport) TYPE xkDlCall
151 # define kImportCx(TYPE) kExtern __declspec(dllimport) TYPE xkDlCall
153 # define kInFx(TYPE) kExtern TYPE kCall
154 # define kInCx(TYPE) kExtern TYPE kCall
156 # define kExportDx(TYPE) __declspec(dllexport) TYPE
157 # define kImportDx(TYPE) __declspec(dllimport) TYPE
159 # define kInDx(TYPE) TYPE
161 # define kExportClass __declspec(dllexport)
162 # define kImportClass __declspec(dllimport)
164 # if _MSC_VER >= 1500
165 # define kInline __inline
170 typedef unsigned __int8 xk8u;
171 typedef unsigned __int16 xk16u;
172 typedef unsigned __int32 xk32u;
173 typedef unsigned __int64 xk64u;
175 typedef __int16 xk16s;
176 typedef __int32 xk32s;
177 typedef __int64 xk64s;
179 typedef double xk64f;
181 typedef unsigned char xkByte;
183 # define xk64U(CONSTANT) (CONSTANT##ui64)
184 # define xk64S(CONSTANT) (CONSTANT##i64)
186 #elif defined(K_TI_CCS)
191 # define kExportFx(TYPE) kExtern TYPE kCall
192 # define kImportFx(TYPE) kExtern TYPE kCall
194 # define kExportCx(TYPE) kExtern TYPE kDlCall
195 # define kImportCx(TYPE) kExtern TYPE kDlCall
197 # define kInFx(TYPE) kExtern TYPE kCall
198 # define kInCx(TYPE) kExtern TYPE kCall
200 # define kExportDx(TYPE) TYPE
201 # define kImportDx(TYPE) TYPE
203 # define kInDx(TYPE) TYPE
205 # define kExportClass
206 # define kImportClass
208 # define kInline inline
210 typedef unsigned char xk8u;
211 typedef unsigned short xk16u;
212 typedef unsigned int xk32u;
213 typedef unsigned long long xk64u;
214 typedef signed char xk8s;
215 typedef signed short xk16s;
216 typedef signed int xk32s;
217 typedef signed long long xk64s;
219 typedef double xk64f;
221 typedef unsigned char xkByte;
223 # define xk64U(CONSTANT) (CONSTANT##LLU)
224 # define xk64S(CONSTANT) (CONSTANT##LL)
231 # define kExportFx(TYPE) kExtern TYPE kCall
232 # define kImportFx(TYPE) kExtern TYPE kCall
234 # define kExportCx(TYPE) kExtern TYPE kDlCall
235 # define kImportCx(TYPE) kExtern TYPE kDlCall
237 # define kInFx(TYPE) kExtern TYPE kCall
238 # define kInCx(TYPE) kExtern TYPE kCall
240 # define kExportDx(TYPE) TYPE
241 # define kImportDx(TYPE) TYPE
243 # define kInDx(TYPE) TYPE
245 # define kExportClass
246 # define kImportClass
248 # define kInline inline
250 typedef unsigned char xk8u;
251 typedef unsigned short xk16u;
252 typedef unsigned int xk32u;
253 typedef unsigned long long xk64u;
254 typedef signed char xk8s;
255 typedef signed short xk16s;
256 typedef signed int xk32s;
257 typedef signed long long xk64s;
259 typedef double xk64f;
261 typedef unsigned char xkByte;
263 # define xk64U(CONSTANT) (CONSTANT##LLU)
264 # define xk64S(CONSTANT) (CONSTANT##LL)
268 #define xkInlineFx(TYPE) static kInline TYPE kCall
270 #if (K_POINTER_SIZE == 4)
272 typedef xk32u xkSize;
273 # define xkSIZE_MAX k32U_MAX
275 typedef xk32s xkSSize;
276 # define xkSSIZE_MIN k32S_MIN
277 # define xkSSIZE_MAX k32S_MAX
279 #elif (K_POINTER_SIZE == 8)
281 typedef xk64u xkSize;
282 # define xkSIZE_MAX k64U_MAX
284 typedef xk64s xkSSize;
285 # define xkSSIZE_MIN k64S_MIN
286 # define xkSSIZE_MAX k64S_MAX
290 #define kALIGN_ANY (3)
291 #define kALIGN_ANY_SIZE (1 << kALIGN_ANY)
293 #define kVarArgList va_list
295 #if defined(K_MSVC) || defined(K_TI_CCS)
296 # define kVarArgList_Start(ARG_PTR, PREV_PARAM) va_start(ARG_PTR, PREV_PARAM)
297 # define kVarArgList_End(ARG_PTR) va_end(ARG_PTR)
298 # define kVarArgList_Copy(ARG_PTR, SOURCE) ((ARG_PTR) = (SOURCE))
299 # define kVarArgList_Next(ARG_PTR, TYPE) va_arg(ARG_PTR, TYPE)
301 # define kVarArgList_Start(ARG_PTR, PREV_PARAM) va_start(ARG_PTR, PREV_PARAM)
302 # define kVarArgList_End(ARG_PTR) va_end(ARG_PTR)
303 # define kVarArgList_Copy(ARG_PTR, SOURCE) va_copy(ARG_PTR, SOURCE)
304 # define kVarArgList_Next(ARG_PTR, TYPE) va_arg(ARG_PTR, TYPE)
309 #if !defined(K_NO_DEPRECATION)
311 # define xkDeprecate(SYMBOL) __pragma(deprecated(SYMBOL))
313 # define xkDeprecate(SYMBOL)
316 # define xkDeprecate(SYMBOL)
322 # define xkWarn(MESSAGE) __pragma(message(__FILE__ "(" xkStringizeDefine(__LINE__) "): warning: " MESSAGE))
326 # define xkWarnHelper(x) _Pragma (#x)
327 # define xkWarn(MESSAGE) xkWarnHelper(GCC warning MESSAGE)
331 # define xkWarn(MESSAGE)
336 #if defined(K_DEBUG) && defined(K_MSVC)
337 # define xkDebugBreak() __debugbreak()
339 # define xkDebugBreak()
343 # define kBeginCHeader() extern "C" {
344 # define kEndCHeader() }
346 # define kBeginCHeader()
347 # define kEndCHeader()
361 #if defined(K_PLATFORM)
371 # if defined(K_WINDOWS)
372 # include <winsock2.h>
373 # include <mswsock.h>
374 # include <ws2tcpip.h>
375 # include <iphlpapi.h>
376 # include <windows.h>
377 # include <process.h>
379 # if defined(K_TI_BIOS)
380 # include <xdc/std.h>
381 # include <xdc/runtime/Types.h>
382 # include <xdc/runtime/Error.h>
383 # include <ti/sysbios/BIOS.h>
384 # include <ti/sysbios/knl/Clock.h>
385 # include <ti/sysbios/knl/Semaphore.h>
386 # include <ti/sysbios/knl/Task.h>
388 # include <netmain.h>
389 # include <nettools/nettools.h>
390 # include <nettools/inc/inet.h>
393 # if defined(K_VX_KERNEL)
394 # if defined(K_DEBUG)
395 # pragma GCC optimize ("O2")
397 # pragma GCC reset_options
399 # include <vxWorks.h>
401 # include <kernelLib.h>
402 # include <loadLib.h>
405 # include <sysSymTbl.h>
406 # include <taskLib.h>
407 # include <inline/semLibInline.h>
408 # include <unldLib.h>
409 # include <stdioLib.h>
411 # include <sockLib.h>
412 # include <inetLib.h>
415 # include <selectLib.h>
416 # include <netinet/in.h>
417 # include <netinet/tcp.h>
418 # include <wrapper/wrapperHostLib.h>
420 # include <sys/socket.h>
422 # include <net/if_ll.h>
423 # include <net/ethernet.h>
424 # include <ipnet/ipioctl.h>
426 # if defined(K_POSIX)
429 # include <pthread.h>
430 # include <semaphore.h>
431 # include <sys/types.h>
432 # include <sys/stat.h>
436 # include <sys/fcntl.h>
438 # include <sys/socket.h>
439 # include <sys/select.h>
440 # include <sys/ioctl.h>
441 # include <sys/time.h>
442 # include <sys/timeb.h>
443 # include <netinet/in.h>
444 # include <netinet/tcp.h>
450 # if defined(K_DARWIN)
451 # include <ifaddrs.h>
452 # include <mach-o/dyld.h>
454 # if defined (K_LINUX)
456 # include <sys/prctl.h>
457 # include <sys/wait.h>
458 # include <linux/sockios.h>
459 # include <linux/ethtool.h>
463 #if defined(K_VX_KERNEL)
464 typedef xk32s xkAtomic32s;
465 typedef xkSSize xkAtomicPointer;
467 typedef volatile xk32s xkAtomic32s;
468 typedef void*
volatile xkAtomicPointer;
471 #if defined(K_PLATFORM)
472 # if defined(K_WINDOWS)
473 # define kOS_INFINITE INFINITE
474 typedef DWORD kThreadId;
475 # elif defined(K_TI_BIOS)
476 # define kOS_INFINITE ti_sysbios_BIOS_WAIT_FOREVER
477 typedef ti_sysbios_knl_Task_Handle kThreadId;
478 # elif defined(K_VX_KERNEL)
479 # define kOS_INFINITE WAIT_FOREVER
480 typedef TASK_ID kThreadId;
481 # elif defined(K_POSIX)
482 # define kOS_INFINITE 0
483 typedef pthread_t kThreadId;
487 #if defined(K_VX_KERNEL)
488 # if defined(K_MAIN_DYNAMIC)
490 # define kMain kMain_Dynamic
495 # define kMAIN_DYNAMIC "kMain_Dynamic"
497 # define kMAIN_DYNAMIC "kMain"
509 # define kBeginHeader() extern "C" {
513 # define kEndHeader() }
519 # define kBeginHeader()
523 # define kEndHeader()
532 #define xkDeprecateSymbol(SYMBOL) xkDeprecate(#SYMBOL)
535 #define kVarArgList_Start_ kVarArgList_Start
536 xkDeprecateSymbol(kVarArgList_Start_)
539 #define kVarArgList_End_ kVarArgList_End
540 xkDeprecateSymbol(kVarArgList_End_)
543 #define kVarArgList_Copy_ kVarArgList_Copy
544 xkDeprecateSymbol(kVarArgList_Copy_)
547 #define kVarArgList_Next_ kVarArgList_Next
548 xkDeprecateSymbol(kVarArgList_Next_)