# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit unpacker systemd
DESCRIPTION="Get up and running with local large language models"
HOMEPAGE="https://ollama.com"
SRC_URI="
amd64? (
https://github.com/ollama/ollama/releases/download/v${PV}/ollama-linux-amd64.tar.zst
-> ${PN}-amd64-${PV}.tar.zst
)
rocm? (
https://github.com/ollama/ollama/releases/download/v${PV}/ollama-linux-amd64-rocm.tar.zst
-> ${PN}-rocm-amd64-${PV}.tar.zst
)
"
S="${WORKDIR}"
LICENSE="GPL-3"
SLOT="0"
KEYWORDS="-* ~amd64"
IUSE="rocm cuda"
RESTRICT="strip"
BDEPEND="
dev-util/patchelf
"
RDEPEND="
acct-group/ollama
acct-group/render
acct-group/video
app-arch/bzip2
app-arch/xz-utils
app-arch/zstd
media-libs/vulkan-loader
sys-libs/zlib-ng
>=acct-user/ollama-3[cuda?]
cuda? (
dev-util/nvidia-cuda-toolkit
)
"
QA_PREBUILT="*"
src_prepare() {
default
if ! use cuda; then
rm -rf "${S}"/lib/ollama/{cuda_v12,cuda_v13} || die
fi
# no need to strip for rocm, because the folder containing it wouldn't even be fetched and unpacked
# Shipped upstream libraries come with '$ORIGIN:/build/llama-server-cpu/bin:' set in their RUNPATH
# scanelf complains about it during install, and we only need $ORIGIN
# (all libs are in the same folder), so we set it to that
for so in "${S}"/lib/ollama/*.so; do
patchelf --set-rpath '$ORIGIN' "${so}" || die
done
}
src_install(){
dodir /opt/ollama
cp -a bin lib "${ED}/opt/ollama/" || die "installing ollama blob failed"
dosym ../../opt/ollama/bin/ollama /usr/bin/ollama
dosym ../../opt/ollama/lib/ollama/llama-server /usr/bin/llama-server
dosym ../../opt/ollama/lib/ollama/llama-quantize /usr/bin/llama-quantize
systemd_dounit "${FILESDIR}/ollama.service"
}