endian.h: Make it work on 'bare iron' builds (and possibly more platforms)

We can use __BYTE_ORDER__ which seems to be defined by both gcc and
clang/llvm.

Change-Id: Id6821c99e88242126d9697099b1dd92c6212526a
diff --git a/include/osmocom/core/endian.h b/include/osmocom/core/endian.h
index ae133c3..621f34e 100644
--- a/include/osmocom/core/endian.h
+++ b/include/osmocom/core/endian.h
@@ -34,7 +34,7 @@
 	#else
 		#error "Unknown endian"
 	#endif
-#else
+#elif defined(__linux__)
 #include <endian.h>
         #if __BYTE_ORDER == __LITTLE_ENDIAN
                 #define OSMO_IS_LITTLE_ENDIAN           1
@@ -45,5 +45,17 @@
         #else
                 #error "Unknown endian"
         #endif
+#else
+	/* let's try to rely on the compiler.  GCC and CLANG/LLVM seem
+	 * to support this ... */
+	#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+		#define OSMO_IS_LITTLE_ENDIAN           1
+		#define OSMO_IS_BIG_ENDIAN              0
+	#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+		#define OSMO_IS_LITTLE_ENDIAN           0
+		#define OSMO_IS_BIG_ENDIAN              1
+	#else
+		#error "Unknown endian"
+	#endif
 #endif