# Maintainer: aur.chaotic.cx

_pkgname="rpcs3"
pkgname="$_pkgname-git"
pkgver=0.0.41.r129.g5c90bf5
pkgrel=1
pkgdesc="PlayStation 3 emulator"
url="https://github.com/RPCS3/rpcs3"
license=('GPL-2.0-only')
arch=('x86_64')

depends=(
  'libGLEW.so'       # glew
  'libavcodec.so'    # ffmpeg
  'libavformat.so'   # ffmpeg
  'libavutil.so'     # ffmpeg
  'libopenal.so'     # openal
  'libswresample.so' # ffmpeg
  'libswscale.so'    # ffmpeg
  'opencv'
  'pugixml'
  'qt6-multimedia'
  'qt6-svg'
  'sdl3'
  'vulkan-icd-loader'
)
makedepends=(
  'clang'
  'cmake'
  'git'
  'glslang'
  'lld'
  'llvm'
  'ninja'
  'vulkan-headers'

  # cubeb
  'alsa-lib'
  'jack'
  'libpulse'
  'sndio'
  'speexdsp'
)

provides=("$_pkgname")
conflicts=("$_pkgname")

options=('!lto')

_pkgsrc="$_pkgname"
source=("$_pkgsrc"::"git+https://github.com/RPCS3/rpcs3.git")
sha256sums=('SKIP')

prepare() {
  cd "$_pkgsrc"

  git rm -r '3rdparty/7zip/7zip'
  git rm -r '3rdparty/OpenAL/openal-soft'
  git rm -r '3rdparty/curl/curl'
  git rm -r '3rdparty/ffmpeg'
  git rm -r '3rdparty/libpng/libpng'
  git rm -r '3rdparty/libsdl-org/SDL'
  git rm -r '3rdparty/llvm/llvm'
  git rm -r '3rdparty/opencv/opencv'
  git rm -r '3rdparty/pugixml'
  git rm -r '3rdparty/zlib/zlib'

  # fix gitmodule links
  sed -E -e '/ignore = /d' \
    -e 's&^(\s*url) = \.\./\.\./&\1 = https://github.com/&' \
    -i .gitmodules

  git submodule update --init --recursive --depth=1

  # warn instead of error
  sed -E 's&FATAL_ERROR&WARNING&' -i CMakeLists.txt

  # fix includes for system library
  sed -E 's&3rdparty/OpenAL/openal-soft/include/&&' \
    -i "rpcs3/Emu/Cell/Modules/cellMic.cpp" \
    "rpcs3/Emu/Cell/Modules/cellMic.h" \
    "rpcs3/rpcs3qt/microphone_creator.cpp"
}

pkgver() {
  cd "$_pkgsrc"
  local _tag _version _revision _hash
  _tag=$(git tag -l 'v[0-9].[0-9].[0-9][0-9]' | sort -rV | head -1)
  _version="${_tag#v}"
  _revision=$(git rev-list --count --cherry-pick "$_tag"...HEAD)
  _hash=$(git rev-parse --short=7 HEAD)
  printf '%s.r%s.g%s' "${_version:?}" "${_revision:?}" "${_hash:?}"
}

build() (
  local _cmake_options=(
    -B build
    -S "$_pkgsrc"
    -G Ninja
    -DCMAKE_BUILD_TYPE=None
    -DCMAKE_INSTALL_PREFIX='/usr'
    -DBUILD_TESTING=OFF
    -Wno-dev

    -DBUILD_LLVM=OFF
    -DUSE_NATIVE_INSTRUCTIONS=OFF
    -DUSE_SANITIZERS=OFF # cubeb
    -DUSE_SDL=ON

    -DUSE_SYSTEM_CUBEB=OFF
    -DUSE_SYSTEM_CURL=ON
    -DUSE_SYSTEM_FFMPEG=ON
    -DUSE_SYSTEM_GLSLANG=ON
    -DUSE_SYSTEM_LIBPNG=ON
    -DUSE_SYSTEM_OPENCV=ON
    -DUSE_SYSTEM_PUGIXML=ON
    -DUSE_SYSTEM_SDL=ON
    -DUSE_SYSTEM_WOLFSSL=OFF
    -DUSE_SYSTEM_ZLIB=ON
    -DUSE_SYSTEM_ZSTD=ON
  )

  cmake "${_cmake_options[@]}"
  cmake --build build
)

package() {
  DESTDIR="${pkgdir}" cmake --install build
  rm -rf "$pkgdir/usr/share/rpcs3/git"
}
