Skip to content

Commit

Permalink
Merge pull request #307833 from gador/blender-darwin
Browse files Browse the repository at this point in the history
Blender darwin
  • Loading branch information
veprbl authored May 13, 2024
2 parents a8a3cf5 + 4428608 commit 7bfa087
Show file tree
Hide file tree
Showing 8 changed files with 217 additions and 70 deletions.
67 changes: 28 additions & 39 deletions pkgs/applications/misc/blender/darwin.patch
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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)
Expand All @@ -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")
62 changes: 39 additions & 23 deletions pkgs/applications/misc/blender/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@
addOpenGLRunpath,
alembic,
boost,
brotli,
callPackage,
cmake,
colladaSupport ? true,
config,
cudaPackages,
cudaSupport ? config.cudaSupport,
darwin,
dbus,
embree,
fetchurl,
Expand Down Expand Up @@ -51,6 +53,7 @@
libxkbcommon,
llvmPackages,
makeWrapper,
materialx,
mesa,
ocl-icd,
openal,
Expand All @@ -71,6 +74,7 @@
rocmPackages, # comes with a significantly larger closure size
runCommand,
spaceNavSupport ? stdenv.isLinux,
sse2neon,
stdenv,
tbb,
wayland,
Expand Down Expand Up @@ -114,15 +118,14 @@ stdenv.mkDerivation (finalAttrs: {
''
: > build_files/cmake/platform/platform_apple_xcode.cmake
substituteInPlace source/creator/CMakeLists.txt \
--replace '${"$"}{LIBDIR}/python' \
'${python3}'
substituteInPlace build_files/cmake/platform/platform_apple.cmake \
--replace '${"$"}{LIBDIR}/python' \
--replace-fail '${"$"}{LIBDIR}/python' \
'${python3}' \
--replace '${"$"}{LIBDIR}/opencollada' \
'${opencollada}' \
--replace '${"$"}{PYTHON_LIBPATH}/site-packages/numpy' \
'${python3Packages.numpy}/${python3.sitePackages}/numpy'
--replace-fail '${"$"}{LIBDIR}/materialx/' '${materialx}/'
substituteInPlace build_files/cmake/platform/platform_apple.cmake \
--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
''
Expand Down Expand Up @@ -150,6 +153,7 @@ stdenv.mkDerivation (finalAttrs: {
"-DWITH_FFTW3=ON"
"-DWITH_IMAGE_OPENJPEG=ON"
"-DWITH_INSTALL_PORTABLE=OFF"
"-DMaterialX_DIR=${materialx}/lib/cmake/MaterialX"
"-DWITH_MOD_OCEANSIM=ON"
"-DWITH_OPENCOLLADA=${if colladaSupport then "ON" else "OFF"}"
"-DWITH_OPENCOLORIO=ON"
Expand All @@ -164,19 +168,20 @@ 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"
"-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.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"
Expand Down Expand Up @@ -219,21 +224,22 @@ stdenv.mkDerivation (finalAttrs: {
libsndfile
libtiff
libwebp
materialx
opencolorio
openexr
openimageio
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; })
]
Expand All @@ -248,8 +254,8 @@ stdenv.mkDerivation (finalAttrs: {
libXrender
libXxf86vm
openal
openvdb # OpenVDB currently doesn't build on darwin
openxr-loader
pyPkgsOpenusd
]
else
[
Expand All @@ -259,7 +265,11 @@ stdenv.mkDerivation (finalAttrs: {
OpenAL
OpenGL
SDL
brotli
embree
llvmPackages.openmp
(openimagedenoise.override { inherit cudaSupport; })
sse2neon
]
)
++ lib.optionals cudaSupport [ cudaPackages.cuda_cudart ]
Expand All @@ -280,11 +290,12 @@ stdenv.mkDerivation (finalAttrs: {
ps = python3Packages;
in
[
materialx
ps.numpy
ps.requests
ps.zstandard
pyPkgsOpenusd
];
]
++ lib.optionals (!stdenv.isDarwin) [ pyPkgsOpenusd ];

blenderExecutable =
placeholder "out"
Expand All @@ -295,8 +306,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 \
Expand All @@ -311,6 +324,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 = {
Expand All @@ -327,15 +343,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
Expand All @@ -347,7 +361,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 \
Expand All @@ -372,8 +386,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
Expand Down
76 changes: 76 additions & 0 deletions pkgs/by-name/ma/materialx/package.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
{
lib,
stdenv,
fetchFromGitHub,
cmake,
darwin,
libX11,
libXt,
libGL,
openimageio,
imath,
python3Packages,
python3
}:

python3Packages.buildPythonPackage rec {
pname = "materialx";
version = "1.38.10";

src = fetchFromGitHub {
owner = "AcademySoftwareFoundation";
repo = "MaterialX";
rev = "v${version}";
sha256 = "sha256-/kMHmW2dptZNtjuhE5s+jvPRIdtY+FRiVtMU+tiBgQo=";
};

format = "other";

nativeBuildInputs = [
cmake
python3Packages.setuptools
];

buildInputs =
[
openimageio
imath
]
++ lib.optionals stdenv.isDarwin (
with darwin.apple_sdk.frameworks;
[
OpenGL
Cocoa
]
)
++ lib.optionals (!stdenv.isDarwin) [
libX11
libXt
libGL
];

cmakeFlags = [
(lib.cmakeBool "MATERIALX_BUILD_OIIO" true)
(lib.cmakeBool "MATERIALX_BUILD_PYTHON" true)
# don't build MSL shader back-end on x86_x64-darwin, as it requires a newer SDK with metal support
(lib.cmakeBool "MATERIALX_BUILD_GEN_MSL" (stdenv.isLinux || (stdenv.isAarch64 && stdenv.isDarwin)))
];

pythonImportsCheck = [ "MaterialX" ];

postInstall = ''
# Make python lib properly accessible
target_dir=$out/${python3.sitePackages}
mkdir -p $(dirname $target_dir)
# required for cmake to find the bindings, when included in other projects
ln -s $out/python $target_dir
'';

meta = {
description = "Open standard for representing rich material and look-development content in computer graphics";
homepage = "https://materialx.org";
maintainers = [ lib.maintainers.gador ];
platforms = lib.platforms.unix;
license = lib.licenses.mpl20;
};
}
Loading

0 comments on commit 7bfa087

Please sign in to comment.