Files
nixpkgs/pkgs/by-name/st/stable-diffusion-cpp/package.nix
T

127 lines
2.8 KiB
Nix

{
lib,
stdenv,
fetchFromGitHub,
cmake,
ninja,
pkg-config,
python3,
autoAddDriverRunpath,
config ? { },
cudaSupport ? (config.cudaSupport or false),
cudaPackages ? { },
rocmSupport ? (config.rocmSupport or false),
rocmPackages ? { },
rocmGpuTargets ? (rocmPackages.clr.localGpuTargets or rocmPackages.clr.gpuTargets or [ ]),
openclSupport ? false,
clblast,
vulkanSupport ? false,
shaderc,
vulkan-headers,
vulkan-loader,
spirv-tools,
metalSupport ? (stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64),
darwin,
apple-sdk,
}:
let
inherit (lib)
cmakeBool
cmakeFeature
optionals
optionalString
;
effectiveStdenv = if cudaSupport then cudaPackages.backendStdenv else stdenv;
in
effectiveStdenv.mkDerivation (finalAttrs: {
pname = "stable-diffusion-cpp";
version = "master-445-860a78e";
src = fetchFromGitHub {
owner = "leejet";
repo = "stable-diffusion.cpp";
rev = "master-445-860a78e";
hash = "sha256-G/f0X+kxKAr/jDKDKpAppAsfsnmuq1/xMFFyUHB+3iI=";
fetchSubmodules = true;
};
nativeBuildInputs = [
cmake
ninja
pkg-config
]
++ optionals cudaSupport [
(cudaPackages.cuda_nvcc)
autoAddDriverRunpath
];
buildInputs =
(optionals cudaSupport (
with cudaPackages;
[
cuda_cccl
cuda_cudart
libcublas
]
))
++ (optionals rocmSupport (
with rocmPackages;
[
clr
hipblas
rocblas
]
))
++ (optionals vulkanSupport [
shaderc
vulkan-headers
vulkan-loader
spirv-tools
])
++ (optionals openclSupport [
clblast
])
++ (optionals metalSupport [
apple-sdk
]);
cmakeFlags = [
(cmakeBool "SD_BUILD_EXAMPLES" true)
(cmakeBool "SD_BUILD_SHARED_LIBS" true)
(cmakeBool "SD_USE_SYSTEM_GGML" false)
(cmakeBool "SD_CUDA" cudaSupport)
(cmakeBool "SD_HIPBLAS" rocmSupport)
(cmakeBool "SD_VULKAN" vulkanSupport)
(cmakeBool "SD_OPENCL" openclSupport)
(cmakeBool "SD_METAL" metalSupport)
(cmakeBool "SD_FAST_SOFTMAX" false)
]
++ optionals cudaSupport [
(cmakeFeature "CMAKE_CUDA_ARCHITECTURES" cudaPackages.flags.cmakeCudaArchitecturesString)
]
++ optionals rocmSupport [
(cmakeFeature "CMAKE_HIP_ARCHITECTURES" (builtins.concatStringsSep ";" rocmGpuTargets))
];
meta = with lib; {
description = "Stable Diffusion inference in pure C/C++";
homepage = "https://github.com/leejet/stable-diffusion.cpp";
license = licenses.mit;
mainProgram = "sd";
maintainers = with lib.maintainers; [
dit7ya
adriangl
];
platforms = platforms.unix;
badPlatforms = optionals (cudaSupport || openclSupport) platforms.darwin;
broken = metalSupport && !stdenv.hostPlatform.isDarwin;
};
})