# Maintainer: aur.chaotic.cx

: ${_build_clang:=false}

_pkgname="dolphin-emu"
pkgname="$_pkgname-git"
pkgver=2606.r263.gf1b4345
pkgrel=1
pkgdesc="A Gamecube and Wii emulator"
url="https://github.com/dolphin-emu/dolphin"
license=('GPL-2.0-or-later')
arch=('x86_64')

depends=(
  'alsa-lib'
  'bluez-libs'
  'bzip2'
  'enet'
  'hidapi'
  'libavcodec.so'  # ffmpeg
  'libavformat.so' # ffmpeg
  'libavutil.so'   # ffmpeg
  'libevdev'
  'libfmt.so'
  'libgl'
  'liblzma.so'
  'libpulse'
  'libspng'
  'libswscale.so' # ffmpeg
  'libudev.so'
  'libusb'
  'libx11'
  'libxi'
  'libxrandr'
  'lz4'
  'lzo'
  'miniupnpc'
  'pugixml'
  'qt6-base'
  'qt6-svg'
  'sdl3'
  'speexdsp'
  'xxhash'
  'zlib-ng'
  'zstd'
)
makedepends=(
  'cmake'
  'git'
  'ninja'
  'python'
  'vulkan-headers'
)

if [[ "${_build_clang::1}" == "t" ]]; then
  makedepends+=(
    'clang'
    'lld'
    'llvm'
  )
else
  options+=('!lto')
fi

provides=(
  'dolphin-emu'
  'dolphin-emu-nogui'
  'dolphin-emu-tool'
)
conflicts=(
  'dolphin-emu'
  'dolphin-emu-nogui'
  'dolphin-emu-tool'
)

options+=(!emptydirs)

_pkgsrc="$_pkgname"
source=("$_pkgsrc"::"git+$url.git")
sha256sums=('SKIP')

prepare() {
  cd "$_pkgsrc"
  git rm -r 'Externals/FFmpeg-bin'
  git rm -r 'Externals/Qt'
  git rm -r 'Externals/SDL/SDL'
  git rm -r 'Externals/Vulkan-Headers'
  git rm -r 'Externals/curl/curl'
  git rm -r 'Externals/fmt/fmt'
  git rm -r 'Externals/glslang/glslang'
  git rm -r 'Externals/gtest'
  git rm -r 'Externals/hidapi/hidapi-src'
  git rm -r 'Externals/libadrenotools'
  git rm -r 'Externals/libspng/libspng'
  git rm -r 'Externals/libusb/libusb'
  git rm -r 'Externals/lz4/lz4'
  git rm -r 'Externals/miniupnpc/miniupnp'
  git rm -r 'Externals/spirv_cross/SPIRV-Cross'
  git submodule update --init --depth=1
}

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

build() (
  export CC CXX CFLAGS CXXFLAGS LDFLAGS
  local _pkgver _cmake_options

  # Fix version string
  _pkgver=$(pkgver)
  install /dev/stdin "$srcdir/$_pkgsrc/Source/Core/Common/scmrev.h.in" << END
#define SCM_REV_STR "\${DOLPHIN_WC_REVISION}"
#define SCM_DESC_STR "${_pkgver:?}"
#define SCM_BRANCH_STR "master"
#define SCM_COMMITS_AHEAD_MASTER 0
#define SCM_DISTRIBUTOR_STR "aur.chaotic.cx"
#define SCM_UPDATE_TRACK_STR ""
END

  _cmake_options=(
    -B build
    -S "$_pkgsrc"
    -G Ninja
    -DCMAKE_BUILD_TYPE=None
    -DCMAKE_INSTALL_PREFIX='/usr'
    -Wno-author

    # -DUSE_SYSTEM_LIBS=ON # default:AUTO
    -DENABLE_ANALYTICS=OFF # default:Opt-in
    -DENABLE_AUTOUPDATE=OFF
    -DENABLE_TESTS=OFF
    -DUSE_SANITIZERS=OFF # cubeb
    -DUSE_SYSTEM_ENET=ON
    -DUSE_SYSTEM_FMT=ON
    -DUSE_SYSTEM_LIBMGBA=OFF
    -DUSE_SYSTEM_XXHASH=ON
  )

  if [[ "${_build_clang::1}" == "t" ]]; then
    CC=clang
    CXX=clang++
    LDFLAGS="$(sed -E -e 's/\S*fuse-ld\S*//g' <<< "$LDFLAGS") -fuse-ld=lld"

    _cmake_options+=(
      -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON
      -DENABLE_LTO=ON
    )
  else
    _cmake_options+=(-DENABLE_LTO=OFF)
  fi

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

package() {
  DESTDIR="$pkgdir" cmake --install build

  install -Dm644 "$srcdir/$_pkgsrc/Data/51-usb-device.rules" \
    "$pkgdir/usr/lib/udev/rules.d/51-usb-device-dolphin.rules"
}
