blob: 426ab680702a98d8d341c73f9cdc82a2fc1c8cd6 [file] [log] [blame]
Neels Hofmeyr17518fe2017-06-20 04:35:06 +02001/*! \file endian.h
2 *
Holger Hans Peter Freyther249a81b2015-03-22 09:03:42 +01003 * GNU and FreeBSD have various ways to express the
Oliver Smith0b5c09b2023-02-17 10:35:38 +01004 * endianness but none of them is similar enough. This
Holger Hans Peter Freyther249a81b2015-03-22 09:03:42 +01005 * will create two defines that allows to decide on the
6 * endian. The following will be defined to either 0 or
7 * 1 at the end of the file.
8 *
9 * OSMO_IS_LITTLE_ENDIAN
10 * OSMO_IS_BIG_ENDIAN
11 *
12 */
13
Neels Hofmeyr17518fe2017-06-20 04:35:06 +020014#pragma once
15
Holger Hans Peter Freyther249a81b2015-03-22 09:03:42 +010016#if defined(__FreeBSD__)
17#include <sys/endian.h>
18 #if BYTE_ORDER == LITTLE_ENDIAN
19 #define OSMO_IS_LITTLE_ENDIAN 1
20 #define OSMO_IS_BIG_ENDIAN 0
21 #elif BYTE_ORDER == BIG_ENDIAN
22 #define OSMO_IS_LITTLE_ENDIAN 0
23 #define OSMO_IS_BIG_ENDIAN 1
24 #else
25 #error "Unknown endian"
26 #endif
Arran Cudbard-Bellcc3694b2016-05-18 16:02:19 -040027#elif defined(__APPLE__)
28#include <machine/endian.h>
29 #if defined(__DARWIN_LITTLE_ENDIAN)
30 #define OSMO_IS_LITTLE_ENDIAN 1
31 #define OSMO_IS_BIG_ENDIAN 0
Beshr Al Nahase4c294f2016-05-28 14:21:13 +020032 #elif defined(__DARWIN_BIG_ENDIAN)
Arran Cudbard-Bellcc3694b2016-05-18 16:02:19 -040033 #define OSMO_IS_LITTLE_ENDIAN 0
34 #define OSMO_IS_BIG_ENDIAN 1
35 #else
36 #error "Unknown endian"
37 #endif
Harald Welte054667f2017-05-15 11:44:39 +020038#elif defined(__linux__)
Holger Hans Peter Freyther249a81b2015-03-22 09:03:42 +010039#include <endian.h>
40 #if __BYTE_ORDER == __LITTLE_ENDIAN
41 #define OSMO_IS_LITTLE_ENDIAN 1
42 #define OSMO_IS_BIG_ENDIAN 0
43 #elif __BYTE_ORDER == __BIG_ENDIAN
44 #define OSMO_IS_LITTLE_ENDIAN 0
45 #define OSMO_IS_BIG_ENDIAN 1
46 #else
47 #error "Unknown endian"
48 #endif
Harald Welte054667f2017-05-15 11:44:39 +020049#else
50 /* let's try to rely on the compiler. GCC and CLANG/LLVM seem
51 * to support this ... */
52 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
53 #define OSMO_IS_LITTLE_ENDIAN 1
54 #define OSMO_IS_BIG_ENDIAN 0
55 #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
56 #define OSMO_IS_LITTLE_ENDIAN 0
57 #define OSMO_IS_BIG_ENDIAN 1
58 #else
59 #error "Unknown endian"
60 #endif
Holger Hans Peter Freyther249a81b2015-03-22 09:03:42 +010061#endif
62