diff --git a/include/boost/detail/endian.hpp b/include/boost/detail/endian.hpp index 447efe0..40277fb 100644 --- a/include/boost/detail/endian.hpp +++ b/include/boost/detail/endian.hpp @@ -28,10 +28,12 @@ #ifndef BOOST_DETAIL_ENDIAN_HPP #define BOOST_DETAIL_ENDIAN_HPP +// +// Special cases come first: +// +#if defined (__GLIBC__) // GNU libc offers the helpful header which defines // __BYTE_ORDER - -#if defined (__GLIBC__) # include # if (__BYTE_ORDER == __LITTLE_ENDIAN) # define BOOST_LITTLE_ENDIAN @@ -43,8 +45,11 @@ # error Unknown machine endianness detected. # endif # define BOOST_BYTE_ORDER __BYTE_ORDER + #elif defined(__NetBSD__) || defined(__FreeBSD__) || \ defined(__OpenBSD__) || (__DragonFly__) +// +// BSD has endian.h, see https://svn.boost.org/trac/boost/ticket/6013 # if defined(__OpenBSD__) # include # else @@ -60,6 +65,27 @@ # error Unknown machine endianness detected. # endif # define BOOST_BYTE_ORDER _BYTE_ORDER + +#elif defined( __ANDROID__ ) +// Adroid specific code, see: https://svn.boost.org/trac/boost/ticket/7528 +// Here we can use machine/_types.h, see: +// http://stackoverflow.com/questions/6212951/endianness-of-android-ndk +# include "machine/_types.h" +# ifdef __ARMEB__ +# define BOOST_BIG_ENDIAN +# define BOOST_BYTE_ORDER 4321 +# else +# define BOOST_LITTLE_ENDIAN +# define BOOST_BYTE_ORDER 1234 +# endif // __ARMEB__ + +#elif defined( _XBOX ) +// +// XBox is always big endian?? +// +# define BOOST_BIG_ENDIAN +# define BOOST_BYTE_ORDER 4321 + #elif defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN) || \ defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__) || \ defined(_STLP_BIG_ENDIAN) && !defined(_STLP_LITTLE_ENDIAN)