diff --git a/pkgs/by-name/st/stable-diffusion-cpp-cuda/package.nix b/pkgs/by-name/st/stable-diffusion-cpp-cuda/package.nix new file mode 100644 index 000000000000..17fbe0a4c972 --- /dev/null +++ b/pkgs/by-name/st/stable-diffusion-cpp-cuda/package.nix @@ -0,0 +1,3 @@ +{ stable-diffusion-cpp }: + +stable-diffusion-cpp.override { cudaSupport = true; } diff --git a/pkgs/by-name/st/stable-diffusion-cpp-rocm/package.nix b/pkgs/by-name/st/stable-diffusion-cpp-rocm/package.nix new file mode 100644 index 000000000000..679fb2c7e7c6 --- /dev/null +++ b/pkgs/by-name/st/stable-diffusion-cpp-rocm/package.nix @@ -0,0 +1,3 @@ +{ stable-diffusion-cpp }: + +stable-diffusion-cpp.override { rocmSupport = true; } diff --git a/pkgs/by-name/st/stable-diffusion-cpp-vulkan/package.nix b/pkgs/by-name/st/stable-diffusion-cpp-vulkan/package.nix new file mode 100644 index 000000000000..adb0ad34e4f2 --- /dev/null +++ b/pkgs/by-name/st/stable-diffusion-cpp-vulkan/package.nix @@ -0,0 +1,3 @@ +{ stable-diffusion-cpp }: + +stable-diffusion-cpp.override { vulkanSupport = true; } diff --git a/pkgs/by-name/st/stable-diffusion-cpp/package.nix b/pkgs/by-name/st/stable-diffusion-cpp/package.nix new file mode 100644 index 000000000000..843e0e0353a6 --- /dev/null +++ b/pkgs/by-name/st/stable-diffusion-cpp/package.nix @@ -0,0 +1,126 @@ +{ + 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-406-d939f6e"; + + src = fetchFromGitHub { + owner = "leejet"; + repo = "stable-diffusion.cpp"; + rev = "master-406-d939f6e"; + hash = "sha256-VWUNzVpS3aBlyGnxorZsimsqbijsQfhdD8hqzhKEq8A="; + 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; + }; +})