#!/bin/sh #Cross Build Static aarch64 Tor Binary on Alpine x86_x64 install_dir="`pwd`/aarch64" include_dir="${install_dir}/include" lib_dir="${install_dir}/lib" custom_flags_set() { CPPFLAGS="--static -static -I${include_dir}" LDFLAGS="--static -static -Wl,--no-as-needed -L${lib_dir} -lpthread -pthread" } custom_flags_reset() { CPPFLAGS="" LDFLAGS="" } custom_flags_reset [ -n "$1" -a "$1" = "prepare" ] && { #Prerequirements # apt-get update # apt-get install -y build-essential curl #lzma, zstd # apt install -y liblzma-dev # apt install -y libzstd-dev #Dependecies rm -rf aarch64/ rm -rf xz-5.2.5/ rm -rf zstd-1.5.0/ rm -rf zlib-1.2.11/ rm -rf libevent-2.1.8-stable/ rm -rf openssl-1.1.1k/ #lzma curl -fsSL "https://tukaani.org/xz/xz-5.2.5.tar.gz" | tar zxvf - cd xz-5.2.5 CC=aarch64-linux-musl-gcc ./configure --prefix=${install_dir} --host=aarch64-linux-musl make -j"$(nproc)" CXXFLAGS="${CXXFLAGS}" CPPFLAGS="${CPPFLAGS}" LDFLAGS="${LDFLAGS}" make install cd .. # exit #zstd curl -fsSL "https://github.com/facebook/zstd/releases/download/v1.5.0/zstd-1.5.0.tar.gz" | tar zxvf - cd zstd-1.5.0 CC=aarch64-linux-musl-gcc make -j"$(nproc)" \ CXXFLAGS="${CXXFLAGS}" CPPFLAGS="${CPPFLAGS}" LDFLAGS="${LDFLAGS}" make PREFIX=${install_dir} install cd .. # exit #zLib curl -fsSL "https://zlib.net/zlib-1.2.11.tar.gz" | tar zxvf - cd zlib-1.2.11 custom_flags_set CC=aarch64-linux-musl-gcc ./configure --prefix=${install_dir} --static make -j"$(nproc)" CXXFLAGS="${CXXFLAGS}" CPPFLAGS="${CPPFLAGS}" LDFLAGS="${LDFLAGS}" make install cd .. #libssl curl -fsSL "https://www.openssl.org/source/openssl-1.1.1k.tar.gz" | tar zxvf - cd openssl-1.1.1k custom_flags_set ./Configure linux-aarch64 --cross-compile-prefix=aarch64-linux-musl- --prefix=${install_dir} threads no-shared no-dso no-comp CXXFLAGS="${CXXFLAGS}" CPPFLAGS="${CPPFLAGS}" LDFLAGS="${LDFLAGS}" make -j$(nproc) # make install make install_sw cd .. #libevent curl -fsSL "https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz" | tar zxvf - cd libevent-2.1.8-stable custom_flags_set ./configure --host=aarch64-linux-musl \ --prefix=${install_dir} \ --disable-shared \ --enable-static \ --with-pic \ CC=aarch64-linux-musl-gcc CXX=aarch64-linux-musl-g++ \ CPPFLAGS="${CPPFLAGS}" LDFLAGS="${LDFLAGS}" make -j$(nproc) make install cd .. } #Tor #rm -rf tor-0.4.6.6/ #curl -fsSL "https://dist.torproject.org/tor-0.4.6.6.tar.gz" | tar zxvf - #cd tor-0.4.6.6 cd tor git pull ./autogen.sh make distclean PWD="`pwd`" [ -n "$1" -a "$1" = "mini" ] && { ./configure --prefix=$PWD/install --host=aarch64-linux-musl --disable-tool-name-check \ --enable-static-tor \ --disable-zstd --disable-lzma \ --disable-manpage --disable-html-manual --disable-asciidoc --disable-unittests \ --disable-seccomp --disable-libscrypt \ --with-libevent-dir=${install_dir} \ --with-openssl-dir=${install_dir} \ --with-zlib-dir=${install_dir} \ --disable-module-dirauth --disable-module-relay --disable-tests --disable-bench \ CC=aarch64-linux-musl-gcc CXX=aarch64-linux-musl-g++ # CPPFLAGS="${CPPFLAGS}" LDFLAGS="${LDFLAGS}" #fix `read-only segment has dynamic relocations` error sed -i 's/-pie//g' Makefile } || { ./configure --prefix=$PWD/install --host=aarch64-linux-musl --disable-tool-name-check \ --enable-static-tor --enable-static-libevent --enable-static-openssl --enable-static-zlib \ --enable-zstd --enable-lzma --enable-pic \ --disable-manpage --disable-html-manual --disable-asciidoc --disable-unittests \ --disable-seccomp --disable-libscrypt \ --with-libevent-dir=${install_dir} \ --with-openssl-dir=${install_dir} \ --with-zlib-dir=${install_dir} \ CC=aarch64-linux-musl-gcc CXX=aarch64-linux-musl-g++ # CPPFLAGS="${CPPFLAGS}" LDFLAGS="${LDFLAGS}" sed -i 's/-pie//g' Makefile } make -j$(nproc) make install cd install/bin aarch64-linux-musl-strip * ls -la file ./tor