# Maintainer: aur.chaotic.cx

_pkgname="pcsx2"
pkgname="$_pkgname-git"
pkgver=2.7.263.r0.g420f417
pkgrel=1
pkgdesc="PlayStation 2 emulator"
url="https://github.com/PCSX2/pcsx2"
license=('GPL-3.0-or-later')
arch=('x86_64')

depends=(
  kddockwidgets
  libpcap
  libpng
  libwebp
  libxi
  libxrandr
  plutosvg # AUR
  plutovg  # AUR
  qt6-base
  qt6-svg
  rapidyaml # AUR
  sdl3
  shaderc
)
makedepends=(
  ## compiler
  clang
  lld
  llvm

  ## build
  cmake
  extra-cmake-modules
  git
  ninja

  ## pcsx2
  qt6-tools

  # cubeb, no sound if not present
  alsa-lib
  jack
  libpulse
  sndio
  speexdsp

  # patches
  7zip
)
optdepends=(
  'alsa-utils: Sound player for RetroAchievements'
  'gstreamer: Backup sound player for RetroAchievements'
)

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

options=('!debug' 'lto')
install="$_pkgname.install"

_pkgsrc="$_pkgname"
source=(
  "$_pkgsrc"::"git+$url.git"
  "pcsx2_patches"::"git+https://github.com/PCSX2/pcsx2_patches.git"
)
sha256sums=(
  'SKIP'
  'SKIP'
)

prepare() {
  cd "$_pkgsrc"

  # prevent march=native
  sed -E -e 's@^(\s*)(add_compile_options\(.*march=native.*\))@\1message("skip: march=native")@' \
    -i cmake/BuildParameters.cmake

  # adjust data path
  sed -E -e '/CMAKE_INSTALL_FULL_DATADIR/s@/PCSX2\b@/'"${_pkgname}@" \
    -i pcsx2/CMakeLists.txt \
    cmake/BuildParameters.cmake
}

pkgver() {
  cd "$_pkgsrc"
  git describe --long --tags --abbrev=7 --exclude='*[a-zA-Z][a-zA-Z]*' \
    | sed -E 's/^[^0-9]*//;s/([^-]*-g)/r\1/;s/-/./g'
}

build() (
  export CC CXX CFLAGS CXXFLAGS LDFLAGS
  CC=clang
  CXX=clang++
  LDFLAGS="${_ldflags[@]//*fuse-ld*/} -fuse-ld=lld"

  echo "Building pcsx2..."
  local _cmake_pcsx2=(
    -S "$_pkgsrc"
    -B build_pcsx2
    -G Ninja
    -DCMAKE_BUILD_TYPE=None
    -DCMAKE_INSTALL_PREFIX='/usr'
    -DCMAKE_SKIP_RPATH=ON
    -DENABLE_TESTS=$CHECKFUNC
    -Wno-dev

    -DDISABLE_ADVANCE_SIMD=ON
    -DENABLE_SETCAP=OFF
    -DPACKAGE_MODE=ON
    -DUSE_ASAN=OFF
    -DUSE_BACKTRACE=OFF
    -DUSE_SANITIZERS=OFF # cubeb
    -DUSE_VULKAN=ON
    -DWAYLAND_API=ON
    -DX11_API=ON
  )

  cmake "${_cmake_pcsx2[@]}"
  cmake --build build_pcsx2

  echo "Archiving game patches..."
  cd pcsx2_patches
  7z a -mx=9 -r ../patches.zip patches/.
)

package() {
  DESTDIR="$pkgdir" cmake --install build_pcsx2
  ln -sf pcsx2-qt "$pkgdir/usr/bin/$_pkgname"

  install -Dm644 patches.zip -t "$pkgdir/usr/share/$_pkgname/resources/"

  install -Dm644 pcsx2/bin/resources/icons/AppIconLarge.png "$pkgdir/usr/share/pixmaps/$_pkgname.png"

  install -Dm755 /dev/stdin "$pkgdir/usr/share/applications/$_pkgname.desktop" << END
[Desktop Entry]
Type=Application
Name=PCSX2
GenericName=$pkgdesc
Comment=$pkgdesc
TryExec=$_pkgname
Exec=$_pkgname %f
Icon=$_pkgname
Terminal=false
StartupNotify=true
StartupWMClass=$_pkgname
Categories=Game;Emulator
END
}
