commit: bbddf592412443f8f5cf43a2231ee36d9aae4f5e Author: Paul Zander <negril.nx+gentoo <AT> gmail <DOT> com> AuthorDate: Mon Apr 21 18:06:05 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=bbddf592
media-gfx/blender: update 4.3.2 Backport changes from 9999 to 4.3.2 package missing assets add opengl use flag to select backend unbundle bullet/glog/gflags rename USE otf to truetype fix compilation with openvdb-12 fix compilation with optix-8.1.0 refactor cuda configuration refactor hip configuration refactor optix configuration implement optional expensive tests and need configuration Closes: https://bugs.gentoo.org/947591 Closes: https://bugs.gentoo.org/947515 Signed-off-by: Paul Zander <negril.nx+gentoo <AT> gmail.com> Signed-off-by: Sam James <sam <AT> gentoo.org> media-gfx/blender/blender-3.6.18-r1.ebuild | 12 +- media-gfx/blender/blender-4.1.1-r5.ebuild | 16 +- media-gfx/blender/blender-4.2.4-r2.ebuild | 16 +- media-gfx/blender/blender-4.3.2-r2.ebuild | 443 +++++++++++++++------ .../blender/files/blender-4.3.2-openvdb-12.patch | 76 ++++ .../blender/files/blender-4.3.2-optix-8.1.0.patch | 34 ++ media-gfx/blender/metadata.xml | 2 +- 7 files changed, 464 insertions(+), 135 deletions(-) diff --git a/media-gfx/blender/blender-3.6.18-r1.ebuild b/media-gfx/blender/blender-3.6.18-r1.ebuild index 1d012d0577cc..bd3462a8b278 100644 --- a/media-gfx/blender/blender-3.6.18-r1.ebuild +++ b/media-gfx/blender/blender-3.6.18-r1.ebuild @@ -182,11 +182,13 @@ src_unpack() { subversion_fetch ${ASSETS_SVN_URL} ../lib/assets else default - if use test; then - #The tests are downloaded from: https://svn.blender.org/svnroot/bf-blender/tags/blender-${SLOT}-release/lib/tests - mkdir -p lib || die - mv "${WORKDIR}/blender-${TEST_TARBALL_VERSION}-tests/tests" lib || die - fi + + # BUG upstream returns LFS references instead of files + # if use test; then + # #The tests are downloaded from: https://svn.blender.org/svnroot/bf-blender/tags/blender-${SLOT}-release/lib/tests + # mkdir -p lib || die + # mv "${WORKDIR}/blender-${TEST_TARBALL_VERSION}-tests/tests" lib || die + # fi fi } diff --git a/media-gfx/blender/blender-4.1.1-r5.ebuild b/media-gfx/blender/blender-4.1.1-r5.ebuild index aac5acc037a0..cbe668c639ba 100644 --- a/media-gfx/blender/blender-4.1.1-r5.ebuild +++ b/media-gfx/blender/blender-4.1.1-r5.ebuild @@ -235,10 +235,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 } @@ -510,6 +511,13 @@ src_install() { cmake_src_install + # X-KDE-RunOnDiscreteGpu is obsolete, so trim it + sed \ + -e "s/=blender/=${P}/" \ + -e "s/Name=Blender/Name=Blender Bin ${PV}/" \ + -e "/X-KDE-RunOnDiscreteGpu.*/d" \ + -i "${ED}/usr/share/applications/blender-${BV}.desktop" || die + 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 diff --git a/media-gfx/blender/blender-4.2.4-r2.ebuild b/media-gfx/blender/blender-4.2.4-r2.ebuild index ac5f6e417696..00a3d3ca405f 100644 --- a/media-gfx/blender/blender-4.2.4-r2.ebuild +++ b/media-gfx/blender/blender-4.2.4-r2.ebuild @@ -224,10 +224,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 } @@ -499,6 +500,13 @@ src_install() { cmake_src_install + # X-KDE-RunOnDiscreteGpu is obsolete, so trim it + sed \ + -e "s/=blender/=${P}/" \ + -e "s/Name=Blender/Name=Blender Bin ${PV}/" \ + -e "/X-KDE-RunOnDiscreteGpu.*/d" \ + -i "${ED}/usr/share/applications/blender-${BV}.desktop" || die + 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 diff --git a/media-gfx/blender/blender-4.3.2-r2.ebuild b/media-gfx/blender/blender-4.3.2-r2.ebuild index 11a7fe03aad6..6e5459ec540a 100644 --- a/media-gfx/blender/blender-4.3.2-r2.ebuild +++ b/media-gfx/blender/blender-4.3.2-r2.ebuild @@ -1,47 +1,89 @@ # 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 + https://github.com/negril/gentoo-overlay-vendored/raw/refs/heads/blobs/blender-assets-${PV}.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 - +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 openal +openexr +openmp +openpgl + jemalloc jpeg2k man +nanovdb ndof nls +oidn openal +openexr +opengl +openmp +openpgl + +opensubdiv +openvdb optix osl +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 +94,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 +123,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= ) @@ -101,7 +152,7 @@ RDEPEND="${PYTHON_DEPS} >=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?,openmp?,tbb?] ) openvdb? ( >=media-gfx/openvdb-11.0.0:=[nanovdb?] dev-libs/c-blosc:= @@ -134,7 +185,7 @@ RDEPEND="${PYTHON_DEPS} dev-util/glslang media-libs/vulkan-loader ) - otf? ( + truetype? ( media-libs/harfbuzz ) renderdoc? ( @@ -149,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 @@ -166,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 @@ -177,10 +240,13 @@ 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-ffmpeg7.patch" + "${FILESDIR}/${PN}-4.3.2-openvdb-12.patch" + "${FILESDIR}/${PN}-4.3.2-optix-8.1.0.patch" + "${FILESDIR}/${PN}-4.3.2-system-gtest.patch" + "${FILESDIR}/${PN}-4.4.0-optix-compile-flags.patch" ) blender_check_requirements() { @@ -192,38 +258,43 @@ blender_check_requirements() { } 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() { blender_check_requirements - - if use oneapi; then - einfo "The Intel oneAPI support is rudimentary." - einfo "" - einfo "Please report any bugs you find to https://bugs.gentoo.org/" - 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 @@ -231,10 +302,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 } @@ -245,11 +317,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|" \ @@ -264,22 +331,62 @@ 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/blender.desktop" \ + "release/freedesktop/blender-${BV}.desktop" \ + || 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/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 "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 + 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 + + if [[ "${PV}" != *9999* ]]; then + rm "${WORKDIR}/blender-assets/publish/LICENSE" || die fi if use vulkan; then @@ -294,14 +401,23 @@ 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 + -DCMAKE_POLICY_DEFAULT_CMP0177="OLD" + + # we build a host-specific binary + -DWITH_INSTALL_PORTABLE="no" + -DWITH_CPU_CHECK="no" + + -DWITH_STRICT_BUILD_OPTIONS="yes" + -DWITH_LIBS_PRECOMPILED="no" + -DBUILD_SHARED_LIBS="no" # quadriflow only? + -DWITH_STATIC_LIBS=OFF + -DPYTHON_INCLUDE_DIR="$(python_get_includedir)" -DPYTHON_LIBRARY="$(python_get_library_path)" -DPYTHON_VERSION="${EPYTHON/python/}" @@ -310,7 +426,6 @@ src_configure() { -DWITH_BULLET=$(usex bullet) -DWITH_CODEC_FFMPEG=$(usex ffmpeg) -DWITH_CODEC_SNDFILE=$(usex sndfile) - -DWITH_CPU_CHECK=no -DWITH_CYCLES=$(usex cycles) @@ -336,15 +451,14 @@ src_configure() { -DWITH_GHOST_X11=$(usex X) -DWITH_GMP=$(usex gmp) -DWITH_GTESTS=$(usex test) - -DWITH_HARFBUZZ="$(usex otf)" + -DWITH_HARFBUZZ="$(usex truetype)" -DWITH_HARU=$(usex pdf) - -DWITH_HEADLESS=$($(use X || use wayland) && echo OFF || echo ON) + -DWITH_HEADLESS="$(usex !X "$(use !wayland)")" -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 @@ -356,6 +470,7 @@ src_configure() { -DWITH_OPENAL=$(usex openal) -DWITH_OPENCOLLADA=$(usex collada) -DWITH_OPENCOLORIO=$(usex color-management) + -DWITH_OPENGL_BACKEND=$(usex opengl) -DWITH_OPENIMAGEDENOISE=$(usex oidn) -DWITH_OPENMP=$(usex openmp) -DWITH_OPENSUBDIV=$(usex opensubdiv) @@ -369,15 +484,16 @@ src_configure() { -DWITH_PYTHON_INSTALL_ZSTANDARD=no -DWITH_RENDERDOC="$(usex renderdoc)" -DWITH_SDL=$(usex sdl) - -DWITH_STATIC_LIBS=no - -DWITH_STRICT_BUILD_OPTIONS=yes + -DWITH_SYSTEM_BULLET="yes" -DWITH_SYSTEM_EIGEN3=yes -DWITH_SYSTEM_FREETYPE=yes + -DWITH_SYSTEM_GFLAGS="yes" + -DWITH_SYSTEM_GLOG="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_UNITY_BUILD="no" ) if has_version ">=dev-python/numpy-2"; then @@ -388,29 +504,44 @@ 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 mycmakeargs+=( - -DROCM_PATH="$(hipconfig -R)" + -DHIP_ROOT_DIR="$(hipconfig -p)" -DHIP_HIPCC_FLAGS="-fcf-protection=none" + -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 @@ -425,17 +556,13 @@ 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 ) - # 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 @@ -445,7 +572,7 @@ src_configure() { ) 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" ) @@ -453,46 +580,110 @@ src_configure() { use hip && CYCLES_TEST_DEVICES+=( "HIP" ) 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_COMPOSITOR_REALTIME_TESTS="yes" + + -DWITH_CYCLES_TEST_OSL="$(usex osl)" + + -DWITH_GPU_DRAW_TESTS="yes" + + -DWITH_GPU_RENDER_TESTS="yes" + -DWITH_GPU_RENDER_TESTS_SILENT="no" + ) + + 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}" - # 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!" + # 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/dri/renderD128" addwrite "/dev/char/" fi - if use X; then - xdg_environment_reset + 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 + # 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 - cmake_src_test + 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 @@ -506,22 +697,22 @@ src_install() { cmake_src_install + # X-KDE-RunOnDiscreteGpu is obsolete, so trim it + sed \ + -e "s/=blender/=${P}/" \ + -e "s/Name=Blender/Name=Blender Bin ${PV}/" \ + -e "/X-KDE-RunOnDiscreteGpu.*/d" \ + -i "${ED}/usr/share/applications/blender-${BV}.desktop" || die + 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 - # 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!" + # 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. addpredict /dev/ati @@ -547,6 +738,11 @@ src_install() { dodoc -r "${CMAKE_USE_DIR}"/doc/doxygen/html/. fi + if [[ "${PV}" != *9999* ]]; then + insinto "/usr/share/blender/${BV}/datafiles/assets" + doins -r "${WORKDIR}/blender-assets/publish/"* + fi + # Fix doc installdir docinto html dodoc "${CMAKE_USE_DIR}"/release/text/readme.html @@ -554,8 +750,9 @@ src_install() { 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() { @@ -569,7 +766,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." @@ -577,11 +774,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 @@ -596,9 +794,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-openvdb-12.patch b/media-gfx/blender/files/blender-4.3.2-openvdb-12.patch new file mode 100644 index 000000000000..02cca15f7c94 --- /dev/null +++ b/media-gfx/blender/files/blender-4.3.2-openvdb-12.patch @@ -0,0 +1,76 @@ +https://projects.blender.org/blender/blender/pulls/131833 +From 91412f2a28db69ac2a73c1bc646e350063d8ddd5 Mon Sep 17 00:00:00 2001 +From: Brecht Van Lommel <bre...@blender.org> +Date: Fri, 13 Dec 2024 04:29:29 +0100 +Subject: [PATCH] Cycles: Support building with OpenVDB 12 + +--- + intern/cycles/scene/image_vdb.cpp | 20 +++++++++++++++----- + intern/cycles/scene/image_vdb.h | 8 +++++++- + 2 files changed, 22 insertions(+), 6 deletions(-) + +diff --git a/intern/cycles/scene/image_vdb.cpp b/intern/cycles/scene/image_vdb.cpp +index d94a7973adc..42964fac81d 100644 +--- a/intern/cycles/scene/image_vdb.cpp ++++ b/intern/cycles/scene/image_vdb.cpp +@@ -55,23 +55,33 @@ struct ToNanoOp { + try { + # if NANOVDB_MAJOR_VERSION_NUMBER > 32 || \ + (NANOVDB_MAJOR_VERSION_NUMBER == 32 && NANOVDB_MINOR_VERSION_NUMBER >= 6) ++# if NANOVDB_MAJOR_VERSION_NUMBER > 32 || \ ++ (NANOVDB_MAJOR_VERSION_NUMBER == 32 && NANOVDB_MINOR_VERSION_NUMBER >= 7) ++ /* OpenVDB 12. */ ++ using nanovdb::tools::createNanoGrid; ++ using nanovdb::tools::StatsMode; ++# else + /* OpenVDB 11. */ ++ using nanovdb::createNanoGrid; ++ using nanovdb::StatsMode; ++# endif ++ + if constexpr (std::is_same_v<FloatGridType, openvdb::FloatGrid>) { + openvdb::FloatGrid floatgrid(*openvdb::gridConstPtrCast<GridType>(grid)); + if (precision == 0) { +- nanogrid = nanovdb::createNanoGrid<openvdb::FloatGrid, nanovdb::FpN>(floatgrid); ++ nanogrid = createNanoGrid<openvdb::FloatGrid, nanovdb::FpN>(floatgrid); + } + else if (precision == 16) { +- nanogrid = nanovdb::createNanoGrid<openvdb::FloatGrid, nanovdb::Fp16>(floatgrid); ++ nanogrid = createNanoGrid<openvdb::FloatGrid, nanovdb::Fp16>(floatgrid); + } + else { +- nanogrid = nanovdb::createNanoGrid<openvdb::FloatGrid, float>(floatgrid); ++ nanogrid = createNanoGrid<openvdb::FloatGrid, float>(floatgrid); + } + } + else if constexpr (std::is_same_v<FloatGridType, openvdb::Vec3fGrid>) { + openvdb::Vec3fGrid floatgrid(*openvdb::gridConstPtrCast<GridType>(grid)); +- nanogrid = nanovdb::createNanoGrid<openvdb::Vec3fGrid, nanovdb::Vec3f>( +- floatgrid, nanovdb::StatsMode::Disable); ++ nanogrid = createNanoGrid<openvdb::Vec3fGrid, nanovdb::Vec3f>(floatgrid, ++ StatsMode::Disable); + } + # else + /* OpenVDB 10. */ +diff --git a/intern/cycles/scene/image_vdb.h b/intern/cycles/scene/image_vdb.h +index 49853cf3753..e0af9b87db1 100644 +--- a/intern/cycles/scene/image_vdb.h ++++ b/intern/cycles/scene/image_vdb.h +@@ -9,7 +9,13 @@ + # include <openvdb/openvdb.h> + #endif + #ifdef WITH_NANOVDB +-# include <nanovdb/util/GridHandle.h> ++# include <nanovdb/NanoVDB.h> ++# if NANOVDB_MAJOR_VERSION_NUMBER > 32 || \ ++ (NANOVDB_MAJOR_VERSION_NUMBER == 32 && NANOVDB_MINOR_VERSION_NUMBER >= 7) ++# include <nanovdb/GridHandle.h> ++# else ++# include <nanovdb/util/GridHandle.h> ++# endif + #endif + + #include "scene/image.h" +-- +2.45.2 + diff --git a/media-gfx/blender/files/blender-4.3.2-optix-8.1.0.patch b/media-gfx/blender/files/blender-4.3.2-optix-8.1.0.patch new file mode 100644 index 000000000000..092c30db2bc5 --- /dev/null +++ b/media-gfx/blender/files/blender-4.3.2-optix-8.1.0.patch @@ -0,0 +1,34 @@ +From 7ce8dbf5f82af7c80890d18b27e1d9df6009d5b4 Mon Sep 17 00:00:00 2001 +From: Patrick Mours <pmo...@nvidia.com> +Date: Mon, 18 Nov 2024 13:16:41 +0100 +Subject: [PATCH] Change OptiX function table name for OptiX 8.1 support + +--- + intern/cycles/device/optix/device.cpp | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/intern/cycles/device/optix/device.cpp b/intern/cycles/device/optix/device.cpp +index 60a1dbfe4e3..c8608ab5d75 100644 +--- a/intern/cycles/device/optix/device.cpp ++++ b/intern/cycles/device/optix/device.cpp +@@ -21,12 +21,16 @@ + # include <optix_function_table_definition.h> + #endif + ++#ifndef OPTIX_FUNCTION_TABLE_SYMBOL ++# define OPTIX_FUNCTION_TABLE_SYMBOL g_optixFunctionTable ++#endif ++ + CCL_NAMESPACE_BEGIN + + bool device_optix_init() + { + #ifdef WITH_OPTIX +- if (g_optixFunctionTable.optixDeviceContextCreate != NULL) { ++ if (OPTIX_FUNCTION_TABLE_SYMBOL.optixDeviceContextCreate != NULL) { + /* Already initialized function table. */ + return true; + } +-- +2.47.2 + diff --git a/media-gfx/blender/metadata.xml b/media-gfx/blender/metadata.xml index 6c565f9d227f..09310cae2fcc 100644 --- a/media-gfx/blender/metadata.xml +++ b/media-gfx/blender/metadata.xml @@ -51,7 +51,7 @@ Use embree to accelerate certain areas of the Cycles render engine. </flag> <flag name="experimental"> - Build Experimental Blender Modules + Enable experimental features </flag> <flag name="fluid"> Adds fluid simulation support via the built-in Mantaflow library.