commit: 2d817909705e729a729ba2a4e832ed21b4da9d1d Author: Paul Zander <negril.nx+gentoo <AT> gmail <DOT> com> AuthorDate: Mon Apr 21 18:06:58 2025 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Tue Apr 22 00:37:49 2025 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=2d817909
media-gfx/blender: add 4.4.1 update 9999 Closes: https://bugs.gentoo.org/952513 Closes: https://bugs.gentoo.org/951658 Signed-off-by: Paul Zander <negril.nx+gentoo <AT> gmail.com> Signed-off-by: Sam James <sam <AT> gentoo.org> media-gfx/blender/Manifest | 2 + media-gfx/blender/blender-4.4.1.ebuild | 841 +++++++++++++++++++++ media-gfx/blender/blender-9999.ebuild | 664 +++++++++++----- .../blender/files/blender-4.3.2-system-gtest.patch | 57 ++ .../files/blender-4.4.0-optix-compile-flags.patch | 43 ++ media-gfx/blender/metadata.xml | 5 +- 6 files changed, 1409 insertions(+), 203 deletions(-) diff --git a/media-gfx/blender/Manifest b/media-gfx/blender/Manifest index 44f476638693..7c9e4778abea 100644 --- a/media-gfx/blender/Manifest +++ b/media-gfx/blender/Manifest @@ -2,3 +2,5 @@ DIST blender-3.6.18.tar.xz 67900952 BLAKE2B d4a619197abc3e4969846913f3c88cd64fd6 DIST blender-4.1.1.tar.xz 82146268 BLAKE2B 1ab4a6c1046851ef619394c62fc73794430dc091e2cab26d3d1d542e9d4519889e9b9731606385e9dc8657448ca3827875526f4a57dd1b5c326a73d8a6f9be8d SHA512 13ad0cdd09879b5c28554faca5a54172f43dc3dcb749d2d1723d3e89e741e6255179af3bd88309b735e058b9b350191e44f3158e882e55f1cedea70b8b21540e DIST blender-4.2.4.tar.xz 72804204 BLAKE2B 613ae4671cc9263d18fe988b07e8744eb04f67fe53f1c14ad3fbc7d80c58a577e7753871ca775cd40ab5f26ef2bc9030cda57012dda0c4785769f04263aea15b SHA512 1f61c1866aaa680c91fc6e3402b1e10533c8cce32572ffb825c53dc7c15ca51f1157a32d10134ca9e612fbf719406421ccc920b2d8ddd2993675784797381c6a DIST blender-4.3.2.tar.xz 74473996 BLAKE2B 9a5c8973561f3296b0ec35990ab4951e34f7c0dd5bee3dd120a49989dc8ca7ebfc9610654e8be9d14463af2197626f490324cdd03118db755f5d0b1f7acce375 SHA512 44697faf9acc2c1e75783d432a1a0040339c3445834961a995e95974d4088e75ee5cb647a3908125259d1910d180910e5bc50d34d40d35f33e03197893581477 +DIST blender-4.4.1.tar.xz 85518840 BLAKE2B a482a2d246222b5395f5e1c5cfa9fd2dbab0d5dc33145ec5cfaae3e7d7083e65034e1f5b54bc4605ab45905d08c2938c97ab488659d822997ee853c9e34fcc55 SHA512 db6b117b841890b172f4d13c6f38b73f36aae5648ed74f5233eb311328d467644005bd24fb4f9c7ea9b2dad7ff584fc7b3831f5ab34f3f900555c68f4af5b901 +DIST blender-assets-4.3.2.tar.xz 8763844 BLAKE2B 0eca4a7bfb630096dfe9dd5f8c8071d9ca8c1aaab560a8694df4add507c3e8a641a4e0ad197f110b639d2d399a23c5c25af6fb060ca3316e1a44d286f6b23f7e SHA512 ce9483b3e5b83d1b29bdfa3a14f7be7176e85ec50a414213a67badcce3c24cd8da349fee22b08cc95d6e5906420bbcd5c5f15855445da6364e6054f968c20678 diff --git a/media-gfx/blender/blender-4.4.1.ebuild b/media-gfx/blender/blender-4.4.1.ebuild new file mode 100644 index 000000000000..89a9a1f71194 --- /dev/null +++ b/media-gfx/blender/blender-4.4.1.ebuild @@ -0,0 +1,841 @@ +# Copyright 1999-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +# shellcheck disable=SC2207 + +# TODO +# - Package Hydra +# https://github.com/Ray-Tracing-Systems/HydraCore +# https://github.com/Ray-Tracing-Systems/HydraAPI +# - Package USD +# https://github.com/PixarAnimationStudios/OpenUSD +# - Package MaterialX +# https://github.com/AcademySoftwareFoundation/MaterialX +# - Package Draco +# https://github.com/google/draco +# - Package Audaspace +# https://github.com/neXyon/audaspace + +EAPI=8 + +PYTHON_COMPAT=( python3_{11..13} ) +# NOTE must match media-libs/osl +LLVM_COMPAT=( {15..19} ) +LLVM_OPTIONAL=1 + +ROCM_SKIP_GLOBALS=1 + +inherit cuda rocm llvm-r1 +inherit eapi9-pipestatus check-reqs flag-o-matic pax-utils python-single-r1 toolchain-funcs virtualx +inherit cmake xdg-utils + +DESCRIPTION="3D Creation/Animation/Publishing System" +HOMEPAGE="https://www.blender.org" + +# NOTE BLENDER_VERSION +# https://projects.blender.org/blender/blender/src/branch/main/source/blender/blenkernel/BKE_blender_version.h +BLENDER_BRANCH="$(ver_cut 1-2)" + +if [[ "${PV}" == *9999* ]]; then + EGIT_LFS="yes" + inherit git-r3 + EGIT_REPO_URI="https://projects.blender.org/blender/blender.git" + EGIT_SUBMODULES=( '*' '-lib/*' ) + + if [[ "${PV}" == 9999* ]]; then + EGIT_BRANCH="main" + else + EGIT_BRANCH="blender-v${BLENDER_BRANCH}-release" + fi + + RESTRICT="!test? ( test )" +else + SRC_URI=" + https://download.blender.org/source/${P}.tar.xz + " + # BUG upstream returns LFS references instead of files + # SRC_URI+=" + # test? ( + # https://projects.blender.org/blender/blender-test-data/archive/blender-v${BLENDER_BRANCH}-release.tar.gz + # ) + # " + KEYWORDS="~amd64 ~arm ~arm64" + RESTRICT="test" # the test archive contains LFS references +fi + +# assets is CC0-1.0 +LICENSE="GPL-3+ cycles? ( Apache-2.0 ) CC0-1.0" +SLOT="${BLENDER_BRANCH}" + +# NOTE +openpgl breaks on very old amd64 hardware +# potentially mirror cpu_flags_x86 + REQUIRED_USE +IUSE=" + alembic +bullet collada +color-management cuda +cycles +cycles-bin-kernels + debug doc +embree +ffmpeg +fftw +fluid +gmp gnome hip jack + jemalloc jpeg2k man +nanovdb ndof nls +oidn openal +openexr +opengl +openmp +openpgl + +opensubdiv +openvdb optix osl pipewire +pdf +potrace +pugixml pulseaudio + renderdoc sdl +sndfile +tbb test +tiff +truetype valgrind vulkan wayland +webp X +" + +if [[ "${PV}" == *9999* ]]; then + IUSE+="experimental" +fi + +REQUIRED_USE="${PYTHON_REQUIRED_USE} + || ( opengl vulkan ) + alembic? ( openexr ) + cuda? ( cycles ) + cycles? ( openexr tiff tbb ) + fluid? ( tbb ) + gnome? ( wayland ) + hip? ( cycles ) + nanovdb? ( openvdb ) + openvdb? ( tbb openexr ) + optix? ( cuda ) + osl? ( cycles pugixml ) + test? ( + color-management + jpeg2k + ) +" + +# Library versions for official builds can be found in the blender source directory in: +# build_files/build_environment/cmake/versions.cmake +RDEPEND="${PYTHON_DEPS} + app-arch/zstd + dev-cpp/gflags:= + dev-cpp/glog:= + dev-libs/boost:=[nls?] + dev-libs/lzo:2= + $(python_gen_cond_dep ' + dev-python/cython[${PYTHON_USEDEP}] + dev-python/numpy[${PYTHON_USEDEP}] + dev-python/zstandard[${PYTHON_USEDEP}] + dev-python/requests[${PYTHON_USEDEP}] + ') + media-libs/freetype:=[brotli] + media-libs/libepoxy:= + media-libs/libjpeg-turbo:= + media-libs/libpng:= + media-libs/libsamplerate + >=media-libs/openimageio-2.5.6.0:= + sys-libs/zlib:= + virtual/glu + virtual/libintl + virtual/opengl[X?] + alembic? ( >=media-gfx/alembic-1.8.3-r2[boost(+),hdf(+)] ) + bullet? ( sci-physics/bullet:=[double-precision] ) + collada? ( >=media-libs/opencollada-1.6.68 ) + color-management? ( media-libs/opencolorio:= ) + cuda? ( dev-util/nvidia-cuda-toolkit:= ) + embree? ( media-libs/embree:=[raymask] ) + ffmpeg? ( media-video/ffmpeg:=[encode(+),lame(-),jpeg2k?,opus,theora,vorbis,vpx,x264,xvid] ) + fftw? ( sci-libs/fftw:3.0=[threads] ) + gmp? ( dev-libs/gmp[cxx] ) + gnome? ( gui-libs/libdecor ) + hip? ( + >=dev-util/hip-5.7:= + ) + jack? ( virtual/jack ) + jemalloc? ( dev-libs/jemalloc:= ) + jpeg2k? ( media-libs/openjpeg:2= ) + ndof? ( + app-misc/spacenavd + dev-libs/libspnav + ) + nls? ( virtual/libiconv ) + openal? ( media-libs/openal ) + oidn? ( >=media-libs/oidn-2.1.0 ) + openexr? ( + >=dev-libs/imath-3.1.7:= + >=media-libs/openexr-3.2.1:0= + ) + openpgl? ( media-libs/openpgl:= ) + opensubdiv? ( >=media-libs/opensubdiv-3.6.0-r2[opengl,cuda?,openmp?,tbb?] ) + openvdb? ( + >=media-gfx/openvdb-11.0.0:=[nanovdb?] + dev-libs/c-blosc:= + ) + optix? ( dev-libs/optix ) + osl? ( + >=media-libs/osl-1.13:=[${LLVM_USEDEP}] + media-libs/mesa[${LLVM_USEDEP}] + ) + pdf? ( media-libs/libharu ) + potrace? ( media-gfx/potrace ) + pugixml? ( dev-libs/pugixml ) + pulseaudio? ( media-libs/libpulse ) + sdl? ( media-libs/libsdl2[sound,joystick] ) + sndfile? ( media-libs/libsndfile ) + tbb? ( dev-cpp/tbb:= ) + tiff? ( media-libs/tiff:= ) + valgrind? ( dev-debug/valgrind ) + wayland? ( + >=dev-libs/wayland-1.12 + >=dev-libs/wayland-protocols-1.15 + >=x11-libs/libxkbcommon-0.2.0 + dev-util/wayland-scanner + media-libs/mesa[wayland] + sys-apps/dbus + ) + vulkan? ( + media-libs/shaderc + dev-util/spirv-tools + dev-util/glslang + media-libs/vulkan-loader + ) + truetype? ( + media-libs/harfbuzz + ) + renderdoc? ( + media-gfx/renderdoc + ) + X? ( + x11-libs/libX11 + x11-libs/libXi + x11-libs/libXxf86vm + ) +" + +DEPEND="${RDEPEND} + dev-cpp/eigen:= +" + +if [[ "${PV}" == *9999* ]]; then +DEPEND+=" + test? ( + experimental? ( + wayland? ( + dev-libs/weston + ) + ) + ) +" +fi + +BDEPEND=" + virtual/pkgconfig + doc? ( + app-text/doxygen[dot] + dev-python/sphinx[latex] + dev-texlive/texlive-bibtexextra + dev-texlive/texlive-fontsextra + dev-texlive/texlive-fontutils + dev-texlive/texlive-latex + dev-texlive/texlive-latexextra + ) + vulkan? ( + dev-util/spirv-headers + dev-util/vulkan-headers + ) + nls? ( sys-devel/gettext ) + wayland? ( + dev-util/wayland-scanner + ) + X? ( + x11-base/xorg-proto + ) +" + +PATCHES=( + "${FILESDIR}/${PN}-4.0.2-FindClang.patch" + "${FILESDIR}/${PN}-4.1.1-FindLLVM.patch" + "${FILESDIR}/${PN}-4.1.1-numpy.patch" + "${FILESDIR}/${PN}-4.3.2-system-gtest.patch" + "${FILESDIR}/${PN}-4.4.0-optix-compile-flags.patch" +) + +blender_check_requirements() { + [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp + + if use doc; then + CHECKREQS_DISK_BUILD="4G" check-reqs_pkg_pretend + fi +} + +blender_get_version() { + if [[ -n "${BV}" && -n "${BVC}" ]]; then + return + fi + + local status + # Get blender version from blender itself. + # mirrors build_files/cmake/macros.cmake function(get_blender_version) + # NOTE maps x0y to x.y + # TODO this can potentially break for x > 9 and y > 9 + BV="$(grep "define BLENDER_VERSION " source/blender/blenkernel/BKE_blender_version.h | cut -d ' ' -f 3)" + status="$(pipestatus -v)" || die "fails to detect BLENDER_VERSION, (PIPESTATUS: ${status})" + BV="$(printf "%d.%d" "${BV:0: -2}" "${BV: -2}")" + + if [[ "${PV}" != 9999* && "${BLENDER_BRANCH}" != "${BV}" ]]; then + eerror "ebuild (${BLENDER_BRANCH}) and code (${BV}) version mismatch" + die "blender_get_version" + fi + + BVC="$(grep "define BLENDER_VERSION_CYCLE " source/blender/blenkernel/BKE_blender_version.h | cut -d ' ' -f 3)" + status="$(pipestatus -v)" || die "fails to detect BLENDER_VERSION_CYCLE, (PIPESTATUS: ${status})" +} + +pkg_pretend() { + blender_check_requirements +} + +pkg_setup() { + blender_check_requirements + python-single-r1_pkg_setup + + if use osl; then + llvm-r1_pkg_setup + fi +} + +src_unpack() { + if [[ "${PV}" == *9999* ]]; then + if ! use test; then + EGIT_SUBMODULES+=( '-tests/*' ) + fi + git-r3_src_unpack + else + default + + # BUG upstream returns LFS references instead of files + # if use test; then + # mkdir -p "${S}/tests/data/" || die + # mv blender-test-data/* "${S}/tests/data/" || die + # fi + fi +} + +src_prepare() { + use cuda && cuda_src_prepare + + cmake_src_prepare + + blender_get_version + + # Prepare icons and .desktop files for slotting. + sed \ + -e "s|blender.svg|blender-${BV}.svg|" \ + -e "s|blender-symbolic.svg|blender-${BV}-symbolic.svg|" \ + -e "s|blender.desktop|blender-${BV}.desktop|" \ + -e "s|org.blender.Blender.metainfo.xml|blender-${BV}.metainfo.xml|" \ + -i source/creator/CMakeLists.txt || die + + sed \ + -e "s|Name=Blender|Name=Blender ${BV}|" \ + -e "s|Exec=blender|Exec=blender-${BV}|" \ + -e "s|Icon=blender|Icon=blender-${BV}|" \ + -i release/freedesktop/blender.desktop || die + + sed \ + -e "/CMAKE_INSTALL_PREFIX_WITH_CONFIG/{s|\${CMAKE_INSTALL_PREFIX}|${T}\${CMAKE_INSTALL_PREFIX}|g}" \ + -i CMakeLists.txt \ + || die CMAKE_INSTALL_PREFIX_WITH_CONFIG + + mv \ + "release/freedesktop/icons/scalable/apps/blender.svg" \ + "release/freedesktop/icons/scalable/apps/blender-${BV}.svg" \ + || die + mv \ + "release/freedesktop/icons/symbolic/apps/blender-symbolic.svg" \ + "release/freedesktop/icons/symbolic/apps/blender-${BV}-symbolic.svg" \ + || die + mv \ + "release/freedesktop/blender.desktop" \ + "release/freedesktop/blender-${BV}.desktop" \ + || die + + mv \ + "release/freedesktop/org.blender.Blender.metainfo.xml" \ + "release/freedesktop/blender-${BV}.metainfo.xml" \ + || die + + sed \ + -e "s#\(set(cycles_kernel_runtime_lib_target_path \)\${cycles_kernel_runtime_lib_target_path}\(/lib)\)#\1\${CYCLES_INSTALL_PATH}\2#" \ + -i intern/cycles/kernel/CMakeLists.txt \ + || die + + if use hip; then + # fix hardcoded path + sed \ + -e "s#opt/rocm/hip/bin#$(hipconfig -p)/bin#g" \ + -i extern/hipew/src/hipew.c \ + || die + fi + + if use test; then + # Without this the tests will try to use /usr/bin/blender and /usr/share/blender/ to run the tests. + sed \ + -e "/string(REPLACE.*TEST_INSTALL_DIR/{s|\${CMAKE_INSTALL_PREFIX}|${T}\${CMAKE_INSTALL_PREFIX}|g}" \ + -i "build_files/cmake/testing.cmake" \ + || die "REPLACE.*TEST_INSTALL_DIR" + + # assertEquals was deprecated in Python-3.2 use assertEqual instead + sed \ + -e 's/assertEquals/assertEqual/g' \ + -i tests/python/bl_animation_action.py \ + || die + + sed -e '1i #include <cstdint>' -i extern/gtest/src/gtest-death-test.cc || die + else + cmake_comment_add_subdirectory tests + fi +} + +src_configure() { + # -Werror=odr, -Werror=lto-type-mismatch + # https://bugs.gentoo.org/859607 + # https://projects.blender.org/blender/blender/issues/120444 + filter-lto + + # Workaround for bug #922600 + append-ldflags "$(test-flags-CCLD -Wl,--undefined-version)" + + append-lfs-flags + blender_get_version + + local mycmakeargs=( + # we build a host-specific binary + -DWITH_CPU_CHECK="no" + + -DWITH_STRICT_BUILD_OPTIONS="yes" + -DWITH_LIBS_PRECOMPILED="no" + -DBUILD_SHARED_LIBS="no" # quadriflow only? + -DWITH_STATIC_LIBS=OFF + + # Build Options: + -DWITH_ALEMBIC="$(usex alembic)" + -DWITH_BOOST="yes" + -DWITH_BULLET="$(usex bullet)" + -DWITH_CYCLES="$(usex cycles)" + -DWITH_DOC_MANPAGE="$(usex man)" + -DWITH_FFTW3="$(usex fftw)" + -DWITH_GMP="$(usex gmp)" + -DWITH_GTESTS="$(usex test)" + -DWITH_HARFBUZZ="$(usex truetype)" + -DWITH_HARU="$(usex pdf)" + -DWITH_HEADLESS="$(usex !X "$(use !wayland)")" + -DWITH_INPUT_NDOF="$(usex ndof)" + -DWITH_INTERNATIONAL="$(usex nls)" + -DWITH_MATERIALX="no" # TODO: Package MaterialX + -DWITH_NANOVDB="$(usex nanovdb)" + -DWITH_OPENCOLLADA="$(usex collada)" + -DWITH_OPENCOLORIO="$(usex color-management)" + -DWITH_OPENGL_BACKEND="$(usex opengl)" + -DWITH_OPENIMAGEDENOISE="$(usex oidn)" + -DWITH_OPENSUBDIV="$(usex opensubdiv)" + -DWITH_OPENVDB="$(usex openvdb)" + -DWITH_OPENVDB_BLOSC="$(usex openvdb)" + -DWITH_POTRACE="$(usex potrace)" + -DWITH_PUGIXML="$(usex pugixml)" + # -DWITH_QUADRIFLOW=ON + -DWITH_RENDERDOC="$(usex renderdoc)" + -DWITH_TBB="$(usex tbb)" + -DWITH_UNITY_BUILD="no" + -DWITH_USD="no" # TODO: Package USD + -DWITH_VULKAN_BACKEND="$(usex vulkan)" # experimental + -DWITH_XR_OPENXR="no" + + -DWITH_SYSTEM_BULLET="yes" + -DWITH_SYSTEM_EIGEN3="yes" + -DWITH_SYSTEM_FREETYPE="yes" + -DWITH_SYSTEM_GFLAGS="yes" + -DWITH_SYSTEM_GLOG="yes" + -DWITH_SYSTEM_LZO="yes" + + # Compiler Options: + # -DWITH_BUILDINFO="yes" + -DWITH_OPENMP="$(usex openmp)" + + # System Options: + -DWITH_INSTALL_PORTABLE="no" + -DWITH_MEM_JEMALLOC="$(usex jemalloc)" + -DWITH_MEM_VALGRIND="$(usex valgrind)" + + # GHOST Options: + -DWITH_GHOST_WAYLAND="$(usex wayland)" + -DWITH_GHOST_WAYLAND_APP_ID="blender-${BV}" + -DWITH_GHOST_WAYLAND_DYNLOAD="no" + -DWITH_GHOST_X11="$(usex X)" + # -DWITH_GHOST_XDND=ON + # -DWITH_X11_XF86VMODE=ON + # -DWITH_X11_XFIXES=ON + # -DWITH_X11_XINPUT=ON + # -DWITH_GHOST_WAYLAND_DYNLOAD # visible wayland? + # -DWITH_GHOST_WAYLAND_LIBDECOR # visible wayland? + + # Image Formats: + # -DWITH_IMAGE_CINEON=ON + -DWITH_IMAGE_OPENEXR="$(usex openexr)" + -DWITH_IMAGE_OPENJPEG="$(usex jpeg2k)" + -DWITH_IMAGE_WEBP="$(usex webp)" # unlisted + + # Audio: + # -DWITH_AUDASPACE=OFF + # -DWITH_SYSTEM_AUDASPACE=OFF + -DWITH_CODEC_FFMPEG="$(usex ffmpeg)" + -DWITH_CODEC_SNDFILE="$(usex sndfile)" + # -DWITH_COREAUDIO=OFF + -DWITH_JACK="$(usex jack)" + # -DWITH_JACK_DYNLOAD= + -DWITH_OPENAL="$(usex openal)" + -DWITH_PIPEWIRE="$(usex pipewire)" + # -DWITH_PIPEWIRE_DYNLOAD= + -DWITH_PULSEAUDIO="$(usex pulseaudio)" + # -DWITH_PULSEAUDIO_DYNLOAD= + -DWITH_SDL="$(usex sdl)" + # -DWITH_WASAPI=OFF + + # Python: + # -DWITH_PYTHON=ON + -DWITH_PYTHON_INSTALL="no" + # -DWITH_PYTHON_INSTALL_NUMPY="no" + # -DWITH_PYTHON_INSTALL_ZSTANDARD="no" + # -DWITH_PYTHON_MODULE="no" + # -DWITH_PYTHON_SAFETY= + -DWITH_PYTHON_SECURITY="yes" + -DPYTHON_INCLUDE_DIR="$(python_get_includedir)" + -DPYTHON_LIBRARY="$(python_get_library_path)" + -DPYTHON_VERSION="${EPYTHON/python/}" + -DWITH_DRACO="no" # TODO: Package Draco + + # Modifiers: + -DWITH_MOD_FLUID="$(usex fluid)" + # -DWITH_MOD_REMESH=ON + -DWITH_MOD_OCEANSIM="$(usex fftw)" + + # Rendering: + -DWITH_HYDRA="no" # TODO: Package Hydra + + # Rendering (Cycles): + -DWITH_CYCLES_OSL="$(usex osl)" + -DWITH_CYCLES_EMBREE="$(usex embree)" + -DWITH_CYCLES_PATH_GUIDING="$(usex openpgl)" + + -DWITH_CYCLES_DEVICE_OPTIX="$(usex optix)" + -DWITH_CYCLES_DEVICE_CUDA="$(usex cuda)" + -DWITH_CYCLES_CUDA_BINARIES="$(usex cuda "$(usex cycles-bin-kernels)")" + + -DWITH_CYCLES_DEVICE_HIP="$(usex hip)" + -DWITH_CYCLES_HIP_BINARIES="$(usex hip "$(usex cycles-bin-kernels)")" + -DWITH_CYCLES_HYDRA_RENDER_DELEGATE="no" # TODO: package Hydra + + # -DWITH_CYCLES_STANDALONE=OFF + # -DWITH_CYCLES_STANDALONE_GUI=OFF + + -DWITH_BLENDER_THUMBNAILER="yes" + ) + + if has_version ">=dev-python/numpy-2"; then + mycmakeargs+=( + -DPYTHON_NUMPY_INCLUDE_DIRS="$(python_get_sitedir)/numpy/_core/include" + -DPYTHON_NUMPY_PATH="$(python_get_sitedir)/numpy/_core/include" + ) + fi + + # requires dev-vcs/git + if [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]]; then + mycmakeargs+=( + # -DWITH_BUILDINFO="no" + -DWITH_EXPERIMENTAL_FEATURES="$(usex experimental)" + ) + else + mycmakeargs+=( + -DWITH_EXPERIMENTAL_FEATURES="no" + ) + fi + + if use cuda; then + # Ease compiling with required gcc similar to cuda_sanitize but for cmake + if use cycles-bin-kernels; then + local -x CUDAHOSTCXX="$(cuda_gccdir)" + local -x CUDAHOSTLD="$(tc-getCXX)" + + if [[ -n "${CUDAARCHS}" ]]; then + mycmakeargs+=( + -DCYCLES_CUDA_BINARIES_ARCH="$(echo "${CUDAARCHS}" | sed -e 's/^/sm_/g' -e 's/;/;sm_/g')" + ) + fi + fi + fi + + if use hip; then + # local -x HIP_PATH="$(hipconfig -p)" + mycmakeargs+=( + # -DROCM_PATH="$(hipconfig -R)" + -DHIP_ROOT_DIR="$(hipconfig -p)" + + -DHIP_HIPCC_FLAGS="-fcf-protection=none" + + # -DHIP_LINKER_EXECUTABLE="$(get_llvm_prefix)/bin/clang++" + -DCMAKE_HIP_LINK_EXECUTABLE="$(get_llvm_prefix)/bin/clang++" + + -DCYCLES_HIP_BINARIES_ARCH="$(get_amdgpu_flags)" + ) + fi + + if use optix; then + mycmakeargs+=( + -DCYCLES_RUNTIME_OPTIX_ROOT_DIR="${ESYSROOT}/opt/optix" + -DOPTIX_ROOT_DIR="${ESYSROOT}/opt/optix" + ) + fi + + if use wayland; then + mycmakeargs+=( + -DWITH_GHOST_WAYLAND_APP_ID="blender-${BV}" + -DWITH_GHOST_WAYLAND_LIBDECOR="$(usex gnome)" + ) + fi + + # This is currently needed on arm64 to get the NEON SIMD wrapper to compile the code successfully + use arm64 && append-flags -flax-vector-conversions + + append-cflags "$(usex debug '-DDEBUG' '-DNDEBUG')" + append-cxxflags "$(usex debug '-DDEBUG' '-DNDEBUG')" + + if tc-is-gcc; then + # We disable these to respect the user's choice of linker. + mycmakeargs+=( + -DWITH_LINKER_GOLD="no" + ) + fi + + if tc-is-clang || use osl; then + mycmakeargs+=( + -DWITH_CLANG="yes" + -DWITH_LLVM="yes" + ) + fi + + if use test; then + local CYCLES_TEST_DEVICES=( "CPU" ) + if use cycles-bin-kernels; then + use cuda && CYCLES_TEST_DEVICES+=( "CUDA" ) + use optix && CYCLES_TEST_DEVICES+=( "OPTIX" ) + use hip && CYCLES_TEST_DEVICES+=( "HIP" ) + fi + mycmakeargs+=( + -DCMAKE_INSTALL_PREFIX_WITH_CONFIG="${T}/usr" + -DCYCLES_TEST_DEVICES="$(local IFS=";"; echo "${CYCLES_TEST_DEVICES[*]}")" + ) + + # NOTE in lieu of a FEATURE/build_options + if [[ "${EXPENSIVE_TESTS:-0}" -gt 0 ]]; then + mycmakeargs+=( + -DWITH_CYCLES_TEST_OSL="$(usex osl)" + + -DWITH_GPU_BACKEND_TESTS="yes" + -DWITH_GPU_COMPOSITOR_TESTS="yes" + + -DWITH_GPU_DRAW_TESTS="yes" + + -DWITH_GPU_RENDER_TESTS="no" + -DWITH_GPU_RENDER_TESTS_HEADED="no" + -DWITH_GPU_RENDER_TESTS_SILENT="yes" + -DWITH_GPU_RENDER_TESTS_VULKAN="$(usex vulkan)" + + -DWITH_SYSTEM_PYTHON_TESTS="yes" + ) + + if [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]] && use experimental; then + mycmakeargs+=( + # Enable user-interface tests using a headless display server. + # Currently this depends on WITH_GHOST_WAYLAND and the weston compositor (Experimental) + -DWITH_UI_TESTS="$(usex wayland)" + -DWESTON_BIN="${ESYSROOT}/usr/bin/weston" + ) + fi + else + mycmakeargs+=( + -DWITH_GPU_RENDER_TESTS="no" + ) + fi + fi + + cmake_src_configure +} + +src_test() { + # A lot of tests need to have access to the installed data files. + # So install them into the image directory now. + DESTDIR="${T}" cmake_build install + + blender_get_version + # Define custom blender data/script file paths, or we won't be able to find them otherwise during testing. + # (Because the data is in the image directory and it will default to look in /usr/share) + local -x BLENDER_SYSTEM_RESOURCES="${T%/}/usr/share/blender/${BV}" + + # Sanity check that the script and datafile path is valid. + # If they are not valid, blender will fallback to the default path which is not what we want. + [[ -d "${BLENDER_SYSTEM_RESOURCES}" ]] || die "The custom resources path is invalid, fix the ebuild!" + + # TODO only picks first card + addwrite "/dev/dri/card0" + addwrite "/dev/dri/renderD128" + addwrite "/dev/udmabuf" + + if use cuda; then + cuda_add_sandbox -w + addwrite "/dev/char/" + fi + + local -x CMAKE_SKIP_TESTS=( + "^script_pyapi_bpy_driver_secure_eval$" + "^cycles_image_colorspace_cpu$" + "^compositor_cpu_color$" + "^compositor_cpu_filter$" + ) + + if ! has_version "media-libs/openusd"; then + CMAKE_SKIP_TESTS+=( + # from pxr import Usd # ModuleNotFoundError: No module named 'pxr' + "^script_bundled_modules$" + ) + fi + + # For debugging, print out all information. + local -x VERBOSE="$(usex debug "true" "false")" + + # Show the window in the foreground. + local -x USE_WINDOW="false" + local -x USE_DEBUG="false" + + if [[ "${EXPENSIVE_TESTS:-0}" -gt 0 ]]; then + if [[ "${USE_WINDOW}" = "true" ]] && + [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]] && + use experimental && use wayland; then + # This runs weston + xdg_environment_reset + fi + + if [[ "${USE_WINDOW}" == "true" ]]; then + xdg_environment_reset + # WITH_GPU_RENDER_TESTS_HEADED + if use wayland; then + local compositor exit_code + local logfile=${T}/weston.log + weston --xwayland --backend=headless --socket=wayland-5 --idle-time=0 2>"${logfile}" & + compositor=$! + local -x WAYLAND_DISPLAY=wayland-5 + sleep 1 # wait for xwayland to be up + local -x DISPLAY="$(grep "xserver listening on display" "${logfile}" | cut -d ' ' -f 5)" + + cmake_src_test + + exit_code=$? + kill "${compositor}" + elif use X; then + virtx cmake_src_test + fi + fi + else + cmake_src_test + fi + + # Clean up the image directory for src_install + rm -fr "${T}/usr" || die +} + +src_install() { + blender_get_version + + # Pax mark blender for hardened support. + pax-mark m "${BUILD_DIR}/bin/blender" + + cmake_src_install + + if use man; then + # Slot the man page + mv "${ED}/usr/share/man/man1/blender.1" "${ED}/usr/share/man/man1/blender-${BV}.1" || die + fi + + if use doc; then + # Define custom blender data/script file paths. Otherwise Blender will not be able to find them during doc building. + # (Because the data is in the image directory and it will default to look in /usr/share) + local -x BLENDER_SYSTEM_RESOURCES="${ED}/usr/share/blender/${BV}" + + # Workaround for binary drivers. # TODO + addpredict /dev/ati + addpredict /dev/dri + addpredict /dev/nvidiactl + + einfo "Generating Blender C/C++ API docs ..." + cd "${CMAKE_USE_DIR}/doc/doxygen" || die + doxygen -u Doxyfile || die + doxygen || die "doxygen failed to build API docs." + + cd "${CMAKE_USE_DIR}" || die + einfo "Generating (BPY) Blender Python API docs ..." + "${BUILD_DIR}"/bin/blender --background --python "doc/python_api/sphinx_doc_gen.py" -noaudio || die "sphinx failed." + + cd "${CMAKE_USE_DIR}/doc/python_api" || die + sphinx-build sphinx-in BPY_API || die "sphinx failed." + + docinto "html/API/python" + dodoc -r "${CMAKE_USE_DIR}/doc/python_api/BPY_API/" + + docinto "html/API/blender" + dodoc -r "${CMAKE_USE_DIR}/doc/doxygen/html/" + fi + + # Fix doc installdir + docinto html + dodoc "${CMAKE_USE_DIR}/release/text/readme.html" + rm -r "${ED}/usr/share/doc/blender" || die + + python_optimize "${ED}/usr/share/blender/${BV}/scripts" + + mv "${ED}/usr/bin/blender-thumbnailer" "${ED}/usr/bin/blender-${BV}-thumbnailer" \ + || die "blender-thumbnailer version rename failed" + mv "${ED}/usr/bin/blender" "${ED}/usr/bin/blender-${BV}" || die "blender version rename failed" +} + +pkg_postinst() { + elog + elog "Blender uses python integration. As such, may have some" + elog "inherent risks with running unknown python scripts." + elog + elog "It is recommended to change your blender temp directory" + elog "from /tmp to /home/user/tmp or another tmp file under your" + elog "home directory. This can be done by starting blender, then" + elog "changing the 'Temporary Files' directory in Blender preferences." + elog + + if use osl && ! has_version "media-libs/mesa[${LLVM_USEDEP}]"; then + ewarn "" + ewarn "OSL is know to cause runtime segfaults if Mesa has been linked to" + ewarn "an other LLVM version than what OSL is linked to." + ewarn "See https://bugs.gentoo.org/880671 for more details" + ewarn "" + fi + + # NOTE build_files/cmake/Modules/FindPythonLibsUnix.cmake: set(_PYTHON_VERSION_SUPPORTED 3.11) + if ! use python_single_target_python3_11; then + elog "You are building Blender with a newer python version than" + elog "supported by this version upstream." + elog "If you experience breakages with e.g. plugins, please switch to" + elog "PYTHON_SINGLE_TARGET: python3_11 instead." + elog "Bug: https://bugs.gentoo.org/737388" + elog + fi + + xdg_icon_cache_update + xdg_mimeinfo_database_update + xdg_desktop_database_update +} + +pkg_postrm() { + xdg_icon_cache_update + xdg_mimeinfo_database_update + xdg_desktop_database_update + + if [[ -z "${REPLACED_BY_VERSION}" ]]; then + ewarn + ewarn "You may want to remove the following directories" + ewarn "- ~/.config/${PN}/${BV}/cache/" + ewarn "- ~/.cache/cycles/" + ewarn "It may contain extra render kernels not tracked by portage" + ewarn + fi +} diff --git a/media-gfx/blender/blender-9999.ebuild b/media-gfx/blender/blender-9999.ebuild index ae310352c7cd..10401937e2ba 100644 --- a/media-gfx/blender/blender-9999.ebuild +++ b/media-gfx/blender/blender-9999.ebuild @@ -1,47 +1,88 @@ # Copyright 1999-2025 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 +# shellcheck disable=SC2207 + +# TODO +# - Package Hydra +# https://github.com/Ray-Tracing-Systems/HydraCore +# https://github.com/Ray-Tracing-Systems/HydraAPI +# - Package USD +# https://github.com/PixarAnimationStudios/OpenUSD +# - Package MaterialX +# https://github.com/AcademySoftwareFoundation/MaterialX +# - Package Draco +# https://github.com/google/draco +# - Package Audaspace +# https://github.com/neXyon/audaspace + EAPI=8 -PYTHON_COMPAT=( python3_{11..12} ) +PYTHON_COMPAT=( python3_{11..13} ) # NOTE must match media-libs/osl -LLVM_COMPAT=( {15..18} ) +LLVM_COMPAT=( {15..19} ) LLVM_OPTIONAL=1 -inherit check-reqs cmake cuda flag-o-matic llvm-r1 pax-utils python-single-r1 toolchain-funcs xdg-utils +ROCM_SKIP_GLOBALS=1 + +inherit cuda rocm llvm-r1 +inherit eapi9-pipestatus check-reqs flag-o-matic pax-utils python-single-r1 toolchain-funcs virtualx +inherit cmake xdg-utils DESCRIPTION="3D Creation/Animation/Publishing System" HOMEPAGE="https://www.blender.org" -if [[ ${PV} = *9999* ]] ; then +# NOTE BLENDER_VERSION +# https://projects.blender.org/blender/blender/src/branch/main/source/blender/blenkernel/BKE_blender_version.h +BLENDER_BRANCH="$(ver_cut 1-2)" + +if [[ "${PV}" == *9999* ]]; then EGIT_LFS="yes" inherit git-r3 EGIT_REPO_URI="https://projects.blender.org/blender/blender.git" EGIT_SUBMODULES=( '*' '-lib/*' ) + + if [[ "${PV}" == 9999* ]]; then + EGIT_BRANCH="main" + else + EGIT_BRANCH="blender-v${BLENDER_BRANCH}-release" + fi + RESTRICT="!test? ( test )" else SRC_URI=" https://download.blender.org/source/${P}.tar.xz " + # BUG upstream returns LFS references instead of files + # SRC_URI+=" # test? ( - # https://projects.blender.org/blender/blender-test-data/archive/blender-v$(ver_cut 1-2)-release.tar.gz + # https://projects.blender.org/blender/blender-test-data/archive/blender-v${BLENDER_BRANCH}-release.tar.gz # ) # " KEYWORDS="~amd64 ~arm ~arm64" - RESTRICT="test" # the test archive returns LFS references. + RESTRICT="test" # the test archive contains LFS references fi -LICENSE="GPL-3+ cycles? ( Apache-2.0 )" -SLOT="${PV%.*}" +# assets is CC0-1.0 +LICENSE="GPL-3+ cycles? ( Apache-2.0 ) CC0-1.0" +SLOT="${BLENDER_BRANCH}" + +# NOTE +openpgl breaks on very old amd64 hardware +# potentially mirror cpu_flags_x86 + REQUIRED_USE IUSE=" alembic +bullet collada +color-management cuda +cycles +cycles-bin-kernels debug doc +embree +ffmpeg +fftw +fluid +gmp gnome hip jack - jemalloc jpeg2k man +nanovdb ndof nls +oidn oneapi openal +openexr +openmp +openpgl - +opensubdiv +openvdb optix osl +otf +pdf +potrace +pugixml pulseaudio - renderdoc sdl +sndfile +tbb test +tiff valgrind vulkan wayland +webp X + jemalloc jpeg2k man +nanovdb ndof nls +oidn oneapi openal +openexr +opengl +openpgl + +opensubdiv +openvdb optix osl pipewire +pdf +potrace +pugixml pulseaudio + renderdoc sdl +sndfile +tbb test +tiff +truetype valgrind vulkan wayland +webp X " +if [[ "${PV}" == *9999* ]]; then + IUSE+="experimental" +fi + REQUIRED_USE="${PYTHON_REQUIRED_USE} + || ( opengl vulkan ) alembic? ( openexr ) cuda? ( cycles ) cycles? ( openexr tiff tbb ) @@ -52,12 +93,18 @@ REQUIRED_USE="${PYTHON_REQUIRED_USE} openvdb? ( tbb openexr ) optix? ( cuda ) osl? ( cycles pugixml ) - test? ( color-management )" + test? ( + color-management + jpeg2k + ) +" # Library versions for official builds can be found in the blender source directory in: # build_files/build_environment/cmake/versions.cmake RDEPEND="${PYTHON_DEPS} app-arch/zstd + dev-cpp/gflags:= + dev-cpp/glog:= dev-libs/boost:=[nls?] dev-libs/lzo:2= $(python_gen_cond_dep ' @@ -75,17 +122,20 @@ RDEPEND="${PYTHON_DEPS} sys-libs/zlib:= virtual/glu virtual/libintl - virtual/opengl + virtual/opengl[X?] alembic? ( >=media-gfx/alembic-1.8.3-r2[boost(+),hdf(+)] ) + bullet? ( sci-physics/bullet:=[double-precision] ) collada? ( >=media-libs/opencollada-1.6.68 ) color-management? ( media-libs/opencolorio:= ) cuda? ( dev-util/nvidia-cuda-toolkit:= ) embree? ( media-libs/embree:=[raymask] ) ffmpeg? ( media-video/ffmpeg:=[encode(+),lame(-),jpeg2k?,opus,theora,vorbis,vpx,x264,xvid] ) - fftw? ( sci-libs/fftw:3.0= ) + fftw? ( sci-libs/fftw:3.0=[threads] ) gmp? ( dev-libs/gmp[cxx] ) gnome? ( gui-libs/libdecor ) - hip? ( >=dev-util/hip-5.7 ) + hip? ( + >=dev-util/hip-5.7:= + ) jack? ( virtual/jack ) jemalloc? ( dev-libs/jemalloc:= ) jpeg2k? ( media-libs/openjpeg:2= ) @@ -96,17 +146,13 @@ RDEPEND="${PYTHON_DEPS} nls? ( virtual/libiconv ) openal? ( media-libs/openal ) oidn? ( >=media-libs/oidn-2.1.0 ) - oneapi? ( || ( - dev-libs/intel-compute-runtime:0[l0] - dev-libs/intel-compute-runtime:legacy[l0] - ) - ) + oneapi? ( dev-libs/intel-compute-runtime:=[l0] ) openexr? ( >=dev-libs/imath-3.1.7:= >=media-libs/openexr-3.2.1:0= ) openpgl? ( media-libs/openpgl:= ) - opensubdiv? ( >=media-libs/opensubdiv-3.5.0 ) + opensubdiv? ( >=media-libs/opensubdiv-3.6.0-r2[opengl,cuda?,tbb?] ) openvdb? ( >=media-gfx/openvdb-11.0.0:=[nanovdb?] dev-libs/c-blosc:= @@ -139,7 +185,7 @@ RDEPEND="${PYTHON_DEPS} dev-util/glslang media-libs/vulkan-loader ) - otf? ( + truetype? ( media-libs/harfbuzz ) renderdoc? ( @@ -154,11 +200,19 @@ RDEPEND="${PYTHON_DEPS} DEPEND="${RDEPEND} dev-cpp/eigen:= - vulkan? ( - dev-util/spirv-headers - dev-util/vulkan-headers +" + +if [[ "${PV}" == *9999* ]]; then +DEPEND+=" + test? ( + experimental? ( + wayland? ( + dev-libs/weston + ) + ) ) " +fi BDEPEND=" virtual/pkgconfig @@ -171,6 +225,10 @@ BDEPEND=" dev-texlive/texlive-latex dev-texlive/texlive-latexextra ) + vulkan? ( + dev-util/spirv-headers + dev-util/vulkan-headers + ) nls? ( sys-devel/gettext ) wayland? ( dev-util/wayland-scanner @@ -182,29 +240,39 @@ BDEPEND=" PATCHES=( "${FILESDIR}/${PN}-4.0.2-FindClang.patch" - "${FILESDIR}/${PN}-4.0.2-CUDA_NVCC_FLAGS.patch" "${FILESDIR}/${PN}-4.1.1-FindLLVM.patch" "${FILESDIR}/${PN}-4.1.1-numpy.patch" + "${FILESDIR}/${PN}-4.3.2-system-gtest.patch" + "${FILESDIR}/${PN}-4.4.0-optix-compile-flags.patch" ) blender_check_requirements() { - [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp - if use doc; then CHECKREQS_DISK_BUILD="4G" check-reqs_pkg_pretend fi } blender_get_version() { + if [[ -n "${BV}" && -n "${BVC}" ]]; then + return + fi + + local status # Get blender version from blender itself. - BV=$(grep "BLENDER_VERSION " source/blender/blenkernel/BKE_blender_version.h | cut -d " " -f 3; assert) - if ((${BV:0:1} < 3)) ; then - # Add period (290 -> 2.90). - BV=${BV:0:1}.${BV:1} - else - # Add period and skip the middle number (301 -> 3.1) - BV=${BV:0:1}.${BV:2} + # mirrors build_files/cmake/macros.cmake function(get_blender_version) + # NOTE maps x0y to x.y + # TODO this can potentially break for x > 9 and y > 9 + BV="$(grep "define BLENDER_VERSION " source/blender/blenkernel/BKE_blender_version.h | cut -d ' ' -f 3)" + status="$(pipestatus -v)" || die "fails to detect BLENDER_VERSION, (PIPESTATUS: ${status})" + BV="$(printf "%d.%d" "${BV:0: -2}" "${BV: -2}")" + + if [[ "${PV}" != 9999* && "${BLENDER_BRANCH}" != "${BV}" ]]; then + eerror "ebuild (${BLENDER_BRANCH}) and code (${BV}) version mismatch" + die "blender_get_version" fi + + BVC="$(grep "define BLENDER_VERSION_CYCLE " source/blender/blenkernel/BKE_blender_version.h | cut -d ' ' -f 3)" + status="$(pipestatus -v)" || die "fails to detect BLENDER_VERSION_CYCLE, (PIPESTATUS: ${status})" } pkg_pretend() { @@ -214,20 +282,26 @@ pkg_pretend() { einfo "The Intel oneAPI support is rudimentary." einfo "" einfo "Please report any bugs you find to https://bugs.gentoo.org/" + if ! command -v icpx &>/dev/null && ! command -v dpcpp &>/dev/null; then + eerror "Could not find icpx or dpcpp." + eerror "You need SYCL/DCP++ to enable oneapi support." + eerror "Try sys-devel/DPC++::science" + die "FindSYCL would fail. Aborting." + fi fi } pkg_setup() { + blender_check_requirements + python-single-r1_pkg_setup + if use osl; then llvm-r1_pkg_setup fi - - blender_check_requirements - python-single-r1_pkg_setup } src_unpack() { - if [[ ${PV} = *9999* ]] ; then + if [[ "${PV}" == *9999* ]]; then if ! use test; then EGIT_SUBMODULES+=( '-tests/*' ) fi @@ -235,10 +309,11 @@ src_unpack() { else default - if use test; then - mkdir -p "${S}/tests/data/" || die - mv blender-test-data/* "${S}/tests/data/" || die - fi + # BUG upstream returns LFS references instead of files + # if use test; then + # mkdir -p "${S}/tests/data/" || die + # mv blender-test-data/* "${S}/tests/data/" || die + # fi fi } @@ -249,11 +324,6 @@ src_prepare() { blender_get_version - # Disable MS Windows help generation. The variable doesn't do what it - # it sounds like. - sed -e "s|GENERATE_HTMLHELP = YES|GENERATE_HTMLHELP = NO|" \ - -i doc/doxygen/Doxyfile || die - # Prepare icons and .desktop files for slotting. sed \ -e "s|blender.svg|blender-${BV}.svg|" \ @@ -268,26 +338,58 @@ src_prepare() { -e "s|Icon=blender|Icon=blender-${BV}|" \ -i release/freedesktop/blender.desktop || die - sed -e "s|\${CMAKE_INSTALL_PREFIX}/\${BLENDER_BIN}|${T}/usr/\${BLENDER_BIN}|g" -i source/creator/CMakeLists.txt || die + sed \ + -e "/CMAKE_INSTALL_PREFIX_WITH_CONFIG/{s|\${CMAKE_INSTALL_PREFIX}|${T}\${CMAKE_INSTALL_PREFIX}|g}" \ + -i CMakeLists.txt \ + || die CMAKE_INSTALL_PREFIX_WITH_CONFIG mv \ - release/freedesktop/icons/scalable/apps/blender.svg \ - "release/freedesktop/icons/scalable/apps/blender-${BV}.svg" || die + "release/freedesktop/icons/scalable/apps/blender.svg" \ + "release/freedesktop/icons/scalable/apps/blender-${BV}.svg" \ + || die + mv \ + "release/freedesktop/icons/symbolic/apps/blender-symbolic.svg" \ + "release/freedesktop/icons/symbolic/apps/blender-${BV}-symbolic.svg" \ + || die mv \ - release/freedesktop/icons/symbolic/apps/blender-symbolic.svg \ - "release/freedesktop/icons/symbolic/apps/blender-${BV}-symbolic.svg" || die - mv release/freedesktop/blender.desktop "release/freedesktop/blender-${BV}.desktop" || die - mv release/freedesktop/org.blender.Blender.metainfo.xml "release/freedesktop/blender-${BV}.metainfo.xml" - mv release/freedesktop/org.blender.Blender.appdata.xml "release/freedesktop/blender-${BV}.appdata.xml" + "release/freedesktop/blender.desktop" \ + "release/freedesktop/blender-${BV}.desktop" \ + || die - if use test; then - # Without this the tests will try to use /usr/bin/blender and /usr/share/blender/ to run the tests. - sed -e "s|set(TEST_INSTALL_DIR.*|set(TEST_INSTALL_DIR ${T}/usr)|g" -i tests/CMakeLists.txt || die - sed -e "s|string(REPLACE.*|set(TEST_INSTALL_DIR ${T}/usr)|g" -i build_files/cmake/testing.cmake || die + mv \ + "release/freedesktop/org.blender.Blender.metainfo.xml" \ + "release/freedesktop/blender-${BV}.metainfo.xml" \ + || die + + sed \ + -e "s#\(set(cycles_kernel_runtime_lib_target_path \)\${cycles_kernel_runtime_lib_target_path}\(/lib)\)#\1\${CYCLES_INSTALL_PATH}\2#" \ + -i intern/cycles/kernel/CMakeLists.txt \ + || die + + if use hip; then + # fix hardcoded path + sed \ + -e "s#opt/rocm/hip/bin#$(hipconfig -p)/bin#g" \ + -i extern/hipew/src/hipew.c \ + || die fi - if use vulkan; then - sed -e "s/extern_vulkan_memory_allocator/extern_vulkan_memory_allocator\nSPIRV-Tools-opt\nSPIRV-Tools\nSPIRV-Tools-link\nglslang\nSPIRV\nSPVRemapper/" -i source/blender/gpu/CMakeLists.txt || die + if use test; then + # Without this the tests will try to use /usr/bin/blender and /usr/share/blender/ to run the tests. + sed \ + -e "/string(REPLACE.*TEST_INSTALL_DIR/{s|\${CMAKE_INSTALL_PREFIX}|${T}\${CMAKE_INSTALL_PREFIX}|g}" \ + -i "build_files/cmake/testing.cmake" \ + || die "REPLACE.*TEST_INSTALL_DIR" + + # assertEquals was deprecated in Python-3.2 use assertEqual instead + sed \ + -e 's/assertEquals/assertEqual/g' \ + -i tests/python/bl_animation_action.py \ + || die + + sed -e '1i #include <cstdint>' -i extern/gtest/src/gtest-death-test.cc || die + else + cmake_comment_add_subdirectory tests fi } @@ -298,93 +400,142 @@ src_configure() { filter-lto # Workaround for bug #922600 - append-ldflags $(test-flags-CCLD -Wl,--undefined-version) + append-ldflags "$(test-flags-CCLD -Wl,--undefined-version)" append-lfs-flags blender_get_version local mycmakeargs=( - -DWITH_LIBS_PRECOMPILED=no - -DBUILD_SHARED_LIBS=no + # we build a host-specific binary + -DWITH_CPU_CHECK="no" + + -DWITH_STRICT_BUILD_OPTIONS="yes" + -DWITH_LIBS_PRECOMPILED="no" + -DBUILD_SHARED_LIBS="no" # quadriflow only? + -DWITH_STATIC_LIBS=OFF + + # Build Options: + -DWITH_ALEMBIC="$(usex alembic)" + -DWITH_BOOST="yes" + -DWITH_BULLET="$(usex bullet)" + -DWITH_CYCLES="$(usex cycles)" + -DWITH_DOC_MANPAGE="$(usex man)" + -DWITH_FFTW3="$(usex fftw)" + -DWITH_GMP="$(usex gmp)" + -DWITH_GTESTS="$(usex test)" + -DWITH_HARFBUZZ="$(usex truetype)" + -DWITH_HARU="$(usex pdf)" + -DWITH_HEADLESS="$(usex !X "$(use !wayland)")" + -DWITH_INPUT_NDOF="$(usex ndof)" + -DWITH_INTERNATIONAL="$(usex nls)" + -DWITH_MATERIALX="no" # TODO: Package MaterialX + -DWITH_NANOVDB="$(usex nanovdb)" + -DWITH_OPENCOLLADA="$(usex collada)" + -DWITH_OPENCOLORIO="$(usex color-management)" + -DWITH_OPENGL_BACKEND="$(usex opengl)" + -DWITH_OPENIMAGEDENOISE="$(usex oidn)" + -DWITH_OPENSUBDIV="$(usex opensubdiv)" + -DWITH_OPENVDB="$(usex openvdb)" + -DWITH_OPENVDB_BLOSC="$(usex openvdb)" + -DWITH_POTRACE="$(usex potrace)" + -DWITH_PUGIXML="$(usex pugixml)" + # -DWITH_QUADRIFLOW=ON + -DWITH_RENDERDOC="$(usex renderdoc)" + -DWITH_TBB="$(usex tbb)" + -DWITH_UNITY_BUILD="no" + -DWITH_USD="no" # TODO: Package USD + -DWITH_VULKAN_BACKEND="$(usex vulkan)" # experimental + -DWITH_XR_OPENXR="no" + + -DWITH_SYSTEM_BULLET="yes" + -DWITH_SYSTEM_EIGEN3="yes" + -DWITH_SYSTEM_FREETYPE="yes" + -DWITH_SYSTEM_GFLAGS="yes" + -DWITH_SYSTEM_GLOG="yes" + -DWITH_SYSTEM_LZO="yes" + + # Compiler Options: + # -DWITH_BUILDINFO="yes" + + # System Options: + -DWITH_INSTALL_PORTABLE="no" + -DWITH_MEM_JEMALLOC="$(usex jemalloc)" + -DWITH_MEM_VALGRIND="$(usex valgrind)" + + # GHOST Options: + -DWITH_GHOST_WAYLAND="$(usex wayland)" + -DWITH_GHOST_WAYLAND_APP_ID="blender-${BV}" + -DWITH_GHOST_WAYLAND_DYNLOAD="no" + -DWITH_GHOST_X11="$(usex X)" + # -DWITH_GHOST_XDND=ON + # -DWITH_X11_XF86VMODE=ON + # -DWITH_X11_XFIXES=ON + # -DWITH_X11_XINPUT=ON + # -DWITH_GHOST_WAYLAND_DYNLOAD # visible wayland? + # -DWITH_GHOST_WAYLAND_LIBDECOR # visible wayland? + + # Image Formats: + # -DWITH_IMAGE_CINEON=ON + -DWITH_IMAGE_OPENEXR="$(usex openexr)" + -DWITH_IMAGE_OPENJPEG="$(usex jpeg2k)" + -DWITH_IMAGE_WEBP="$(usex webp)" # unlisted + + # Audio: + # -DWITH_AUDASPACE=OFF + # -DWITH_SYSTEM_AUDASPACE=OFF + -DWITH_CODEC_FFMPEG="$(usex ffmpeg)" + -DWITH_CODEC_SNDFILE="$(usex sndfile)" + # -DWITH_COREAUDIO=OFF + -DWITH_JACK="$(usex jack)" + # -DWITH_JACK_DYNLOAD= + -DWITH_OPENAL="$(usex openal)" + -DWITH_PIPEWIRE="$(usex pipewire)" + # -DWITH_PIPEWIRE_DYNLOAD= + -DWITH_PULSEAUDIO="$(usex pulseaudio)" + # -DWITH_PULSEAUDIO_DYNLOAD= + -DWITH_SDL="$(usex sdl)" + # -DWITH_WASAPI=OFF + + # Python: + # -DWITH_PYTHON=ON + -DWITH_PYTHON_INSTALL="no" + # -DWITH_PYTHON_INSTALL_NUMPY="no" + # -DWITH_PYTHON_INSTALL_ZSTANDARD="no" + # -DWITH_PYTHON_MODULE="no" + # -DWITH_PYTHON_SAFETY= + -DWITH_PYTHON_SECURITY="yes" -DPYTHON_INCLUDE_DIR="$(python_get_includedir)" -DPYTHON_LIBRARY="$(python_get_library_path)" -DPYTHON_VERSION="${EPYTHON/python/}" - -DWITH_ALEMBIC=$(usex alembic) - -DWITH_BOOST=yes - -DWITH_BULLET=$(usex bullet) - -DWITH_CODEC_FFMPEG=$(usex ffmpeg) - -DWITH_CODEC_SNDFILE=$(usex sndfile) - -DWITH_CPU_CHECK=no + -DWITH_DRACO="no" # TODO: Package Draco - -DWITH_CYCLES=$(usex cycles) + # Modifiers: + -DWITH_MOD_FLUID="$(usex fluid)" + # -DWITH_MOD_REMESH=ON + -DWITH_MOD_OCEANSIM="$(usex fftw)" - -DWITH_CYCLES_DEVICE_CUDA=$(usex cuda) - -DWITH_CYCLES_CUDA_BINARIES="$(usex cuda $(usex cycles-bin-kernels))" - -DWITH_CYCLES_DEVICE_OPTIX=$(usex optix) + # Rendering: + -DWITH_HYDRA="no" # TODO: Package Hydra - -DWITH_CYCLES_DEVICE_HIP="$(usex hip)" - -DWITH_CYCLES_HIP_BINARIES=$(usex hip $(usex cycles-bin-kernels)) + # Rendering (Cycles): + -DWITH_CYCLES_OSL="$(usex osl)" + -DWITH_CYCLES_EMBREE="$(usex embree)" + -DWITH_CYCLES_PATH_GUIDING="$(usex openpgl)" - -DWITH_CYCLES_DEVICE_ONEAPI="$(usex oneapi)" - -DWITH_CYCLES_ONEAPI_BINARIES="$(usex oneapi $(usex cycles-bin-kernels))" + -DWITH_CYCLES_DEVICE_OPTIX="$(usex optix)" + -DWITH_CYCLES_DEVICE_CUDA="$(usex cuda)" + -DWITH_CYCLES_CUDA_BINARIES="$(usex cuda "$(usex cycles-bin-kernels)")" + -DWITH_CYCLES_DEVICE_ONEAPI="$(usex oneapi)" + -DWITH_CYCLES_ONEAPI_BINARIES="$(usex oneapi "$(usex cycles-bin-kernels)")" + -DWITH_CYCLES_DEVICE_HIP="$(usex hip)" + -DWITH_CYCLES_HIP_BINARIES="$(usex hip "$(usex cycles-bin-kernels)")" -DWITH_CYCLES_HYDRA_RENDER_DELEGATE="no" # TODO: package Hydra - -DWITH_CYCLES_EMBREE="$(usex embree)" - -DWITH_CYCLES_OSL=$(usex osl) - -DWITH_CYCLES_PATH_GUIDING=$(usex openpgl) - -DWITH_CYCLES_STANDALONE=no - -DWITH_CYCLES_STANDALONE_GUI=no - - -DWITH_DOC_MANPAGE=$(usex man) - -DWITH_DRACO="yes" # TODO: Package Draco - -DWITH_FFTW3=$(usex fftw) - -DWITH_GHOST_WAYLAND=$(usex wayland) - -DWITH_GHOST_WAYLAND_DYNLOAD="no" - -DWITH_GHOST_X11=$(usex X) - -DWITH_GMP=$(usex gmp) - -DWITH_GTESTS=$(usex test) - -DWITH_HARFBUZZ="$(usex otf)" - -DWITH_HARU=$(usex pdf) - -DWITH_HEADLESS=$($(use X || use wayland) && echo OFF || echo ON) - -DWITH_HYDRA="no" # TODO: Package Hydra - -DWITH_IMAGE_OPENEXR=$(usex openexr) - -DWITH_IMAGE_OPENJPEG=$(usex jpeg2k) - -DWITH_IMAGE_WEBP=$(usex webp) - -DWITH_INPUT_NDOF=$(usex ndof) - -DWITH_INSTALL_PORTABLE="no" - -DWITH_INTERNATIONAL=$(usex nls) - -DWITH_JACK=$(usex jack) - -DWITH_MATERIALX="no" # TODO: Package MaterialX - -DWITH_MEM_JEMALLOC=$(usex jemalloc) - -DWITH_MEM_VALGRIND=$(usex valgrind) - -DWITH_MOD_FLUID=$(usex fluid) - -DWITH_MOD_OCEANSIM=$(usex fftw) - -DWITH_NANOVDB=$(usex nanovdb) - -DWITH_OPENAL=$(usex openal) - -DWITH_OPENCOLLADA=$(usex collada) - -DWITH_OPENCOLORIO=$(usex color-management) - -DWITH_OPENIMAGEDENOISE=$(usex oidn) - -DWITH_OPENMP=$(usex openmp) - -DWITH_OPENSUBDIV=$(usex opensubdiv) - -DWITH_OPENVDB=$(usex openvdb) - -DWITH_OPENVDB_BLOSC=$(usex openvdb) - -DWITH_POTRACE=$(usex potrace) - -DWITH_PUGIXML=$(usex pugixml) - -DWITH_PULSEAUDIO=$(usex pulseaudio) - -DWITH_PYTHON_INSTALL=no - -DWITH_PYTHON_INSTALL_NUMPY=no - -DWITH_PYTHON_INSTALL_ZSTANDARD=no - -DWITH_RENDERDOC="$(usex renderdoc)" - -DWITH_SDL=$(usex sdl) - -DWITH_STATIC_LIBS=no - -DWITH_STRICT_BUILD_OPTIONS=yes - -DWITH_SYSTEM_EIGEN3=yes - -DWITH_SYSTEM_FREETYPE=yes - -DWITH_SYSTEM_LZO=yes - -DWITH_TBB=$(usex tbb) - -DWITH_USD="no" # TODO: Package USD - -DWITH_VULKAN_BACKEND="$(usex vulkan)" - -DWITH_XR_OPENXR=no + + # -DWITH_CYCLES_STANDALONE=OFF + # -DWITH_CYCLES_STANDALONE_GUI=OFF + + -DWITH_BLENDER_THUMBNAILER="yes" ) if has_version ">=dev-python/numpy-2"; then @@ -395,29 +546,50 @@ src_configure() { fi # requires dev-vcs/git - if [[ ${PV} = *9999* ]] ; then - mycmakeargs+=( -DWITH_BUILDINFO="yes" ) + if [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]]; then + mycmakeargs+=( + # -DWITH_BUILDINFO="no" + -DWITH_EXPERIMENTAL_FEATURES="$(usex experimental)" + ) else - mycmakeargs+=( -DWITH_BUILDINFO="no" ) + mycmakeargs+=( + -DWITH_EXPERIMENTAL_FEATURES="no" + ) fi if use cuda; then - mycmakeargs+=( - -DCUDA_NVCC_FLAGS="--compiler-bindir;$(cuda_gccdir)" - ) + # Ease compiling with required gcc similar to cuda_sanitize but for cmake + if use cycles-bin-kernels; then + local -x CUDAHOSTCXX="$(cuda_gccdir)" + local -x CUDAHOSTLD="$(tc-getCXX)" + + if [[ -n "${CUDAARCHS}" ]]; then + mycmakeargs+=( + -DCYCLES_CUDA_BINARIES_ARCH="$(echo "${CUDAARCHS}" | sed -e 's/^/sm_/g' -e 's/;/;sm_/g')" + ) + fi + fi fi if use hip; then + # local -x HIP_PATH="$(hipconfig -p)" mycmakeargs+=( - -DROCM_PATH="$(hipconfig -R)" + # -DROCM_PATH="$(hipconfig -R)" + -DHIP_ROOT_DIR="$(hipconfig -p)" + -DHIP_HIPCC_FLAGS="-fcf-protection=none" + + # -DHIP_LINKER_EXECUTABLE="$(get_llvm_prefix)/bin/clang++" + -DCMAKE_HIP_LINK_EXECUTABLE="$(get_llvm_prefix)/bin/clang++" + + -DCYCLES_HIP_BINARIES_ARCH="$(get_amdgpu_flags)" ) fi if use optix; then mycmakeargs+=( - -DCYCLES_RUNTIME_OPTIX_ROOT_DIR="${EPREFIX}"/opt/optix - -DOPTIX_ROOT_DIR="${EPREFIX}"/opt/optix + -DCYCLES_RUNTIME_OPTIX_ROOT_DIR="${ESYSROOT}/opt/optix" + -DOPTIX_ROOT_DIR="${ESYSROOT}/opt/optix" ) fi @@ -432,74 +604,164 @@ src_configure() { use arm64 && append-flags -flax-vector-conversions append-cflags "$(usex debug '-DDEBUG' '-DNDEBUG')" - append-cppflags "$(usex debug '-DDEBUG' '-DNDEBUG')" + append-cxxflags "$(usex debug '-DDEBUG' '-DNDEBUG')" - if tc-is-gcc ; then - # These options only exist when GCC is detected. + if tc-is-gcc; then # We disable these to respect the user's choice of linker. mycmakeargs+=( - -DWITH_LINKER_GOLD=no - -DWITH_LINKER_LLD=no + -DWITH_LINKER_GOLD="no" ) - # Ease compiling with required gcc similar to cuda_sanitize but for cmake - use cuda && use cycles-bin-kernels && mycmakeargs+=( -DCUDA_HOST_COMPILER="$(cuda_gccdir)" ) fi if tc-is-clang || use osl; then mycmakeargs+=( - -DWITH_CLANG=yes - -DWITH_LLVM=yes + -DWITH_CLANG="yes" + -DWITH_LLVM="yes" ) fi - if use test ; then + if use test; then local CYCLES_TEST_DEVICES=( "CPU" ) if use cycles-bin-kernels; then use cuda && CYCLES_TEST_DEVICES+=( "CUDA" ) use optix && CYCLES_TEST_DEVICES+=( "OPTIX" ) use hip && CYCLES_TEST_DEVICES+=( "HIP" ) + use oneapi && CYCLES_TEST_DEVICES+=( "ONEAPI" ) fi mycmakeargs+=( - -DCYCLES_TEST_DEVICES:STRING="$(local IFS=";"; echo "${CYCLES_TEST_DEVICES[*]}")" - -DWITH_COMPOSITOR_REALTIME_TESTS=yes - -DWITH_GPU_DRAW_TESTS=yes - -DWITH_GPU_RENDER_TESTS=yes + -DCMAKE_INSTALL_PREFIX_WITH_CONFIG="${T}/usr" + -DCYCLES_TEST_DEVICES="$(local IFS=";"; echo "${CYCLES_TEST_DEVICES[*]}")" ) + + # NOTE in lieu of a FEATURE/build_options + if [[ "${EXPENSIVE_TESTS:-0}" -gt 0 ]]; then + mycmakeargs+=( + -DWITH_CYCLES_TEST_OSL="$(usex osl)" + + -DWITH_GPU_BACKEND_TESTS="yes" + -DWITH_GPU_COMPOSITOR_TESTS="yes" + + -DWITH_GPU_DRAW_TESTS="yes" + + -DWITH_GPU_RENDER_TESTS="no" + -DWITH_GPU_RENDER_TESTS_HEADED="no" + -DWITH_GPU_RENDER_TESTS_SILENT="yes" + -DWITH_GPU_RENDER_TESTS_VULKAN="$(usex vulkan)" + + -DWITH_SYSTEM_PYTHON_TESTS="yes" + ) + + if [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]] && use experimental; then + mycmakeargs+=( + # Enable user-interface tests using a headless display server. + # Currently this depends on WITH_GHOST_WAYLAND and the weston compositor (Experimental) + -DWITH_UI_TESTS="$(usex wayland)" + -DWESTON_BIN="${ESYSROOT}/usr/bin/weston" + ) + fi + else + mycmakeargs+=( + -DWITH_GPU_RENDER_TESTS="no" + ) + fi fi cmake_src_configure } src_test() { - # A lot of tests needs to have access to the installed data files. + # A lot of tests need to have access to the installed data files. # So install them into the image directory now. DESTDIR="${T}" cmake_build install blender_get_version - # By default, blender will look for system scripts and data in - # /usr/share/, but until this is installed, they are not necessarily - # available there. Use this to have blender search the intermediate - # install directory instead. - export BLENDER_SYSTEM_RESOURCES="${T}/usr/share/blender/${BV}" + # Define custom blender data/script file paths, or we won't be able to find them otherwise during testing. + # (Because the data is in the image directory and it will default to look in /usr/share) + local -x BLENDER_SYSTEM_RESOURCES="${T%/}/usr/share/blender/${BV}" + + # Sanity check that the script and datafile path is valid. + # If they are not valid, blender will fallback to the default path which is not what we want. + [[ -d "${BLENDER_SYSTEM_RESOURCES}" ]] || die "The custom resources path is invalid, fix the ebuild!" - # Brake check: Make sure the above path is valid. - # If not, blender will fallback to the default path which is not what - # we want. - [ -d "$BLENDER_SYSTEM_RESOURCES" ] || die "The custom script path is invalid, fix the ebuild!" + # TODO only picks first card + addwrite "/dev/dri/card0" + addwrite "/dev/dri/renderD128" + addwrite "/dev/udmabuf" if use cuda; then cuda_add_sandbox -w - addwrite "/dev/dri/renderD128" addwrite "/dev/char/" fi - if use X; then - xdg_environment_reset + local -x CMAKE_SKIP_TESTS=( + "^script_pyapi_bpy_driver_secure_eval$" + "^cycles_image_colorspace_cpu$" + "^cycles_image_data_types_cpu$" + "^cycles_image_mapping_cpu$" + "^cycles_osl_cpu$" + "^cycles_image_data_types_optix$" + "^compositor_cpu_color$" + "^compositor_cpu_filter$" + ) + + if ! has_version "media-libs/openusd"; then + CMAKE_SKIP_TESTS+=( + # from pxr import Usd # ModuleNotFoundError: No module named 'pxr' + "^script_bundled_modules$" + ) fi - addwrite /dev/dri + if ! has_version "media-libs/openimageio[python]"; then + CMAKE_SKIP_TESTS+=( + # import OpenImageIO as oiio # ModuleNotFoundError: No module named 'OpenImageIO' + "^compositor_cpu_file_output$" + ) + fi - cmake_src_test + # For debugging, print out all information. + local -x VERBOSE="$(usex debug "true" "false")" + + # Show the window in the foreground. + local -x USE_WINDOW="false" + local -x USE_DEBUG="false" + + eqawarn "VERBOSE=${VERBOSE}" + eqawarn "USE_WINDOW=${USE_WINDOW}" + eqawarn "USE_DEBUG=${USE_DEBUG}" + eqawarn "BLENDER_SYSTEM_RESOURCES=${BLENDER_SYSTEM_RESOURCES}" + eqawarn "EXPENSIVE_TESTS=${EXPENSIVE_TESTS}" + + if [[ "${EXPENSIVE_TESTS:-0}" -gt 0 ]]; then + if [[ "${USE_WINDOW}" = "true" ]] && + [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]] && + use experimental && use wayland; then + # This runs weston + xdg_environment_reset + fi + + if [[ "${USE_WINDOW}" == "true" ]]; then + xdg_environment_reset + # WITH_GPU_RENDER_TESTS_HEADED + if use wayland; then + local compositor exit_code + local logfile=${T}/weston.log + weston --xwayland --backend=headless --socket=wayland-5 --idle-time=0 2>"${logfile}" & + compositor=$! + local -x WAYLAND_DISPLAY=wayland-5 + sleep 1 # wait for xwayland to be up + local -x DISPLAY="$(grep "xserver listening on display" "${logfile}" | cut -d ' ' -f 5)" + + cmake_src_test + + exit_code=$? + kill "${compositor}" + elif use X; then + virtx cmake_src_test + fi + fi + else + cmake_src_test + fi # Clean up the image directory for src_install rm -fr "${T}/usr" || die @@ -509,7 +771,7 @@ src_install() { blender_get_version # Pax mark blender for hardened support. - pax-mark m "${BUILD_DIR}"/bin/blender + pax-mark m "${BUILD_DIR}/bin/blender" cmake_src_install @@ -519,50 +781,44 @@ src_install() { fi if use doc; then - # By default, blender will look for system scripts and data in - # /usr/share/, but until this is installed, they are not necessarily - # available there. Use this to have blender search the intermediate - # install directory instead. - export BLENDER_SYSTEM_RESOURCES="${ED}/usr/share/blender/${BV}" - - # Brake check: Make sure the above path is valid. - # If not, blender will fallback to the default path which is not what - # we want. - [ -d "$BLENDER_SYSTEM_RESOURCES" ] || die "The custom script path is invalid, fix the ebuild!" - - # Workaround for binary drivers. + # Define custom blender data/script file paths. Otherwise Blender will not be able to find them during doc building. + # (Because the data is in the image directory and it will default to look in /usr/share) + local -x BLENDER_SYSTEM_RESOURCES="${ED}/usr/share/blender/${BV}" + + # Workaround for binary drivers. # TODO addpredict /dev/ati addpredict /dev/dri addpredict /dev/nvidiactl einfo "Generating Blender C/C++ API docs ..." - cd "${CMAKE_USE_DIR}"/doc/doxygen || die + cd "${CMAKE_USE_DIR}/doc/doxygen" || die doxygen -u Doxyfile || die doxygen || die "doxygen failed to build API docs." cd "${CMAKE_USE_DIR}" || die einfo "Generating (BPY) Blender Python API docs ..." - "${BUILD_DIR}"/bin/blender --background --python doc/python_api/sphinx_doc_gen.py -noaudio || die "sphinx failed." + "${BUILD_DIR}"/bin/blender --background --python "doc/python_api/sphinx_doc_gen.py" -noaudio || die "sphinx failed." - cd "${CMAKE_USE_DIR}"/doc/python_api || die + cd "${CMAKE_USE_DIR}/doc/python_api" || die sphinx-build sphinx-in BPY_API || die "sphinx failed." docinto "html/API/python" - dodoc -r "${CMAKE_USE_DIR}"/doc/python_api/BPY_API/. + dodoc -r "${CMAKE_USE_DIR}/doc/python_api/BPY_API/" docinto "html/API/blender" - dodoc -r "${CMAKE_USE_DIR}"/doc/doxygen/html/. + dodoc -r "${CMAKE_USE_DIR}/doc/doxygen/html/" fi # Fix doc installdir docinto html - dodoc "${CMAKE_USE_DIR}"/release/text/readme.html - rm -r "${ED}"/usr/share/doc/blender || die + dodoc "${CMAKE_USE_DIR}/release/text/readme.html" + rm -r "${ED}/usr/share/doc/blender" || die python_optimize "${ED}/usr/share/blender/${BV}/scripts" - mv "${ED}/usr/bin/blender-thumbnailer" "${ED}/usr/bin/blender-${BV}-thumbnailer" || die - mv "${ED}/usr/bin/blender" "${ED}/usr/bin/blender-${BV}" || die + mv "${ED}/usr/bin/blender-thumbnailer" "${ED}/usr/bin/blender-${BV}-thumbnailer" \ + || die "blender-thumbnailer version rename failed" + mv "${ED}/usr/bin/blender" "${ED}/usr/bin/blender-${BV}" || die "blender version rename failed" } pkg_postinst() { @@ -576,7 +832,7 @@ pkg_postinst() { elog "changing the 'Temporary Files' directory in Blender preferences." elog - if use osl; then + if use osl && ! has_version "media-libs/mesa[${LLVM_USEDEP}]"; then ewarn "" ewarn "OSL is know to cause runtime segfaults if Mesa has been linked to" ewarn "an other LLVM version than what OSL is linked to." @@ -584,11 +840,12 @@ pkg_postinst() { ewarn "" fi + # NOTE build_files/cmake/Modules/FindPythonLibsUnix.cmake: set(_PYTHON_VERSION_SUPPORTED 3.11) if ! use python_single_target_python3_11; then elog "You are building Blender with a newer python version than" elog "supported by this version upstream." elog "If you experience breakages with e.g. plugins, please switch to" - elog "python_single_target_python3_11 instead." + elog "PYTHON_SINGLE_TARGET: python3_11 instead." elog "Bug: https://bugs.gentoo.org/737388" elog fi @@ -603,9 +860,12 @@ pkg_postrm() { xdg_mimeinfo_database_update xdg_desktop_database_update - ewarn "" - ewarn "You may want to remove the following directory." - ewarn "~/.config/${PN}/${BV}/cache/" - ewarn "It may contain extra render kernels not tracked by portage" - ewarn "" + if [[ -z "${REPLACED_BY_VERSION}" ]]; then + ewarn + ewarn "You may want to remove the following directories" + ewarn "- ~/.config/${PN}/${BV}/cache/" + ewarn "- ~/.cache/cycles/" + ewarn "It may contain extra render kernels not tracked by portage" + ewarn + fi } diff --git a/media-gfx/blender/files/blender-4.3.2-system-gtest.patch b/media-gfx/blender/files/blender-4.3.2-system-gtest.patch new file mode 100644 index 000000000000..4ac21c2007bd --- /dev/null +++ b/media-gfx/blender/files/blender-4.3.2-system-gtest.patch @@ -0,0 +1,57 @@ +From 6284e504b144619411ac41092d53fc8541c84cdb Mon Sep 17 00:00:00 2001 +From: Paul Zander <negril...@gmail.com> +Date: Tue, 15 Apr 2025 13:48:00 +0200 +Subject: [PATCH] system gtest + +Signed-off-by: Paul Zander <negril...@gmail.com> + +diff --git a/extern/CMakeLists.txt b/extern/CMakeLists.txt +index 418d2255a75..6b5cd31f9b7 100644 +--- a/extern/CMakeLists.txt ++++ b/extern/CMakeLists.txt +@@ -77,12 +77,14 @@ if(WITH_LIBMV OR WITH_GTESTS OR (WITH_CYCLES AND WITH_CYCLES_LOGGING)) + if(NOT WITH_SYSTEM_GFLAGS) + add_subdirectory(gflags) + endif() +- add_subdirectory(glog) ++ if(NOT WITH_SYSTEM_GLOG) ++ add_subdirectory(glog) ++ endif() + endif() + +-if(WITH_GTESTS) +- add_subdirectory(gtest) +- add_subdirectory(gmock) ++if(WITH_GTESTS AND NOT WITH_SYSTEM_GTEST) ++ add_subdirectory(gtest) ++ add_subdirectory(gmock) + endif() + + if(WITH_AUDASPACE AND NOT WITH_SYSTEM_AUDASPACE) +diff --git a/intern/libmv/CMakeLists.txt b/intern/libmv/CMakeLists.txt +index 965d0028020..825c2141f5a 100644 +--- a/intern/libmv/CMakeLists.txt ++++ b/intern/libmv/CMakeLists.txt +@@ -34,6 +34,7 @@ if(WITH_LIBMV) + ${GLOG_INCLUDE_DIRS} + ../guardedalloc + ) ++ list(REMOVE_DUPLICATES INC) + + list(APPEND INC_SYS + ${EIGEN3_INCLUDE_DIRS} +diff --git a/tests/gtests/testing/CMakeLists.txt b/tests/gtests/testing/CMakeLists.txt +index ff7f6905836..d46b1d65174 100644 +--- a/tests/gtests/testing/CMakeLists.txt ++++ b/tests/gtests/testing/CMakeLists.txt +@@ -13,6 +13,7 @@ set(INC + ${GFLAGS_INCLUDE_DIRS} + ../../../extern/gtest/include + ) ++list(REMOVE_DUPLICATES INC) + + set(INC_SYS + ) +-- +2.49.0 + diff --git a/media-gfx/blender/files/blender-4.4.0-optix-compile-flags.patch b/media-gfx/blender/files/blender-4.4.0-optix-compile-flags.patch new file mode 100644 index 000000000000..39c1383f52e0 --- /dev/null +++ b/media-gfx/blender/files/blender-4.4.0-optix-compile-flags.patch @@ -0,0 +1,43 @@ +From 6e8072c20d37f2ba4b0eaded448d21ffa6f073a1 Mon Sep 17 00:00:00 2001 +From: Paul Zander <negril...@gmail.com> +Date: Mon, 21 Apr 2025 17:49:59 +0200 +Subject: [PATCH] optix compile flags + +Copy CUDA_HOST_COMPILER logic from cuda to optix + +pass CUDA_NVCC_FLAGS into the custom nvcc call for optix, as for +WITH_CYCLES_CUDA_BINARIES +use CYCLES_CUDA_BINARIES_ARCH for optix instead of sm_50 + +Signed-off-by: Paul Zander <negril.nx+gen...@gmail.com> +Signed-off-by: Paul Zander <negril...@gmail.com> + +diff --git a/intern/cycles/kernel/CMakeLists.txt b/intern/cycles/kernel/CMakeLists.txt +index 6144de7be33..a59d6dd2b7e 100644 +--- a/intern/cycles/kernel/CMakeLists.txt ++++ b/intern/cycles/kernel/CMakeLists.txt +@@ -943,6 +943,11 @@ if(WITH_CYCLES_DEVICE_OPTIX AND WITH_CYCLES_CUDA_BINARIES) + -Wno-deprecated-gpu-targets + -o ${output}) + ++ if(CUDA_HOST_COMPILER) ++ set(cuda_flags ${cuda_flags} ++ -ccbin="${CUDA_HOST_COMPILER}") ++ endif() ++ + if(WITH_NANOVDB) + set(cuda_flags ${cuda_flags} + -D WITH_NANOVDB) +@@ -969,7 +974,8 @@ if(WITH_CYCLES_DEVICE_OPTIX AND WITH_CYCLES_CUDA_BINARIES) + COMMAND + ${CUDA_NVCC_EXECUTABLE} + --ptx +- -arch=sm_50 ++ -arch=${CYCLES_CUDA_BINARIES_ARCH} ++ ${CUDA_NVCC_FLAGS} + ${cuda_flags} + ${input} + WORKING_DIRECTORY +-- +2.49.0 + diff --git a/media-gfx/blender/metadata.xml b/media-gfx/blender/metadata.xml index 927ab93cc1a5..6c565f9d227f 100644 --- a/media-gfx/blender/metadata.xml +++ b/media-gfx/blender/metadata.xml @@ -63,7 +63,7 @@ Enable NDOF input devices (SpaceNavigator and friends). </flag> <flag name="oidn">Enable OpenImageDenoiser Support</flag> - <flag name="oneapi">Build OIDN with Intel oneAPI SyCL support</flag> + <flag name="oneapi">Build cycles renderer with Intel oneAPI SyCL support</flag> <flag name="openpgl">Enable path guiding support in Cycles</flag> <flag name="opensubdiv"> Add rendering support form OpenSubdiv from Dreamworks Animation @@ -78,6 +78,9 @@ <flag name="osl"> Add support for OpenShadingLanguage scripting. </flag> + <flag name="pipewire"> + Enable Pipewire for audio support on Linux + </flag> <flag name="potrace"> Add support for converting bitmaps into Grease pencil line using the potrace library. </flag>