macOS: add support for OpenMP, making smoke/fluid/cloth simulations faster.
[blender.git] / build_files / cmake / platform / platform_apple.cmake
index 4e78737..1b3b844 100644 (file)
@@ -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()