# Contributor: Kreijstal <rainb@tfwno.gf>

_realname=ollama
pkgbase=mingw-w64-${_realname}
pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}"
pkgdesc='Create, run and share large language models (LLMs) (mingw-w64)'
pkgver=0.5.7
pkgrel=2
arch=(any)
mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64')
msys2_repository_url='https://github.com/ollama/ollama'
url='https://ollama.com'
msys2_references=(
  'cpe: cpe:2.3:a:ollama:ollama'
)
license=('spdx:MIT')
depends=(${MINGW_PACKAGE_PREFIX}-gcc-libs)
makedepends=(${MINGW_PACKAGE_PREFIX}-cc
             ${MINGW_PACKAGE_PREFIX}-go
             git)
source=(https://github.com/ollama/ollama/archive/v${pkgver}/${_realname}-${pkgver}.tar.gz
        0001-no-static-linking.patch)
sha256sums=('baaf7d8106f865c9698ee0d2c86b1eeec90998414b9f26106739cd7a1e83a4f5'
            'c36d1d1fcc5730a8ce9dce3e5f5293f85b0f6032d03a73ffeb9f0c90113426d5')

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

prepare() {
  cd ${_realname}-${pkgver}

  apply_patch_with_msg \
    0001-no-static-linking.patch

  if check_option "debug" "n"; then
    sed -i 's,var mode string = gin.DebugMode,var mode string = gin.ReleaseMode,g' server/routes.go
  fi
}

build() {
  [[ -d "${srcdir}"/build-${MSYSTEM} ]] && rm -rf "${srcdir}"/build-${MSYSTEM}
  cp -r "${_realname}-${pkgver}" "build-${MSYSTEM}" && cd "build-${MSYSTEM}"

  if [[ ${CARCH} == aarch64 ]]; then
    # See https://github.com/ggerganov/llama.cpp/blob/325afb37/cmake/arm64-windows-llvm.cmake#L12
    local _flags="-march=armv8.7-a -fvectorize -ffp-model=fast -fno-finite-math-only"
    CFLAGS+=" ${_flags}"
    CXXFLAGS+=" ${_flags}"
  fi

  export CGO_CFLAGS="$CFLAGS" CGO_CPPFLAGS="$CPPFLAGS" CGO_CXXFLAGS="$CXXFLAGS" CGO_LDFLAGS="$LDFLAGS"
  export GOPROXY=direct
  export GOROOT=${MINGW_PREFIX}/lib/go
  export GOPATH=${MINGW_PREFIX}/

  make \
    OLLAMA_SKIP_CUDA_GENERATE=yes \
    OLLAMA_SKIP_ROCM_GENERATE=yes \
    VERSION=${pkgver}
}

check() {
  $srcdir/build-$MSYSTEM/ollama --version >/dev/null

  cd "build-${MSYSTEM}"
  go test .
}

package() {
  cd $srcdir/build-$MSYSTEM

  mkdir -p "${pkgdir}${MINGW_PREFIX}/bin"
  install ollama.exe -t"${pkgdir}${MINGW_PREFIX}/bin"

  if [[ ${CARCH} == x86_64 ]]; then
    mkdir -p "${pkgdir}"${MINGW_PREFIX}/lib/ollama/runners
    cp -r llama/build/windows-amd64/runners/cpu* \
      "${pkgdir}"${MINGW_PREFIX}/lib/ollama/runners/
  fi

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