#!/bin/bash

set -eu

if [ -n "${CI-}" ]; then
  sudo apt-get install -y --no-install-recommends ninja-build yasm
fi

# Set up environment
NDK=$ANDROID_NDK_HOME

ABI=${1:-"armeabi-v7a"}

case $ABI in
  armeabi-v7a)
    TARGET=armv7a-linux-androideabi
    NDK_API=21
    ANDROID_VPX_ABI=armv7-android-gcc
    ;;
  arm64-v8a)
    TARGET=aarch64-linux-android
    NDK_API=21
    ANDROID_VPX_ABI=arm64-android-gcc
    ;;
  x86)
    TARGET=i686-linux-android
    NDK_API=21
    ANDROID_VPX_ABI=x86-android-gcc
    ;;
  x86_64)
    TARGET=x86_64-linux-android
    NDK_API=21
    ANDROID_VPX_ABI=x86_64-android-gcc
    ;;
  *)
    exit 1
    ;;
esac

PREFIX="$PWD/deps-prefix-android-$ABI"

TOOLCHAIN="$NDK/toolchains/llvm/prebuilt/linux-x86_64"
SYSROOT="$TOOLCHAIN/sysroot"

export CC="$TOOLCHAIN/bin/$TARGET$NDK_API-clang"
export CXX="$TOOLCHAIN/bin/$TARGET$NDK_API-clang++"
export LDFLAGS=-static-libstdc++
export PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig"

# Build libsodium
if [ ! -f "$PREFIX/lib/libsodium.a" ]; then
  tar zxf <(wget -O- https://github.com/jedisct1/libsodium/releases/download/1.0.20-RELEASE/libsodium-1.0.20.tar.gz)
  pushd libsodium-1.0.20
  ./configure --prefix="$PREFIX" --host="$TARGET" --with-sysroot="$SYSROOT" --disable-shared --disable-pie
  make -j"$(nproc)" install
  popd
  rm -rf libsodium-1.0.20
fi

# Build opus
if [ ! -f "$PREFIX/lib/libopus.a" ]; then
  tar zxf <(wget -O- https://github.com/xiph/opus/releases/download/v1.5.2/opus-1.5.2.tar.gz)
  pushd opus-1.5.2
  CFLAGS="-fPIC" ./configure --prefix="$PREFIX" --host="$TARGET" --with-sysroot="$SYSROOT" --disable-shared
  make "-j$(nproc)"
  make install
  popd
  rm -rf opus-1.5.2
fi

# Build libvpx
if [ ! -f "$PREFIX/lib/libvpx.a" ]; then
  tar zxf <(wget -O- https://github.com/webmproject/libvpx/archive/refs/tags/v1.15.0.tar.gz)
  pushd libvpx-1.15.0
  ./configure --prefix="$PREFIX" --libc="$SYSROOT" --target="$ANDROID_VPX_ABI" --disable-examples --disable-unit-tests --enable-pic ||
    (cat config.log && exit 1)
  sed -i -e "s!^AS=as!AS=$CC -c!" ./*.mk
  sed -i -e "s!^STRIP=strip!STRIP=$TOOLCHAIN/bin/llvm-strip!" ./*.mk
  make "-j$(nproc)"
  make install
  popd
  rm -rf libvpx-1.15.0
fi

# Build c-toxcore
rm -rf _build
cmake -B _build -G Ninja \
  -DANDROID_ABI="$ABI" \
  -DCMAKE_TOOLCHAIN_FILE="$NDK/build/cmake/android.toolchain.cmake" \
  -DCMAKE_INSTALL_PREFIX="$PWD/toxcore-android-$ABI" \
  -DCMAKE_PREFIX_PATH="$PREFIX" \
  -DENABLE_STATIC=OFF \
  -DENABLE_SHARED=ON \
  -DMUST_BUILD_TOXAV=ON \
  -DDHT_BOOTSTRAP=OFF \
  -DBOOTSTRAP_DAEMON=OFF \
  -DUNITTEST=OFF \
  -DSTRICT_ABI=ON \
  -DMIN_LOGGER_LEVEL=TRACE \
  -DEXPERIMENTAL_API=ON
cmake --build _build
cmake --install _build