From 007e90e8c0a9176e16e70861d87dc7f883cc78ba Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 18 Sep 2020 17:07:11 +0200 Subject: 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. --- build_files/cmake/Modules/FindEmbree.cmake | 2 +- build_files/cmake/platform/platform_apple.cmake | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) (limited to 'build_files') 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) -- cgit v1.2.3