From f8ceab72ffa6cbc2bab363d9d5a17136d8dae532 Mon Sep 17 00:00:00 2001 From: Andrew Marshall Date: Mon, 26 Feb 2024 00:31:04 -0500 Subject: [PATCH 01/10] blender: formatting - Format to draft RFC 0166 style (via nixfmt-rfc-style) - Alphabetize lists unless there is a somewhat-apparent reason not to - Reorder attrs based roughly on the order they are used by the builder --- pkgs/applications/misc/blender/default.nix | 403 ++++++++++++++------- 1 file changed, 267 insertions(+), 136 deletions(-) diff --git a/pkgs/applications/misc/blender/default.nix b/pkgs/applications/misc/blender/default.nix index ec1f11617321..40a5e9066ebb 100644 --- a/pkgs/applications/misc/blender/default.nix +++ b/pkgs/applications/misc/blender/default.nix @@ -1,41 +1,104 @@ -{ config, stdenv, lib, fetchurl, fetchzip, fetchpatch, boost, cmake, ffmpeg, gettext, glew -, libepoxy, libXi, libX11, libXext, libXrender -, libjpeg, libpng, libsamplerate, libsndfile -, libtiff, libwebp, libGLU, libGL, openal, opencolorio, openexr, openimagedenoise, openimageio, openjpeg, python310Packages -, openvdb, libXxf86vm, tbb, alembic -, zlib, zstd, fftw, fftwFloat, opensubdiv, freetype, jemalloc, ocl-icd, addOpenGLRunpath -, jackaudioSupport ? false, libjack2 -, cudaSupport ? config.cudaSupport, cudaPackages ? { } -, hipSupport ? false, rocmPackages # comes with a significantly larger closure size -, colladaSupport ? true, opencollada -, spaceNavSupport ? stdenv.isLinux, libspnav -, makeWrapper -, pugixml, llvmPackages, SDL, Cocoa, CoreGraphics, ForceFeedback, OpenAL, OpenGL -, waylandSupport ? stdenv.isLinux, pkg-config, wayland, wayland-protocols, libffi, libdecor, libxkbcommon, dbus -, potrace -, openxr-loader -, embree, gmp, libharu -, openpgl -, mesa -, runCommand -, callPackage +{ + Cocoa, + CoreGraphics, + ForceFeedback, + OpenAL, + OpenGL, + SDL, + addOpenGLRunpath, + alembic, + boost, + callPackage, + cmake, + colladaSupport ? true, + config, + cudaPackages ? { }, + cudaSupport ? config.cudaSupport, + dbus, + embree, + fetchpatch, + fetchurl, + fetchzip, + ffmpeg, + fftw, + fftwFloat, + freetype, + gettext, + glew, + gmp, + hipSupport ? false, + jackaudioSupport ? false, + jemalloc, + lib, + libGL, + libGLU, + libX11, + libXext, + libXi, + libXrender, + libXxf86vm, + libdecor, + libepoxy, + libffi, + libharu, + libjack2, + libjpeg, + libpng, + libsamplerate, + libsndfile, + libspnav, + libtiff, + libwebp, + libxkbcommon, + llvmPackages, + makeWrapper, + mesa, + ocl-icd, + openal, + opencollada, + opencolorio, + openexr, + openimagedenoise, + openimageio, + openjpeg, + openpgl, + opensubdiv, + openvdb, + openxr-loader, + pkg-config, + potrace, + pugixml, + python310Packages, + rocmPackages, # comes with a significantly larger closure size + runCommand, + spaceNavSupport ? stdenv.isLinux, + stdenv, + tbb, + wayland, + wayland-protocols, + waylandSupport ? stdenv.isLinux, + zlib, + zstd, }: let pythonPackages = python310Packages; inherit (pythonPackages) python; - buildEnv = callPackage ./wrapper.nix {}; - optix = fetchzip { - # url taken from the archlinux blender PKGBUILD - url = "https://developer.download.nvidia.com/redist/optix/v7.3/OptiX-7.3.0-Include.zip"; - sha256 = "0max1j4822mchj0xpz9lqzh91zkmvsn4py0r174cvqfz8z8ykjk8"; - }; + + buildEnv = callPackage ./wrapper.nix { }; + libdecor' = libdecor.overrideAttrs (old: { # Blender uses private APIs, need to patch to expose them patches = (old.patches or [ ]) ++ [ ./libdecor.patch ]; }); + optix = fetchzip { + # url taken from the archlinux blender PKGBUILD + url = "https://developer.download.nvidia.com/redist/optix/v7.3/OptiX-7.3.0-Include.zip"; + sha256 = "0max1j4822mchj0xpz9lqzh91zkmvsn4py0r174cvqfz8z8ykjk8"; + }; in + stdenv.mkDerivation (finalAttrs: rec { pname = "blender"; version = "4.0.2"; @@ -53,101 +116,62 @@ stdenv.mkDerivation (finalAttrs: rec { }) ] ++ lib.optional stdenv.isDarwin ./darwin.patch; - nativeBuildInputs = - [ cmake makeWrapper python310Packages.wrapPython llvmPackages.llvm.dev - ] - ++ lib.optionals cudaSupport [ - addOpenGLRunpath - cudaPackages.cuda_nvcc - ] - ++ lib.optionals waylandSupport [ pkg-config ]; - buildInputs = - [ boost ffmpeg gettext glew - freetype libjpeg libpng libsamplerate libsndfile libtiff libwebp - opencolorio openexr openimageio openjpeg python zlib zstd fftw fftwFloat jemalloc - alembic - (opensubdiv.override { inherit cudaSupport; }) - tbb - gmp - pugixml - potrace - libharu - libepoxy - openpgl - ] - ++ lib.optionals waylandSupport [ - wayland wayland-protocols libffi libdecor' libxkbcommon dbus - ] - ++ lib.optionals (!stdenv.isAarch64) [ - openimagedenoise - embree - ] - ++ (if (!stdenv.isDarwin) then [ - libXi libX11 libXext libXrender - libGLU libGL openal - libXxf86vm - openxr-loader - # OpenVDB currently doesn't build on darwin - openvdb - ] - else [ - llvmPackages.openmp SDL Cocoa CoreGraphics ForceFeedback OpenAL OpenGL - ]) - ++ lib.optional jackaudioSupport libjack2 - ++ lib.optionals cudaSupport [ cudaPackages.cuda_cudart ] - ++ lib.optional colladaSupport opencollada - ++ lib.optional spaceNavSupport libspnav; - pythonPath = with python310Packages; [ numpy requests zstandard ]; - - postPatch = '' - '' + - (if stdenv.isDarwin then '' - : > build_files/cmake/platform/platform_apple_xcode.cmake - substituteInPlace source/creator/CMakeLists.txt \ - --replace '${"$"}{LIBDIR}/python' \ - '${python}' - substituteInPlace build_files/cmake/platform/platform_apple.cmake \ - --replace '${"$"}{LIBDIR}/python' \ - '${python}' \ - --replace '${"$"}{LIBDIR}/opencollada' \ - '${opencollada}' \ - --replace '${"$"}{PYTHON_LIBPATH}/site-packages/numpy' \ - '${python310Packages.numpy}/${python.sitePackages}/numpy' - '' else '' - substituteInPlace extern/clew/src/clew.c --replace '"libOpenCL.so"' '"${ocl-icd}/lib/libOpenCL.so"' - '') + - (lib.optionalString hipSupport '' + postPatch = + ( + if stdenv.isDarwin then + '' + : > build_files/cmake/platform/platform_apple_xcode.cmake + substituteInPlace source/creator/CMakeLists.txt \ + --replace '${"$"}{LIBDIR}/python' \ + '${python}' + substituteInPlace build_files/cmake/platform/platform_apple.cmake \ + --replace '${"$"}{LIBDIR}/python' \ + '${python}' \ + --replace '${"$"}{LIBDIR}/opencollada' \ + '${opencollada}' \ + --replace '${"$"}{PYTHON_LIBPATH}/site-packages/numpy' \ + '${python310Packages.numpy}/${python.sitePackages}/numpy' + '' + else + '' + substituteInPlace extern/clew/src/clew.c --replace '"libOpenCL.so"' '"${ocl-icd}/lib/libOpenCL.so"' + '' + ) + + (lib.optionalString hipSupport '' substituteInPlace extern/hipew/src/hipew.c --replace '"/opt/rocm/hip/lib/libamdhip64.so"' '"${rocmPackages.clr}/lib/libamdhip64.so"' substituteInPlace extern/hipew/src/hipew.c --replace '"opt/rocm/hip/bin"' '"${rocmPackages.clr}/bin"' ''); + env.NIX_CFLAGS_COMPILE = "-I${python}/include/${python.libPrefix}"; + cmakeFlags = [ + "-DPYTHON_INCLUDE_DIR=${python}/include/${python.libPrefix}" + "-DPYTHON_LIBPATH=${python}/lib" + "-DPYTHON_LIBRARY=${python.libPrefix}" + "-DPYTHON_NUMPY_INCLUDE_DIRS=${python310Packages.numpy}/${python.sitePackages}/numpy/core/include" + "-DPYTHON_NUMPY_PATH=${python310Packages.numpy}/${python.sitePackages}" + "-DPYTHON_VERSION=${python.pythonVersion}" "-DWITH_ALEMBIC=ON" + "-DWITH_CODEC_FFMPEG=ON" + "-DWITH_CODEC_SNDFILE=ON" + "-DWITH_FFTW3=ON" + "-DWITH_IMAGE_OPENJPEG=ON" + "-DWITH_INSTALL_PORTABLE=OFF" + "-DWITH_MOD_OCEANSIM=ON" + "-DWITH_OPENCOLLADA=${if colladaSupport then "ON" else "OFF"}" + "-DWITH_OPENCOLORIO=ON" + "-DWITH_OPENSUBDIV=ON" + "-DWITH_OPENVDB=ON" + "-DWITH_PYTHON_INSTALL=OFF" + "-DWITH_PYTHON_INSTALL_NUMPY=OFF" + "-DWITH_PYTHON_INSTALL_REQUESTS=OFF" + "-DWITH_SDL=OFF" + "-DWITH_TBB=ON" + # Blender supplies its own FindAlembic.cmake (incompatible with the Alembic-supplied config file) "-DALEMBIC_INCLUDE_DIR=${lib.getDev alembic}/include" "-DALEMBIC_LIBRARY=${lib.getLib alembic}/lib/libAlembic.so" - "-DWITH_MOD_OCEANSIM=ON" - "-DWITH_CODEC_FFMPEG=ON" - "-DWITH_CODEC_SNDFILE=ON" - "-DWITH_INSTALL_PORTABLE=OFF" - "-DWITH_FFTW3=ON" - "-DWITH_SDL=OFF" - "-DWITH_OPENCOLORIO=ON" - "-DWITH_OPENSUBDIV=ON" - "-DPYTHON_LIBRARY=${python.libPrefix}" - "-DPYTHON_LIBPATH=${python}/lib" - "-DPYTHON_INCLUDE_DIR=${python}/include/${python.libPrefix}" - "-DPYTHON_VERSION=${python.pythonVersion}" - "-DWITH_PYTHON_INSTALL=OFF" - "-DWITH_PYTHON_INSTALL_NUMPY=OFF" - "-DPYTHON_NUMPY_PATH=${python310Packages.numpy}/${python.sitePackages}" - "-DPYTHON_NUMPY_INCLUDE_DIRS=${python310Packages.numpy}/${python.sitePackages}/numpy/core/include" - "-DWITH_PYTHON_INSTALL_REQUESTS=OFF" - "-DWITH_OPENVDB=ON" - "-DWITH_TBB=ON" - "-DWITH_IMAGE_OPENJPEG=ON" - "-DWITH_OPENCOLLADA=${if colladaSupport then "ON" else "OFF"}" ] ++ lib.optionals waylandSupport [ "-DWITH_GHOST_WAYLAND=ON" @@ -155,43 +179,135 @@ stdenv.mkDerivation (finalAttrs: rec { "-DWITH_GHOST_WAYLAND_DYNLOAD=OFF" "-DWITH_GHOST_WAYLAND_LIBDECOR=ON" ] - ++ lib.optionals stdenv.hostPlatform.isAarch64 [ - "-DWITH_CYCLES_EMBREE=OFF" - ] + ++ lib.optionals stdenv.hostPlatform.isAarch64 [ "-DWITH_CYCLES_EMBREE=OFF" ] ++ lib.optionals stdenv.isDarwin [ + "-DLIBDIR=/does-not-exist" "-DWITH_CYCLES_OSL=OFF" # requires LLVM "-DWITH_OPENVDB=OFF" # OpenVDB currently doesn't build on darwin - - "-DLIBDIR=/does-not-exist" ] - # Clang doesn't support "-export-dynamic" - ++ lib.optional stdenv.cc.isClang "-DPYTHON_LINKFLAGS=" + ++ lib.optional stdenv.cc.isClang "-DPYTHON_LINKFLAGS=" # Clang doesn't support "-export-dynamic" ++ lib.optional jackaudioSupport "-DWITH_JACK=ON" ++ lib.optionals cudaSupport [ + "-DOPTIX_ROOT_DIR=${optix}" "-DWITH_CYCLES_CUDA_BINARIES=ON" "-DWITH_CYCLES_DEVICE_OPTIX=ON" - "-DOPTIX_ROOT_DIR=${optix}" ]; - env.NIX_CFLAGS_COMPILE = "-I${python}/include/${python.libPrefix}"; + nativeBuildInputs = + [ + cmake + llvmPackages.llvm.dev + makeWrapper + python310Packages.wrapPython + ] + ++ lib.optionals cudaSupport [ + addOpenGLRunpath + cudaPackages.cuda_nvcc + ] + ++ lib.optionals waylandSupport [ pkg-config ]; + + buildInputs = + [ + alembic + boost + ffmpeg + fftw + fftwFloat + freetype + gettext + glew + gmp + jemalloc + libepoxy + libharu + libjpeg + libpng + libsamplerate + libsndfile + libtiff + libwebp + opencolorio + openexr + openimageio + openjpeg + openpgl + (opensubdiv.override { inherit cudaSupport; }) + potrace + pugixml + python + tbb + zlib + zstd + ] + ++ lib.optionals (!stdenv.isAarch64) [ + embree + openimagedenoise + ] + ++ ( + if (!stdenv.isDarwin) then + [ + libGL + libGLU + libX11 + libXext + libXi + libXrender + libXxf86vm + openal + openvdb # OpenVDB currently doesn't build on darwin + openxr-loader + ] + else + [ + Cocoa + CoreGraphics + ForceFeedback + OpenAL + OpenGL + SDL + llvmPackages.openmp + ] + ) + ++ lib.optionals cudaSupport [ cudaPackages.cuda_cudart ] + ++ lib.optionals waylandSupport [ + dbus + libdecor' + libffi + libxkbcommon + wayland + wayland-protocols + ] + ++ lib.optional colladaSupport opencollada + ++ lib.optional jackaudioSupport libjack2 + ++ lib.optional spaceNavSupport libspnav; + + pythonPath = with python310Packages; [ + numpy + requests + zstandard + ]; # Since some dependencies are built with gcc 6, we need gcc 6's # libstdc++ in our RPATH. Sigh. NIX_LDFLAGS = lib.optionalString cudaSupport "-rpath ${stdenv.cc.cc.lib}/lib"; blenderExecutable = - placeholder "out" + (if stdenv.isDarwin then "/Applications/Blender.app/Contents/MacOS/Blender" else "/bin/blender"); - postInstall = lib.optionalString stdenv.isDarwin '' - mkdir $out/Applications - mv $out/Blender.app $out/Applications - '' + '' - mv $out/share/blender/${lib.versions.majorMinor version}/python{,-ext} - buildPythonPath "$pythonPath" - wrapProgram $blenderExecutable \ - --prefix PATH : $program_PATH \ - --prefix PYTHONPATH : "$program_PYTHONPATH" \ - --add-flags '--python-use-system-env' - ''; + placeholder "out" + + (if stdenv.isDarwin then "/Applications/Blender.app/Contents/MacOS/Blender" else "/bin/blender"); + + postInstall = + lib.optionalString stdenv.isDarwin '' + mkdir $out/Applications + mv $out/Blender.app $out/Applications + '' + + '' + mv $out/share/blender/${lib.versions.majorMinor version}/python{,-ext} + buildPythonPath "$pythonPath" + wrapProgram $blenderExecutable \ + --prefix PATH : $program_PATH \ + --prefix PYTHONPATH : "$program_PYTHONPATH" \ + --add-flags '--python-use-system-env' + ''; # Set RUNPATH so that libcuda and libnvrtc in /run/opengl-driver(-32)/lib can be # found. See the explanation in libglvnd. @@ -205,7 +321,15 @@ stdenv.mkDerivation (finalAttrs: rec { passthru = { inherit python pythonPackages; - withPackages = f: let packages = f pythonPackages; in buildEnv.override { blender = finalAttrs.finalPackage; extraModules = packages; }; + withPackages = + f: + let + packages = f pythonPackages; + in + buildEnv.override { + blender = finalAttrs.finalPackage; + extraModules = packages; + }; tests = { render = runCommand "${pname}-test" { } '' @@ -251,9 +375,16 @@ stdenv.mkDerivation (finalAttrs: rec { # say: "We've decided to cancel the BL offering for an indefinite period." # OptiX, enabled with cudaSupport, is non-free. license = with licenses; [ gpl2Plus ] ++ optional cudaSupport unfree; - platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" ]; + platforms = [ + "aarch64-linux" + "x86_64-darwin" + "x86_64-linux" + ]; broken = stdenv.isDarwin; - maintainers = with maintainers; [ goibhniu veprbl ]; + maintainers = with maintainers; [ + goibhniu + veprbl + ]; mainProgram = "blender"; }; }) From bd78a3bfa5e4437822ec89a8642ae25ccdcb1956 Mon Sep 17 00:00:00 2001 From: Andrew Marshall Date: Mon, 26 Feb 2024 00:31:20 -0500 Subject: [PATCH 02/10] blender: prefer using alias for desired pythonPackages Otherwise all these references have to be updated whenever the Python version is changed. --- pkgs/applications/misc/blender/default.nix | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pkgs/applications/misc/blender/default.nix b/pkgs/applications/misc/blender/default.nix index 40a5e9066ebb..e689e0a6b506 100644 --- a/pkgs/applications/misc/blender/default.nix +++ b/pkgs/applications/misc/blender/default.nix @@ -130,7 +130,7 @@ stdenv.mkDerivation (finalAttrs: rec { --replace '${"$"}{LIBDIR}/opencollada' \ '${opencollada}' \ --replace '${"$"}{PYTHON_LIBPATH}/site-packages/numpy' \ - '${python310Packages.numpy}/${python.sitePackages}/numpy' + '${pythonPackages.numpy}/${python.sitePackages}/numpy' '' else '' @@ -149,8 +149,8 @@ stdenv.mkDerivation (finalAttrs: rec { "-DPYTHON_INCLUDE_DIR=${python}/include/${python.libPrefix}" "-DPYTHON_LIBPATH=${python}/lib" "-DPYTHON_LIBRARY=${python.libPrefix}" - "-DPYTHON_NUMPY_INCLUDE_DIRS=${python310Packages.numpy}/${python.sitePackages}/numpy/core/include" - "-DPYTHON_NUMPY_PATH=${python310Packages.numpy}/${python.sitePackages}" + "-DPYTHON_NUMPY_INCLUDE_DIRS=${pythonPackages.numpy}/${python.sitePackages}/numpy/core/include" + "-DPYTHON_NUMPY_PATH=${pythonPackages.numpy}/${python.sitePackages}" "-DPYTHON_VERSION=${python.pythonVersion}" "-DWITH_ALEMBIC=ON" "-DWITH_CODEC_FFMPEG=ON" @@ -198,7 +198,7 @@ stdenv.mkDerivation (finalAttrs: rec { cmake llvmPackages.llvm.dev makeWrapper - python310Packages.wrapPython + pythonPackages.wrapPython ] ++ lib.optionals cudaSupport [ addOpenGLRunpath @@ -281,7 +281,7 @@ stdenv.mkDerivation (finalAttrs: rec { ++ lib.optional jackaudioSupport libjack2 ++ lib.optional spaceNavSupport libspnav; - pythonPath = with python310Packages; [ + pythonPath = with pythonPackages; [ numpy requests zstandard From 98cecd5f7d8dd5ecd49f0bf4777a2a71831ccec7 Mon Sep 17 00:00:00 2001 From: Andrew Marshall Date: Mon, 26 Feb 2024 00:34:26 -0500 Subject: [PATCH 03/10] blender: prefer finalAttrs over rec --- pkgs/applications/misc/blender/default.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/applications/misc/blender/default.nix b/pkgs/applications/misc/blender/default.nix index e689e0a6b506..fec04aaa6dbe 100644 --- a/pkgs/applications/misc/blender/default.nix +++ b/pkgs/applications/misc/blender/default.nix @@ -99,12 +99,12 @@ let }; in -stdenv.mkDerivation (finalAttrs: rec { +stdenv.mkDerivation (finalAttrs: { pname = "blender"; version = "4.0.2"; src = fetchurl { - url = "https://download.blender.org/source/${pname}-${version}.tar.xz"; + url = "https://download.blender.org/source/${finalAttrs.pname}-${finalAttrs.version}.tar.xz"; hash = "sha256-qqDnKdp1kc+/RXcq92NFl32qp7EaCvNdmPkxPiRgd6M="; }; @@ -301,7 +301,7 @@ stdenv.mkDerivation (finalAttrs: rec { mv $out/Blender.app $out/Applications '' + '' - mv $out/share/blender/${lib.versions.majorMinor version}/python{,-ext} + mv $out/share/blender/${lib.versions.majorMinor finalAttrs.version}/python{,-ext} buildPythonPath "$pythonPath" wrapProgram $blenderExecutable \ --prefix PATH : $program_PATH \ @@ -332,7 +332,7 @@ stdenv.mkDerivation (finalAttrs: rec { }; tests = { - render = runCommand "${pname}-test" { } '' + render = runCommand "${finalAttrs.pname}-test" { } '' set -euo pipefail export LIBGL_DRIVERS_PATH=${mesa.drivers}/lib/dri From 3a3758db32b0cbd8841e77ee0f317f55aac31a96 Mon Sep 17 00:00:00 2001 From: Andrew Marshall Date: Mon, 26 Feb 2024 00:36:08 -0500 Subject: [PATCH 04/10] blender: reduce usage of `with` When used, ensure the scope is narrow. https://nix.dev/guides/best-practices#with-scopes --- pkgs/applications/misc/blender/default.nix | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/pkgs/applications/misc/blender/default.nix b/pkgs/applications/misc/blender/default.nix index fec04aaa6dbe..309170f7487c 100644 --- a/pkgs/applications/misc/blender/default.nix +++ b/pkgs/applications/misc/blender/default.nix @@ -281,11 +281,15 @@ stdenv.mkDerivation (finalAttrs: { ++ lib.optional jackaudioSupport libjack2 ++ lib.optional spaceNavSupport libspnav; - pythonPath = with pythonPackages; [ - numpy - requests - zstandard - ]; + pythonPath = + let + ps = pythonPackages; + in + [ + ps.numpy + ps.requests + ps.zstandard + ]; # Since some dependencies are built with gcc 6, we need gcc 6's # libstdc++ in our RPATH. Sigh. @@ -368,20 +372,20 @@ stdenv.mkDerivation (finalAttrs: { }; }; - meta = with lib; { + meta = { description = "3D Creation/Animation/Publishing System"; homepage = "https://www.blender.org"; # They comment two licenses: GPLv2 and Blender License, but they # say: "We've decided to cancel the BL offering for an indefinite period." # OptiX, enabled with cudaSupport, is non-free. - license = with licenses; [ gpl2Plus ] ++ optional cudaSupport unfree; + license = with lib.licenses; [ gpl2Plus ] ++ lib.optional cudaSupport unfree; platforms = [ "aarch64-linux" "x86_64-darwin" "x86_64-linux" ]; broken = stdenv.isDarwin; - maintainers = with maintainers; [ + maintainers = with lib.maintainers; [ goibhniu veprbl ]; From 13e7acb2e74255cf499d9ba2cd23f5b38169f7bc Mon Sep 17 00:00:00 2001 From: Andrew Marshall Date: Fri, 1 Mar 2024 09:21:01 -0500 Subject: [PATCH 05/10] blender: add comment for why pythonPackages over python.pkgs --- pkgs/applications/misc/blender/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/applications/misc/blender/default.nix b/pkgs/applications/misc/blender/default.nix index 309170f7487c..0515866226f4 100644 --- a/pkgs/applications/misc/blender/default.nix +++ b/pkgs/applications/misc/blender/default.nix @@ -68,7 +68,7 @@ pkg-config, potrace, pugixml, - python310Packages, + python310Packages, # must use instead of python3.pkgs, see https://github.com/NixOS/nixpkgs/issues/211340 rocmPackages, # comes with a significantly larger closure size runCommand, spaceNavSupport ? stdenv.isLinux, From 6d234d9d5e7c58ca479f8ddfa0f52171140a9d8e Mon Sep 17 00:00:00 2001 From: Andrew Marshall Date: Fri, 1 Mar 2024 09:32:01 -0500 Subject: [PATCH 06/10] blender: remove unnecessary explicit libstdc addition to rpath This seems to no longer be necessary, I can successfully build with cudaSupport and perform a CUDA and OptiX render. --- pkgs/applications/misc/blender/default.nix | 4 ---- 1 file changed, 4 deletions(-) diff --git a/pkgs/applications/misc/blender/default.nix b/pkgs/applications/misc/blender/default.nix index 0515866226f4..c468341df51e 100644 --- a/pkgs/applications/misc/blender/default.nix +++ b/pkgs/applications/misc/blender/default.nix @@ -291,10 +291,6 @@ stdenv.mkDerivation (finalAttrs: { ps.zstandard ]; - # Since some dependencies are built with gcc 6, we need gcc 6's - # libstdc++ in our RPATH. Sigh. - NIX_LDFLAGS = lib.optionalString cudaSupport "-rpath ${stdenv.cc.cc.lib}/lib"; - blenderExecutable = placeholder "out" + (if stdenv.isDarwin then "/Applications/Blender.app/Contents/MacOS/Blender" else "/bin/blender"); From 3369061e8e51db3dec29ff132d35c5fbf3b44614 Mon Sep 17 00:00:00 2001 From: Andrew Marshall Date: Sun, 3 Mar 2024 19:40:04 -0500 Subject: [PATCH 07/10] blender: inline single-use vars when defining withPackages --- pkgs/applications/misc/blender/default.nix | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/pkgs/applications/misc/blender/default.nix b/pkgs/applications/misc/blender/default.nix index c468341df51e..fb62ac711450 100644 --- a/pkgs/applications/misc/blender/default.nix +++ b/pkgs/applications/misc/blender/default.nix @@ -85,8 +85,6 @@ let pythonPackages = python310Packages; inherit (pythonPackages) python; - buildEnv = callPackage ./wrapper.nix { }; - libdecor' = libdecor.overrideAttrs (old: { # Blender uses private APIs, need to patch to expose them patches = (old.patches or [ ]) ++ [ ./libdecor.patch ]; @@ -323,12 +321,9 @@ stdenv.mkDerivation (finalAttrs: { withPackages = f: - let - packages = f pythonPackages; - in - buildEnv.override { + (callPackage ./wrapper.nix { }).override { blender = finalAttrs.finalPackage; - extraModules = packages; + extraModules = (f pythonPackages); }; tests = { From 3605bfff9a6068b1c0957cf10506f9ee1e9b05b8 Mon Sep 17 00:00:00 2001 From: Andrew Marshall Date: Sun, 3 Mar 2024 19:41:47 -0500 Subject: [PATCH 08/10] blender: remove unnecessary fallback for cudaPackages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It’s always defined. --- pkgs/applications/misc/blender/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/applications/misc/blender/default.nix b/pkgs/applications/misc/blender/default.nix index fb62ac711450..608fcd3776f8 100644 --- a/pkgs/applications/misc/blender/default.nix +++ b/pkgs/applications/misc/blender/default.nix @@ -12,7 +12,7 @@ cmake, colladaSupport ? true, config, - cudaPackages ? { }, + cudaPackages, cudaSupport ? config.cudaSupport, dbus, embree, From e65fdfa217782646c561ef0199a1d4799441b15e Mon Sep 17 00:00:00 2001 From: Andrew Marshall Date: Sun, 3 Mar 2024 19:44:16 -0500 Subject: [PATCH 09/10] blender: use SRI hash for OptiX, clarify source --- pkgs/applications/misc/blender/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/misc/blender/default.nix b/pkgs/applications/misc/blender/default.nix index 608fcd3776f8..8109262129c0 100644 --- a/pkgs/applications/misc/blender/default.nix +++ b/pkgs/applications/misc/blender/default.nix @@ -91,9 +91,9 @@ let }); optix = fetchzip { - # url taken from the archlinux blender PKGBUILD + # URL from https://gitlab.archlinux.org/archlinux/packaging/packages/blender/-/commit/333add667b43255dcb011215a2d2af48281e83cf#9b9baac1eb9b72790eef5540a1685306fc43fd6c_30_30 url = "https://developer.download.nvidia.com/redist/optix/v7.3/OptiX-7.3.0-Include.zip"; - sha256 = "0max1j4822mchj0xpz9lqzh91zkmvsn4py0r174cvqfz8z8ykjk8"; + hash = "sha256-aMrp0Uff4c3ICRn4S6zedf6Q4Mc0/duBhKwKgYgMXVU="; }; in From c92e91b9f622e3f20b1a009b65f4421ba995cbad Mon Sep 17 00:00:00 2001 From: Andrew Marshall Date: Tue, 5 Mar 2024 08:42:30 -0500 Subject: [PATCH 10/10] blender: rename local python{,Packages} -> python3{,Packages} MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This makes them match what the fn param names *would* be, making it easier to refactor e.g. to `{ python3Packages, ... }: mkDerivation …` in the future if desired. It also potentially reduces first-glance confusion that it might be Python 2 in-use. Leave the passthru names as-is to preserve backwards-compatibility, but also as there appears to be some precedent for naming them like this. --- pkgs/applications/misc/blender/default.nix | 35 +++++++++++----------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/pkgs/applications/misc/blender/default.nix b/pkgs/applications/misc/blender/default.nix index 8109262129c0..ebbc6cc84fef 100644 --- a/pkgs/applications/misc/blender/default.nix +++ b/pkgs/applications/misc/blender/default.nix @@ -82,8 +82,8 @@ }: let - pythonPackages = python310Packages; - inherit (pythonPackages) python; + python3Packages = python310Packages; + python3 = python3Packages.python; libdecor' = libdecor.overrideAttrs (old: { # Blender uses private APIs, need to patch to expose them @@ -121,14 +121,14 @@ stdenv.mkDerivation (finalAttrs: { : > build_files/cmake/platform/platform_apple_xcode.cmake substituteInPlace source/creator/CMakeLists.txt \ --replace '${"$"}{LIBDIR}/python' \ - '${python}' + '${python3}' substituteInPlace build_files/cmake/platform/platform_apple.cmake \ --replace '${"$"}{LIBDIR}/python' \ - '${python}' \ + '${python3}' \ --replace '${"$"}{LIBDIR}/opencollada' \ '${opencollada}' \ --replace '${"$"}{PYTHON_LIBPATH}/site-packages/numpy' \ - '${pythonPackages.numpy}/${python.sitePackages}/numpy' + '${python3Packages.numpy}/${python3.sitePackages}/numpy' '' else '' @@ -140,16 +140,16 @@ stdenv.mkDerivation (finalAttrs: { substituteInPlace extern/hipew/src/hipew.c --replace '"opt/rocm/hip/bin"' '"${rocmPackages.clr}/bin"' ''); - env.NIX_CFLAGS_COMPILE = "-I${python}/include/${python.libPrefix}"; + env.NIX_CFLAGS_COMPILE = "-I${python3}/include/${python3.libPrefix}"; cmakeFlags = [ - "-DPYTHON_INCLUDE_DIR=${python}/include/${python.libPrefix}" - "-DPYTHON_LIBPATH=${python}/lib" - "-DPYTHON_LIBRARY=${python.libPrefix}" - "-DPYTHON_NUMPY_INCLUDE_DIRS=${pythonPackages.numpy}/${python.sitePackages}/numpy/core/include" - "-DPYTHON_NUMPY_PATH=${pythonPackages.numpy}/${python.sitePackages}" - "-DPYTHON_VERSION=${python.pythonVersion}" + "-DPYTHON_INCLUDE_DIR=${python3}/include/${python3.libPrefix}" + "-DPYTHON_LIBPATH=${python3}/lib" + "-DPYTHON_LIBRARY=${python3.libPrefix}" + "-DPYTHON_NUMPY_INCLUDE_DIRS=${python3Packages.numpy}/${python3.sitePackages}/numpy/core/include" + "-DPYTHON_NUMPY_PATH=${python3Packages.numpy}/${python3.sitePackages}" + "-DPYTHON_VERSION=${python3.pythonVersion}" "-DWITH_ALEMBIC=ON" "-DWITH_CODEC_FFMPEG=ON" "-DWITH_CODEC_SNDFILE=ON" @@ -196,7 +196,7 @@ stdenv.mkDerivation (finalAttrs: { cmake llvmPackages.llvm.dev makeWrapper - pythonPackages.wrapPython + python3Packages.wrapPython ] ++ lib.optionals cudaSupport [ addOpenGLRunpath @@ -232,7 +232,7 @@ stdenv.mkDerivation (finalAttrs: { (opensubdiv.override { inherit cudaSupport; }) potrace pugixml - python + python3 tbb zlib zstd @@ -281,7 +281,7 @@ stdenv.mkDerivation (finalAttrs: { pythonPath = let - ps = pythonPackages; + ps = python3Packages; in [ ps.numpy @@ -317,13 +317,14 @@ stdenv.mkDerivation (finalAttrs: { ''; passthru = { - inherit python pythonPackages; + python = python3; + pythonPackages = python3Packages; withPackages = f: (callPackage ./wrapper.nix { }).override { blender = finalAttrs.finalPackage; - extraModules = (f pythonPackages); + extraModules = (f python3Packages); }; tests = {