Skip to content
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

Blender darwin #307833

Merged
merged 9 commits into from
May 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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'
gador marked this conversation as resolved.
Show resolved Hide resolved
''
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"
gador marked this conversation as resolved.
Show resolved Hide resolved
"-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" ]
gador marked this conversation as resolved.
Show resolved Hide resolved
++ 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
gador marked this conversation as resolved.
Show resolved Hide resolved
"-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
gador marked this conversation as resolved.
Show resolved Hide resolved
'';

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
gador marked this conversation as resolved.
Show resolved Hide resolved
}:

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

src = fetchFromGitHub {
owner = "AcademySoftwareFoundation";
repo = "MaterialX";
rev = "v${version}";
sha256 = "sha256-/kMHmW2dptZNtjuhE5s+jvPRIdtY+FRiVtMU+tiBgQo=";
gador marked this conversation as resolved.
Show resolved Hide resolved
};

format = "other";

nativeBuildInputs = [
cmake
python3Packages.setuptools
];

buildInputs =
[
openimageio
imath
]
++ lib.optionals stdenv.isDarwin (
with darwin.apple_sdk.frameworks;
[
OpenGL
Cocoa
]
)
++ lib.optionals (!stdenv.isDarwin) [
gador marked this conversation as resolved.
Show resolved Hide resolved
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