# 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"
LOCALAI_GGML_NO_CUDA=1
LOCALAI_GGML_NO_ROCM=1

inherit local-ai-ggml-go

# The kimodo.cpp commit LocalAI v4.11.0 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="5679ff19ba0a522c0b0516e9a9d402fe1af2c027"
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
}