summaryrefslogtreecommitdiff
path: root/src/sys-endian.h
blob: 7fa28eeadd3af8d2f044b4c6a0f502e3874f716b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#ifndef LI_SYS_ENDIAN_H
#define LI_SYS_ENDIAN_H
#include "first.h"


#if !defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)


/* copied from of plasma_endian.h
 * https://github.com/gstrauss/plasma/blob/master/plasma_endian.h
 * (used with permission from the author (gstrauss)) */
#if defined(__BYTE_ORDER__)              \
 && (   defined(__ORDER_LITTLE_ENDIAN__) \
     || defined(__ORDER_BIG_ENDIAN__)    \
     || defined(__ORDER_PDP_ENDIAN__)   )
  #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
  #define __LITTLE_ENDIAN__ 1
  #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
  #define __BIG_ENDIAN__ 1
  #endif
#elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)
  #define __LITTLE_ENDIAN__ 1
#elif !defined(_LITTLE_ENDIAN) && defined(_BIG_ENDIAN)
  #define __BIG_ENDIAN__ 1
#elif defined(_WIN32) /* little endian on all current MS-supported platforms */
  #define __LITTLE_ENDIAN__ 1
#elif defined(__GLIBC__) || defined(__linux__)
  #include <endian.h>
  #if __BYTE_ORDER == __LITTLE_ENDIAN
  #define __LITTLE_ENDIAN__ 1
  #elif __BYTE_ORDER == __BIG_ENDIAN
  #define __BIG_ENDIAN__ 1
  #endif
#elif defined(__sun__) && defined(__SVR4)
  #include <sys/isa_defs.h>
  #if defined(_LITTLE_ENDIAN)
  #define __LITTLE_ENDIAN__ 1
  #elif defined(_BIG_ENDIAN)
  #define __BIG_ENDIAN__ 1
  #endif
#elif defined(_AIX)
  #include <sys/machine.h>
  #if BYTE_ORDER == LITTLE_ENDIAN
  #define __LITTLE_ENDIAN__ 1
  #elif BYTE_ORDER == BIG_ENDIAN
  #define __BIG_ENDIAN__ 1
  #endif
#elif defined(__APPLE__) && defined(__MACH__)
  #include <machine/endian.h>
  #if BYTE_ORDER == LITTLE_ENDIAN
  #define __LITTLE_ENDIAN__ 1
  #elif BYTE_ORDER == BIG_ENDIAN
  #define __BIG_ENDIAN__ 1
  #endif
#elif defined(__FreeBSD__) || defined(__NetBSD__) \
   || defined(__OpenBSD__) || defined(__DragonFly__)
  #include <machine/endian.h>
  #if _BYTE_ORDER == _LITTLE_ENDIAN
  #define __LITTLE_ENDIAN__ 1
  #elif _BYTE_ORDER == _BIG_ENDIAN
  #define __BIG_ENDIAN__ 1
  #endif
#else /*(else assume little endian)*/
  #define __LITTLE_ENDIAN__ 1
#endif


#endif /* !defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__) */


#endif