-
-
Notifications
You must be signed in to change notification settings - Fork 16.3k
blender: implement multiple versions, move to fetchFromGitea #257780
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
the-furry-hubofeverything
wants to merge
6
commits into
NixOS:master
from
the-furry-hubofeverything:blender-improvements
Closed
Changes from all commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
2fb281f
blender: Switch to fetchFromGitea
the-furry-hubofeverything a9ecc71
blender: Added blender-addons repo
the-furry-hubofeverything c0cfe0c
blender: default.nix -> generic.nix
the-furry-hubofeverything 2f21b6d
blender: implement multi version packages
the-furry-hubofeverything e24655d
blender: implement multi version packages
the-furry-hubofeverything ca777ff
blender: add hubble as maintainer
the-furry-hubofeverything File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -1,255 +1,47 @@ | ||||||
{ config, stdenv, lib, fetchurl, fetchzip, boost, cmake, ffmpeg, gettext, glew | ||||||
, ilmbase, 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 | ||||||
{ lib | ||||||
, stdenv | ||||||
, llvmPackages_10 | ||||||
, darwin | ||||||
, callPackage | ||||||
, python310Packages | ||||||
}: | ||||||
|
||||||
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"; | ||||||
}; | ||||||
libdecor' = libdecor.overrideAttrs (old: { | ||||||
# Blender uses private APIs, need to patch to expose them | ||||||
patches = (old.patches or [ ]) ++ [ ./libdecor.patch ]; | ||||||
}); | ||||||
|
||||||
versions = lib.importJSON ./versions.json; | ||||||
|
||||||
latestStable = lib.last (builtins.sort lib.versionOlder (builtins.attrNames versions)); | ||||||
latestLTS = lib.last (builtins.sort lib.versionOlder (builtins.attrNames (lib.filterAttrs (_: v: v.isLTS == true) versions))); | ||||||
|
||||||
packages = | ||||||
lib.mapAttrs' | ||||||
(version: content: { | ||||||
name = "blender_${version}"; | ||||||
value = callPackage ./generic.nix { | ||||||
inherit (darwin.apple_sdk.frameworks) Cocoa CoreGraphics ForceFeedback OpenAL OpenGL; | ||||||
|
||||||
# LLVM 11 crashes when compiling GHOST_SystemCocoa.mm | ||||||
stdenv = if stdenv.isDarwin then llvmPackages_10.stdenv else stdenv; | ||||||
|
||||||
# TODO Consider following https://vfxplatform.com/ for dependency tracking | ||||||
# Like "VFX_RefCY": "2024", which outlines python 3.11, qt 6.5+ etc | ||||||
pythonPackages = python310Packages; | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
lets make it clear that we are not using python2 here |
||||||
|
||||||
inherit (content) version hashes isLTS; | ||||||
}; | ||||||
}) | ||||||
versions; | ||||||
|
||||||
packages-hip = | ||||||
lib.mapAttrs' | ||||||
(packageName: package: { | ||||||
name = builtins.replaceStrings ["blender_"] [""] "blender-hip_${packageName}"; | ||||||
value = package.override {hipSupport = true;}; | ||||||
}) | ||||||
packages; | ||||||
in | ||||||
stdenv.mkDerivation (finalAttrs: rec { | ||||||
pname = "blender"; | ||||||
version = "4.0.2"; | ||||||
|
||||||
src = fetchurl { | ||||||
url = "https://download.blender.org/source/${pname}-${version}.tar.xz"; | ||||||
hash = "sha256-qqDnKdp1kc+/RXcq92NFl32qp7EaCvNdmPkxPiRgd6M="; | ||||||
}; | ||||||
|
||||||
patches = [ | ||||||
./draco.patch | ||||||
] ++ 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 ilmbase | ||||||
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 '' | ||||||
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"' | ||||||
''); | ||||||
|
||||||
cmakeFlags = | ||||||
[ | ||||||
"-DWITH_ALEMBIC=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" | ||||||
"-DWITH_GHOST_WAYLAND_DBUS=ON" | ||||||
"-DWITH_GHOST_WAYLAND_DYNLOAD=OFF" | ||||||
"-DWITH_GHOST_WAYLAND_LIBDECOR=ON" | ||||||
] | ||||||
++ lib.optionals stdenv.hostPlatform.isAarch64 [ | ||||||
"-DWITH_CYCLES_EMBREE=OFF" | ||||||
] | ||||||
++ lib.optionals stdenv.isDarwin [ | ||||||
"-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 jackaudioSupport "-DWITH_JACK=ON" | ||||||
++ lib.optionals cudaSupport [ | ||||||
"-DWITH_CYCLES_CUDA_BINARIES=ON" | ||||||
"-DWITH_CYCLES_DEVICE_OPTIX=ON" | ||||||
"-DOPTIX_ROOT_DIR=${optix}" | ||||||
]; | ||||||
|
||||||
env.NIX_CFLAGS_COMPILE = "-I${ilmbase.dev}/include/OpenEXR -I${python}/include/${python.libPrefix}"; | ||||||
|
||||||
# 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' | ||||||
''; | ||||||
|
||||||
# Set RUNPATH so that libcuda and libnvrtc in /run/opengl-driver(-32)/lib can be | ||||||
# found. See the explanation in libglvnd. | ||||||
postFixup = lib.optionalString cudaSupport '' | ||||||
for program in $out/bin/blender $out/bin/.blender-wrapped; do | ||||||
isELF "$program" || continue | ||||||
addOpenGLRunpath "$program" | ||||||
done | ||||||
''; | ||||||
|
||||||
passthru = { | ||||||
inherit python pythonPackages; | ||||||
|
||||||
withPackages = f: let packages = f pythonPackages; in buildEnv.override { blender = finalAttrs.finalPackage; extraModules = packages; }; | ||||||
|
||||||
tests = { | ||||||
render = runCommand "${pname}-test" { } '' | ||||||
set -euo pipefail | ||||||
|
||||||
export LIBGL_DRIVERS_PATH=${mesa.drivers}/lib/dri | ||||||
export __EGL_VENDOR_LIBRARY_FILENAMES=${mesa.drivers}/share/glvnd/egl_vendor.d/50_mesa.json | ||||||
|
||||||
cat <<'PYTHON' > scene-config.py | ||||||
import bpy | ||||||
bpy.context.scene.eevee.taa_render_samples = 32 | ||||||
bpy.context.scene.cycles.samples = 32 | ||||||
if ${if stdenv.isAarch64 then "True" else "False"}: | ||||||
bpy.context.scene.cycles.use_denoising = False | ||||||
bpy.context.scene.render.resolution_x = 100 | ||||||
bpy.context.scene.render.resolution_y = 100 | ||||||
bpy.context.scene.render.threads_mode = 'FIXED' | ||||||
bpy.context.scene.render.threads = 1 | ||||||
PYTHON | ||||||
|
||||||
mkdir $out | ||||||
for engine in BLENDER_EEVEE CYCLES; do | ||||||
echo "Rendering with $engine..." | ||||||
# Beware that argument order matters | ||||||
${finalAttrs.finalPackage}/bin/blender \ | ||||||
--background \ | ||||||
-noaudio \ | ||||||
--factory-startup \ | ||||||
--python-exit-code 1 \ | ||||||
--python scene-config.py \ | ||||||
--engine "$engine" \ | ||||||
--render-output "$out/$engine" \ | ||||||
--render-frame 1 | ||||||
done | ||||||
''; | ||||||
}; | ||||||
}; | ||||||
|
||||||
meta = with lib; { | ||||||
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; | ||||||
platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" ]; | ||||||
broken = stdenv.isDarwin; | ||||||
maintainers = with maintainers; [ goibhniu veprbl ]; | ||||||
mainProgram = "blender"; | ||||||
}; | ||||||
}) | ||||||
packages | ||||||
// packages-hip | ||||||
// { | ||||||
stable = packages."blender_${latestStable}"; | ||||||
lts = packages."blender_${latestLTS}"; | ||||||
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
--- a/CMakeLists.txt | ||
+++ b/CMakeLists.txt | ||
@@ -898,11 +898,6 @@ set_and_warn_dependency(WITH_PYTHON WITH_CYCLES OFF) | ||
set_and_warn_dependency(WITH_PYTHON WITH_DRACO OFF) | ||
set_and_warn_dependency(WITH_PYTHON WITH_MOD_FLUID OFF) | ||
|
||
-if(WITH_DRACO AND NOT WITH_PYTHON_INSTALL) | ||
- message(STATUS "WITH_DRACO requires WITH_PYTHON_INSTALL to be ON, disabling WITH_DRACO for now") | ||
- set(WITH_DRACO OFF) | ||
-endif() | ||
- | ||
# enable boost for cycles, audaspace or i18n | ||
# otherwise if the user disabled |
14 changes: 0 additions & 14 deletions
14
pkgs/applications/misc/blender/draco.patch → .../applications/misc/blender/draco-p2.patch
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.