Requirements:

Download the Android NDK:

Android NDK r21e (Linux x86_64)

Install dependencies for cross-compiling:

sudo apt update
sudo apt install -y \
    autoconf \
    automake \
    bison \
    bc \
    build-essential \
    clang \
    cpio \
    cmake \
    cmake-format \
    curl \
    debhelper \
    debhelper-compat \
    device-tree-compiler \
    dpkg-dev \
    dwarves \
    file \
    fakeroot \
    flex \
    g++ \
    g++-multilib \
    git \
    gawk \
    gettext \
    libdb-dev \
    libelf-dev \
    libffi-dev \
    libgmp-dev \
    liblzma-dev \
    libmpc-dev \
    libmpfr-dev \
    libncurses-dev \
    libncurses5-dev \
    libssl-dev \
    libtool \
    make \
    ninja-build \
    patch \
    pkg-config \
    python3 \
    python3-pip \
    python3-setuptools \
    rsync \
    unzip \
    wget \
    xsltproc \
    zip \
    zlib1g-dev

#!/usr/bin/env bash
# aMiscreant

set -e

# Toolchain
export NDK=/root/android-ndk-r21e
export API=29
export PREFIX=/root/static_prefix

export CC="$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android${API}-clang"
export CXX="$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android${API}-clang++"
export AR="$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar"
export RANLIB="$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib"
export STRIP="$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip"
export LD="$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/ld.lld"

export PATH="$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH"
export PKG_CONFIG_LIBDIR=$PREFIX/lib/pkgconfig
export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig

export CFLAGS="-fPIC -D__ANDROID_API__=$API -I$PREFIX/include"
export CPPFLAGS="-I$PREFIX/include"
export LDFLAGS="-L$PREFIX/lib"


wget -nc https://ftp.gnu.org/gnu/libunistring/libunistring-1.3.tar.gz
tar xf libunistring-1.3.tar.gz
cd libunistring-1.3
./configure --host=aarch64-linux-android --build=x86_64-pc-linux-gnu \
  --disable-shared --enable-static --prefix=$PREFIX \
  CC="$CC" AR="$AR" RANLIB="$RANLIB"
make -j$(nproc) && make install
cd ..

# --------------------------------------------------------------------
# 2. libidn2
# --------------------------------------------------------------------
wget -nc https://ftp.gnu.org/gnu/libidn/libidn2-2.3.8.tar.gz
tar xf libidn2-2.3.8.tar.gz
cd libidn2-2.3.8
./configure --host=aarch64-linux-android --build=x86_64-pc-linux-gnu \
  --disable-shared --enable-static --prefix=$PREFIX \
  CC="$CC" AR="$AR" RANLIB="$RANLIB"
make -j$(nproc) && make install
cd ..

# --------------------------------------------------------------------
# 3. PCRE2
# --------------------------------------------------------------------
git clone https://github.com/PCRE2Project/pcre2.git || true
cd pcre2
git pull || true
git submodule update --init
./autogen.sh
./configure --host=aarch64-linux-android --build=x86_64-pc-linux-gnu \
  --disable-shared --enable-static --enable-fuzz-support \
  --enable-pcre2grep-libz=$PREFIX --enable-pcre2-16 --enable-pcre2-32 \
  --prefix=$PREFIX CC="$CC" AR="$AR" RANLIB="$RANLIB"
make -j$(nproc) && make install
cd ..

# --------------------------------------------------------------------
# 4. libpsl
# --------------------------------------------------------------------
git clone https://github.com/rockdaboot/libpsl.git || true
cd libpsl
git pull || true
./autogen.sh
./configure \
  --host=aarch64-linux-android --build=x86_64-pc-linux-gnu \
  --with-libintl-prefix=$PREFIX --with-libunistring-prefix=$PREFIX \
  --disable-shared --enable-static --prefix=$PREFIX \
  CC="$CC" AR="$AR" RANLIB="$RANLIB"
make -j$(nproc) && make install
cd ..


wget https://curl.se/download/curl-8.16.0.tar.xz
tar xf curl-8.16.0.tar.xz

cd curl-8.16.0

CPPFLAGS="-I$PREFIX/include" \
LDFLAGS="-L$PREFIX/lib" \
LIBS="-lpsl -lidn2 -lunistring -lssl -lcrypto -lz -ldl -lzstd -llzma -pthread" \
./configure \
  --host=aarch64-linux-android \
  --build=x86_64-pc-linux-gnu \
  --disable-shared \
  --enable-static \
  --with-openssl=$PREFIX \
  --with-libidn2=$PREFIX \
  --with-libpsl=$PREFIX \
  --prefix=$PREFIX

  
make -j$(nproc)
make install

cd ..

git clone https://github.com/ZerBea/hcxtools.git

cd hcxtools

make clean
make -j$(nproc) \
  CC="$CC" \
  AR="$AR" \
  RANLIB="$RANLIB" \
  CFLAGS="$CFLAGS" \
  LDFLAGS="-L$PREFIX/lib -lunistring -lssl -lcrypto -lz -ldl -lzstd -llzma -pthread -lcurl" \
  DESTDIR=$PREFIX