#!/usr/bin/env bash

set -euo pipefail

LIBYUV_TAR_URL="https://chromium.googlesource.com/libyuv/libyuv/+archive/refs/heads/stable.tar.gz"
LIBYUV_TAR_FILE="/tmp/libyuv.tar.gz"
LIBYUV_SRC_DIR="/tmp/libyuv"

prepare_source() {
  cd /tmp

  # Remove old files if they exist
  [ -f "$LIBYUV_TAR_FILE" ] && rm "$LIBYUV_TAR_FILE"
  [ -d "$LIBYUV_SRC_DIR" ] && rm -rf "$LIBYUV_SRC_DIR"

  mkdir -p "$LIBYUV_SRC_DIR"
  wget "$LIBYUV_TAR_URL" -O "$LIBYUV_TAR_FILE"
  tar -xzf "$LIBYUV_TAR_FILE" -C "$LIBYUV_SRC_DIR"
  cd "$LIBYUV_SRC_DIR"
}

build_and_install() {
  export MAKEFLAGS=-j$(nproc)

  # Disable problematic NEON64 assembly for ARM64
  if [ "$(uname -m)" = "aarch64" ]; then
    EXTRA_CXXFLAGS="-DLIBYUV_DISABLE_NEON"
  else
    EXTRA_CXXFLAGS=""
  fi

  cp -r include/ /usr/
  make V=1 -f linux.mk CFLAGS="-O2 -fomit-frame-pointer -fPIC" CXXFLAGS="-O2 -fomit-frame-pointer -fPIC $EXTRA_CXXFLAGS"

  install -D -m 0644 libyuv.a /usr/lib/libyuv.a
}

prepare_source
build_and_install
