From f8ceab72ffa6cbc2bab363d9d5a17136d8dae532 Mon Sep 17 00:00:00 2001 From: Andrew Marshall Date: Mon, 26 Feb 2024 00:31:04 -0500 Subject: [PATCH] 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"; }; })