Files
nix-dotfiles-v2/packages/s2cpp/default.nix
2026-04-05 22:32:10 +02:00

96 lines
2.2 KiB
Nix

{
lib,
stdenv,
fetchFromGitHub,
cmake,
pkg-config,
autoPatchelfHook,
makeWrapper,
vulkan-loader,
vulkan-headers,
glslang,
shaderc,
cudaPackages ? { },
enableVulkan ? false,
enableCuda ? false,
}:
let
cudaCapabilities = [
"8.6"
"8.9"
"9.0"
];
in
stdenv.mkDerivation (finalAttrs: {
pname = "s2cpp";
version = "0-unstable-2025-04-05";
src = fetchFromGitHub {
owner = "rodrigomatta";
repo = "s2.cpp";
rev = "36a5fb058b740d8826f67d027bf46b3273fe4e3d";
hash = "sha256-C8BSUWNRrZKdaKHniAbeObq9fChvFQZ5HXcvSzgNsIw=";
fetchSubmodules = true;
};
nativeBuildInputs = [
cmake
autoPatchelfHook
makeWrapper
]
++ lib.optionals enableVulkan [ pkg-config ]
++ lib.optionals enableCuda [
cudaPackages.cuda_nvcc
];
buildInputs =
[ ]
++ lib.optionals enableVulkan [
vulkan-loader
vulkan-headers
glslang
shaderc
]
++ lib.optionals enableCuda [
cudaPackages.cuda_cudart
cudaPackages.cuda_cccl
];
cmakeFlags = [
"-DCMAKE_SKIP_BUILD_RPATH=ON"
"-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON"
"-DCMAKE_INSTALL_RPATH=${placeholder "out"}/lib"
]
++ lib.optionals enableVulkan [ "-DS2_VULKAN=ON" ]
++ lib.optionals enableCuda [
"-DS2_CUDA=ON"
"-DCMAKE_CUDA_ARCHITECTURES=${lib.concatStringsSep ";" cudaCapabilities}"
];
installPhase = ''
runHook preInstall
mkdir -p $out/bin $out/lib $out/share
find . -name 's2' -type f -executable -exec install -Dm755 {} $out/bin/.s2-wrapped \;
find . -name '*.so*' -exec install -Dm755 {} -t $out/lib/ \;
install -Dm644 ${finalAttrs.src}/tokenizer.json $out/share/tokenizer.json
makeWrapper $out/bin/.s2-wrapped $out/bin/s2 \
--add-flags "-t $out/share/tokenizer.json"
runHook postInstall
'';
meta = {
description = "Fish Audio S2 Pro text-to-speech inference engine in native C++/GGML";
homepage = "https://github.com/rodrigomatta/s2.cpp";
license = {
shortName = "fish-audio-research";
fullName = "Fish Audio Research License";
url = "https://github.com/rodrigomatta/s2.cpp/blob/main/LICENSE.md";
free = false;
};
mainProgram = "s2";
platforms = lib.platforms.linux;
};
})