[Bf-blender-cvs] [29b6715ab0a] tmp-macs-arm-cycles: macOS: add Embree, OpenImageDenoise and sse2neon libraries for ARM

Brecht Van Lommel noreply at git.blender.org
Mon Feb 15 19:57:29 CET 2021


Commit: 29b6715ab0a972702c418577e67d7af204a6ed2a
Author: Brecht Van Lommel
Date:   Mon Feb 15 17:30:59 2021 +0100
Branches: tmp-macs-arm-cycles
https://developer.blender.org/rB29b6715ab0a972702c418577e67d7af204a6ed2a

macOS: add Embree, OpenImageDenoise and sse2neon libraries for ARM

This required using a fork of Embree, newer LLVM version, unreleased ISPC
version and sse2neon directly from Git. Hopefully over time all the required
changes end up in official releases. For now we deviate from other platforms.

Patch based on contributions by Apple and Stefan Werner.

Ref D9527, D8237, T78710

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

M	build_files/build_environment/CMakeLists.txt
M	build_files/build_environment/cmake/embree.cmake
M	build_files/build_environment/cmake/harvest.cmake
M	build_files/build_environment/cmake/ispc.cmake
M	build_files/build_environment/cmake/llvm.cmake
M	build_files/build_environment/cmake/openimagedenoise.cmake
A	build_files/build_environment/cmake/sse2neon.cmake
M	build_files/build_environment/cmake/versions.cmake
A	build_files/build_environment/patches/oidn.diff
M	build_files/cmake/Modules/FindEmbree.cmake
A	build_files/cmake/Modules/Findsse2neon.cmake
M	build_files/cmake/platform/platform_apple.cmake
M	intern/cycles/util/util_openimagedenoise.h
M	source/blender/compositor/operations/COM_DenoiseOperation.cpp

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

diff --git a/build_files/build_environment/CMakeLists.txt b/build_files/build_environment/CMakeLists.txt
index 8d6fd3ab4c3..0c06f176653 100644
--- a/build_files/build_environment/CMakeLists.txt
+++ b/build_files/build_environment/CMakeLists.txt
@@ -95,11 +95,9 @@ include(cmake/haru.cmake)
 # Boost needs to be included after python.cmake due to the PYTHON_BINARY variable being needed.
 include(cmake/boost.cmake)
 include(cmake/pugixml.cmake)
-if((NOT APPLE) OR ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "x86_64"))
-  include(cmake/ispc.cmake)
-  include(cmake/openimagedenoise.cmake)
-  include(cmake/embree.cmake)
-endif()
+include(cmake/ispc.cmake)
+include(cmake/openimagedenoise.cmake)
+include(cmake/embree.cmake)
 if(NOT APPLE)
   include(cmake/xr_openxr.cmake)
 endif()
@@ -109,6 +107,10 @@ include(cmake/expat.cmake)
 include(cmake/yamlcpp.cmake)
 include(cmake/opencolorio.cmake)
 
+if(APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64"))
+  include(cmake/sse2neon.cmake)
+endif()
+
 if(WITH_WEBP)
   include(cmake/webp.cmake)
 endif()
diff --git a/build_files/build_environment/cmake/embree.cmake b/build_files/build_environment/cmake/embree.cmake
index 66a86cd5dbd..86b8256f98f 100644
--- a/build_files/build_environment/cmake/embree.cmake
+++ b/build_files/build_environment/cmake/embree.cmake
@@ -29,6 +29,7 @@ set(EMBREE_EXTRA_ARGS
   -DEMBREE_MAX_ISA=AVX2
   -DEMBREE_TASKING_SYSTEM=TBB
   -DEMBREE_TBB_ROOT=${LIBDIR}/tbb
+  -DTBB_ROOT=${LIBDIR}/tbb
   -DTBB_STATIC_LIB=${TBB_STATIC_LIBRARY}
 )
 
@@ -46,15 +47,26 @@ else()
   set(EMBREE_BUILD_DIR)
 endif()
 
-ExternalProject_Add(external_embree
-  URL ${EMBREE_URI}
-  DOWNLOAD_DIR ${DOWNLOAD_DIR}
-  URL_HASH MD5=${EMBREE_HASH}
-  PREFIX ${BUILD_DIR}/embree
-  PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/embree/src/external_embree < ${PATCH_DIR}/embree.diff
-  CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/embree ${DEFAULT_CMAKE_FLAGS} ${EMBREE_EXTRA_ARGS}
-  INSTALL_DIR ${LIBDIR}/embree
-)
+if(APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64"))
+  ExternalProject_Add(external_embree
+    GIT_REPOSITORY ${EMBREE_ARM_GIT}
+    GIT_TAG "blender-arm"
+    DOWNLOAD_DIR ${DOWNLOAD_DIR}
+    PREFIX ${BUILD_DIR}/embree
+    CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/embree ${DEFAULT_CMAKE_FLAGS} ${EMBREE_EXTRA_ARGS}
+    INSTALL_DIR ${LIBDIR}/embree
+  )
+else()
+  ExternalProject_Add(external_embree
+    URL ${EMBREE_URI}
+    DOWNLOAD_DIR ${DOWNLOAD_DIR}
+    URL_HASH MD5=${EMBREE_HASH}
+    PREFIX ${BUILD_DIR}/embree
+    PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/embree/src/external_embree < ${PATCH_DIR}/embree.diff
+    CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/embree ${DEFAULT_CMAKE_FLAGS} ${EMBREE_EXTRA_ARGS}
+    INSTALL_DIR ${LIBDIR}/embree
+  )
+endif()
 
 add_dependencies(
   external_embree
diff --git a/build_files/build_environment/cmake/harvest.cmake b/build_files/build_environment/cmake/harvest.cmake
index 308cb77144c..93e6fbbf393 100644
--- a/build_files/build_environment/cmake/harvest.cmake
+++ b/build_files/build_environment/cmake/harvest.cmake
@@ -109,6 +109,9 @@ harvest(llvm/lib llvm/lib "libLLVM*.a")
 if(APPLE)
   harvest(openmp/lib openmp/lib "*")
   harvest(openmp/include openmp/include "*.h")
+  if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")
+    harvest(sse2neon sse2neon "*.h")
+  endif()
 endif()
 harvest(ogg/lib ffmpeg/lib "*.a")
 harvest(openal/include openal/include "*.h")
@@ -139,12 +142,10 @@ harvest(openimageio/bin openimageio/bin "maketx")
 harvest(openimageio/bin openimageio/bin "oiiotool")
 harvest(openimageio/include openimageio/include "*")
 harvest(openimageio/lib openimageio/lib "*.a")
-if((NOT APPLE) OR ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "x86_64"))
-  harvest(openimagedenoise/include openimagedenoise/include "*")
-  harvest(openimagedenoise/lib openimagedenoise/lib "*.a")
-  harvest(embree/include embree/include "*.h")
-  harvest(embree/lib embree/lib "*.a")
-endif()
+harvest(openimagedenoise/include openimagedenoise/include "*")
+harvest(openimagedenoise/lib openimagedenoise/lib "*.a")
+harvest(embree/include embree/include "*.h")
+harvest(embree/lib embree/lib "*.a")
 harvest(openjpeg/include/openjpeg-2.3 openjpeg/include "*.h")
 harvest(openjpeg/lib openjpeg/lib "*.a")
 harvest(opensubdiv/include opensubdiv/include "*.h")
diff --git a/build_files/build_environment/cmake/ispc.cmake b/build_files/build_environment/cmake/ispc.cmake
index 56c3cecae17..440f6e5bace 100644
--- a/build_files/build_environment/cmake/ispc.cmake
+++ b/build_files/build_environment/cmake/ispc.cmake
@@ -21,27 +21,31 @@ if(WIN32)
     -DFLEX_EXECUTABLE=${LIBDIR}/flexbison/win_flex.exe
     -DBISON_EXECUTABLE=${LIBDIR}/flexbison/win_bison.exe
     -DM4_EXECUTABLE=${DOWNLOAD_DIR}/mingw/mingw64/msys/1.0/bin/m4.exe
+    -DARM_ENABLED=Off
   )
 elseif(APPLE)
   # Use bison installed via Homebrew.
   # The one which comes which Xcode toolset is too old.
   if("${CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "arm64")
-    set(HOMEBREW_LOCATION "/opt/homebrew")
+    set(ISPC_EXTRA_ARGS_APPLE
+      -DBISON_EXECUTABLE=/opt/homebrew/opt/bison/bin/bison
+      -DARM_ENABLED=On
+    )
   else()
-    set(HOMEBREW_LOCATION "/usr/local")
+    set(ISPC_EXTRA_ARGS_APPLE
+      -DBISON_EXECUTABLE=/usr/local/opt/bison/bin/bison
+      -DARM_ENABLED=Off
+    )
   endif()
-  set(ISPC_EXTRA_ARGS_APPLE
-    -DBISON_EXECUTABLE=${HOMEBREW_LOCATION}/opt/bison/bin/bison
-  )
 elseif(UNIX)
   set(ISPC_EXTRA_ARGS_UNIX
     -DCMAKE_C_COMPILER=${LIBDIR}/clang/bin/clang
     -DCMAKE_CXX_COMPILER=${LIBDIR}/clang/bin/clang++
+    -DARM_ENABLED=Off
   )
 endif()
 
 set(ISPC_EXTRA_ARGS
-    -DARM_ENABLED=Off
     -DISPC_NO_DUMPS=On
     -DISPC_INCLUDE_EXAMPLES=Off
     -DISPC_INCLUDE_TESTS=Off
diff --git a/build_files/build_environment/cmake/llvm.cmake b/build_files/build_environment/cmake/llvm.cmake
index 8c9a6076068..a4c7ccd9e27 100644
--- a/build_files/build_environment/cmake/llvm.cmake
+++ b/build_files/build_environment/cmake/llvm.cmake
@@ -17,7 +17,7 @@
 # ***** END GPL LICENSE BLOCK *****
 
 if(APPLE AND "${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")
-  set(LLVM_TARGETS AArch64)
+  set(LLVM_TARGETS AArch64$<SEMICOLON>ARM)
 else()
   set(LLVM_TARGETS X86)
 endif()
diff --git a/build_files/build_environment/cmake/openimagedenoise.cmake b/build_files/build_environment/cmake/openimagedenoise.cmake
index 65f12199952..7947fc31470 100644
--- a/build_files/build_environment/cmake/openimagedenoise.cmake
+++ b/build_files/build_environment/cmake/openimagedenoise.cmake
@@ -45,6 +45,7 @@ ExternalProject_Add(external_openimagedenoise
   DOWNLOAD_DIR ${DOWNLOAD_DIR}
   URL_HASH MD5=${OIDN_HASH}
   PREFIX ${BUILD_DIR}/openimagedenoise
+  PATCH_COMMAND ${PATCH_CMD} -p 1 -N -d ${BUILD_DIR}/openimagedenoise/src/external_openimagedenoise < ${PATCH_DIR}/oidn.diff
   CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/openimagedenoise ${DEFAULT_CMAKE_FLAGS} ${OIDN_EXTRA_ARGS}
   INSTALL_DIR ${LIBDIR}/openimagedenoise
 )
diff --git a/build_files/build_environment/cmake/sse2neon.cmake b/build_files/build_environment/cmake/sse2neon.cmake
new file mode 100644
index 00000000000..dca2d94f913
--- /dev/null
+++ b/build_files/build_environment/cmake/sse2neon.cmake
@@ -0,0 +1,30 @@
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ***** END GPL LICENSE BLOCK *****
+
+if(APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64"))
+  ExternalProject_Add(external_sse2neon
+    GIT_REPOSITORY  ${SSE2NEON_GIT}
+    GIT_TAG ${SSE2NEON_GIT_HASH}
+    DOWNLOAD_DIR ${DOWNLOAD_DIR}
+    PREFIX ${BUILD_DIR}/sse2neon
+    CONFIGURE_COMMAND echo sse2neon - Nothing to configure
+    BUILD_COMMAND echo sse2neon - nothing to build
+    INSTALL_COMMAND mkdir -p ${LIBDIR}/sse2neon && cp ${BUILD_DIR}/sse2neon/src/external_sse2neon/sse2neon.h ${LIBDIR}/sse2neon
+    INSTALL_DIR ${LIBDIR}/sse2neon
+  )
+endif()
diff --git a/build_files/build_environment/cmake/versions.cmake b/build_files/build_environment/cmake/versions.cmake
index 4a879c793a1..361c9fd9843 100644
--- a/build_files/build_environment/cmake/versions.cmake
+++ b/build_files/build_environment/cmake/versions.cmake
@@ -113,18 +113,35 @@ set(OPENCOLORIO_VERSION 2.0.0)
 set(OPENCOLORIO_URI https://github.com/AcademySoftwareFoundation/OpenColorIO/archive/v${OPENCOLORIO_VERSION}.tar.gz)
 set(OPENCOLORIO_HASH 1a2e3478b6cd9a1549f24e1b2205e3f0)
 
-set(LLVM_VERSION 9.0.1)
-set(LLVM_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-${LLVM_VERSION}.src.tar.xz)
-set(LLVM_HASH 31eb9ce73dd2a0f8dcab8319fb03f8fc)
+if(APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64"))
+  # Newer version required by ISPC with arm support.
+  set(LLVM_VERSION 11.0.1)
+  set(LLVM_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-${LLVM_VERSION}.src.tar.xz)
+  set(LLVM_HASH 6ec7ae9fd43da9b87cda15b3ab9cc7af)
 
-set(CLANG_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/clang-${LLVM_VERSION}.src.tar.xz)
-set(CLANG_HASH 13468e4a44940efef1b75e8641752f90)
+  set(CLANG_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/clang-${LLVM_VERSION}.src.tar.xz)
+  set(CLANG_HASH b4cb0b74b1f3292a89c9720f3e1e2934)
 
-set(CLANG_TOOLS_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/clang-tools-extra-${LLVM_VERSION}.src.tar.xz)
-set(CLANG_TOOLS_HASH c76293870b564c6a7968622b475b7646)
+  set(CLANG_TOOLS_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSIO

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list