# Copyright 1999-2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
DESCRIPTION="High-performance automatic speech recognition (ASR) using inference"
HOMEPAGE="https://github.com/ggerganov/whisper.cpp"
LICENSE="MIT"
SRC_URI="https://github.com/ggerganov/whisper.cpp/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
SLOT="0"
KEYWORDS="~amd64 ~ppc64"
S="${WORKDIR}/${PN/-/.}-${PV}"
IUSE="debug +command +models +quantize +stream"
DEPEND="
command? ( media-libs/libsdl2 )
stream? ( media-libs/libsdl2 )
"
RDEPEND="${DEPEND}
models? ( app-accessibility/whisper-ggml-models )
"
BDEPEND=""
# FIXME: libtoolise libwhisper.so
# FIXME: make commands use libwhisper.so
# TODO: add 'talk', 'talk-llama', etc examples (use a shell script; check system call for security and fix paths)
target_list=(
command
quantize
stream
)
src_prepare() {
sed 's/^[[:space:]]\+.\/main -h$//' -i Makefile || die
local target
for target in main "${target_list[@]}"; do
sed 's~"models/~"/usr/share/whisper/ggml-models/~' -i "examples/$target/$target.cpp"
done
default
}
src_configure() {
if use ppc64; then
sed 's/#include <immintrin.h>//' -i ggml.c || die
fi
}
src_compile() {
local common_cflags=(
-I.
-fPIC
-pthread
$(use debug '' -DNDEBUG)
-D_POSIX_SOURCE -D_GNU_SOURCE
)
local my_makeopts=(
CFLAGS="-std=c11 ${common_cflags[*]} ${CFLAGS}"
CXXFLAGS="-std=c++11 ${common_cflags[*]} -I./examples ${CXXFLAGS}"
LDFLAGS="${LDFLAGS}"
)
local my_targets=(
main
libwhisper.so
)
local target
for target in "${target_list[@]}"; do
use "$target" || continue
my_targets+=( "$target" )
done
emake "${my_makeopts[@]}" "${my_targets[@]}"
}
src_install() {
newbin main whisper-cpp
dolib.so libwhisper.so
for target in "${target_list[@]}"; do
newbin "$target" "whisper-cpp_$target"
done
}