# Copyright 2024-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

ROCM_VERSION=7.2
inherit cmake go-module rocm systemd

DESCRIPTION="Get up and running with large language models."
HOMEPAGE="https://ollama.com"
SRC_URI="
    https://github.com/ollama/${PN}/archive/refs/tags/v${PV}.tar.gz -> ${P}.gh.tar.gz
    https://vendors.simple-co.de/${PN}/${PN}-${PV}-deps.tar.xz
"
S="${WORKDIR}/${PN}-${PV}"
LICENSE="MIT"
SLOT="0"

KEYWORDS="~amd64"

IUSE="cuda systemd video_cards_amdgpu cpu_flags_x86_avx cpu_flags_x86_avx2
cpu_flags_x86_avx512f cpu_flags_x86_avx512vbmi cpu_flags_x86_avx512_vnni
cpu_flags_x86_avx512_bf16
"

REQUIRED_USE="
    cpu_flags_x86_avx2? ( cpu_flags_x86_avx )
    cpu_flags_x86_avx512f? ( cpu_flags_x86_avx2 )
    cpu_flags_x86_avx512vbmi? ( cpu_flags_x86_avx512f )
    cpu_flags_x86_avx512_vnni? ( cpu_flags_x86_avx512f )
    cpu_flags_x86_avx512_bf16? ( cpu_flags_x86_avx512f )
"

RDEPEND="
    acct-group/ollama
    acct-user/ollama
"

DEPEND="
    >=dev-lang/go-1.25.5
    >=dev-build/cmake-3.31.9
    >=sys-devel/gcc-11.5.0
    cuda? ( 
        dev-util/nvidia-cuda-toolkit 
        dev-libs/cccl
    )
    video_cards_amdgpu? ( sci-libs/hipBLAS[${ROCM_USEDEP}] )
    systemd? ( sys-apps/systemd )
"

src_prepare() {
    sed -i "s|0.0.0|${PV}|g" version/version.go || die
    cmake_src_prepare
}

src_configure() {
    local mycmakeargs=(
        -DGGML_CPU_ALL_VARIANTS=ON
        -DCMAKE_INSTALL_LIBDIR="$(get_libdir)"
        -DCMAKE_SKIP_BUILD_RPATH=ON
        -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON
        -DCMAKE_INSTALL_RPATH="\$ORIGIN"
    )
    

    # AMD (ROCm)
    use video_cards_amdgpu && \
        mycmakeargs+=(
            -DAMDGPU_TARGETS="${AMDGPU_TARGETS// /;}"
        )
    
    # nVidia (CUDA)
    use cuda && \
        mycmakeargs+=(
            -DCMAKE_CUDA_COMPILER=/opt/cuda/bin/nvcc
            -DCMAKE_CUDA_HOST_COMPILER=/usr/bin/x86_64-pc-linux-gnu-gcc-14
            -DCMAKE_CUDA_ARCHITECTURES="75;80;86;89;90;90a"
        )

    cmake_src_configure
}


src_compile() {
    cmake_src_compile
    ego build -o ollama .
}

src_install() {
    dobin ollama

    insinto "/usr/$(get_libdir)/ollama"
    doins -r "${BUILD_DIR}/lib/ollama/"*

    dodir /etc/ld.so.conf.d
    echo "/usr/$(get_libdir)/ollama" > "${ED}/etc/ld.so.conf.d/ollama.conf"

    use systemd && systemd_dounit "${FILESDIR}/ollama.service"
}

pkg_preinst() {
    keepdir /var/log/ollama
    fowners ollama:ollama /var/log/ollama

    keepdir /var/lib/ollama/models
    fowners ollama:ollama /var/lib/ollama/models
}

pkg_postinst() {
    einfo "Quick guide:"
    einfo "systemctl start ollama"
    einfo "ollama run deepseek-r1:7b"
    einfo "See available models at https://ollama.com/library"
}