2024-02-26 05:31:04 +00:00
{
Cocoa ,
CoreGraphics ,
ForceFeedback ,
OpenAL ,
OpenGL ,
SDL ,
addOpenGLRunpath ,
alembic ,
boost ,
callPackage ,
cmake ,
colladaSupport ? true ,
config ,
2024-03-04 00:41:47 +00:00
cudaPackages ,
2024-02-26 05:31:04 +00:00
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 ,
2024-03-01 14:21:01 +00:00
python310Packages , # must use instead of python3.pkgs, see https://github.com/NixOS/nixpkgs/issues/211340
2024-02-26 05:31:04 +00:00
rocmPackages , # comes with a significantly larger closure size
runCommand ,
spaceNavSupport ? stdenv . isLinux ,
stdenv ,
tbb ,
wayland ,
wayland-protocols ,
waylandSupport ? stdenv . isLinux ,
zlib ,
zstd ,
2013-03-28 00:00:22 +00:00
} :
2010-05-08 21:25:56 +00:00
2020-12-14 08:41:47 +00:00
let
2024-03-05 13:42:30 +00:00
python3Packages = python310Packages ;
python3 = python3Packages . python ;
2024-02-28 23:59:50 +00:00
pyPkgsOpenusd = python3Packages . openusd . override { withOsl = false ; } ;
2024-02-26 05:31:04 +00:00
2023-11-18 01:45:35 +00:00
libdecor' = libdecor . overrideAttrs ( old : {
# Blender uses private APIs, need to patch to expose them
patches = ( old . patches or [ ] ) ++ [ ./libdecor.patch ] ;
} ) ;
2014-07-15 21:30:55 +00:00
2024-02-26 05:31:04 +00:00
optix = fetchzip {
2024-03-04 00:44:16 +00:00
# URL from https://gitlab.archlinux.org/archlinux/packaging/packages/blender/-/commit/333add667b43255dcb011215a2d2af48281e83cf#9b9baac1eb9b72790eef5540a1685306fc43fd6c_30_30
2024-02-26 05:31:04 +00:00
url = " h t t p s : / / d e v e l o p e r . d o w n l o a d . n v i d i a . c o m / r e d i s t / o p t i x / v 7 . 3 / O p t i X - 7 . 3 . 0 - I n c l u d e . z i p " ;
2024-03-04 00:44:16 +00:00
hash = " s h a 2 5 6 - a M r p 0 U f f 4 c 3 I C R n 4 S 6 z e d f 6 Q 4 M c 0 / d u B h K w K g Y g M X V U = " ;
2024-02-26 05:31:04 +00:00
} ;
2020-12-30 17:01:16 +00:00
in
2024-02-26 05:31:04 +00:00
2024-02-26 05:34:26 +00:00
stdenv . mkDerivation ( finalAttrs : {
2019-08-02 12:57:36 +00:00
pname = " b l e n d e r " ;
2023-12-11 20:23:56 +00:00
version = " 4 . 0 . 2 " ;
2007-12-01 18:05:26 +00:00
2008-01-30 17:20:48 +00:00
src = fetchurl {
2024-02-26 05:34:26 +00:00
url = " h t t p s : / / d o w n l o a d . b l e n d e r . o r g / s o u r c e / ${ finalAttrs . pname } - ${ finalAttrs . version } . t a r . x z " ;
2023-12-11 20:23:56 +00:00
hash = " s h a 2 5 6 - q q D n K d p 1 k c + / R X c q 9 2 N F l 3 2 q p 7 E a C v N d m P k x P i R g d 6 M = " ;
2007-12-01 18:05:26 +00:00
} ;
2023-07-29 05:34:33 +00:00
patches = [
./draco.patch
2024-02-25 10:35:26 +00:00
( fetchpatch {
url = " h t t p s : / / p r o j e c t s . b l e n d e r . o r g / b l e n d e r / b l e n d e r / c o m m i t / c f 4 3 6 5 e 5 5 5 a 7 5 9 d 5 b 3 2 2 5 b c e 7 7 8 5 8 3 7 4 c b 0 7 f a a d . d i f f " ;
hash = " s h a 2 5 6 - N y p d 0 4 y F S H Y a 7 R B a 8 k N m o A p q J r U 4 q p a O l e 3 t k j 4 4 d 4 g = " ;
} )
2024-03-07 04:55:18 +00:00
( fetchpatch {
# https://projects.blender.org/blender/blender/issues/117145
url = " h t t p s : / / p r o j e c t s . b l e n d e r . o r g / b l e n d e r / b l e n d e r / c o m m i t / e b 9 9 8 9 5 c 9 7 2 b 6 c 7 1 3 2 9 4 f 6 8 a 3 4 7 9 8 a a 5 1 d 3 6 0 3 4 a . p a t c h " ;
hash = " s h a 2 5 6 - 9 5 n G 5 m W 4 0 8 l h K J 2 B p p g a U w B M M e X e G y B q h o 6 m C f B 5 3 G I = " ;
} )
2023-07-29 05:34:33 +00:00
] ++ lib . optional stdenv . isDarwin ./darwin.patch ;
2020-01-08 01:42:02 +00:00
2024-02-26 05:31:04 +00:00
postPatch =
(
if stdenv . isDarwin then
''
: > build_files/cmake/platform/platform_apple_xcode.cmake
substituteInPlace source/creator/CMakeLists.txt \
- - replace ' $ { " $ " } { LIBDIR } /python ' \
2024-03-05 13:42:30 +00:00
' $ { python3 } '
2024-02-26 05:31:04 +00:00
substituteInPlace build_files/cmake/platform/platform_apple.cmake \
- - replace ' $ { " $ " } { LIBDIR } /python ' \
2024-03-05 13:42:30 +00:00
' $ { python3 } ' \
2024-02-26 05:31:04 +00:00
- - replace ' $ { " $ " } { LIBDIR } /opencollada ' \
' $ { opencollada } ' \
- - replace ' $ { " $ " } { PYTHON_LIBPATH } /site-packages/numpy ' \
2024-03-05 13:42:30 +00:00
' $ { python3Packages . numpy } / $ { python3 . sitePackages } /numpy '
2024-02-26 05:31:04 +00:00
''
else
''
substituteInPlace extern/clew/src/clew.c - - replace ' " l i b O p e n C L . s o " ' ' " ${ ocl-icd } / l i b / l i b O p e n C L . s o " '
''
)
+ ( lib . optionalString hipSupport ''
2023-10-05 21:58:02 +00:00
substituteInPlace extern/hipew/src/hipew.c - - replace ' " / o p t / r o c m / h i p / l i b / l i b a m d h i p 6 4 . s o " ' ' " ${ rocmPackages . clr } / l i b / l i b a m d h i p 6 4 . s o " '
substituteInPlace extern/hipew/src/hipew.c - - replace ' " o p t / r o c m / h i p / b i n " ' ' " ${ rocmPackages . clr } / b i n " '
2023-02-06 20:49:02 +00:00
'' ) ;
2014-07-15 20:52:23 +00:00
2024-03-05 13:42:30 +00:00
env . NIX_CFLAGS_COMPILE = " - I ${ python3 } / i n c l u d e / ${ python3 . libPrefix } " ;
2024-02-26 05:31:04 +00:00
2014-05-19 19:29:56 +00:00
cmakeFlags =
2020-02-15 11:39:27 +00:00
[
2024-03-05 13:42:30 +00:00
" - D P Y T H O N _ I N C L U D E _ D I R = ${ python3 } / i n c l u d e / ${ python3 . libPrefix } "
" - D P Y T H O N _ L I B P A T H = ${ python3 } / l i b "
" - D P Y T H O N _ L I B R A R Y = ${ python3 . libPrefix } "
" - D P Y T H O N _ N U M P Y _ I N C L U D E _ D I R S = ${ python3Packages . numpy } / ${ python3 . sitePackages } / n u m p y / c o r e / i n c l u d e "
" - D P Y T H O N _ N U M P Y _ P A T H = ${ python3Packages . numpy } / ${ python3 . sitePackages } "
" - D P Y T H O N _ V E R S I O N = ${ python3 . pythonVersion } "
2020-02-23 11:10:53 +00:00
" - D W I T H _ A L E M B I C = O N "
2014-05-19 19:29:56 +00:00
" - D W I T H _ C O D E C _ F F M P E G = O N "
" - D W I T H _ C O D E C _ S N D F I L E = O N "
2015-01-09 15:57:38 +00:00
" - D W I T H _ F F T W 3 = O N "
2024-02-26 05:31:04 +00:00
" - D W I T H _ I M A G E _ O P E N J P E G = O N "
" - D W I T H _ I N S T A L L _ P O R T A B L E = O F F "
" - D W I T H _ M O D _ O C E A N S I M = O N "
" - D W I T H _ O P E N C O L L A D A = ${ if colladaSupport then " O N " else " O F F " } "
2015-01-09 15:57:38 +00:00
" - D W I T H _ O P E N C O L O R I O = O N "
2015-10-12 13:51:04 +00:00
" - D W I T H _ O P E N S U B D I V = O N "
2024-02-26 05:31:04 +00:00
" - D W I T H _ O P E N V D B = O N "
2016-08-22 13:39:33 +00:00
" - D W I T H _ P Y T H O N _ I N S T A L L = O F F "
" - D W I T H _ P Y T H O N _ I N S T A L L _ N U M P Y = O F F "
2021-04-12 02:12:40 +00:00
" - D W I T H _ P Y T H O N _ I N S T A L L _ R E Q U E S T S = O F F "
2024-02-26 05:31:04 +00:00
" - D W I T H _ S D L = O F F "
2019-11-03 11:34:05 +00:00
" - D W I T H _ T B B = O N "
2024-02-28 23:59:50 +00:00
" - D W I T H _ U S D = O N "
2024-02-26 05:31:04 +00:00
# Blender supplies its own FindAlembic.cmake (incompatible with the Alembic-supplied config file)
" - D A L E M B I C _ I N C L U D E _ D I R = ${ lib . getDev alembic } / i n c l u d e "
" - D A L E M B I C _ L I B R A R Y = ${ lib . getLib alembic } / l i b / l i b A l e m b i c . s o "
2020-01-08 01:42:02 +00:00
]
2023-05-13 21:31:22 +00:00
++ lib . optionals waylandSupport [
" - D W I T H _ G H O S T _ W A Y L A N D = O N "
" - D W I T H _ G H O S T _ W A Y L A N D _ D B U S = O N "
" - D W I T H _ G H O S T _ W A Y L A N D _ D Y N L O A D = O F F "
" - D W I T H _ G H O S T _ W A Y L A N D _ L I B D E C O R = O N "
]
2024-02-26 05:31:04 +00:00
++ lib . optionals stdenv . hostPlatform . isAarch64 [ " - D W I T H _ C Y C L E S _ E M B R E E = O F F " ]
2023-01-24 16:29:20 +00:00
++ lib . optionals stdenv . isDarwin [
2024-02-26 05:31:04 +00:00
" - D L I B D I R = / d o e s - n o t - e x i s t "
2020-01-08 01:42:02 +00:00
" - D W I T H _ C Y C L E S _ O S L = O F F " # requires LLVM
" - D W I T H _ O P E N V D B = O F F " # OpenVDB currently doesn't build on darwin
2014-07-15 21:30:55 +00:00
]
2024-02-26 05:31:04 +00:00
++ lib . optional stdenv . cc . isClang " - D P Y T H O N _ L I N K F L A G S = " # Clang doesn't support "-export-dynamic"
2023-01-24 16:29:20 +00:00
++ lib . optional jackaudioSupport " - D W I T H _ J A C K = O N "
++ lib . optionals cudaSupport [
2024-02-26 05:31:04 +00:00
" - D O P T I X _ R O O T _ D I R = ${ optix } "
2020-12-15 18:10:38 +00:00
" - D W I T H _ C Y C L E S _ C U D A _ B I N A R I E S = O N "
2020-12-14 08:41:47 +00:00
" - D W I T H _ C Y C L E S _ D E V I C E _ O P T I X = O N "
] ;
2008-05-14 13:39:20 +00:00
2024-02-26 05:31:04 +00:00
nativeBuildInputs =
[
cmake
llvmPackages . llvm . dev
makeWrapper
2024-03-05 13:42:30 +00:00
python3Packages . wrapPython
2024-02-26 05:31:04 +00:00
]
++ 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
2024-02-28 23:59:50 +00:00
pyPkgsOpenusd
2024-03-05 13:42:30 +00:00
python3
2024-02-26 05:31:04 +00:00
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 ;
2024-02-26 05:36:08 +00:00
pythonPath =
let
2024-03-05 13:42:30 +00:00
ps = python3Packages ;
2024-02-26 05:36:08 +00:00
in
[
ps . numpy
ps . requests
ps . zstandard
2024-02-28 23:59:50 +00:00
pyPkgsOpenusd
2024-02-26 05:36:08 +00:00
] ;
2012-09-19 20:41:15 +00:00
2020-02-28 18:55:13 +00:00
blenderExecutable =
2024-02-26 05:31:04 +00:00
placeholder " o u t "
+ ( if stdenv . isDarwin then " / A p p l i c a t i o n s / B l e n d e r . a p p / C o n t e n t s / M a c O S / B l e n d e r " else " / b i n / b l e n d e r " ) ;
postInstall =
lib . optionalString stdenv . isDarwin ''
mkdir $ out/Applications
mv $ out/Blender.app $ out/Applications
''
+ ''
2024-02-26 05:34:26 +00:00
mv $ out/share/blender / $ { lib . versions . majorMinor finalAttrs . version } /python { , - ext }
2024-02-26 05:31:04 +00:00
buildPythonPath " $ p y t h o n P a t h "
wrapProgram $ blenderExecutable \
- - prefix PATH : $ program_PATH \
- - prefix PYTHONPATH : " $ p r o g r a m _ P Y T H O N P A T H " \
- - add-flags ' - - python-use-system-env'
'' ;
2018-03-30 19:58:28 +00:00
2019-05-22 16:34:09 +00:00
# Set RUNPATH so that libcuda and libnvrtc in /run/opengl-driver(-32)/lib can be
# found. See the explanation in libglvnd.
2023-01-24 16:29:20 +00:00
postFixup = lib . optionalString cudaSupport ''
2019-05-22 16:34:09 +00:00
for program in $ out/bin/blender $ out/bin/.blender-wrapped ; do
isELF " $ p r o g r a m " || continue
addOpenGLRunpath " $ p r o g r a m "
done
'' ;
2023-09-27 04:13:56 +00:00
passthru = {
2024-03-05 13:42:30 +00:00
python = python3 ;
pythonPackages = python3Packages ;
2023-10-30 03:39:27 +00:00
2024-02-26 05:31:04 +00:00
withPackages =
f :
2024-03-04 00:40:04 +00:00
( callPackage ./wrapper.nix { } ) . override {
2024-02-26 05:31:04 +00:00
blender = finalAttrs . finalPackage ;
2024-03-05 13:42:30 +00:00
extraModules = ( f python3Packages ) ;
2024-02-26 05:31:04 +00:00
} ;
2023-09-27 04:13:56 +00:00
tests = {
2024-02-26 05:34:26 +00:00
render = runCommand " ${ finalAttrs . pname } - t e s t " { } ''
2023-09-27 04:13:56 +00:00
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 " T r u e " else " F a l s e " }:
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 " R e n d e r i n g w i t h $ e n g i n e . . . "
# Beware that argument order matters
$ { finalAttrs . finalPackage } /bin/blender \
- - background \
- noaudio \
- - factory-startup \
- - python-exit-code 1 \
- - python scene-config . py \
- - engine " $ e n g i n e " \
- - render-output " $ o u t / $ e n g i n e " \
- - render-frame 1
done
'' ;
} ;
} ;
2023-05-22 21:06:34 +00:00
2024-02-26 05:36:08 +00:00
meta = {
2010-05-08 21:25:56 +00:00
description = " 3 D C r e a t i o n / A n i m a t i o n / P u b l i s h i n g S y s t e m " ;
2020-03-14 00:12:28 +00:00
homepage = " h t t p s : / / w w w . b l e n d e r . o r g " ;
2010-05-08 21:25:56 +00:00
# They comment two licenses: GPLv2 and Blender License, but they
# say: "We've decided to cancel the BL offering for an indefinite period."
2020-12-15 18:25:32 +00:00
# OptiX, enabled with cudaSupport, is non-free.
2024-02-26 05:36:08 +00:00
license = with lib . licenses ; [ gpl2Plus ] ++ lib . optional cudaSupport unfree ;
2024-02-26 05:31:04 +00:00
platforms = [
" a a r c h 6 4 - l i n u x "
" x 8 6 _ 6 4 - d a r w i n "
" x 8 6 _ 6 4 - l i n u x "
] ;
2023-05-02 23:52:12 +00:00
broken = stdenv . isDarwin ;
2024-02-26 05:36:08 +00:00
maintainers = with lib . maintainers ; [
2024-02-26 05:31:04 +00:00
goibhniu
veprbl
] ;
2023-08-04 19:10:05 +00:00
mainProgram = " b l e n d e r " ;
2010-05-08 21:25:56 +00:00
} ;
2023-09-27 04:13:56 +00:00
} )