diff options
-rw-r--r-- | CMakeLists.txt | 5 | ||||
-rw-r--r-- | build_files/build_environment/cmake/harvest.cmake | 4 | ||||
-rw-r--r-- | build_files/build_environment/cmake/openmp.cmake | 3 | ||||
-rw-r--r-- | build_files/cmake/platform/platform_apple.cmake | 21 | ||||
-rw-r--r-- | source/creator/CMakeLists.txt | 7 |
5 files changed, 32 insertions, 8 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 2341a535603..a71677c0308 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1177,7 +1177,10 @@ endif() #----------------------------------------------------------------------------- # Configure OpenMP. if(WITH_OPENMP) - find_package(OpenMP) + if(NOT OPENMP_CUSTOM) + find_package(OpenMP) + endif() + if(OPENMP_FOUND) if(NOT WITH_OPENMP_STATIC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") diff --git a/build_files/build_environment/cmake/harvest.cmake b/build_files/build_environment/cmake/harvest.cmake index d79d91f2b90..a281eb900e3 100644 --- a/build_files/build_environment/cmake/harvest.cmake +++ b/build_files/build_environment/cmake/harvest.cmake @@ -131,6 +131,10 @@ harvest(lame/lib ffmpeg/lib "*.a") harvest(clang/bin llvm/bin "clang-format") harvest(llvm/bin llvm/bin "llvm-config") harvest(llvm/lib llvm/lib "libLLVM*.a") +if(APPLE) + harvest(openmp/lib openmp/lib "*") + harvest(openmp/include openmp/include "*.h") +endif() harvest(ogg/lib ffmpeg/lib "*.a") harvest(openal/include openal/include "*.h") if(UNIX AND NOT APPLE) diff --git a/build_files/build_environment/cmake/openmp.cmake b/build_files/build_environment/cmake/openmp.cmake index ba8e6248126..d8224020ecf 100644 --- a/build_files/build_environment/cmake/openmp.cmake +++ b/build_files/build_environment/cmake/openmp.cmake @@ -23,7 +23,8 @@ ExternalProject_Add(external_openmp URL_HASH MD5=${OPENMP_HASH} PREFIX ${BUILD_DIR}/openmp CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/openmp ${DEFAULT_CMAKE_FLAGS} - INSTALL_DIR ${LIBDIR}/clang + INSTALL_COMMAND cd ${BUILD_DIR}/openmp/src/external_openmp-build && install_name_tool -id '@executable_path/../Resources/lib/libomp.dylib' runtime/src/libomp.dylib && make install + INSTALL_PATH ${LIBDIR}/openmp ) add_dependencies( diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake/platform/platform_apple.cmake index 4e78737fd9e..1b3b844642e 100644 --- a/build_files/cmake/platform/platform_apple.cmake +++ b/build_files/cmake/platform/platform_apple.cmake @@ -383,13 +383,22 @@ if(WITH_CYCLES_EMBREE) set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -Xlinker -stack_size -Xlinker 0x100000") endif() +# CMake FindOpenMP doesn't know about AppleClang before 3.12, so provide custom flags. if(WITH_OPENMP) - execute_process(COMMAND ${CMAKE_C_COMPILER} --version OUTPUT_VARIABLE COMPILER_VENDOR) - string(SUBSTRING "${COMPILER_VENDOR}" 0 5 VENDOR_NAME) # truncate output - if(${VENDOR_NAME} MATCHES "Apple") # Apple does not support OpenMP reliable with gcc and not with clang - set(WITH_OPENMP OFF) - else() # vanilla gcc or clang_omp support OpenMP - message(STATUS "Using special OpenMP enabled compiler !") # letting find_package(OpenMP) module work for gcc + if(CMAKE_C_COMPILER_ID MATCHES "AppleClang" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "7.0") + # Use OpenMP from our precompiled libraries. + message(STATUS "Using ${LIBDIR}/openmp for OpenMP") + set(OPENMP_CUSTOM ON) + set(OPENMP_FOUND ON) + set(OpenMP_C_FLAGS "-Xclang -fopenmp -I${LIBDIR}/openmp/include") + set(OpenMP_CXX_FLAGS "-Xclang -fopenmp -I${LIBDIR}/openmp/include") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${LIBDIR}/openmp/lib -lomp") + + # Copy libomp.dylib to allow executables like datatoc to work. + execute_process( + COMMAND mkdir -p ${CMAKE_BINARY_DIR}/Resources/lib + COMMAND cp -p ${LIBDIR}/openmp/lib/libomp.dylib ${CMAKE_BINARY_DIR}/Resources/lib/libomp.dylib + ) endif() endif() diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index a553b8a569b..d2255bbd894 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -914,6 +914,13 @@ elseif(APPLE) blender.app/Contents/ ) + if(WITH_OPENMP AND OPENMP_CUSTOM) + install( + FILES ${LIBDIR}/openmp/lib/libomp.dylib + DESTINATION blender.app/Contents/Resources/lib + ) + endif() + if(WITH_LLVM AND NOT LLVM_STATIC) install( FILES ${LIBDIR}/llvm/lib/libLLVM-3.4.dylib |