mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-22 06:53:01 +00:00
blender: un-break darwin
currently builds on aarch64-darwin, but not on x86_64-darwin. Blender (specifically the ghost window library) depends on "metal" on apple devices. (For details see source/intern/ghost/intern/GHOST_System.cc line 416ff) It cannot build without it. Metal support should be introduced by apple sdk 11_1 (?) onward. Once this has been updated in nixpkgs, this derivation can be revised. Signed-off-by: Florian Brandes <florian.brandes@posteo.de> Co-authored-by: Alexis Hildebrandt <afh@surryhill.net>
This commit is contained in:
parent
eb5f1e64f3
commit
b9ca769194
@ -1,27 +1,25 @@
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -1894,7 +1894,7 @@ if(WITH_COMPILER_SHORT_FILE_MACRO)
|
||||
ADD_CHECK_CXX_COMPILER_FLAG(CXX_PREFIX_MAP_FLAGS CXX_MACRO_PREFIX_MAP -fmacro-prefix-map=foo=bar)
|
||||
--- a/CMakeLists.txt 2024-03-01 08:08:05
|
||||
+++ b/CMakeLists.txt 2024-04-24 15:45:30
|
||||
@@ -2134,7 +2134,7 @@
|
||||
)
|
||||
if(C_MACRO_PREFIX_MAP AND CXX_MACRO_PREFIX_MAP)
|
||||
if(APPLE)
|
||||
- if(XCODE AND ${XCODE_VERSION} VERSION_LESS 12.0)
|
||||
+ if(FALSE)
|
||||
# Developers may have say LLVM Clang-10.0.1 toolchain (which supports the flag)
|
||||
# with Xcode-11 (the Clang of which doesn't support the flag).
|
||||
message(WARNING
|
||||
diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake/platform/platform_apple.cmake
|
||||
--- a/build_files/cmake/platform/platform_apple.cmake
|
||||
+++ b/build_files/cmake/platform/platform_apple.cmake
|
||||
@@ -60,7 +60,6 @@ else()
|
||||
message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}")
|
||||
message(
|
||||
--- a/build_files/cmake/platform/platform_apple.cmake 2024-02-22 15:31:36
|
||||
+++ b/build_files/cmake/platform/platform_apple.cmake 2024-04-24 16:06:13
|
||||
@@ -55,7 +55,6 @@
|
||||
endif()
|
||||
endif()
|
||||
if(NOT EXISTS "${LIBDIR}/")
|
||||
if(NOT EXISTS "${LIBDIR}/.git")
|
||||
- message(FATAL_ERROR "Mac OSX requires pre-compiled libs at: '${LIBDIR}'")
|
||||
endif()
|
||||
|
||||
# Prefer lib directory paths
|
||||
@@ -98,10 +97,6 @@ if(WITH_CODEC_SNDFILE)
|
||||
if(FIRST_RUN)
|
||||
message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}")
|
||||
@@ -115,10 +114,6 @@
|
||||
find_library(_sndfile_VORBIS_LIBRARY NAMES vorbis HINTS ${LIBDIR}/ffmpeg/lib)
|
||||
find_library(_sndfile_VORBISENC_LIBRARY NAMES vorbisenc HINTS ${LIBDIR}/ffmpeg/lib)
|
||||
list(APPEND LIBSNDFILE_LIBRARIES
|
||||
@ -32,44 +30,26 @@ diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake
|
||||
)
|
||||
|
||||
print_found_status("SndFile libraries" "${LIBSNDFILE_LIBRARIES}")
|
||||
@@ -118,7 +113,7 @@ if(WITH_PYTHON)
|
||||
# Normally cached but not since we include them with blender.
|
||||
set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}")
|
||||
set(PYTHON_EXECUTABLE "${LIBDIR}/python/bin/python${PYTHON_VERSION}")
|
||||
- set(PYTHON_LIBRARY ${LIBDIR}/python/lib/libpython${PYTHON_VERSION}.a)
|
||||
+ set(PYTHON_LIBRARY ${LIBDIR}/python/lib/libpython${PYTHON_VERSION}.dylib)
|
||||
set(PYTHON_LIBPATH "${LIBDIR}/python/lib/python${PYTHON_VERSION}")
|
||||
else()
|
||||
# Module must be compiled against Python framework.
|
||||
@@ -147,7 +142,7 @@ endif()
|
||||
|
||||
# FreeType compiled with Brotli compression for woff2.
|
||||
find_package(Freetype REQUIRED)
|
||||
-list(APPEND FREETYPE_LIBRARIES
|
||||
+message(TRACE APPEND FREETYPE_LIBRARIES
|
||||
${LIBDIR}/brotli/lib/libbrotlicommon-static.a
|
||||
${LIBDIR}/brotli/lib/libbrotlidec-static.a)
|
||||
|
||||
@@ -159,9 +154,7 @@ if(WITH_CODEC_FFMPEG)
|
||||
@@ -162,9 +157,7 @@
|
||||
set(FFMPEG_ROOT_DIR ${LIBDIR}/ffmpeg)
|
||||
set(FFMPEG_FIND_COMPONENTS
|
||||
avcodec avdevice avformat avutil
|
||||
- mp3lame ogg opus swresample swscale
|
||||
- theora theoradec theoraenc vorbis vorbisenc
|
||||
- vorbisfile vpx x264 xvidcore)
|
||||
+ swresample swscale)
|
||||
- vorbisfile vpx x264)
|
||||
+ swresample swscale)
|
||||
if(EXISTS ${LIBDIR}/ffmpeg/lib/libaom.a)
|
||||
list(APPEND FFMPEG_FIND_COMPONENTS aom)
|
||||
endif()
|
||||
@@ -273,7 +266,6 @@ if(WITH_BOOST)
|
||||
endif()
|
||||
@@ -275,7 +268,6 @@
|
||||
add_bundled_libraries(boost/lib)
|
||||
|
||||
if(WITH_INTERNATIONAL OR WITH_CODEC_FFMPEG)
|
||||
- string(APPEND PLATFORM_LINKFLAGS " -liconv") # boost_locale and ffmpeg needs it !
|
||||
endif()
|
||||
|
||||
if(WITH_PUGIXML)
|
||||
@@ -402,7 +394,7 @@ endif()
|
||||
@@ -350,7 +342,7 @@
|
||||
|
||||
# CMake FindOpenMP doesn't know about AppleClang before 3.12, so provide custom flags.
|
||||
if(WITH_OPENMP)
|
||||
@ -78,3 +58,12 @@ diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake
|
||||
# Use OpenMP from our precompiled libraries.
|
||||
message(STATUS "Using ${LIBDIR}/openmp for OpenMP")
|
||||
set(OPENMP_CUSTOM ON)
|
||||
@@ -427,7 +419,7 @@
|
||||
" -Wl,-unexported_symbols_list,'${PLATFORM_SYMBOLS_MAP}'"
|
||||
)
|
||||
|
||||
-if(${XCODE_VERSION} VERSION_GREATER_EQUAL 15.0)
|
||||
+if(FALSE)
|
||||
if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "x86_64")
|
||||
# Silence "no platform load command found in <static library>, assuming: macOS".
|
||||
string(APPEND PLATFORM_LINKFLAGS " -Wl,-ld_classic")
|
||||
|
@ -8,12 +8,14 @@
|
||||
addOpenGLRunpath,
|
||||
alembic,
|
||||
boost,
|
||||
brotli,
|
||||
callPackage,
|
||||
cmake,
|
||||
colladaSupport ? true,
|
||||
config,
|
||||
cudaPackages,
|
||||
cudaSupport ? config.cudaSupport,
|
||||
darwin,
|
||||
dbus,
|
||||
embree,
|
||||
fetchurl,
|
||||
@ -71,6 +73,7 @@
|
||||
rocmPackages, # comes with a significantly larger closure size
|
||||
runCommand,
|
||||
spaceNavSupport ? stdenv.isLinux,
|
||||
sse2neon,
|
||||
stdenv,
|
||||
tbb,
|
||||
wayland,
|
||||
@ -114,15 +117,13 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
''
|
||||
: > build_files/cmake/platform/platform_apple_xcode.cmake
|
||||
substituteInPlace source/creator/CMakeLists.txt \
|
||||
--replace '${"$"}{LIBDIR}/python' \
|
||||
--replace-fail '${"$"}{LIBDIR}/python' \
|
||||
'${python3}'
|
||||
substituteInPlace build_files/cmake/platform/platform_apple.cmake \
|
||||
--replace '${"$"}{LIBDIR}/python' \
|
||||
'${python3}' \
|
||||
--replace '${"$"}{LIBDIR}/opencollada' \
|
||||
'${opencollada}' \
|
||||
--replace '${"$"}{PYTHON_LIBPATH}/site-packages/numpy' \
|
||||
'${python3Packages.numpy}/${python3.sitePackages}/numpy'
|
||||
--replace-fail '${"$"}{LIBDIR}/brotli/lib/libbrotlicommon-static.a' \
|
||||
'${lib.getLib brotli}/lib/libbrotlicommon.dylib' \
|
||||
--replace-fail '${"$"}{LIBDIR}/brotli/lib/libbrotlidec-static.a' \
|
||||
'${lib.getLib brotli}/lib/libbrotlidec.dylib'
|
||||
''
|
||||
else
|
||||
''
|
||||
@ -164,7 +165,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
|
||||
# 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"
|
||||
"-DALEMBIC_LIBRARY=${lib.getLib alembic}/lib/libAlembic${stdenv.hostPlatform.extensions.sharedLibrary}"
|
||||
]
|
||||
++ lib.optionals waylandSupport [
|
||||
"-DWITH_GHOST_WAYLAND=ON"
|
||||
@ -172,11 +173,12 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
"-DWITH_GHOST_WAYLAND_DYNLOAD=OFF"
|
||||
"-DWITH_GHOST_WAYLAND_LIBDECOR=ON"
|
||||
]
|
||||
++ lib.optionals stdenv.hostPlatform.isAarch64 [ "-DWITH_CYCLES_EMBREE=OFF" ]
|
||||
++ lib.optionals (stdenv.hostPlatform.isAarch64 && stdenv.hostPlatform.isLinux) [ "-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
|
||||
"-DWITH_CYCLES_OSL=OFF" # causes segfault on aarch64-darwin
|
||||
"-DSSE2NEON_INCLUDE_DIR=${sse2neon}/lib"
|
||||
"-DWITH_USD=OFF" # currently fails on darwin
|
||||
]
|
||||
++ lib.optional stdenv.cc.isClang "-DPYTHON_LINKFLAGS=" # Clang doesn't support "-export-dynamic"
|
||||
++ lib.optional jackaudioSupport "-DWITH_JACK=ON"
|
||||
@ -225,15 +227,15 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
openjpeg
|
||||
openpgl
|
||||
(opensubdiv.override { inherit cudaSupport; })
|
||||
openvdb
|
||||
potrace
|
||||
pugixml
|
||||
pyPkgsOpenusd
|
||||
python3
|
||||
tbb
|
||||
zlib
|
||||
zstd
|
||||
]
|
||||
++ lib.optionals (!stdenv.isAarch64) [
|
||||
++ lib.optionals (!stdenv.isAarch64 && stdenv.isLinux) [
|
||||
embree
|
||||
(openimagedenoise.override { inherit cudaSupport; })
|
||||
]
|
||||
@ -248,8 +250,8 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
libXrender
|
||||
libXxf86vm
|
||||
openal
|
||||
openvdb # OpenVDB currently doesn't build on darwin
|
||||
openxr-loader
|
||||
pyPkgsOpenusd
|
||||
]
|
||||
else
|
||||
[
|
||||
@ -259,7 +261,11 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
OpenAL
|
||||
OpenGL
|
||||
SDL
|
||||
brotli
|
||||
embree
|
||||
llvmPackages.openmp
|
||||
(openimagedenoise.override { inherit cudaSupport; })
|
||||
sse2neon
|
||||
]
|
||||
)
|
||||
++ lib.optionals cudaSupport [ cudaPackages.cuda_cudart ]
|
||||
@ -283,8 +289,8 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
ps.numpy
|
||||
ps.requests
|
||||
ps.zstandard
|
||||
pyPkgsOpenusd
|
||||
];
|
||||
]
|
||||
++ lib.optionals (!stdenv.isDarwin) [ pyPkgsOpenusd ];
|
||||
|
||||
blenderExecutable =
|
||||
placeholder "out"
|
||||
@ -295,8 +301,10 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
mkdir $out/Applications
|
||||
mv $out/Blender.app $out/Applications
|
||||
''
|
||||
+ ''
|
||||
+ lib.optionalString stdenv.isLinux ''
|
||||
mv $out/share/blender/${lib.versions.majorMinor finalAttrs.version}/python{,-ext}
|
||||
''
|
||||
+ ''
|
||||
buildPythonPath "$pythonPath"
|
||||
wrapProgram $blenderExecutable \
|
||||
--prefix PATH : $program_PATH \
|
||||
@ -311,6 +319,9 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
isELF "$program" || continue
|
||||
addOpenGLRunpath "$program"
|
||||
done
|
||||
''
|
||||
+ lib.optionalString stdenv.isDarwin ''
|
||||
makeWrapper $out/Applications/Blender.app/Contents/MacOS/Blender $out/bin/blender
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
@ -327,15 +338,13 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
tests = {
|
||||
render = runCommand "${finalAttrs.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"}:
|
||||
if ${if (stdenv.isAarch64 && stdenv.isLinux) 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
|
||||
@ -347,7 +356,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
for engine in BLENDER_EEVEE CYCLES; do
|
||||
echo "Rendering with $engine..."
|
||||
# Beware that argument order matters
|
||||
${finalAttrs.finalPackage}/bin/blender \
|
||||
${lib.getExe finalAttrs.finalPackage} \
|
||||
--background \
|
||||
-noaudio \
|
||||
--factory-startup \
|
||||
@ -372,8 +381,10 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
"aarch64-linux"
|
||||
"x86_64-darwin"
|
||||
"x86_64-linux"
|
||||
"aarch64-darwin"
|
||||
];
|
||||
broken = stdenv.isDarwin;
|
||||
# the current apple sdk is too old (currently 11_0) and fails to build "metal" on x86_64-darwin
|
||||
broken = stdenv.hostPlatform.system == "x86_64-darwin";
|
||||
maintainers = with lib.maintainers; [
|
||||
goibhniu
|
||||
veprbl
|
||||
|
Loading…
Reference in New Issue
Block a user