1 #ifndef LI_SYS_ENDIAN_H 2 #define LI_SYS_ENDIAN_H 3 #include "first.h" 4 5 6 #if !defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__) 7 8 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 20 #endif 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__) 28 #include <endian.h> 29 #if __BYTE_ORDER == __LITTLE_ENDIAN 30 #define __LITTLE_ENDIAN__ 1 31 #elif __BYTE_ORDER == __BIG_ENDIAN 32 #define __BIG_ENDIAN__ 1 33 #endif 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 40 #endif 41 #elif defined(_AIX) 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 47 #endif 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 54 #endif 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 62 #endif 63 #else /*(else assume little endian)*/ 64 #define __LITTLE_ENDIAN__ 1 65 #endif 66 67 68 #endif /* !defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__) */ 69 70 71 #endif 72