From ad31b13f91e40b40d75222923ac48f6682476b0c Mon Sep 17 00:00:00 2001 From: Ankit Meel Date: Sat, 27 Mar 2021 01:08:51 +0530 Subject: [PATCH] macOS/bpy: add support for OpenMP Changes made: * Add OpenMP linker flags. * Copy the libomp.dylib to `2.93/lib/libomp.dylib`. * Change the `LC_LOAD_DYLIB` item such that the lib is found at `bpy.so/../../Resources/2.93/lib/libomp.dylib`. Installation is done by D10664. Reviewed By: #platform_macos, brecht Maniphest Tasks: T86579 Differential Revision: https://developer.blender.org/D10657 --- CMakeLists.txt | 1 + source/creator/CMakeLists.txt | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2743d2d334c..4d224eaf46c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1235,6 +1235,7 @@ if(WITH_OPENMP) string(APPEND CMAKE_C_FLAGS " ${OpenMP_C_FLAGS}") string(APPEND CMAKE_CXX_FLAGS " ${OpenMP_CXX_FLAGS}") string(APPEND CMAKE_EXE_LINKER_FLAGS " ${OpenMP_LINKER_FLAGS}") + string(APPEND CMAKE_MODULE_LINKER_FLAGS " ${OpenMP_LINKER_FLAGS}") else() # Typically avoid adding flags as defines but we can't # pass OpenMP flags to the linker for static builds, meaning diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index c7b940d0012..07bc1d5d83d 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -1005,6 +1005,24 @@ elseif(APPLE) FILES ${LIBDIR}/openmp/lib/libomp.dylib DESTINATION Blender.app/Contents/Resources/lib ) + if(WITH_PYTHON_MODULE) + # Move the dylib in a Blender version folder to keep the corresponding OpenMP version. + # Also for easy copying of a single folder, `TARGETDIR_VER` to site-packages + # during installation. + install( + DIRECTORY ${CMAKE_BINARY_DIR}/Resources/lib + DESTINATION ${TARGETDIR_VER} + ) + add_custom_command(TARGET blender POST_BUILD + # The old `LC_LOAD_DYLIB` is the `LC_ID_DYLIB` of the LIBDIR OpenMP dylib. + # Change it to support multiple rpaths. + COMMAND xcrun install_name_tool -change "@executable_path/../Resources/lib/libomp.dylib" "@rpath/libomp.dylib" "$" + # For installation into site-packages. + COMMAND xcrun install_name_tool -add_rpath "@loader_path/../Resources/${TARGETDIR_VER}/lib" "$" + # For in-build-folder experiments. + COMMAND xcrun install_name_tool -add_rpath "@loader_path/${TARGETDIR_VER}/lib" "$" + ) + endif() endif() if(WITH_LLVM AND NOT LLVM_STATIC)