[Bf-blender-cvs] [007e90e8c0a] master: Fix T78793, T79707: Cycles crash on macOS with older CPUs

Brecht Van Lommel noreply at git.blender.org
Fri Sep 18 18:13:41 CEST 2020


Commit: 007e90e8c0a9176e16e70861d87dc7f883cc78ba
Author: Brecht Van Lommel
Date:   Fri Sep 18 17:07:11 2020 +0200
Branches: master
https://developer.blender.org/rB007e90e8c0a9176e16e70861d87dc7f883cc78ba

Fix T78793, T79707: Cycles crash on macOS with older CPUs

Embree static libraries need additional linking flags to avoid SSE and
AVX symbols getting mixed up.

===================================================================

M	build_files/cmake/Modules/FindEmbree.cmake
M	build_files/cmake/platform/platform_apple.cmake

===================================================================

diff --git a/build_files/cmake/Modules/FindEmbree.cmake b/build_files/cmake/Modules/FindEmbree.cmake
index 2b3cd8e20c4..bc82d5c333a 100644
--- a/build_files/cmake/Modules/FindEmbree.cmake
+++ b/build_files/cmake/Modules/FindEmbree.cmake
@@ -37,9 +37,9 @@ FIND_PATH(EMBREE_INCLUDE_DIR
 
 SET(_embree_FIND_COMPONENTS
   embree3
+  embree_sse42
   embree_avx
   embree_avx2
-  embree_sse42
   lexers
   math
   simd
diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake/platform/platform_apple.cmake
index 11628da39a7..6bcb3ef5d8c 100644
--- a/build_files/cmake/platform/platform_apple.cmake
+++ b/build_files/cmake/platform/platform_apple.cmake
@@ -392,6 +392,16 @@ endif()
 if(WITH_CYCLES_EMBREE)
   find_package(Embree 3.8.0 REQUIRED)
   set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -Xlinker -stack_size -Xlinker 0x100000")
+
+  # Embree static library linking can mix up SSE and AVX symbols, causing
+  # crashes on macOS systems with older CPUs that don't have AVX. Using
+  # force load avoids that. The Embree shared library does not suffer from
+  # this problem, precisely because linking a shared library uses force load.
+  set(_embree_libraries_force_load)
+  foreach(_embree_library ${EMBREE_LIBRARIES})
+    list(APPEND _embree_libraries_force_load "-Wl,-force_load,${_embree_library}")
+  endforeach()
+  set(EMBREE_LIBRARIES ${_embree_libraries_force_load})
 endif()
 
 if(WITH_OPENIMAGEDENOISE)



More information about the Bf-blender-cvs mailing list