1*4882a593SmuzhiyunFrom 4bd8fe780ff2064f2d4e9c905d8a98dd0f9b6191 Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Nevo Hed <nhed+buildroot@starry.com>
3*4882a593SmuzhiyunDate: Mon, 30 Aug 2021 13:28:13 -0400
4*4882a593SmuzhiyunSubject: [PATCH] Allow forcing of endianness for cross-compilation
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunUpstream-status: Invalid (upstream doesn't support cross-compilation)
7*4882a593SmuzhiyunSee https://trac.nginx.org/nginx/ticket/2240
8*4882a593Smuzhiyun
9*4882a593SmuzhiyunSigned-off-by: Nevo Hed <nhed+buildroot@starry.com>
10*4882a593Smuzhiyun---
11*4882a593Smuzhiyun auto/endianness | 61 ++++++++++++++++++++++++++++++++-----------------
12*4882a593Smuzhiyun auto/options    |  6 +++++
13*4882a593Smuzhiyun 2 files changed, 46 insertions(+), 21 deletions(-)
14*4882a593Smuzhiyun
15*4882a593Smuzhiyundiff --git a/auto/endianness b/auto/endianness
16*4882a593Smuzhiyunindex 1b552b6b..4b2a3cd7 100644
17*4882a593Smuzhiyun--- a/auto/endianness
18*4882a593Smuzhiyun+++ b/auto/endianness
19*4882a593Smuzhiyun@@ -26,25 +26,44 @@ int main(void) {
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun END
22*4882a593Smuzhiyun
23*4882a593Smuzhiyun-ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \
24*4882a593Smuzhiyun-          -o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT $ngx_feature_libs"
25*4882a593Smuzhiyun-
26*4882a593Smuzhiyun-eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
27*4882a593Smuzhiyun-
28*4882a593Smuzhiyun-if [ -x $NGX_AUTOTEST ]; then
29*4882a593Smuzhiyun-    if $NGX_AUTOTEST >/dev/null 2>&1; then
30*4882a593Smuzhiyun-        echo " little endian"
31*4882a593Smuzhiyun+case "${NGX_FORCE_ENDIANNESS}" in
32*4882a593Smuzhiyun+    little)
33*4882a593Smuzhiyun+        echo " little endian (forced)"
34*4882a593Smuzhiyun         have=NGX_HAVE_LITTLE_ENDIAN . auto/have
35*4882a593Smuzhiyun-    else
36*4882a593Smuzhiyun-        echo " big endian"
37*4882a593Smuzhiyun-    fi
38*4882a593Smuzhiyun-
39*4882a593Smuzhiyun-    rm -rf $NGX_AUTOTEST*
40*4882a593Smuzhiyun-
41*4882a593Smuzhiyun-else
42*4882a593Smuzhiyun-    rm -rf $NGX_AUTOTEST*
43*4882a593Smuzhiyun-
44*4882a593Smuzhiyun-    echo
45*4882a593Smuzhiyun-    echo "$0: error: cannot detect system byte ordering"
46*4882a593Smuzhiyun-    exit 1
47*4882a593Smuzhiyun-fi
48*4882a593Smuzhiyun+    ;;
49*4882a593Smuzhiyun+
50*4882a593Smuzhiyun+    big)
51*4882a593Smuzhiyun+        echo " big endian (forced)"
52*4882a593Smuzhiyun+    ;;
53*4882a593Smuzhiyun+
54*4882a593Smuzhiyun+    "")
55*4882a593Smuzhiyun+        ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \
56*4882a593Smuzhiyun+                  -o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT $ngx_feature_libs"
57*4882a593Smuzhiyun+
58*4882a593Smuzhiyun+        eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
59*4882a593Smuzhiyun+
60*4882a593Smuzhiyun+        if [ -x $NGX_AUTOTEST ]; then
61*4882a593Smuzhiyun+            if $NGX_AUTOTEST >/dev/null 2>&1; then
62*4882a593Smuzhiyun+                echo " little endian"
63*4882a593Smuzhiyun+                have=NGX_HAVE_LITTLE_ENDIAN . auto/have
64*4882a593Smuzhiyun+            else
65*4882a593Smuzhiyun+                echo " big endian"
66*4882a593Smuzhiyun+            fi
67*4882a593Smuzhiyun+
68*4882a593Smuzhiyun+            rm -rf $NGX_AUTOTEST*
69*4882a593Smuzhiyun+
70*4882a593Smuzhiyun+        else
71*4882a593Smuzhiyun+            rm -rf $NGX_AUTOTEST*
72*4882a593Smuzhiyun+
73*4882a593Smuzhiyun+            echo
74*4882a593Smuzhiyun+            echo "$0: error: cannot detect system byte ordering"
75*4882a593Smuzhiyun+            exit 1
76*4882a593Smuzhiyun+        fi
77*4882a593Smuzhiyun+    ;;
78*4882a593Smuzhiyun+
79*4882a593Smuzhiyun+    *)
80*4882a593Smuzhiyun+        echo
81*4882a593Smuzhiyun+        echo "$0: error: invalid \"--force-endianness=${NGX_FORCE_ENDIANNESS}\""
82*4882a593Smuzhiyun+        exit 1
83*4882a593Smuzhiyun+    ;;
84*4882a593Smuzhiyun+esac
85*4882a593Smuzhiyundiff --git a/auto/options b/auto/options
86*4882a593Smuzhiyunindex 80be906e..85a06456 100644
87*4882a593Smuzhiyun--- a/auto/options
88*4882a593Smuzhiyun+++ b/auto/options
89*4882a593Smuzhiyun@@ -17,6 +17,8 @@ NGX_USER=
90*4882a593Smuzhiyun NGX_GROUP=
91*4882a593Smuzhiyun NGX_BUILD=
92*4882a593Smuzhiyun
93*4882a593Smuzhiyun+NGX_FORCE_ENDIANNESS=
94*4882a593Smuzhiyun+
95*4882a593Smuzhiyun CC=${CC:-cc}
96*4882a593Smuzhiyun CPP=
97*4882a593Smuzhiyun NGX_OBJS=objs
98*4882a593Smuzhiyun@@ -196,6 +198,8 @@ do
99*4882a593Smuzhiyun         --user=*)                        NGX_USER="$value"          ;;
100*4882a593Smuzhiyun         --group=*)                       NGX_GROUP="$value"         ;;
101*4882a593Smuzhiyun
102*4882a593Smuzhiyun+        --force-endianness=*)            NGX_FORCE_ENDIANNESS="$value" ;;
103*4882a593Smuzhiyun+
104*4882a593Smuzhiyun         --crossbuild=*)                  NGX_PLATFORM="$value"      ;;
105*4882a593Smuzhiyun
106*4882a593Smuzhiyun         --build=*)                       NGX_BUILD="$value"         ;;
107*4882a593Smuzhiyun@@ -432,6 +436,8 @@ cat << END
108*4882a593Smuzhiyun   --build=NAME                       set build name
109*4882a593Smuzhiyun   --builddir=DIR                     set build directory
110*4882a593Smuzhiyun
111*4882a593Smuzhiyun+  --force-endianness=<big>|<little>  force endianness
112*4882a593Smuzhiyun+
113*4882a593Smuzhiyun   --with-select_module               enable select module
114*4882a593Smuzhiyun   --without-select_module            disable select module
115*4882a593Smuzhiyun   --with-poll_module                 enable poll module
116*4882a593Smuzhiyun--
117*4882a593Smuzhiyun2.31.1
118*4882a593Smuzhiyun
119