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

# LocalAI skeleton-animation backend (/3d/animate): NVIDIA's Kimodo
# ported to C++/GGML, built from localai-org's kimodo.cpp at the exact
# commit this LocalAI release pins. The wrapper CMake FORCEs
# BUILD_SHARED_LIBS: the Go server (purego) loads libkimodo.so which
# links separate libggml*.so — installed under lib/ with symlink chains
# intact (the trellis2cpp layout). The engine's only accelerator is
# Vulkan (no CUDA/HIP code paths), so those eclass flags are
# omitted via the eclass's LOCALAI_GGML_NO_* gates.

EAPI=8

LOCAL_AI_CMAKE_TARGET="kimodo"
LOCAL_AI_ENGINE_LIB="libkimodo.so"
LOCAL_AI_VULKAN_CMAKE_VARS="KIMODO_ENABLE_VULKAN"
# lib/ resolves through run.sh's LD_LIBRARY_PATH. Without this the
# build-tree libraries carry a RUNPATH into the build directory,
# which Portage's QA check blanks into a null entry.
LOCAL_AI_EXTRA_CMAKE_ARGS=( -DCMAKE_SKIP_RPATH=ON )
LOCALAI_GGML_NO_CUDA=1
LOCALAI_GGML_NO_ROCM=1

inherit local-ai-ggml-go

# The kimodo.cpp commit LocalAI v4.12.1 builds against. Source of truth:
# backend/go/kimodocpp/Makefile (KIMODO_VERSION) at the upstream release
# tag; the ggml pin is that commit's ggml gitlink.
KIMODO_COMMIT="ed8a931aedb132f768190f6931c365855caba74c"
GGML_COMMIT="8c63e70982c95ceb862e3a1073a2c1beef75d60a"

DESCRIPTION="LocalAI skeleton-animation backend (kimodo.cpp gRPC server)"
SRC_URI="
	${LOCAL_AI_GO_SRC_URI}
	https://github.com/localai-org/kimodo.cpp/archive/${KIMODO_COMMIT}.tar.gz -> kimodo.cpp-${KIMODO_COMMIT}.tar.gz
	https://github.com/ggml-org/ggml/archive/${GGML_COMMIT}.tar.gz -> ggml-org-ggml-${GGML_COMMIT}.tar.gz
"
S="${WORKDIR}/LocalAI-${PV}/backend/go/kimodocpp"

LICENSE="MIT Apache-2.0"
KEYWORDS="~amd64"

src_unpack() {
	local-ai-backend_go_unpack

	local ggml=( "ggml-org-ggml-${GGML_COMMIT}.tar.gz" "ggml-${GGML_COMMIT}" ggml )
	local-ai-backend_engine_unpack "kimodo.cpp-${KIMODO_COMMIT}.tar.gz" kimodo.cpp "${ggml[@]}"
}

src_install() {
	# Shared-libs layout: libkimodo.so plus the libggml*.so it links,
	# symlink chains preserved, all under lib/.
	local-ai-backend_gen_run_sh "${PN}" \
		"KIMODO_LIBRARY=lib/${LOCAL_AI_ENGINE_LIB}" "LD_LIBRARY_PATH=lib"
	local-ai-backend_install "${PN}" "${S}/${PN}"
	local libdir="${LOCAL_AI_BACKENDS_DIR#${EPREFIX}}/${PN}/lib"
	dodir "${libdir}"
	find "${BUILD_DIR}" \( -name 'libkimodo.so*' -o -name 'libggml*.so*' \) \
		-exec cp -a {} "${ED}${libdir}/" \; || die
}