Boost logo

Boost :

Subject: [boost] [general] Endianity detection for ARM
From: Jan Hudec (bulb_at_[hidden])
Date: 2012-08-17 16:45:22


Hello All,

Something in Boost.Test started using detail/endian.hpp internally between
1.43 and 1.50. Since at work I build Boost.Test-based tests for several
mobile platforms, all of which use ARM, I needed to fix it.

It is easy for all platforms built with either gcc or clang (Android, iOS and
Bada). Gcc defines __ARMEB__ for big-endian ARM and __ARMEL__ for
little-endian ARM.

Windows CE is however another issue. Microsoft usually defines rather
characteristic _M_<arch> macros, but _M_ARM is *not* defined in Windows CE,
though it appears to be defined for Windows 8 ARM (I don't work with those
yet).

The WinCE projects define ARM and _ARM_, but those may appear on big-endian
ARM platforms too. However since there are no big-endian Win32 platforms and
they are unlikely to be created, I suggest just hardcoding little endian for
anything that defines _WIN32 (the _M_* macros could then possibly be removed,
but they don't cause any problems there).

I therefore propose this patch:

--- a/boost/detail/endian.hpp
+++ b/boost/detail/endian.hpp
@@ -57,7 +57,7 @@
    || defined(_POWER) || defined(__powerpc__) \
    || defined(__ppc__) || defined(__hpux) || defined(__hppa) \
    || defined(_MIPSEB) || defined(_POWER) \
- || defined(__s390__)
+ || defined(__s390__) || defined(__ARMEB__)
 # define BOOST_BIG_ENDIAN
 # define BOOST_BYTE_ORDER 4321
 #elif defined(__i386__) || defined(__alpha__) \
@@ -66,7 +66,9 @@
    || defined(_M_ALPHA) || defined(__amd64) \
    || defined(__amd64__) || defined(_M_AMD64) \
    || defined(__x86_64) || defined(__x86_64__) \
- || defined(_M_X64) || defined(__bfin__)
+ || defined(_M_X64) || defined(__bfin__) \
+ || defined(__ARMEL__) \
+ || defined(_WIN32) // ARM Windows CE don't define __ARMEL__ nor _M_ARM, but there are no big-endian Windows versions
 
 # define BOOST_LITTLE_ENDIAN
 # define BOOST_BYTE_ORDER 1234

-- 
						 Jan 'Bulb' Hudec <bulb_at_[hidden]>

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk