diff options
Diffstat (limited to 'sci-misc/stable-diffusion-cpp/stable-diffusion-cpp-9999.ebuild')
| -rw-r--r-- | sci-misc/stable-diffusion-cpp/stable-diffusion-cpp-9999.ebuild | 123 |
1 files changed, 83 insertions, 40 deletions
diff --git a/sci-misc/stable-diffusion-cpp/stable-diffusion-cpp-9999.ebuild b/sci-misc/stable-diffusion-cpp/stable-diffusion-cpp-9999.ebuild index e301a0baf3bd..62ff471d23d0 100644 --- a/sci-misc/stable-diffusion-cpp/stable-diffusion-cpp-9999.ebuild +++ b/sci-misc/stable-diffusion-cpp/stable-diffusion-cpp-9999.ebuild @@ -3,9 +3,12 @@ EAPI=8 -ROCM_VERSION="6.3" +ROCM_VERSION="6.1" -inherit cmake cuda rocm linux-info +inherit cmake cuda rocm linux-info toolchain-funcs + +MY_PN="${PN/-/.}" +MY_P="${MY_PN}-${PV}" DESCRIPTION="Diffusion model(SD,Flux,Wan,Qwen Image,Z-Image,...) inference in pure C/C++" HOMEPAGE="https://github.com/leejet/stable-diffusion.cpp" @@ -16,55 +19,77 @@ if [[ ${PV} == *9999* ]]; then else MY_PV="b${PV#0_pre}" SRC_URI="https://github.com/leejet/stable-diffusion.cpp/archive/refs/tags/${MY_PV}.tar.gz -> ${P}.tar.gz" - S="${WORKDIR}/stable-diffusion-cpp-${MY_PV}" + S="${WORKDIR}/${MY_P}" KEYWORDS="~amd64" fi LICENSE="MIT" SLOT="0" -CPU_FLAGS_X86=( avx avx2 f16c ) -IUSE="openblas blis rocm cuda opencl vulkan flexiblas webm webp wmma" +# 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_}" ) +GGML_IUSE="${CPU_FLAGS[*]} blis cuda flexiblas openblas opencl +openmp rocm vulkan" +unset X86_CPU_FLAGS CPU_FLAGS +IUSE="${GGML_IUSE} webm webp" +unset GGML_IUSE REQUIRED_USE=" ?? ( openblas blis flexiblas ) + rocm? ( ${ROCM_REQUIRED_USE} ) webm? ( webp ) - wmma? ( - rocm - ) " -CDEPEND=" +COMMON_DEPEND=" openblas? ( sci-libs/openblas:= ) + openmp? ( llvm-runtimes/openmp:= ) blis? ( sci-libs/blis:= ) flexiblas? ( sci-libs/flexiblas:= ) rocm? ( >=dev-util/hip-${ROCM_VERSION}:= >=sci-libs/hipBLAS-${ROCM_VERSION}:= - wmma? ( - >=sci-libs/rocWMMA-${ROCM_VERSION}:= - ) ) cuda? ( dev-util/nvidia-cuda-toolkit:= ) webp? ( media-libs/libwebp ) webm? ( media-libs/libwebm ) " -DEPEND="${CDEPEND} +DEPEND="${COMMON_DEPEND} opencl? ( dev-util/opencl-headers ) - vulkan? ( dev-util/vulkan-headers ) + vulkan? ( + dev-util/spirv-headers + dev-util/vulkan-headers + ) " -RDEPEND="${CDEPEND} - dev-python/numpy +RDEPEND="${COMMON_DEPEND} opencl? ( dev-libs/opencl-icd-loader ) vulkan? ( media-libs/vulkan-loader ) " -BDEPEND="media-libs/shaderc" +BDEPEND="vulkan? ( media-libs/shaderc )" + +pkg_pretend() { + [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp +} pkg_setup() { if use rocm; then @@ -75,6 +100,8 @@ pkg_setup() { fi fi fi + + [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp } src_prepare() { @@ -84,23 +111,48 @@ src_prepare() { src_configure() { local mycmakeargs=( - -DCMAKE_SKIP_BUILD_RPATH=ON - -DSD_BUILD_SHARED_LIBS=OFF - -DSD_SERVER_BUILD_FRONTEND=OFF # requires pnpm and network access - -DGGML_NATIVE=0 # don't set march - -DGGML_RPC=ON - -DGENTOO_REMOVE_CMAKE_BLAS_HACK=ON - -DSD_CUDA=$(usex cuda) - -DSD_OPENCL=$(usex opencl) + -DSD_BUILD_EXAMPLES=ON -DSD_WEBP=$(usex webp) -DSD_USE_SYSTEM_WEBP=$(usex webp) -DSD_WEBM=$(usex webm) -DSD_USE_SYSTEM_WEBM=$(usex webm) + + # GGML features controls + -DSD_CUDA=$(usex cuda) -DSD_VULKAN=$(usex vulkan) + -DSD_OPENCL=$(usex opencl) + -DSD_RPC=ON + + -DSD_BUILD_SHARED_LIBS=OFF + -DSD_SERVER_BUILD_FRONTEND=OFF # requires pnpm and network access + + # avoid clashing with sci-ml/ggml + -DCMAKE_INSTALL_INCLUDEDIR="include/${MY_PN}" + -DCMAKE_INSTALL_LIBDIR="$(get_libdir)/${MY_PN}" + -DCMAKE_INSTALL_RPATH="\$ORIGIN/../$(get_libdir)/${MY_PN};\$ORIGIN" + ) - # avoid clashing with whisper.cpp - -DCMAKE_INSTALL_LIBDIR="${EPREFIX}/usr/$(get_libdir)/stable-diffusion.cpp" - -DCMAKE_INSTALL_RPATH="${EPREFIX}/usr/$(get_libdir)/stable-diffusion.cpp" + # GGML backends + mycmakeargs+=( + -DGGML_NATIVE=OFF # don't set march + + # CPU 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) + + -DGGML_OPENMP=$(usex openmp) ) if use openblas ; then @@ -129,21 +181,12 @@ src_configure() { fi if use rocm; then - rocm_use_hipcc + export HIPCXX="$(hipconfig -l)/clang" HIP_PATH="$(hipconfig -p)" mycmakeargs+=( - -DSD_HIPBLAS=ON -DAMDGPU_TARGETS=$(get_amdgpu_flags) -DGPU_TARGETS=$(get_amdgpu_flags) - -DGGML_HIP_ROCWMMA_FATTN=$(usex wmma) + -DSD_HIPBLAS=ON + -DGPU_TARGETS=$(get_amdgpu_flags) ) fi cmake_src_configure } - -src_install() { - cmake_src_install - - # avoid clashing with whisper.cpp - rm -rf "${ED}/usr/include" - - find "${ED}" -name "*.a" -delete || die -} |
