From 6754b208e7ec3bd1d4265db18fa4c0e7961a77bf Mon Sep 17 00:00:00 2001 From: Eric Le Bihan Date: Mon, 20 Mar 2017 20:05:00 +0100 Subject: [PATCH] No runtime tests for endianness Replace build and execution of runtime test programs for determining the endianness of the target with compile time test programs. This improves support for cross-compilation. Signed-off-by: Eric Le Bihan --- configure | 15 +++++++++++---- src/sysdeps/trybigendian.c | 16 ++++++++++++++++ src/sysdeps/trylittleendian.c | 19 +++++++++++++++++++ 3 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 src/sysdeps/trybigendian.c create mode 100644 src/sysdeps/trylittleendian.c diff --git a/configure b/configure index 1579025..4da9c5e 100755 --- a/configure +++ b/configure @@ -463,13 +463,20 @@ EOF fi exec 3>&- - echo "Checking system endianness..." - $CC_AUTO $CPPFLAGS_AUTO $CFLAGS_AUTO -o tryendianness src/sysdeps/tryendianness.c - endianness=$(./tryendianness) || fail "$0: unable to determine endianness" + echo "Checking system endianness..." + if $CC_AUTO $CPPFLAGS_AUTO $CFLAGS_AUTO -o trybigendian src/sysdeps/trybigendian.c 2>/dev/null; then + endianness=big + else + if $CC_AUTO $CPPFLAGS_AUTO $CFLAGS_AUTO -o trylittleendian src/sysdeps/trylittleendian.c 2>/dev/null; then + endianness=little + else + fail "$0: unable to determine endianness" + fi + fi echo "endianness: $endianness" >> $sysdeps/sysdeps echo "#define ${package_macro_name}_ENDIANNESS \"$endianness\"" >> $sysdeps/sysdeps.h echo " ... $endianness" - rm -f tryendianness + rm -f trybigendian trylittleendian trytypesize ushort USHORT "unsigned short" trytypesize uint UINT "unsigned int" diff --git a/src/sysdeps/trybigendian.c b/src/sysdeps/trybigendian.c new file mode 100644 index 0000000..d857572 --- /dev/null +++ b/src/sysdeps/trybigendian.c @@ -0,0 +1,16 @@ +#if defined(__BYTE_ORDER) && (__BYTE_ORDER == __BIG_ENDIAN) || \ + defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) || \ + defined(__BIG_ENDIAN) || \ + defined(__ARMEB__) || \ + defined(__THUMBEB__) || \ + defined(__AARCH64EB__) || \ + defined(_MIPSEB) || defined(__MIPSEB) || defined(__MIPSEB__) +#define YEAH +#else +#error "not big endian" +#endif + +int main(void) +{ + return 0; +} diff --git a/src/sysdeps/trylittleendian.c b/src/sysdeps/trylittleendian.c new file mode 100644 index 0000000..68b93c1 --- /dev/null +++ b/src/sysdeps/trylittleendian.c @@ -0,0 +1,19 @@ +#if defined(__BYTE_ORDER) && (__BYTE_ORDER == __LITTLE_ENDIAN) || \ + defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || \ + defined(__LITTLE_ENDIAN) || \ + defined(__ARMEL__) || \ + defined(__THUMBEL__) || \ + defined(__AARCH64EL__) || \ + defined(__i386) || defined(__i386__) || \ + defined(__amd64) || defined(__amd64__) || \ + defined(__x86_64) || defined(__x86_64__) || \ + defined(_MIPSEL) || defined(__MIPSEL) || defined(__MIPSEL__) +#define YEAH +#else +#error "not little endian" +#endif + +int main(void) +{ + return 0; +} -- 2.1.4