nginx 交叉编译
aarch64
gcc version 10.3.1 20210621 (GNU Toolchain for the A-profile Architecture 10.3-2021.07 (arm-10.29))
依赖
- libatomic_ops -
https://github.com/ivmai/libatomic_ops.git
- release-7_6 - pcre -
https://udomain.dl.sourceforge.net/project/pcre/pcre/8.45/pcre-8.45.tar.bz2
- oepnssl -
https://github.com/openssl/openssl.git
- OpenSSL_1_1_0-stable - zlib -
https://github.com/madler/zlib.git
-v1.2.9
- nginx -
https://github.com/nginx/nginx.git
-branches/stable-1.22
.
├── libatomic_ops
├── nginx
├── openssl
├── pcre-8.45
├── pcre-8.45.tar.bz2
├── README.md
└── zlib
nginx 相关修改
type
diff --git a/auto/types/sizeof b/auto/types/sizeof
index 480d8cfa4..603d8b358 100644
--- a/auto/types/sizeof
+++ b/auto/types/sizeof
@@ -39,11 +39,13 @@ ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \
eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
-if [ -x $NGX_AUTOTEST ]; then
- ngx_size=`$NGX_AUTOTEST`
- echo " $ngx_size bytes"
-fi
+# if [ -x $NGX_AUTOTEST ]; then
+# ngx_size=`$NGX_AUTOTEST`
+# echo " $ngx_size bytes"
+# fi
+ngx_size=8
+echo " $ngx_size bytes"
case $ngx_size in
4)
gcc
diff --git a/auto/cc/name b/auto/cc/name
index ded93f5bc..d6ab27a6a 100644
--- a/auto/cc/name
+++ b/auto/cc/name
@@ -7,7 +7,7 @@ if [ "$NGX_PLATFORM" != win32 ]; then
ngx_feature="C compiler"
ngx_feature_name=
- ngx_feature_run=yes
+ ngx_feature_run=no
ngx_feature_incs=
ngx_feature_path=
ngx_feature_libs=
libatomic
diff --git a/auto/lib/libatomic/conf b/auto/lib/libatomic/conf
index d1e484ab3..693a7132e 100644
--- a/auto/lib/libatomic/conf
+++ b/auto/lib/libatomic/conf
@@ -7,8 +7,8 @@ if [ $NGX_LIBATOMIC != YES ]; then
have=NGX_HAVE_LIBATOMIC . auto/have
CORE_INCS="$CORE_INCS $NGX_LIBATOMIC/src"
- LINK_DEPS="$LINK_DEPS $NGX_LIBATOMIC/src/libatomic_ops.a"
- CORE_LIBS="$CORE_LIBS $NGX_LIBATOMIC/src/libatomic_ops.a"
+ LINK_DEPS="$LINK_DEPS $NGX_LIBATOMIC/src/.libs/libatomic_ops.a"
+ CORE_LIBS="$CORE_LIBS $NGX_LIBATOMIC/src/.libs/libatomic_ops.a"
else
diff --git a/auto/lib/libatomic/make b/auto/lib/libatomic/make
index c90318ea1..c19253664 100644
--- a/auto/lib/libatomic/make
+++ b/auto/lib/libatomic/make
@@ -5,12 +5,13 @@
cat << END >> $NGX_MAKEFILE
-$NGX_LIBATOMIC/src/libatomic_ops.a: $NGX_LIBATOMIC/Makefile
+$NGX_LIBATOMIC/src/.libs/libatomic_ops.a: $NGX_LIBATOMIC/Makefile
cd $NGX_LIBATOMIC && \$(MAKE)
$NGX_LIBATOMIC/Makefile: $NGX_MAKEFILE
cd $NGX_LIBATOMIC \\
&& if [ -f Makefile ]; then \$(MAKE) distclean; fi \\
- && ./configure
+ && ./autogen.sh \\
+ && ./configure --host=aarch64-linux-gnu
END
pcre
diff --git a/auto/lib/pcre/make b/auto/lib/pcre/make
index 839ef294b..33173e672 100644
--- a/auto/lib/pcre/make
+++ b/auto/lib/pcre/make
@@ -89,7 +89,7 @@ $PCRE/Makefile: $NGX_MAKEFILE
cd $PCRE \\
&& if [ -f Makefile ]; then \$(MAKE) distclean; fi \\
&& CC="\$(CC)" CFLAGS="$PCRE_OPT" \\
- ./configure --disable-shared $PCRE_CONF_OPT
+ ./configure --host=aarch64-linux-gnu --disable-shared $PCRE_CONF_OPT
$PCRE/.libs/libpcre2-8.a: $PCRE/Makefile
cd $PCRE \\
@@ -155,7 +155,7 @@ $PCRE/Makefile: $NGX_MAKEFILE
cd $PCRE \\
&& if [ -f Makefile ]; then \$(MAKE) distclean; fi \\
&& CC="\$(CC)" CFLAGS="$PCRE_OPT" \\
- ./configure --disable-shared $PCRE_CONF_OPT
+ ./configure --host=aarch64-linux-gnu --disable-shared $PCRE_CONF_OPT
$PCRE/.libs/libpcre.a: $PCRE/Makefile
cd $PCRE \\
openssl
diff --git a/auto/lib/openssl/make b/auto/lib/openssl/make
index 126a23875..498d096e7 100644
--- a/auto/lib/openssl/make
+++ b/auto/lib/openssl/make
@@ -51,7 +51,8 @@ END
$OPENSSL/.openssl/include/openssl/ssl.h: $NGX_MAKEFILE
cd $OPENSSL \\
&& if [ -f Makefile ]; then \$(MAKE) clean; fi \\
- && ./config --prefix=$ngx_prefix no-shared no-threads $OPENSSL_OPT \\
+ && ./config no-asm no-shared --prefix=$ngx_prefix no-shared no-threads $OPENSSL_OPT \\
+ && sed -i "s/ -m64/ /g" ./Makefile \\
&& \$(MAKE) \\
&& \$(MAKE) install_sw LIBDIR=lib
编译
# 起始目录包含所有依赖,以及切换到具体的分支,完成 nginx 相关的修改
export WS=$(pwd)
export OPENSSL_DIR="${WS}"/openssl
export LIBATOMIC_DIR="${WS}"/libatomic_ops
export PCRE_DIR="${WS}"/pcre-8.45
export ZLIB_DIR="${WS}"/zlib
export CC=aarch64-linux-gcc
export CXX=aarch64-linux-g++
export AR=aarch64-linux-ar
export RANLIB=aarch64-linux-ranlib
export CACHE_DIR="/var/run"
cd ${WS}/nginx
./auto/configure --prefix="${WS}"/install --conf-path="${WS}"/install \
--error-log-path="${CACHE_DIR}" --pid-path="${CACHE_DIR}" \
--with-threads --with-http_flv_module \
--with-http_ssl_module \
--with-cc=aarch64-linux-gcc --with-cpp=aarch64-linux-g++ \
--with-pcre="${PCRE_DIR}" \
--with-zlib="${ZLIB_DIR}" \
--with-openssl="${OPENSSL_DIR}" \
--with-libatomic="${LIBATOMIC_DIR}"
sed -i '7i #define NGX_HAVE_SYSVSHM 1' ./objs/ngx_auto_config.h
make
# ${WS}/install
make install