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

_realname=koboldcpp
pkgbase=mingw-w64-${_realname}
pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}")
pkgver=1.107.3
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}-vulkan-headers")
source=("${url}/archive/v${pkgver}/${_realname}-${pkgver}.tar.gz"
        '0001-koboldcpp-1.95.1-fix-vulkan-shaders-gen.patch'
        '0002-use-system-deps.patch')
sha256sums=('dc0349d575813b00d970ad46277ccf7a132fbd4b8b50b8c231e44061ec932870'
            'c35f31899e276b87a86f63aacf1e84136f0551dca3b6d21d633ddd9eb3be735a'
            '6e3d58e0e6a4a68b791895a70c28b65c1f7891cda8e4e022d3dcc18d1226038e')

_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 \
    0001-koboldcpp-1.95.1-fix-vulkan-shaders-gen.patch \
    0002-use-system-deps.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"
}
