kumquat-buildroot/package/skalibs/0001-No-runtime-tests-for-endianness.patch

99 lines
3.1 KiB
Diff
Raw Normal View History

From f0e49690a6da92079d03afbf2aae413b273d2010 Mon Sep 17 00:00:00 2001
From: Eric Le Bihan <eric.le.bihan.dev@free.fr>
Date: Thu, 18 May 2017 19:38:37 +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 | 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 1eaccd3..5fffc34 100755
--- a/configure
+++ b/configure
@@ -471,13 +471,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
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.9.3