1 #ifndef LI_SYS_ENDIAN_H
2 #define LI_SYS_ENDIAN_H
6 #if !defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)
9 /* copied from of plasma_endian.h
10 * https://github.com/gstrauss/plasma/blob/master/plasma_endian.h
11 * (used with permission from the author (gstrauss)) */
12 #if defined(__BYTE_ORDER__) \
13 && ( defined(__ORDER_LITTLE_ENDIAN__) \
14 || defined(__ORDER_BIG_ENDIAN__) \
15 || defined(__ORDER_PDP_ENDIAN__) )
16 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
17 #define __LITTLE_ENDIAN__ 1
18 #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
19 #define __BIG_ENDIAN__ 1
21 #elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)
22 #define __LITTLE_ENDIAN__ 1
23 #elif !defined(_LITTLE_ENDIAN) && defined(_BIG_ENDIAN)
24 #define __BIG_ENDIAN__ 1
25 #elif defined(_WIN32) /* little endian on all current MS-supported platforms */
26 #define __LITTLE_ENDIAN__ 1
27 #elif defined(__GLIBC__) || defined(__linux__)
29 #if __BYTE_ORDER == __LITTLE_ENDIAN
30 #define __LITTLE_ENDIAN__ 1
31 #elif __BYTE_ORDER == __BIG_ENDIAN
32 #define __BIG_ENDIAN__ 1
34 #elif defined(__sun__) && defined(__SVR4)
35 #include <sys/isa_defs.h>
36 #if defined(_LITTLE_ENDIAN)
37 #define __LITTLE_ENDIAN__ 1
38 #elif defined(_BIG_ENDIAN)
39 #define __BIG_ENDIAN__ 1
42 #include <sys/machine.h>
43 #if BYTE_ORDER == LITTLE_ENDIAN
44 #define __LITTLE_ENDIAN__ 1
45 #elif BYTE_ORDER == BIG_ENDIAN
46 #define __BIG_ENDIAN__ 1
48 #elif defined(__APPLE__) && defined(__MACH__)
49 #include <machine/endian.h>
50 #if BYTE_ORDER == LITTLE_ENDIAN
51 #define __LITTLE_ENDIAN__ 1
52 #elif BYTE_ORDER == BIG_ENDIAN
53 #define __BIG_ENDIAN__ 1
55 #elif defined(__FreeBSD__) || defined(__NetBSD__) \
56 || defined(__OpenBSD__) || defined(__DragonFly__)
57 #include <machine/endian.h>
58 #if _BYTE_ORDER == _LITTLE_ENDIAN
59 #define __LITTLE_ENDIAN__ 1
60 #elif _BYTE_ORDER == _BIG_ENDIAN
61 #define __BIG_ENDIAN__ 1
63 #else /*(else assume little endian)*/
64 #define __LITTLE_ENDIAN__ 1
68 #endif /* !defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__) */