Install this version:
emerge -a =sci-misc/stable-diffusion-cpp-1027
# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
PYTHON_COMPAT=( python3_{12..15} )
inherit cmake cuda python-any-r1 toolchain-funcs
REPO="https://github.com/leejet/stable-diffusion.cpp"
GGML_REPO="https://github.com/leejet/ggml"
MY_PN="stable-diffusion.cpp"
# upstream publishes master-NNN-sha snapshot tags (no semver); PV is snapshot N
MY_TAG="master-${PV}-e7b7ec6"
# ggml is a git submodule pin (leejet's patched ggml fork), not a release tag
GGML_REV="a5915eb0e47adef21c3f25b889a008925ea838c2"
DESCRIPTION="Diffusion model (SD, Flux, Wan, ...) inference in pure C/C++"
HOMEPAGE="https://github.com/leejet/stable-diffusion.cpp"
# MIT: stable-diffusion.cpp, ggml, utf8proc, stb_image, miniz, cpp-httplib, nlohmann/json
# BSD-2: darts-clone, oniguruma (both vendored under thirdparty/)
LICENSE="MIT BSD-2"
SLOT="0"
# GGML CPU flags
X86_CPU_FLAGS=(
amx_bf16
amx_int8
amx_tile
avx
avx2
avx512_bf16
avx512_vnni
avx512f
avx512vbmi
avx_vnni
bmi2
f16c
fma3
sse4_2
)
CPU_FLAGS=( "${X86_CPU_FLAGS[@]/#/cpu_flags_x86_}" )
IUSE="cuda openblas opencl +openmp rpc system-ggml vulkan +webp webm ${CPU_FLAGS[*]}"
unset X86_CPU_FLAGS CPU_FLAGS
REQUIRED_USE="webm? ( webp )"
if [[ ${PV} = *9999* ]]; then
inherit git-r3
EGIT_REPO_URI="${REPO}.git"
EGIT_SUBMODULES=( ggml )
else
S="${WORKDIR}/${MY_PN}-${MY_TAG}"
KEYWORDS="amd64 ~arm64"
SRC_URI="
${REPO}/archive/refs/tags/${MY_TAG}.tar.gz -> ${P}.tar.gz
${GGML_REPO}/archive/${GGML_REV}.tar.gz -> ${P}-ggml.tar.gz
"
fi
# with system-ggml the backend flags are mapped onto sci-ml/ggml's own
# USE flags, and the bundled-build dependencies are dropped
COMMON_DEPEND="
system-ggml? ( >=sci-ml/ggml-0.27:=[cuda?,openblas?,opencl?,openmp?,rpc?,vulkan?] )
!system-ggml? (
cuda? ( dev-util/nvidia-cuda-toolkit:= )
openblas? ( sci-libs/openblas:= )
opencl? ( dev-libs/opencl-icd-loader )
openmp? ( llvm-runtimes/openmp:= )
vulkan? ( media-libs/vulkan-loader )
)
webm? ( media-libs/libwebm )
webp? ( media-libs/libwebp )
"
DEPEND="${COMMON_DEPEND}
!system-ggml? (
opencl? ( dev-util/opencl-headers )
vulkan? (
dev-util/spirv-headers
dev-util/vulkan-headers
)
)
"
RDEPEND="${COMMON_DEPEND}"
BDEPEND="
!system-ggml? (
opencl? ( ${PYTHON_DEPS} )
vulkan? ( media-libs/shaderc )
)
"
pkg_pretend() {
[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
}
pkg_setup() {
if use system-ggml; then
ewarn "system-ggml links against the unpatched upstream ggml: the leejet"
ewarn "fork extensions (sage-attention, sol-attention, FP8 fast path) are"
ewarn "not available and some operators may be slower or unsupported."
fi
[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
}
src_unpack() {
if [[ ${PV} = *9999* ]]; then
git-r3_src_unpack
return
fi
default_src_unpack
# ggml is a git submodule (leejet's patched fork) not shipped in the release
# tarball; the archive only carries an empty ggml/ placeholder, so replace it
# with the submodule sources where CMake expects them (SD_GGML_SOURCE_DIR).
# With system-ggml the sources are still needed for the private headers.
rm -rf "${S}/ggml"
mv "${WORKDIR}/ggml-${GGML_REV}" "${S}/ggml" || die
}
src_prepare() {
use cuda && ! use system-ggml && cuda_src_prepare
cmake_src_prepare
}
src_configure() {
local mycmakeargs=(
-DSD_BUILD_EXAMPLES=ON
# No embedded server web UI here (needs pnpm + network); sd-server still
# builds as an API-only server.
-DSD_SERVER_BUILD_FRONTEND=OFF
# with system-ggml the library comes from sci-ml/ggml, which is
# upstream ggml (the SD_USE_UPSTREAM_GGML compile definitions select
# the unpatched code paths); the ggml sources stay in the tree for
# the private headers
-DSD_USE_SYSTEM_GGML=$(usex system-ggml)
-DSD_USE_UPSTREAM_GGML=$(usex system-ggml)
-DSD_CUDA=$(usex cuda)
-DSD_OPENCL=$(usex opencl)
-DSD_RPC=$(usex rpc)
-DSD_VULKAN=$(usex vulkan)
)
if ! use system-ggml; then
# build the bundled (patched) ggml; with system-ggml the CPU ISA
# set and the backends are selected by sci-ml/ggml's own USE flags.
# Never -march=native: the CPU ISA set is driven by CPU_FLAGS_X86,
# which replaces the old portage sci-misc/stable-diffusion-cpp/
# disable-fma-avx2-bmi2.patch (drop those flags to match it).
mycmakeargs+=(
-DGGML_NATIVE=OFF
-DGGML_LTO="$(tc-is-lto && echo ON || echo OFF)"
-DGGML_OPENMP=$(usex openmp)
# CPU ISA flags
-DGGML_SSE42=$(usex cpu_flags_x86_sse4_2)
-DGGML_AVX=$(usex cpu_flags_x86_avx)
-DGGML_AVX_VNNI=$(usex cpu_flags_x86_avx_vnni)
-DGGML_AVX2=$(usex cpu_flags_x86_avx2)
-DGGML_BMI2=$(usex cpu_flags_x86_bmi2)
-DGGML_AVX512=$(usex cpu_flags_x86_avx512f)
-DGGML_AVX512_VBMI=$(usex cpu_flags_x86_avx512vbmi)
-DGGML_AVX512_VNNI=$(usex cpu_flags_x86_avx512_vnni)
-DGGML_AVX512_BF16=$(usex cpu_flags_x86_avx512_bf16)
-DGGML_FMA=$(usex cpu_flags_x86_fma3)
-DGGML_F16C=$(usex cpu_flags_x86_f16c)
-DGGML_AMX_TILE=$(usex cpu_flags_x86_amx_tile)
-DGGML_AMX_INT8=$(usex cpu_flags_x86_amx_int8)
-DGGML_AMX_BF16=$(usex cpu_flags_x86_amx_bf16)
)
if use openblas; then
mycmakeargs+=( -DGGML_BLAS=ON -DGGML_BLAS_VENDOR=OpenBLAS )
fi
if use cuda; then
local -x CUDAHOSTCXX="$(cuda_gccdir)"
cuda_add_sandbox
addpredict "/dev/char/"
fi
fi
# Image/video I/O uses system libraries rather than the git submodules.
if use webp || use webm; then
mycmakeargs+=( -DSD_WEBP=ON -DSD_USE_SYSTEM_WEBP=ON )
fi
use webm && mycmakeargs+=( -DSD_WEBM=ON -DSD_USE_SYSTEM_WEBM=ON )
cmake_src_configure
}
src_install() {
cmake_src_install
dodoc -r "${S}"/docs
dodoc "${S}"/README.md
}
Manage flags for this package:
euse -i <flag> -p sci-misc/stable-diffusion-cpp |
euse -E <flag> -p sci-misc/stable-diffusion-cpp |
euse -D <flag> -p sci-misc/stable-diffusion-cpp
system-ggml? ( >=sci-ml/ggml-0.27:=[cuda?,openblas?,opencl?,openmp?,rpc?,vulkan?] ) !system-ggml? ( cuda? ( dev-util/nvidia-cuda-toolkit:= ) openblas? ( sci-libs/openblas:= ) opencl? ( dev-libs/opencl-icd-loader ) openmp? ( llvm-runtimes/openmp:= ) vulkan? ( media-libs/vulkan-loader ) ) webm? ( media-libs/libwebm ) webp? ( media-libs/libwebp ) !system-ggml? ( opencl? ( dev-util/opencl-headers ) vulkan? ( dev-util/spirv-headers dev-util/vulkan-headers ) )
system-ggml? ( >=sci-ml/ggml-0.27:=[cuda?,openblas?,opencl?,openmp?,rpc?,vulkan?] ) !system-ggml? ( cuda? ( dev-util/nvidia-cuda-toolkit:= ) openblas? ( sci-libs/openblas:= ) opencl? ( dev-libs/opencl-icd-loader ) openmp? ( llvm-runtimes/openmp:= ) vulkan? ( media-libs/vulkan-loader ) ) webm? ( media-libs/libwebm ) webp? ( media-libs/libwebp )
!system-ggml? ( opencl? ( ) vulkan? ( media-libs/shaderc ) )
| Type | File | Size | Source URLs |
|---|---|---|---|
| DIST | stable-diffusion-cpp-1027-ggml.tar.gz | 4361974 bytes | https://github.com/leejet/ggml/archive/a5915eb0e47adef21c3f25b889a008925ea838c2.tar.gz |
| DIST | stable-diffusion-cpp-1027.tar.gz | 128945469 bytes | https://github.com/leejet/stable-diffusion.cpp/archive/refs/tags/master-1027-e7b7ec6.tar.gz |