# Maintainer: Konstantin Podsvirov <konstantin@podsvirov.su>

_realname=koboldcpp
pkgbase=mingw-w64-${_realname}
pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}")
pkgver=1.112.1
pkgrel=1
pkgdesc="An easy-to-use AI text-generation software for GGML and GGUF models (mingw-w64)"
arch=('any')
mingw_arch=('ucrt64' 'clang64' 'clangarm64')
url='https://github.com/LostRuins/koboldcpp'
msys2_repository_url='https://github.com/LostRuins/koboldcpp'
license=('spdx:AGPL-3.0-only')
depends=("${MINGW_PACKAGE_PREFIX}-python"
         "${MINGW_PACKAGE_PREFIX}-vulkan-loader")
optdepends=("${MINGW_PACKAGE_PREFIX}-python-customtkinter: for GUI launcher"
            "${MINGW_PACKAGE_PREFIX}-python-darkdetect: for GUI launcher"
            "${MINGW_PACKAGE_PREFIX}-python-psutil: increasing the process CPU priority")
makedepends=("${MINGW_PACKAGE_PREFIX}-cc"
             "${MINGW_PACKAGE_PREFIX}-opencl-headers"
             "${MINGW_PACKAGE_PREFIX}-spirv-headers"
             "${MINGW_PACKAGE_PREFIX}-vulkan-headers")
source=("${url}/archive/v${pkgver}/${_realname}-${pkgver}.tar.gz"
        '0002-use-system-deps.patch'
        '0003-koboldcpp-1.112.1-use-spirv-unified1.patch')
sha256sums=('c4b20192829844bf66603eb60261ff3f164bda8f6b2e32c196e7c30d0d454b3c'
            'e05dda5b005a19d73c1c5bb56084d5cfa0b5adf318be5e404e2db96e4a5fd71d'
            '8f72395e16dd401df0f268eab0f4865241c23f3c5d32d7829d5fd3ec9f06b72d')

_apply_patch_with_msg() {
  for _patch in "$@"
  do
    msg2 "Applying ${_patch}"
    patch -p1 -i "${srcdir}/${_patch}"
  done
}

prepare() {
  cd "${srcdir}/${_realname}-${pkgver}"

  _apply_patch_with_msg \
    0002-use-system-deps.patch \
    0003-koboldcpp-1.112.1-use-spirv-unified1.patch

  # Use system dependencies
  rm -r lib
  rm -r include/vulkan
}

build() {
  cd "${srcdir}/${_realname}-${pkgver}"

  make LLAMA_VULKAN=1 LLAMA_CLBLAST=1
}

package() {
  cd "${srcdir}/${_realname}-${pkgver}"

  install -d "${pkgdir}${MINGW_PREFIX}/share/koboldcpp"
  install -Dm644 ./koboldcpp_*.dll "${pkgdir}${MINGW_PREFIX}/share/koboldcpp/"
  install -Dm644 json_to_gbnf.py "${pkgdir}${MINGW_PREFIX}/share/koboldcpp/"
  install -Dm644 koboldcpp.py "${pkgdir}${MINGW_PREFIX}/share/koboldcpp/"

  install -d "${pkgdir}${MINGW_PREFIX}/share/koboldcpp/embd_res"
  install -Dm644 ./embd_res/* "${pkgdir}${MINGW_PREFIX}/share/koboldcpp/embd_res"

  install -d "${pkgdir}${MINGW_PREFIX}/share/koboldcpp/kcpp_adapters"
  install -m644 "kcpp_adapters"/* "${pkgdir}${MINGW_PREFIX}/share/koboldcpp/kcpp_adapters/"

  echo '#!/bin/sh' > koboldcpp
  echo 'python ${MINGW_PREFIX}/share/koboldcpp/koboldcpp.py "$@"' >> koboldcpp
  install -Dm755 koboldcpp "${pkgdir}${MINGW_PREFIX}/bin/koboldcpp"

  install -Dm644 "LICENSE.md" "${pkgdir}${MINGW_PREFIX}/share/licenses/${_realname}/LICENSE.md"
  install -Dm644 "MIT_LICENSE_GGML_SDCPP_LLAMACPP_ONLY.md" "${pkgdir}${MINGW_PREFIX}/share/licenses/${_realname}/MIT_LICENSE_GGML_SDCPP_LLAMACPP_ONLY.md"
}
