| From d3920dce139734e00bbe4447a16ef24dfe4d704a Mon Sep 17 00:00:00 2001 |
| From: Eric Le Bihan <eric.le.bihan.dev@free.fr> |
| Date: Tue, 10 Oct 2017 19:51:02 +0200 |
| 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 <eric.le.bihan.dev@free.fr> |
| --- |
| configure | 13 ++++++++++--- |
| src/sysdeps/trybigendian.c | 16 ++++++++++++++++ |
| src/sysdeps/trylittleendian.c | 19 +++++++++++++++++++ |
| 3 files changed, 45 insertions(+), 3 deletions(-) |
| create mode 100644 src/sysdeps/trybigendian.c |
| create mode 100644 src/sysdeps/trylittleendian.c |
| |
| diff --git a/configure b/configure |
| index f34dcd0..f2a77f3 100755 |
| --- a/configure |
| +++ b/configure |
| @@ -478,12 +478,19 @@ EOF |
| exec 3>&- |
| |
| echo "Checking system endianness..." |
| - $CC_AUTO $CPPFLAGS_AUTO $CPPFLAGS $CPPFLAGS_POST $CFLAGS_AUTO $CFLAGS $CFLAGS_POST $LDFLAGS_AUTO $LDFLAGS $LDFLAGS_POST -o tryendianness src/sysdeps/tryendianness.c |
| - endianness=$(./tryendianness) || fail "$0: unable to determine endianness" |
| + if $CC_AUTO $CPPFLAGS_AUTO $CPPFLAGS $CPPFLAGS_POST $CFLAGS_AUTO $CFLAGS $CFLAGS_POST $LDFLAGS_AUTO $LDFLAGS $LDFLAGS_POST -o trybigendian src/sysdeps/trybigendian.c 2>/dev/null; then |
| + endianness=big |
| + else |
| + if $CC_AUTO $CPPFLAGS_AUTO $CPPFLAGS $CPPFLAGS_POST $CFLAGS_AUTO $CFLAGS $CFLAGS_POST $LDFLAGS_AUTO $LDFLAGS $LDFLAGS_POST -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 |
| |
| trytypes |
| choose clr accept4 ACCEPT4 'accept4()' |
| 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.13.6 |
| |