Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'build_files')
-rw-r--r--build_files/build_environment/CMakeLists.txt18
-rw-r--r--build_files/build_environment/cmake/alembic.cmake1
-rw-r--r--build_files/build_environment/cmake/aom.cmake45
-rw-r--r--build_files/build_environment/cmake/check_software.cmake19
-rw-r--r--build_files/build_environment/cmake/download.cmake19
-rw-r--r--build_files/build_environment/cmake/dpcpp.cmake109
-rw-r--r--build_files/build_environment/cmake/dpcpp_deps.cmake61
-rw-r--r--build_files/build_environment/cmake/embree.cmake23
-rw-r--r--build_files/build_environment/cmake/epoxy.cmake25
-rw-r--r--build_files/build_environment/cmake/ffmpeg.cmake8
-rw-r--r--build_files/build_environment/cmake/glew.cmake16
-rw-r--r--build_files/build_environment/cmake/gmmlib.cmake13
-rw-r--r--build_files/build_environment/cmake/harvest.cmake23
-rw-r--r--build_files/build_environment/cmake/igc.cmake126
-rw-r--r--build_files/build_environment/cmake/ispc.cmake6
-rw-r--r--build_files/build_environment/cmake/llvm.cmake8
-rw-r--r--build_files/build_environment/cmake/macros.cmake18
-rw-r--r--build_files/build_environment/cmake/ocloc.cmake24
-rw-r--r--build_files/build_environment/cmake/openimagedenoise.cmake2
-rw-r--r--build_files/build_environment/cmake/openimageio.cmake8
-rw-r--r--build_files/build_environment/cmake/options.cmake2
-rw-r--r--build_files/build_environment/cmake/python.cmake1
-rw-r--r--build_files/build_environment/cmake/sse2neon.cmake4
-rw-r--r--build_files/build_environment/cmake/tiff.cmake16
-rw-r--r--build_files/build_environment/cmake/versions.cmake174
-rw-r--r--build_files/build_environment/cmake/vpx.cmake28
-rwxr-xr-xbuild_files/build_environment/install_deps.sh213
-rw-r--r--build_files/build_environment/patches/cmakelists_glew.txt2
-rw-r--r--build_files/build_environment/patches/dpcpp.diff36
-rw-r--r--build_files/build_environment/patches/embree.diff65
-rw-r--r--build_files/build_environment/patches/epoxy.diff19
-rw-r--r--build_files/build_environment/patches/igc_opencl_clang.diff44
-rw-r--r--build_files/build_environment/patches/python_windows.diff24
-rw-r--r--build_files/build_environment/patches/vpx_windows.diff11
-rw-r--r--build_files/cmake/Modules/FindEpoxy.cmake47
-rw-r--r--build_files/cmake/Modules/FindGLEW.cmake58
-rw-r--r--build_files/cmake/Modules/FindLevelZero.cmake56
-rw-r--r--build_files/cmake/Modules/FindLibEpoxy.cmake47
-rw-r--r--build_files/cmake/Modules/FindOpenGLES.cmake80
-rw-r--r--build_files/cmake/Modules/FindSYCL.cmake88
-rw-r--r--build_files/cmake/cmake_static_check_cppcheck.py61
-rw-r--r--build_files/cmake/config/blender_full.cmake2
-rw-r--r--build_files/cmake/config/blender_lite.cmake3
-rw-r--r--build_files/cmake/config/blender_release.cmake6
-rw-r--r--build_files/cmake/have_features.cmake33
-rw-r--r--build_files/cmake/platform/platform_apple.cmake52
-rw-r--r--build_files/cmake/platform/platform_unix.cmake171
-rw-r--r--build_files/cmake/platform/platform_win32.cmake50
-rw-r--r--build_files/config/pipeline_config.yaml2
-rwxr-xr-xbuild_files/utils/make_update.py3
50 files changed, 1522 insertions, 448 deletions
diff --git a/build_files/build_environment/CMakeLists.txt b/build_files/build_environment/CMakeLists.txt
index b63e86a3ac2..ee8a9a26c53 100644
--- a/build_files/build_environment/CMakeLists.txt
+++ b/build_files/build_environment/CMakeLists.txt
@@ -29,10 +29,12 @@ cmake_minimum_required(VERSION 3.5)
include(ExternalProject)
include(cmake/check_software.cmake)
-include(cmake/versions.cmake)
include(cmake/options.cmake)
+# versions.cmake needs to be included after options.cmake due to the BLENDER_PLATFORM_ARM variable being needed.
+include(cmake/versions.cmake)
include(cmake/boost_build_options.cmake)
include(cmake/download.cmake)
+include(cmake/macros.cmake)
if(ENABLE_MINGW64)
include(cmake/setup_mingw64.cmake)
@@ -51,13 +53,12 @@ include(cmake/imath.cmake)
include(cmake/openexr.cmake)
include(cmake/brotli.cmake)
include(cmake/freetype.cmake)
+include(cmake/epoxy.cmake)
include(cmake/freeglut.cmake)
-include(cmake/glew.cmake)
include(cmake/alembic.cmake)
include(cmake/opensubdiv.cmake)
include(cmake/sdl.cmake)
include(cmake/opencollada.cmake)
-include(cmake/llvm.cmake)
if(APPLE)
include(cmake/openmp.cmake)
endif()
@@ -75,6 +76,7 @@ include(cmake/osl.cmake)
include(cmake/tbb.cmake)
include(cmake/openvdb.cmake)
include(cmake/python.cmake)
+include(cmake/llvm.cmake)
option(USE_PIP_NUMPY "Install NumPy using pip wheel instead of building from source" OFF)
if(APPLE AND ("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "x86_64"))
set(USE_PIP_NUMPY ON)
@@ -96,6 +98,15 @@ include(cmake/fmt.cmake)
include(cmake/robinmap.cmake)
if(NOT APPLE)
include(cmake/xr_openxr.cmake)
+ if(NOT WIN32 OR BUILD_MODE STREQUAL Release)
+ include(cmake/dpcpp.cmake)
+ include(cmake/dpcpp_deps.cmake)
+ endif()
+ if(NOT WIN32)
+ include(cmake/igc.cmake)
+ include(cmake/gmmlib.cmake)
+ include(cmake/ocloc.cmake)
+ endif()
endif()
# OpenColorIO and dependencies.
@@ -128,6 +139,7 @@ if(NOT WIN32 OR ENABLE_MINGW64)
include(cmake/vpx.cmake)
include(cmake/x264.cmake)
include(cmake/xvidcore.cmake)
+ include(cmake/aom.cmake)
include(cmake/ffmpeg.cmake)
include(cmake/fftw.cmake)
include(cmake/sndfile.cmake)
diff --git a/build_files/build_environment/cmake/alembic.cmake b/build_files/build_environment/cmake/alembic.cmake
index 484a7849ace..8b049e9e206 100644
--- a/build_files/build_environment/cmake/alembic.cmake
+++ b/build_files/build_environment/cmake/alembic.cmake
@@ -42,4 +42,5 @@ endif()
add_dependencies(
external_alembic
external_openexr
+ external_imath
)
diff --git a/build_files/build_environment/cmake/aom.cmake b/build_files/build_environment/cmake/aom.cmake
new file mode 100644
index 00000000000..9f64439771f
--- /dev/null
+++ b/build_files/build_environment/cmake/aom.cmake
@@ -0,0 +1,45 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+if(WIN32)
+ # The default generator on windows is msbuild, which we do not
+ # want to use for this dep, as needs to build with mingw
+ set(AOM_GENERATOR "Ninja")
+ # The default flags are full of MSVC options given this will be
+ # building with mingw, it'll have an unhappy time with that and
+ # we need to clear them out.
+ set(AOM_CMAKE_FLAGS )
+ # CMake will correctly identify phreads being available, however
+ # we do not want to use them, as that gains a dependency on
+ # libpthreadswin.dll which we do not want. when pthreads is not
+ # available oam will use a pthreads emulation layer using win32 threads
+ set(AOM_EXTRA_ARGS_WIN32 -DCMAKE_HAVE_PTHREAD_H=OFF)
+else()
+ set(AOM_GENERATOR "Unix Makefiles")
+ set(AOM_CMAKE_FLAGS ${DEFAULT_CMAKE_FLAGS})
+endif()
+
+set(AOM_EXTRA_ARGS
+ -DENABLE_TESTDATA=OFF
+ -DENABLE_TESTS=OFF
+ -DENABLE_TOOLS=OFF
+ -DENABLE_EXAMPLES=OFF
+ ${AOM_EXTRA_ARGS_WIN32}
+)
+
+# This is slightly different from all other deps in the way that
+# aom uses cmake as a build system, but still needs the environment setup
+# to include perl so we manually setup the environment and call
+# cmake directly for the configure, build and install commands.
+
+ExternalProject_Add(external_aom
+ URL file://${PACKAGE_DIR}/${AOM_FILE}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ URL_HASH ${AOM_HASH_TYPE}=${AOM_HASH}
+ PREFIX ${BUILD_DIR}/aom
+ CONFIGURE_COMMAND ${CONFIGURE_ENV} &&
+ cd ${BUILD_DIR}/aom/src/external_aom-build/ &&
+ ${CMAKE_COMMAND} -G "${AOM_GENERATOR}" -DCMAKE_INSTALL_PREFIX=${LIBDIR}/aom ${AOM_CMAKE_FLAGS} ${AOM_EXTRA_ARGS} ${BUILD_DIR}/aom/src/external_aom/
+ BUILD_COMMAND ${CMAKE_COMMAND} --build .
+ INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install
+ INSTALL_DIR ${LIBDIR}/aom
+)
diff --git a/build_files/build_environment/cmake/check_software.cmake b/build_files/build_environment/cmake/check_software.cmake
index 2a1aaef0bee..cc8fead6f81 100644
--- a/build_files/build_environment/cmake/check_software.cmake
+++ b/build_files/build_environment/cmake/check_software.cmake
@@ -12,21 +12,13 @@ if(UNIX)
automake
bison
${_libtoolize_name}
+ meson
+ ninja
pkg-config
tclsh
yasm
)
- if(NOT APPLE)
- set(_required_software
- ${_required_software}
-
- # Needed for Mesa.
- meson
- ninja
- )
- endif()
-
foreach(_software ${_required_software})
find_program(_software_find NAMES ${_software})
if(NOT _software_find)
@@ -56,11 +48,8 @@ if(UNIX)
"On Debian and Ubuntu:\n"
" apt install autoconf automake libtool yasm tcl ninja-build meson python3-mako\n"
"\n"
- "On macOS Intel (with homebrew):\n"
- " brew install autoconf automake bison libtool pkg-config yasm\n"
- "\n"
- "On macOS ARM (with homebrew):\n"
- " brew install autoconf automake bison flex libtool pkg-config yasm\n"
+ "On macOS (with homebrew):\n"
+ " brew install autoconf automake bison flex libtool meson ninja pkg-config yasm\n"
"\n"
"Other platforms:\n"
" Install equivalent packages.\n")
diff --git a/build_files/build_environment/cmake/download.cmake b/build_files/build_environment/cmake/download.cmake
index 81e7f7ab3fe..6f0dd80ea6a 100644
--- a/build_files/build_environment/cmake/download.cmake
+++ b/build_files/build_environment/cmake/download.cmake
@@ -36,7 +36,7 @@ download_source(BLOSC)
download_source(PTHREADS)
download_source(OPENEXR)
download_source(FREETYPE)
-download_source(GLEW)
+download_source(EPOXY)
download_source(FREEGLUT)
download_source(ALEMBIC)
download_source(OPENSUBDIV)
@@ -94,6 +94,7 @@ download_source(GMP)
download_source(POTRACE)
download_source(HARU)
download_source(ZSTD)
+download_source(SSE2NEON)
download_source(FLEX)
download_source(BROTLI)
download_source(FMT)
@@ -101,3 +102,19 @@ download_source(ROBINMAP)
download_source(IMATH)
download_source(PYSTRING)
download_source(LEVEL_ZERO)
+download_source(DPCPP)
+download_source(VCINTRINSICS)
+download_source(OPENCLHEADERS)
+download_source(ICDLOADER)
+download_source(MP11)
+download_source(SPIRV_HEADERS)
+download_source(IGC)
+download_source(IGC_LLVM)
+download_source(IGC_OPENCL_CLANG)
+download_source(IGC_VCINTRINSICS)
+download_source(IGC_SPIRV_HEADERS)
+download_source(IGC_SPIRV_TOOLS)
+download_source(IGC_SPIRV_TRANSLATOR)
+download_source(GMMLIB)
+download_source(OCLOC)
+download_source(AOM)
diff --git a/build_files/build_environment/cmake/dpcpp.cmake b/build_files/build_environment/cmake/dpcpp.cmake
new file mode 100644
index 00000000000..3c3fe201073
--- /dev/null
+++ b/build_files/build_environment/cmake/dpcpp.cmake
@@ -0,0 +1,109 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+
+if(WIN32)
+ set(LLVM_GENERATOR "Ninja")
+else()
+ set(LLVM_GENERATOR "Unix Makefiles")
+endif()
+
+set(DPCPP_CONFIGURE_ARGS
+ # When external deps dpcpp needs are not found it will automatically
+ # download the during the configure stage using FetchContent. Given
+ # we need to keep an archive of all source used during build for compliance
+ # reasons it CANNOT download anything we do not know about. By setting
+ # this property to ON, all downloads are disabled, and we will have to
+ # provide the missing deps some other way, a build error beats a compliance
+ # violation
+ --cmake-opt FETCHCONTENT_FULLY_DISCONNECTED=ON
+)
+set(DPCPP_SOURCE_ROOT ${BUILD_DIR}/dpcpp/src/external_dpcpp/)
+set(DPCPP_EXTRA_ARGS
+ # When external deps dpcpp needs are not found it will automatically
+ # download the during the configure stage using FetchContent. Given
+ # we need to keep an archive of all source used during build for compliance
+ # reasons it CANNOT download anything we do not know about. By setting
+ # this property to ON, all downloads are disabled, and we will have to
+ # provide the missing deps some other way, a build or configure error
+ # beats a compliance violation
+ -DFETCHCONTENT_FULLY_DISCONNECTED=ON
+ -DLLVMGenXIntrinsics_SOURCE_DIR=${BUILD_DIR}/vcintrinsics/src/external_vcintrinsics/
+ -DOpenCL_HEADERS=file://${PACKAGE_DIR}/${OPENCLHEADERS_FILE}
+ -DOpenCL_LIBRARY_SRC=file://${PACKAGE_DIR}/${ICDLOADER_FILE}
+ -DBOOST_MP11_SOURCE_DIR=${BUILD_DIR}/mp11/src/external_mp11/
+ -DLEVEL_ZERO_LIBRARY=${LIBDIR}/level-zero/lib/${LIBPREFIX}ze_loader${SHAREDLIBEXT}
+ -DLEVEL_ZERO_INCLUDE_DIR=${LIBDIR}/level-zero/include
+ -DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=${BUILD_DIR}/spirvheaders/src/external_spirvheaders/
+ # Below here is copied from an invocation of buildbot/config.py
+ -DLLVM_ENABLE_ASSERTIONS=ON
+ -DLLVM_TARGETS_TO_BUILD=X86
+ -DLLVM_EXTERNAL_PROJECTS=sycl^^llvm-spirv^^opencl^^libdevice^^xpti^^xptifw
+ -DLLVM_EXTERNAL_SYCL_SOURCE_DIR=${DPCPP_SOURCE_ROOT}/sycl
+ -DLLVM_EXTERNAL_LLVM_SPIRV_SOURCE_DIR=${DPCPP_SOURCE_ROOT}/llvm-spirv
+ -DLLVM_EXTERNAL_XPTI_SOURCE_DIR=${DPCPP_SOURCE_ROOT}/xpti
+ -DXPTI_SOURCE_DIR=${DPCPP_SOURCE_ROOT}/xpti
+ -DLLVM_EXTERNAL_XPTIFW_SOURCE_DIR=${DPCPP_SOURCE_ROOT}/xptifw
+ -DLLVM_EXTERNAL_LIBDEVICE_SOURCE_DIR=${DPCPP_SOURCE_ROOT}/libdevice
+ -DLLVM_ENABLE_PROJECTS=clang^^sycl^^llvm-spirv^^opencl^^libdevice^^xpti^^xptifw
+ -DLIBCLC_TARGETS_TO_BUILD=
+ -DLIBCLC_GENERATE_REMANGLED_VARIANTS=OFF
+ -DSYCL_BUILD_PI_HIP_PLATFORM=AMD
+ -DLLVM_BUILD_TOOLS=ON
+ -DSYCL_ENABLE_WERROR=OFF
+ -DSYCL_INCLUDE_TESTS=ON
+ -DLLVM_ENABLE_DOXYGEN=OFF
+ -DLLVM_ENABLE_SPHINX=OFF
+ -DBUILD_SHARED_LIBS=OFF
+ -DSYCL_ENABLE_XPTI_TRACING=ON
+ -DLLVM_ENABLE_LLD=OFF
+ -DXPTI_ENABLE_WERROR=OFF
+ -DSYCL_CLANG_EXTRA_FLAGS=
+ -DSYCL_ENABLE_PLUGINS=level_zero
+ -DCMAKE_INSTALL_RPATH=\$ORIGIN
+ -DPython3_ROOT_DIR=${LIBDIR}/python/
+ -DPython3_EXECUTABLE=${PYTHON_BINARY}
+ -DPYTHON_EXECUTABLE=${PYTHON_BINARY}
+ -DLLDB_ENABLE_CURSES=OFF
+ -DLLVM_ENABLE_TERMINFO=OFF
+)
+
+if(WIN32)
+ list(APPEND DPCPP_EXTRA_ARGS -DPython3_FIND_REGISTRY=NEVER)
+endif()
+
+ExternalProject_Add(external_dpcpp
+ URL file://${PACKAGE_DIR}/${DPCPP_FILE}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ URL_HASH ${DPCPP_HASH_TYPE}=${DPCPP_HASH}
+ PREFIX ${BUILD_DIR}/dpcpp
+ CMAKE_GENERATOR ${LLVM_GENERATOR}
+ SOURCE_SUBDIR llvm
+ LIST_SEPARATOR ^^
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/dpcpp ${DEFAULT_CMAKE_FLAGS} ${DPCPP_EXTRA_ARGS}
+ #CONFIGURE_COMMAND ${PYTHON_BINARY} ${BUILD_DIR}/dpcpp/src/external_dpcpp/buildbot/configure.py ${DPCPP_CONFIGURE_ARGS}
+ #BUILD_COMMAND echo "." #${PYTHON_BINARY} ${BUILD_DIR}/dpcpp/src/external_dpcpp/buildbot/compile.py
+ INSTALL_COMMAND ${CMAKE_COMMAND} --build . -- deploy-sycl-toolchain
+ PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/dpcpp/src/external_dpcpp < ${PATCH_DIR}/dpcpp.diff
+ INSTALL_DIR ${LIBDIR}/dpcpp
+)
+
+add_dependencies(
+ external_dpcpp
+ external_python
+ external_python_site_packages
+ external_vcintrinsics
+ external_openclheaders
+ external_icdloader
+ external_mp11
+ external_level-zero
+ external_spirvheaders
+)
+
+if(BUILD_MODE STREQUAL Release AND WIN32)
+ ExternalProject_Add_Step(external_dpcpp after_install
+ COMMAND ${CMAKE_COMMAND} -E rm -f ${LIBDIR}/dpcpp/bin/clang-cl.exe
+ COMMAND ${CMAKE_COMMAND} -E rm -f ${LIBDIR}/dpcpp/bin/clang-cpp.exe
+ COMMAND ${CMAKE_COMMAND} -E rm -f ${LIBDIR}/dpcpp/bin/clang.exe
+ COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/dpcpp ${HARVEST_TARGET}/dpcpp
+ )
+endif()
diff --git a/build_files/build_environment/cmake/dpcpp_deps.cmake b/build_files/build_environment/cmake/dpcpp_deps.cmake
new file mode 100644
index 00000000000..e66006993f6
--- /dev/null
+++ b/build_files/build_environment/cmake/dpcpp_deps.cmake
@@ -0,0 +1,61 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+# These are build time requirements for dpcpp
+# We only have to unpack these dpcpp will build
+# them.
+
+ExternalProject_Add(external_vcintrinsics
+ URL file://${PACKAGE_DIR}/${VCINTRINSICS_FILE}
+ URL_HASH ${VCINTRINSICS_HASH_TYPE}=${VCINTRINSICS_HASH}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ PREFIX ${BUILD_DIR}/vcintrinsics
+ CONFIGURE_COMMAND echo .
+ BUILD_COMMAND echo .
+ INSTALL_COMMAND echo .
+)
+
+# opencl headers do not have to be unpacked, dpcpp will do it
+# but it wouldn't hurt to do it anyway as an opertunity to validate
+# the hash is correct.
+ExternalProject_Add(external_openclheaders
+ URL file://${PACKAGE_DIR}/${OPENCLHEADERS_FILE}
+ URL_HASH ${OPENCLHEADERS_HASH_TYPE}=${OPENCLHEADERS_HASH}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ PREFIX ${BUILD_DIR}/openclheaders
+ CONFIGURE_COMMAND echo .
+ BUILD_COMMAND echo .
+ INSTALL_COMMAND echo .
+)
+
+# icdloader does not have to be unpacked, dpcpp will do it
+# but it wouldn't hurt to do it anyway as an opertunity to validate
+# the hash is correct.
+ExternalProject_Add(external_icdloader
+ URL file://${PACKAGE_DIR}/${ICDLOADER_FILE}
+ URL_HASH ${ICDLOADER_HASH_TYPE}=${ICDLOADER_HASH}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ PREFIX ${BUILD_DIR}/icdloader
+ CONFIGURE_COMMAND echo .
+ BUILD_COMMAND echo .
+ INSTALL_COMMAND echo .
+)
+
+ExternalProject_Add(external_mp11
+ URL file://${PACKAGE_DIR}/${MP11_FILE}
+ URL_HASH ${MP11_HASH_TYPE}=${MP11_HASH}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ PREFIX ${BUILD_DIR}/mp11
+ CONFIGURE_COMMAND echo .
+ BUILD_COMMAND echo .
+ INSTALL_COMMAND echo .
+)
+
+ExternalProject_Add(external_spirvheaders
+ URL file://${PACKAGE_DIR}/${SPIRV_HEADERS_FILE}
+ URL_HASH ${SPIRV_HEADERS_HASH_TYPE}=${SPIRV_HEADERS_HASH}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ PREFIX ${BUILD_DIR}/spirvheaders
+ CONFIGURE_COMMAND echo .
+ BUILD_COMMAND echo .
+ INSTALL_COMMAND echo .
+)
diff --git a/build_files/build_environment/cmake/embree.cmake b/build_files/build_environment/cmake/embree.cmake
index 2eafc729111..8c689cf000b 100644
--- a/build_files/build_environment/cmake/embree.cmake
+++ b/build_files/build_environment/cmake/embree.cmake
@@ -10,18 +10,12 @@ set(EMBREE_EXTRA_ARGS
-DEMBREE_RAY_MASK=ON
-DEMBREE_FILTER_FUNCTION=ON
-DEMBREE_BACKFACE_CULLING=OFF
- -DEMBREE_MAX_ISA=AVX2
-DEMBREE_TASKING_SYSTEM=TBB
-DEMBREE_TBB_ROOT=${LIBDIR}/tbb
-DTBB_ROOT=${LIBDIR}/tbb
- -DTBB_STATIC_LIB=${TBB_STATIC_LIBRARY}
)
-if(BLENDER_PLATFORM_ARM)
- set(EMBREE_EXTRA_ARGS
- ${EMBREE_EXTRA_ARGS}
- -DEMBREE_MAX_ISA=NEON)
-else()
+if (NOT BLENDER_PLATFORM_ARM)
set(EMBREE_EXTRA_ARGS
${EMBREE_EXTRA_ARGS}
-DEMBREE_MAX_ISA=AVX2)
@@ -30,23 +24,10 @@ endif()
if(TBB_STATIC_LIBRARY)
set(EMBREE_EXTRA_ARGS
${EMBREE_EXTRA_ARGS}
- -DEMBREE_TBB_LIBRARY_NAME=tbb_static
- -DEMBREE_TBBMALLOC_LIBRARY_NAME=tbbmalloc_static
+ -DEMBREE_TBB_COMPONENT=tbb_static
)
endif()
-if(WIN32)
- set(EMBREE_BUILD_DIR ${BUILD_MODE}/)
- if(BUILD_MODE STREQUAL Debug)
- list(APPEND EMBREE_EXTRA_ARGS
- -DEMBREE_TBBMALLOC_LIBRARY_NAME=tbbmalloc_debug
- -DEMBREE_TBB_LIBRARY_NAME=tbb_debug
- )
- endif()
-else()
- set(EMBREE_BUILD_DIR)
-endif()
-
ExternalProject_Add(external_embree
URL file://${PACKAGE_DIR}/${EMBREE_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
diff --git a/build_files/build_environment/cmake/epoxy.cmake b/build_files/build_environment/cmake/epoxy.cmake
new file mode 100644
index 00000000000..4cd9158f2ac
--- /dev/null
+++ b/build_files/build_environment/cmake/epoxy.cmake
@@ -0,0 +1,25 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+if(WIN32)
+ set(EPOXY_LIB_TYPE shared)
+else()
+ set(EPOXY_LIB_TYPE static)
+endif()
+ExternalProject_Add(external_epoxy
+ URL file://${PACKAGE_DIR}/${EPOXY_FILE}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ URL_HASH ${EPOXY_HASH_TYPE}=${EPOXY_HASH}
+ PREFIX ${BUILD_DIR}/epoxy
+ PATCH_COMMAND ${PATCH_CMD} -p 1 -N -d ${BUILD_DIR}/epoxy/src/external_epoxy/ < ${PATCH_DIR}/epoxy.diff
+ CONFIGURE_COMMAND ${CONFIGURE_ENV} && meson setup --prefix ${LIBDIR}/epoxy --default-library ${EPOXY_LIB_TYPE} --libdir lib ${BUILD_DIR}/epoxy/src/external_epoxy-build ${BUILD_DIR}/epoxy/src/external_epoxy -Dtests=false
+ BUILD_COMMAND ninja
+ INSTALL_COMMAND ninja install
+)
+
+if(BUILD_MODE STREQUAL Release AND WIN32)
+ ExternalProject_Add_Step(external_epoxy after_install
+ COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/epoxy/include ${HARVEST_TARGET}/epoxy/include
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/epoxy/bin/epoxy-0.dll ${HARVEST_TARGET}/epoxy/bin/epoxy-0.dll
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/epoxy/lib/epoxy.lib ${HARVEST_TARGET}/epoxy/lib/epoxy.lib
+ DEPENDEES install
+ )
+endif()
diff --git a/build_files/build_environment/cmake/ffmpeg.cmake b/build_files/build_environment/cmake/ffmpeg.cmake
index 4cf96ee2fcb..7730607c514 100644
--- a/build_files/build_environment/cmake/ffmpeg.cmake
+++ b/build_files/build_environment/cmake/ffmpeg.cmake
@@ -1,9 +1,9 @@
# SPDX-License-Identifier: GPL-2.0-or-later
-set(FFMPEG_CFLAGS "-I${mingw_LIBDIR}/lame/include -I${mingw_LIBDIR}/openjpeg/include/ -I${mingw_LIBDIR}/ogg/include -I${mingw_LIBDIR}/vorbis/include -I${mingw_LIBDIR}/theora/include -I${mingw_LIBDIR}/opus/include -I${mingw_LIBDIR}/vpx/include -I${mingw_LIBDIR}/x264/include -I${mingw_LIBDIR}/xvidcore/include -I${mingw_LIBDIR}/zlib/include")
-set(FFMPEG_LDFLAGS "-L${mingw_LIBDIR}/lame/lib -L${mingw_LIBDIR}/openjpeg/lib -L${mingw_LIBDIR}/ogg/lib -L${mingw_LIBDIR}/vorbis/lib -L${mingw_LIBDIR}/theora/lib -L${mingw_LIBDIR}/opus/lib -L${mingw_LIBDIR}/vpx/lib -L${mingw_LIBDIR}/x264/lib -L${mingw_LIBDIR}/xvidcore/lib -L${mingw_LIBDIR}/zlib/lib")
+set(FFMPEG_CFLAGS "-I${mingw_LIBDIR}/lame/include -I${mingw_LIBDIR}/openjpeg/include/ -I${mingw_LIBDIR}/ogg/include -I${mingw_LIBDIR}/vorbis/include -I${mingw_LIBDIR}/theora/include -I${mingw_LIBDIR}/opus/include -I${mingw_LIBDIR}/vpx/include -I${mingw_LIBDIR}/x264/include -I${mingw_LIBDIR}/xvidcore/include -I${mingw_LIBDIR}/zlib/include -I${mingw_LIBDIR}/aom/include")
+set(FFMPEG_LDFLAGS "-L${mingw_LIBDIR}/lame/lib -L${mingw_LIBDIR}/openjpeg/lib -L${mingw_LIBDIR}/ogg/lib -L${mingw_LIBDIR}/vorbis/lib -L${mingw_LIBDIR}/theora/lib -L${mingw_LIBDIR}/opus/lib -L${mingw_LIBDIR}/vpx/lib -L${mingw_LIBDIR}/x264/lib -L${mingw_LIBDIR}/xvidcore/lib -L${mingw_LIBDIR}/zlib/lib -L${mingw_LIBDIR}/aom/lib")
set(FFMPEG_EXTRA_FLAGS --pkg-config-flags=--static --extra-cflags=${FFMPEG_CFLAGS} --extra-ldflags=${FFMPEG_LDFLAGS})
-set(FFMPEG_ENV PKG_CONFIG_PATH=${mingw_LIBDIR}/openjpeg/lib/pkgconfig:${mingw_LIBDIR}/x264/lib/pkgconfig:${mingw_LIBDIR}/vorbis/lib/pkgconfig:${mingw_LIBDIR}/ogg/lib/pkgconfig:${mingw_LIBDIR}:${mingw_LIBDIR}/vpx/lib/pkgconfig:${mingw_LIBDIR}/theora/lib/pkgconfig:${mingw_LIBDIR}/openjpeg/lib/pkgconfig:${mingw_LIBDIR}/opus/lib/pkgconfig:)
+set(FFMPEG_ENV PKG_CONFIG_PATH=${mingw_LIBDIR}/openjpeg/lib/pkgconfig:${mingw_LIBDIR}/x264/lib/pkgconfig:${mingw_LIBDIR}/vorbis/lib/pkgconfig:${mingw_LIBDIR}/ogg/lib/pkgconfig:${mingw_LIBDIR}:${mingw_LIBDIR}/vpx/lib/pkgconfig:${mingw_LIBDIR}/theora/lib/pkgconfig:${mingw_LIBDIR}/openjpeg/lib/pkgconfig:${mingw_LIBDIR}/opus/lib/pkgconfig:${mingw_LIBDIR}/aom/lib/pkgconfig:)
if(WIN32)
set(FFMPEG_ENV set ${FFMPEG_ENV} &&)
@@ -79,6 +79,7 @@ ExternalProject_Add(external_ffmpeg
--disable-librtmp
--enable-libx264
--enable-libxvid
+ --enable-libaom
--disable-libopencore-amrnb
--disable-libopencore-amrwb
--disable-libdc1394
@@ -125,6 +126,7 @@ add_dependencies(
external_vorbis
external_ogg
external_lame
+ external_aom
)
if(WIN32)
add_dependencies(
diff --git a/build_files/build_environment/cmake/glew.cmake b/build_files/build_environment/cmake/glew.cmake
deleted file mode 100644
index 0745ad01533..00000000000
--- a/build_files/build_environment/cmake/glew.cmake
+++ /dev/null
@@ -1,16 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0-or-later
-
-set(GLEW_EXTRA_ARGS
- -DBUILD_UTILS=Off
- -DBUILD_SHARED_LIBS=Off
-)
-
-ExternalProject_Add(external_glew
- URL file://${PACKAGE_DIR}/${GLEW_FILE}
- DOWNLOAD_DIR ${DOWNLOAD_DIR}
- URL_HASH ${GLEW_HASH_TYPE}=${GLEW_HASH}
- PATCH_COMMAND COMMAND ${CMAKE_COMMAND} -E copy ${PATCH_DIR}/cmakelists_glew.txt ${BUILD_DIR}/glew/src/external_glew/CMakeLists.txt
- PREFIX ${BUILD_DIR}/glew
- CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_INSTALL_PREFIX=${LIBDIR}/glew ${DEFAULT_CMAKE_FLAGS} ${GLEW_EXTRA_ARGS}
- INSTALL_DIR ${LIBDIR}/glew
-)
diff --git a/build_files/build_environment/cmake/gmmlib.cmake b/build_files/build_environment/cmake/gmmlib.cmake
new file mode 100644
index 00000000000..c46f5c8943d
--- /dev/null
+++ b/build_files/build_environment/cmake/gmmlib.cmake
@@ -0,0 +1,13 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+set(GMMLIB_EXTRA_ARGS
+)
+
+ExternalProject_Add(external_gmmlib
+ URL file://${PACKAGE_DIR}/${GMMLIB_FILE}
+ URL_HASH ${GMMLIB_HASH_TYPE}=${GMMLIB_HASH}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ PREFIX ${BUILD_DIR}/gmmlib
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/gmmlib ${DEFAULT_CMAKE_FLAGS} ${GMMLIB_EXTRA_ARGS}
+ INSTALL_DIR ${LIBDIR}/gmmlib
+)
diff --git a/build_files/build_environment/cmake/harvest.cmake b/build_files/build_environment/cmake/harvest.cmake
index aeaa6fbd2b5..6ed98398fde 100644
--- a/build_files/build_environment/cmake/harvest.cmake
+++ b/build_files/build_environment/cmake/harvest.cmake
@@ -22,12 +22,6 @@ if(BUILD_MODE STREQUAL Release)
# freeglut-> opengl
${CMAKE_COMMAND} -E copy ${LIBDIR}/freeglut/lib/freeglut_static.lib ${HARVEST_TARGET}/opengl/lib/freeglut_static.lib &&
${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/freeglut/include/ ${HARVEST_TARGET}/opengl/include/ &&
- # glew-> opengl
- ${CMAKE_COMMAND} -E copy ${LIBDIR}/glew/lib/libglew32.lib ${HARVEST_TARGET}/opengl/lib/glew.lib &&
- ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/glew/include/ ${HARVEST_TARGET}/opengl/include/ &&
- # tiff
- ${CMAKE_COMMAND} -E copy ${LIBDIR}/tiff/lib/tiff.lib ${HARVEST_TARGET}/tiff/lib/libtiff.lib &&
- ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/tiff/include/ ${HARVEST_TARGET}/tiff/include/
DEPENDS
)
endif()
@@ -46,7 +40,8 @@ function(harvest from to)
install(
FILES ${LIBDIR}/${from}
DESTINATION ${HARVEST_TARGET}/${dirpath}
- RENAME ${filename})
+ RENAME ${filename}
+ )
else()
install(
DIRECTORY ${LIBDIR}/${from}/
@@ -56,7 +51,8 @@ function(harvest from to)
PATTERN "pkgconfig" EXCLUDE
PATTERN "cmake" EXCLUDE
PATTERN "__pycache__" EXCLUDE
- PATTERN "tests" EXCLUDE)
+ PATTERN "tests" EXCLUDE
+ )
endif()
endfunction()
@@ -76,8 +72,8 @@ harvest(fftw3/lib fftw3/lib "*.a")
harvest(flac/lib sndfile/lib "libFLAC.a")
harvest(freetype/include freetype/include "*.h")
harvest(freetype/lib/libfreetype2ST.a freetype/lib/libfreetype.a)
-harvest(glew/include glew/include "*.h")
-harvest(glew/lib glew/lib "*.a")
+harvest(epoxy/include epoxy/include "*.h")
+harvest(epoxy/lib epoxy/lib "*.a")
harvest(gmp/include gmp/include "*.h")
harvest(gmp/lib gmp/lib "*.a")
harvest(jemalloc/include jemalloc/include "*.h")
@@ -177,6 +173,7 @@ harvest(opus/lib ffmpeg/lib "*.a")
harvest(vpx/lib ffmpeg/lib "*.a")
harvest(x264/lib ffmpeg/lib "*.a")
harvest(xvidcore/lib ffmpeg/lib "*.a")
+harvest(aom/lib ffmpeg/lib "*.a")
harvest(webp/lib webp/lib "*.a")
harvest(webp/include webp/include "*.h")
harvest(usd/include usd/include "*.h")
@@ -192,6 +189,10 @@ harvest(zstd/lib zstd/lib "*.a")
if(UNIX AND NOT APPLE)
harvest(libglu/lib mesa/lib "*.so*")
harvest(mesa/lib64 mesa/lib "*.so*")
-endif()
+
+ harvest(dpcpp dpcpp "*")
+ harvest(igc dpcpp/lib/igc "*")
+ harvest(ocloc dpcpp/lib/ocloc "*")
+ endif()
endif()
diff --git a/build_files/build_environment/cmake/igc.cmake b/build_files/build_environment/cmake/igc.cmake
new file mode 100644
index 00000000000..3b488a77b3f
--- /dev/null
+++ b/build_files/build_environment/cmake/igc.cmake
@@ -0,0 +1,126 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+unpack_only(igc_vcintrinsics)
+unpack_only(igc_spirv_headers)
+unpack_only(igc_spirv_tools)
+
+#
+# igc_opencl_clang contains patches that need to be applied
+# to external_igc_llvm and igc_spirv_translator, we unpack
+# igc_opencl_clang first, then have the patch stages of
+# external_igc_llvm and igc_spirv_translator apply them.
+#
+
+ExternalProject_Add(external_igc_opencl_clang
+ URL file://${PACKAGE_DIR}/${IGC_OPENCL_CLANG_FILE}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ URL_HASH ${IGC_OPENCL_CLANG_HASH_TYPE}=${IGC_OPENCL_CLANG_HASH}
+ PREFIX ${BUILD_DIR}/igc_opencl_clang
+ CONFIGURE_COMMAND echo .
+ BUILD_COMMAND echo .
+ INSTALL_COMMAND echo .
+ PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/igc_opencl_clang/src/external_igc_opencl_clang/ < ${PATCH_DIR}/igc_opencl_clang.diff
+)
+
+set(IGC_OPENCL_CLANG_PATCH_DIR ${BUILD_DIR}/igc_opencl_clang/src/external_igc_opencl_clang/patches)
+set(IGC_LLVM_SOURCE_DIR ${BUILD_DIR}/igc_llvm/src/external_igc_llvm)
+set(IGC_SPIRV_TRANSLATOR_SOURCE_DIR ${BUILD_DIR}/igc_spirv_translator/src/external_igc_spirv_translator)
+
+ExternalProject_Add(external_igc_llvm
+ URL file://${PACKAGE_DIR}/${IGC_LLVM_FILE}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ URL_HASH ${IGC_LLVM_HASH_TYPE}=${IGC_LLVM_HASH}
+ PREFIX ${BUILD_DIR}/igc_llvm
+ CONFIGURE_COMMAND echo .
+ BUILD_COMMAND echo .
+ INSTALL_COMMAND echo .
+ PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${IGC_LLVM_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/clang/0001-OpenCL-3.0-support.patch &&
+ ${PATCH_CMD} -p 1 -d ${IGC_LLVM_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/clang/0002-Remove-__IMAGE_SUPPORT__-macro-for-SPIR.patch &&
+ ${PATCH_CMD} -p 1 -d ${IGC_LLVM_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/clang/0003-Avoid-calling-ParseCommandLineOptions-in-BackendUtil.patch &&
+ ${PATCH_CMD} -p 1 -d ${IGC_LLVM_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/clang/0004-OpenCL-support-cl_ext_float_atomics.patch &&
+ ${PATCH_CMD} -p 1 -d ${IGC_LLVM_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/clang/0005-OpenCL-Add-cl_khr_integer_dot_product.patch &&
+ ${PATCH_CMD} -p 1 -d ${IGC_LLVM_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/llvm/0001-Memory-leak-fix-for-Managed-Static-Mutex.patch &&
+ ${PATCH_CMD} -p 1 -d ${IGC_LLVM_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/llvm/0002-Remove-repo-name-in-LLVM-IR.patch
+)
+add_dependencies(
+ external_igc_llvm
+ external_igc_opencl_clang
+)
+
+ExternalProject_Add(external_igc_spirv_translator
+ URL file://${PACKAGE_DIR}/${IGC_SPIRV_TRANSLATOR_FILE}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ URL_HASH ${IGC_SPIRV_TRANSLATOR_HASH_TYPE}=${IGC_SPIRV_TRANSLATOR_HASH}
+ PREFIX ${BUILD_DIR}/igc_spirv_translator
+ CONFIGURE_COMMAND echo .
+ BUILD_COMMAND echo .
+ INSTALL_COMMAND echo .
+ PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${IGC_SPIRV_TRANSLATOR_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/spirv/0001-update-SPIR-V-headers-for-SPV_INTEL_split_barrier.patch &&
+ ${PATCH_CMD} -p 1 -d ${IGC_SPIRV_TRANSLATOR_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/spirv/0002-Add-support-for-split-barriers-extension-SPV_INTEL_s.patch &&
+ ${PATCH_CMD} -p 1 -d ${IGC_SPIRV_TRANSLATOR_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/spirv/0003-Support-cl_bf16_conversions.patch
+)
+add_dependencies(
+ external_igc_spirv_translator
+ external_igc_opencl_clang
+)
+
+if(WIN32)
+ set(IGC_GENERATOR "Ninja")
+ set(IGC_TARGET Windows64)
+else()
+ set(IGC_GENERATOR "Unix Makefiles")
+ set(IGC_TARGET Linux64)
+endif()
+
+set(IGC_EXTRA_ARGS
+ -DIGC_OPTION__ARCHITECTURE_TARGET=${IGC_TARGET}
+ -DIGC_OPTION__ARCHITECTURE_HOST=${IGC_TARGET}
+)
+
+if(UNIX AND NOT APPLE)
+ list(APPEND IGC_EXTRA_ARGS
+ -DFLEX_EXECUTABLE=${LIBDIR}/flex/bin/flex
+ -DFLEX_INCLUDE_DIR=${LIBDIR}/flex/include
+ )
+endif()
+
+ExternalProject_Add(external_igc
+ URL file://${PACKAGE_DIR}/${IGC_FILE}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ URL_HASH ${IGC_HASH_TYPE}=${IGC_HASH}
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/igc ${DEFAULT_CMAKE_FLAGS} ${IGC_EXTRA_ARGS}
+
+ # IGC is pretty set in its way where sub projects ought to live, for some it offers
+ # hooks to supply alternatives folders, other are just hardocded with no way to configure
+ # we symlink everything here, since it's less work than trying to convince the cmake
+ # scripts to accept alternative locations.
+ #
+ PATCH_COMMAND ${CMAKE_COMMAND} -E create_symlink ${BUILD_DIR}/igc_llvm/src/external_igc_llvm/ ${BUILD_DIR}/igc/src/llvm-project &&
+ ${CMAKE_COMMAND} -E create_symlink ${BUILD_DIR}/igc_opencl_clang/src/external_igc_opencl_clang/ ${BUILD_DIR}/igc/src/llvm-project/llvm/projects/opencl-clang &&
+ ${CMAKE_COMMAND} -E create_symlink ${BUILD_DIR}/igc_spirv_translator/src/external_igc_spirv_translator/ ${BUILD_DIR}/igc/src/llvm-project/llvm/projects/llvm-spirv &&
+ ${CMAKE_COMMAND} -E create_symlink ${BUILD_DIR}/igc_spirv_tools/src/external_igc_spirv_tools/ ${BUILD_DIR}/igc/src/SPIRV-Tools &&
+ ${CMAKE_COMMAND} -E create_symlink ${BUILD_DIR}/igc_spirv_headers/src/external_igc_spirv_headers/ ${BUILD_DIR}/igc/src/SPIRV-Headers &&
+ ${CMAKE_COMMAND} -E create_symlink ${BUILD_DIR}/igc_vcintrinsics/src/external_igc_vcintrinsics/ ${BUILD_DIR}/igc/src/vc-intrinsics
+ PREFIX ${BUILD_DIR}/igc
+ INSTALL_DIR ${LIBDIR}/igc
+ INSTALL_COMMAND ${CMAKE_COMMAND} --install . --strip
+ CMAKE_GENERATOR ${IGC_GENERATOR}
+)
+
+add_dependencies(
+ external_igc
+ external_igc_vcintrinsics
+ external_igc_llvm
+ external_igc_opencl_clang
+ external_igc_vcintrinsics
+ external_igc_spirv_headers
+ external_igc_spirv_tools
+ external_igc_spirv_translator
+)
+
+if(UNIX AND NOT APPLE)
+ add_dependencies(
+ external_igc
+ external_flex
+ )
+endif()
diff --git a/build_files/build_environment/cmake/ispc.cmake b/build_files/build_environment/cmake/ispc.cmake
index 160088bc16f..c2dbedca55f 100644
--- a/build_files/build_environment/cmake/ispc.cmake
+++ b/build_files/build_environment/cmake/ispc.cmake
@@ -6,6 +6,7 @@ if(WIN32)
-DBISON_EXECUTABLE=${LIBDIR}/flexbison/win_bison.exe
-DM4_EXECUTABLE=${DOWNLOAD_DIR}/mingw/mingw64/msys/1.0/bin/m4.exe
-DARM_ENABLED=Off
+ -DPython3_FIND_REGISTRY=NEVER
)
elseif(APPLE)
# Use bison and flex installed via Homebrew.
@@ -27,7 +28,7 @@ elseif(UNIX)
set(ISPC_EXTRA_ARGS_UNIX
-DCMAKE_C_COMPILER=${LIBDIR}/llvm/bin/clang
-DCMAKE_CXX_COMPILER=${LIBDIR}/llvm/bin/clang++
- -DARM_ENABLED=Off
+ -DARM_ENABLED=${BLENDER_PLATFORM_ARM}
-DFLEX_EXECUTABLE=${LIBDIR}/flex/bin/flex
)
endif()
@@ -43,6 +44,8 @@ set(ISPC_EXTRA_ARGS
-DISPC_INCLUDE_TESTS=Off
-DCLANG_LIBRARY_DIR=${LIBDIR}/llvm/lib
-DCLANG_INCLUDE_DIRS=${LIBDIR}/llvm/include
+ -DPython3_ROOT_DIR=${LIBDIR}/python/
+ -DPython3_EXECUTABLE=${PYTHON_BINARY}
${ISPC_EXTRA_ARGS_WIN}
${ISPC_EXTRA_ARGS_APPLE}
${ISPC_EXTRA_ARGS_UNIX}
@@ -61,6 +64,7 @@ ExternalProject_Add(external_ispc
add_dependencies(
external_ispc
ll
+ external_python
)
if(WIN32)
diff --git a/build_files/build_environment/cmake/llvm.cmake b/build_files/build_environment/cmake/llvm.cmake
index cf92a5175a3..e4ddc7db846 100644
--- a/build_files/build_environment/cmake/llvm.cmake
+++ b/build_files/build_environment/cmake/llvm.cmake
@@ -25,11 +25,14 @@ set(LLVM_EXTRA_ARGS
-DLLVM_BUILD_LLVM_C_DYLIB=OFF
-DLLVM_ENABLE_UNWIND_TABLES=OFF
-DLLVM_ENABLE_PROJECTS=clang${LLVM_BUILD_CLANG_TOOLS_EXTRA}
+ -DPython3_ROOT_DIR=${LIBDIR}/python/
+ -DPython3_EXECUTABLE=${PYTHON_BINARY}
${LLVM_XML2_ARGS}
)
if(WIN32)
set(LLVM_GENERATOR "Ninja")
+ list(APPEND LLVM_EXTRA_ARGS -DPython3_FIND_REGISTRY=NEVER)
else()
set(LLVM_GENERATOR "Unix Makefiles")
endif()
@@ -74,3 +77,8 @@ if(APPLE)
external_xml2
)
endif()
+
+add_dependencies(
+ ll
+ external_python
+)
diff --git a/build_files/build_environment/cmake/macros.cmake b/build_files/build_environment/cmake/macros.cmake
new file mode 100644
index 00000000000..82fc151a038
--- /dev/null
+++ b/build_files/build_environment/cmake/macros.cmake
@@ -0,0 +1,18 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+# shorthand to only unpack a certain dependency
+macro(unpack_only name)
+ string(TOUPPER ${name} UPPER_NAME)
+ set(TARGET_FILE ${${UPPER_NAME}_FILE})
+ set(TARGET_HASH_TYPE ${${UPPER_NAME}_HASH_TYPE})
+ set(TARGET_HASH ${${UPPER_NAME}_HASH})
+ ExternalProject_Add(external_${name}
+ URL file://${PACKAGE_DIR}/${TARGET_FILE}
+ URL_HASH ${TARGET_HASH_TYPE}=${TARGET_HASH}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ PREFIX ${BUILD_DIR}/${name}
+ CONFIGURE_COMMAND echo .
+ BUILD_COMMAND echo .
+ INSTALL_COMMAND echo .
+ )
+endmacro()
diff --git a/build_files/build_environment/cmake/ocloc.cmake b/build_files/build_environment/cmake/ocloc.cmake
new file mode 100644
index 00000000000..f686d2dd4fc
--- /dev/null
+++ b/build_files/build_environment/cmake/ocloc.cmake
@@ -0,0 +1,24 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+set(OCLOC_EXTRA_ARGS
+ -DNEO_SKIP_UNIT_TESTS=1
+ -DNEO_BUILD_WITH_OCL=0
+ -DBUILD_WITH_L0=0
+ -DIGC_DIR=${LIBDIR}/igc
+ -DGMM_DIR=${LIBDIR}/gmmlib
+)
+
+ExternalProject_Add(external_ocloc
+ URL file://${PACKAGE_DIR}/${OCLOC_FILE}
+ URL_HASH ${OCLOC_HASH_TYPE}=${OCLOC_HASH}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ PREFIX ${BUILD_DIR}/ocloc
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/ocloc ${DEFAULT_CMAKE_FLAGS} ${OCLOC_EXTRA_ARGS}
+ INSTALL_DIR ${LIBDIR}/ocloc
+)
+
+add_dependencies(
+ external_ocloc
+ external_igc
+ external_gmmlib
+)
diff --git a/build_files/build_environment/cmake/openimagedenoise.cmake b/build_files/build_environment/cmake/openimagedenoise.cmake
index 3612e91a690..14a730d69b6 100644
--- a/build_files/build_environment/cmake/openimagedenoise.cmake
+++ b/build_files/build_environment/cmake/openimagedenoise.cmake
@@ -9,6 +9,7 @@ set(OIDN_EXTRA_ARGS
-DOIDN_STATIC_RUNTIME=OFF
-DISPC_EXECUTABLE=${LIBDIR}/ispc/bin/ispc
-DOIDN_FILTER_RTLIGHTMAP=OFF
+ -DPYTHON_EXECUTABLE=${PYTHON_BINARY}
)
if(WIN32)
@@ -38,6 +39,7 @@ add_dependencies(
external_openimagedenoise
external_tbb
external_ispc
+ external_python
)
if(WIN32)
diff --git a/build_files/build_environment/cmake/openimageio.cmake b/build_files/build_environment/cmake/openimageio.cmake
index b7d7ce689a4..26881488039 100644
--- a/build_files/build_environment/cmake/openimageio.cmake
+++ b/build_files/build_environment/cmake/openimageio.cmake
@@ -18,9 +18,15 @@ if(WIN32)
set(PNG_LIBNAME libpng16_static${LIBEXT})
set(OIIO_SIMD_FLAGS -DUSE_SIMD=sse2)
set(OPENJPEG_POSTFIX _msvc)
+ if(BUILD_MODE STREQUAL Debug)
+ set(TIFF_POSTFIX d)
+ else()
+ set(TIFF_POSTFIX)
+ endif()
else()
set(PNG_LIBNAME libpng${LIBEXT})
set(OIIO_SIMD_FLAGS)
+ set(TIFF_POSTFIX)
endif()
if(MSVC)
@@ -65,7 +71,7 @@ set(OPENIMAGEIO_EXTRA_ARGS
-DZLIB_INCLUDE_DIR=${LIBDIR}/zlib/include
-DPNG_LIBRARY=${LIBDIR}/png/lib/${PNG_LIBNAME}
-DPNG_PNG_INCLUDE_DIR=${LIBDIR}/png/include
- -DTIFF_LIBRARY=${LIBDIR}/tiff/lib/${LIBPREFIX}tiff${LIBEXT}
+ -DTIFF_LIBRARY=${LIBDIR}/tiff/lib/${LIBPREFIX}tiff${TIFF_POSTFIX}${LIBEXT}
-DTIFF_INCLUDE_DIR=${LIBDIR}/tiff/include
-DJPEG_LIBRARY=${LIBDIR}/jpeg/lib/${JPEG_LIBRARY}
-DJPEG_INCLUDE_DIR=${LIBDIR}/jpeg/include
diff --git a/build_files/build_environment/cmake/options.cmake b/build_files/build_environment/cmake/options.cmake
index 7b9529068f4..9015ef9ac7c 100644
--- a/build_files/build_environment/cmake/options.cmake
+++ b/build_files/build_environment/cmake/options.cmake
@@ -38,6 +38,7 @@ message("BUILD_DIR = ${BUILD_DIR}")
if(WIN32)
set(PATCH_CMD ${DOWNLOAD_DIR}/mingw/mingw64/msys/1.0/bin/patch.exe)
set(LIBEXT ".lib")
+ set(SHAREDLIBEXT ".lib")
set(LIBPREFIX "")
# For OIIO and OSL
@@ -96,6 +97,7 @@ if(WIN32)
else()
set(PATCH_CMD patch)
set(LIBEXT ".a")
+ set(SHAREDLIBEXT ".so")
set(LIBPREFIX "lib")
if(APPLE)
diff --git a/build_files/build_environment/cmake/python.cmake b/build_files/build_environment/cmake/python.cmake
index 3f45333ed3d..8fed10e9d72 100644
--- a/build_files/build_environment/cmake/python.cmake
+++ b/build_files/build_environment/cmake/python.cmake
@@ -27,6 +27,7 @@ if(WIN32)
PREFIX ${BUILD_DIR}/python
CONFIGURE_COMMAND ""
BUILD_COMMAND cd ${BUILD_DIR}/python/src/external_python/pcbuild/ && set IncludeTkinter=false && call build.bat -e -p x64 -c ${BUILD_MODE}
+ PATCH_COMMAND ${PATCH_CMD} --verbose -p1 -d ${BUILD_DIR}/python/src/external_python < ${PATCH_DIR}/python_windows.diff
INSTALL_COMMAND ${PYTHON_BINARY_INTERNAL} ${PYTHON_SRC}/PC/layout/main.py -b ${PYTHON_SRC}/PCbuild/amd64 -s ${PYTHON_SRC} -t ${PYTHON_SRC}/tmp/ --include-stable --include-pip --include-dev --include-launchers --include-venv --include-symbols ${PYTHON_EXTRA_INSTLAL_FLAGS} --copy ${LIBDIR}/python
)
diff --git a/build_files/build_environment/cmake/sse2neon.cmake b/build_files/build_environment/cmake/sse2neon.cmake
index 2216ad43d59..07fe1ac6f39 100644
--- a/build_files/build_environment/cmake/sse2neon.cmake
+++ b/build_files/build_environment/cmake/sse2neon.cmake
@@ -1,9 +1,9 @@
# SPDX-License-Identifier: GPL-2.0-or-later
ExternalProject_Add(external_sse2neon
- GIT_REPOSITORY ${SSE2NEON_GIT}
- GIT_TAG ${SSE2NEON_GIT_HASH}
+ URL file://${PACKAGE_DIR}/${SSE2NEON_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ URL_HASH ${SSE2NEON_HASH_TYPE}=${SSE2NEON_HASH}
PREFIX ${BUILD_DIR}/sse2neon
CONFIGURE_COMMAND echo sse2neon - Nothing to configure
BUILD_COMMAND echo sse2neon - nothing to build
diff --git a/build_files/build_environment/cmake/tiff.cmake b/build_files/build_environment/cmake/tiff.cmake
index bd495df2a4c..1f8e9442ae5 100644
--- a/build_files/build_environment/cmake/tiff.cmake
+++ b/build_files/build_environment/cmake/tiff.cmake
@@ -3,6 +3,8 @@
set(TIFF_EXTRA_ARGS
-DZLIB_LIBRARY=${LIBDIR}/zlib/lib/${ZLIB_LIBRARY}
-DZLIB_INCLUDE_DIR=${LIBDIR}/zlib/include
+ -DJPEG_LIBRARY=${LIBDIR}/jpeg/lib/${JPEG_LIBRARY}
+ -DJPEG_INCLUDE_DIR=${LIBDIR}/jpeg/include
-DPNG_STATIC=ON
-DBUILD_SHARED_LIBS=OFF
-Dlzma=OFF
@@ -24,10 +26,12 @@ add_dependencies(
external_tiff
external_zlib
)
-
-if(WIN32 AND BUILD_MODE STREQUAL Debug)
- ExternalProject_Add_Step(external_tiff after_install
- COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tiff/lib/tiffd${LIBEXT} ${LIBDIR}/tiff/lib/tiff${LIBEXT}
- DEPENDEES install
- )
+if(WIN32)
+ if(BUILD_MODE STREQUAL Release)
+ ExternalProject_Add_Step(external_tiff after_install
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tiff/lib/tiff.lib ${HARVEST_TARGET}/tiff/lib/libtiff.lib &&
+ ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/tiff/include/ ${HARVEST_TARGET}/tiff/include/
+ DEPENDEES install
+ )
+ endif()
endif()
diff --git a/build_files/build_environment/cmake/versions.cmake b/build_files/build_environment/cmake/versions.cmake
index 550be86b6b6..95425300923 100644
--- a/build_files/build_environment/cmake/versions.cmake
+++ b/build_files/build_environment/cmake/versions.cmake
@@ -45,15 +45,15 @@ set(PTHREADS_HASH f3bf81bb395840b3446197bcf4ecd653)
set(PTHREADS_HASH_TYPE MD5)
set(PTHREADS_FILE pthreads4w-code-${PTHREADS_VERSION}.zip)
-set(OPENEXR_VERSION 3.1.4)
+set(OPENEXR_VERSION 3.1.5)
set(OPENEXR_URI https://github.com/AcademySoftwareFoundation/openexr/archive/v${OPENEXR_VERSION}.tar.gz)
-set(OPENEXR_HASH e990be1ff765797bc2d93a8060e1c1f2)
+set(OPENEXR_HASH a92f38eedd43e56c0af56d4852506886)
set(OPENEXR_HASH_TYPE MD5)
set(OPENEXR_FILE openexr-${OPENEXR_VERSION}.tar.gz)
-set(IMATH_VERSION 3.1.4)
+set(IMATH_VERSION 3.1.5)
set(IMATH_URI https://github.com/AcademySoftwareFoundation/Imath/archive/v${OPENEXR_VERSION}.tar.gz)
-set(IMATH_HASH fddf14ec73e12c34e74c3c175e311a3f)
+set(IMATH_HASH dd375574276c54872b7b3d54053baff0)
set(IMATH_HASH_TYPE MD5)
set(IMATH_FILE imath-${IMATH_VERSION}.tar.gz)
@@ -80,11 +80,11 @@ set(FREETYPE_HASH bd4e3b007474319909a6b79d50908e85)
set(FREETYPE_HASH_TYPE MD5)
set(FREETYPE_FILE freetype-${FREETYPE_VERSION}.tar.gz)
-set(GLEW_VERSION 1.13.0)
-set(GLEW_URI http://prdownloads.sourceforge.net/glew/glew/${GLEW_VERSION}/glew-${GLEW_VERSION}.tgz)
-set(GLEW_HASH 7cbada3166d2aadfc4169c4283701066)
-set(GLEW_HASH_TYPE MD5)
-set(GLEW_FILE glew-${GLEW_VERSION}.tgz)
+set(EPOXY_VERSION 1.5.10)
+set(EPOXY_URI https://github.com/anholt/libepoxy/archive/refs/tags/${EPOXY_VERSION}.tar.gz)
+set(EPOXY_HASH f0730aad115c952e77591fcc805b1dc1)
+set(EPOXY_HASH_TYPE MD5)
+set(EPOXY_FILE libepoxy-${EPOXY_VERSION}.tar.gz)
set(FREEGLUT_VERSION 3.0.0)
set(FREEGLUT_URI http://prdownloads.sourceforge.net/freeglut/freeglut/${FREEGLUT_VERSION}/freeglut-${FREEGLUT_VERSION}.tar.gz)
@@ -147,7 +147,7 @@ set(OPENIMAGEIO_HASH de45fb38501c4581062b522b53b6141c)
set(OPENIMAGEIO_HASH_TYPE MD5)
set(OPENIMAGEIO_FILE OpenImageIO-${OPENIMAGEIO_VERSION}.tar.gz)
-# 8.0.0 is currently oiio's preferred vesion although never versions may be available.
+# 8.0.0 is currently oiio's preferred version although never versions may be available.
# the preferred version can be found in oiio's externalpackages.cmake
set(FMT_VERSION 8.0.0)
set(FMT_URI https://github.com/fmtlib/fmt/archive/refs/tags/${FMT_VERSION}.tar.gz)
@@ -155,7 +155,7 @@ set(FMT_HASH 7bce0e9e022e586b178b150002e7c2339994e3c2bbe44027e9abb0d60f9cce83)
set(FMT_HASH_TYPE SHA256)
set(FMT_FILE fmt-${FMT_VERSION}.tar.gz)
-# 0.6.2 is currently oiio's preferred vesion although never versions may be available.
+# 0.6.2 is currently oiio's preferred version although never versions may be available.
# the preferred version can be found in oiio's externalpackages.cmake
set(ROBINMAP_VERSION v0.6.2)
set(ROBINMAP_URI https://github.com/Tessil/robin-map/archive/refs/tags/${ROBINMAP_VERSION}.tar.gz)
@@ -163,9 +163,9 @@ set(ROBINMAP_HASH c08ec4b1bf1c85eb0d6432244a6a89862229da1cb834f3f90fba8dc35d8c8e
set(ROBINMAP_HASH_TYPE SHA256)
set(ROBINMAP_FILE robinmap-${ROBINMAP_VERSION}.tar.gz)
-set(TIFF_VERSION 4.3.0)
+set(TIFF_VERSION 4.4.0)
set(TIFF_URI http://download.osgeo.org/libtiff/tiff-${TIFF_VERSION}.tar.gz)
-set(TIFF_HASH 0a2e4744d1426a8fc8211c0cdbc3a1b3)
+set(TIFF_HASH 376f17f189e9d02280dfe709b2b2bbea)
set(TIFF_HASH_TYPE MD5)
set(TIFF_FILE tiff-${TIFF_VERSION}.tar.gz)
@@ -410,9 +410,9 @@ set(SQLITE_HASH fb558c49ee21a837713c4f1e7e413309aabdd9c7)
set(SQLITE_HASH_TYPE SHA1)
set(SQLITE_FILE sqlite-src-3240000.zip)
-set(EMBREE_VERSION 3.13.3)
+set(EMBREE_VERSION 3.13.4)
set(EMBREE_URI https://github.com/embree/embree/archive/v${EMBREE_VERSION}.zip)
-set(EMBREE_HASH f62766ba54e48a2f327c3a22596e7133)
+set(EMBREE_HASH 52d0be294d6c88ba7a6c9e046796e7be)
set(EMBREE_HASH_TYPE MD5)
set(EMBREE_FILE embree-v${EMBREE_VERSION}.zip)
@@ -488,8 +488,11 @@ set(ZSTD_HASH 5194fbfa781fcf45b98c5e849651aa7b3b0a008c6b72d4a0db760f3002291e94)
set(ZSTD_HASH_TYPE SHA256)
set(ZSTD_FILE zstd-${ZSTD_VERSION}.tar.gz)
-set(SSE2NEON_GIT https://github.com/DLTcollab/sse2neon.git)
-set(SSE2NEON_GIT_HASH fe5ff00bb8d19b327714a3c290f3e2ce81ba3525)
+set(SSE2NEON_VERSION fe5ff00bb8d19b327714a3c290f3e2ce81ba3525)
+set(SSE2NEON_URI https://github.com/DLTcollab/sse2neon/archive/${SSE2NEON_VERSION}.tar.gz)
+set(SSE2NEON_HASH 0780253525d299c31775ef95853698d03db9c7739942af8570000f4a25a5d605)
+set(SSE2NEON_HASH_TYPE SHA256)
+set(SSE2NEON_FILE sse2neon-${SSE2NEON_VERSION}.tar.gz)
set(BROTLI_VERSION v1.0.9)
set(BROTLI_URI https://github.com/google/brotli/archive/refs/tags/${BROTLI_VERSION}.tar.gz)
@@ -502,3 +505,140 @@ set(LEVEL_ZERO_URI https://github.com/oneapi-src/level-zero/archive/refs/tags/${
set(LEVEL_ZERO_HASH c39bb05a8e5898aa6c444e1704105b93d3f1888b9c333f8e7e73825ffbfb2617)
set(LEVEL_ZERO_HASH_TYPE SHA256)
set(LEVEL_ZERO_FILE level-zero-${LEVEL_ZERO_VERSION}.tar.gz)
+
+set(DPCPP_VERSION 20220812)
+set(DPCPP_URI https://github.com/intel/llvm/archive/refs/tags/sycl-nightly/${DPCPP_VERSION}.tar.gz)
+set(DPCPP_HASH 0e3c95346c295f5cf80f3a42d80b1c49481955898530242636ddc002627248d6)
+set(DPCPP_HASH_TYPE SHA256)
+set(DPCPP_FILE DPCPP-${DPCPP_VERSION}.tar.gz)
+
+########################
+### DPCPP DEPS BEGIN ###
+########################
+# The following deps are build time requirements for dpcpp, when possible
+# the source in the dpcpp source tree for the version chosen is documented
+# by each dep, these will only have to be downloaded and unpacked, dpcpp
+# will take care of building them, unpack is being done in dpcpp_deps.cmake
+
+# Source llvm/lib/SYCLLowerIR/CMakeLists.txt
+set(VCINTRINSICS_VERSION 984bb27baacce6ee5c716c2e64845f2a1928025b)
+set(VCINTRINSICS_URI https://github.com/intel/vc-intrinsics/archive/${VCINTRINSICS_VERSION}.tar.gz)
+set(VCINTRINSICS_HASH abea415a15a0dd11fdc94dee8fb462910f2548311b787e02f42509789e1b0d7b)
+set(VCINTRINSICS_HASH_TYPE SHA256)
+set(VCINTRINSICS_FILE vc-intrinsics-${VCINTRINSICS_VERSION}.tar.gz)
+
+# Source opencl/CMakeLists.txt
+set(OPENCLHEADERS_VERSION dcd5bede6859d26833cd85f0d6bbcee7382dc9b3)
+set(OPENCLHEADERS_URI https://github.com/KhronosGroup/OpenCL-Headers/archive/${OPENCLHEADERS_VERSION}.tar.gz)
+set(OPENCLHEADERS_HASH ca8090359654e94f2c41e946b7e9d826253d795ae809ce7c83a7d3c859624693)
+set(OPENCLHEADERS_HASH_TYPE SHA256)
+set(OPENCLHEADERS_FILE opencl_headers-${OPENCLHEADERS_VERSION}.tar.gz)
+
+# Source opencl/CMakeLists.txt
+set(ICDLOADER_VERSION aec3952654832211636fc4af613710f80e203b0a)
+set(ICDLOADER_URI https://github.com/KhronosGroup/OpenCL-ICD-Loader/archive/${ICDLOADER_VERSION}.tar.gz)
+set(ICDLOADER_HASH e1880551d67bd8dc31d13de63b94bbfd6b1f315b6145dad1ffcd159b89bda93c)
+set(ICDLOADER_HASH_TYPE SHA256)
+set(ICDLOADER_FILE icdloader-${ICDLOADER_VERSION}.tar.gz)
+
+# Source sycl/cmake/modules/AddBoostMp11Headers.cmake
+# Using external MP11 here, getting AddBoostMp11Headers.cmake to recognize
+# our copy in boost directly was more trouble than it was worth.
+set(MP11_VERSION 7bc4e1ae9b36ec8ee635c3629b59ec525bbe82b9)
+set(MP11_URI https://github.com/boostorg/mp11/archive/${MP11_VERSION}.tar.gz)
+set(MP11_HASH 071ee2bd3952ec89882edb3af25dd1816f6b61723f66e42eea32f4d02ceef426)
+set(MP11_HASH_TYPE SHA256)
+set(MP11_FILE mp11-${MP11_VERSION}.tar.gz)
+
+# Source llvm-spirv/CMakeLists.txt (repo)
+# Source llvm-spirv/spirv-headers-tag.conf (hash)
+set(SPIRV_HEADERS_VERSION 36c0c1596225e728bd49abb7ef56a3953e7ed468)
+set(SPIRV_HEADERS_URI https://github.com/KhronosGroup/SPIRV-Headers/archive/${SPIRV_HEADERS_VERSION}.tar.gz)
+set(SPIRV_HEADERS_HASH 7a5c89633f8740456fe8adee052033e134476d267411d1336c0cb1e587a9229a)
+set(SPIRV_HEADERS_HASH_TYPE SHA256)
+set(SPIRV_HEADERS_FILE SPIR-V-Headers-${SPIRV_HEADERS_VERSION}.tar.gz)
+
+######################
+### DPCPP DEPS END ###
+######################
+
+##########################################
+### Intel Graphics Compiler DEPS BEGIN ###
+##########################################
+# The following deps are build time requirements for the intel graphics
+# compiler, the versions used are taken from the following location
+# https://github.com/intel/intel-graphics-compiler/releases
+
+set(IGC_VERSION 1.0.11222)
+set(IGC_URI https://github.com/intel/intel-graphics-compiler/archive/refs/tags/igc-${IGC_VERSION}.tar.gz)
+set(IGC_HASH d92f0608dcbb52690855685f9447282e5c09c0ba98ae35fabf114fcf8b1e9fcf)
+set(IGC_HASH_TYPE SHA256)
+set(IGC_FILE igc-${IGC_VERSION}.tar.gz)
+
+set(IGC_LLVM_VERSION llvmorg-11.1.0)
+set(IGC_LLVM_URI https://github.com/llvm/llvm-project/archive/refs/tags/${IGC_LLVM_VERSION}.tar.gz)
+set(IGC_LLVM_HASH 53a0719f3f4b0388013cfffd7b10c7d5682eece1929a9553c722348d1f866e79)
+set(IGC_LLVM_HASH_TYPE SHA256)
+set(IGC_LLVM_FILE ${IGC_LLVM_VERSION}.tar.gz)
+
+# WARNING WARNING WARNING
+#
+# IGC_OPENCL_CLANG contains patches for some of its dependencies.
+#
+# Whenever IGC_OPENCL_CLANG_VERSION changes, one *MUST* inspect
+# IGC_OPENCL_CLANG's patches folder and update igc.cmake to account for
+# any added or removed patches.
+#
+# WARNING WARNING WARNING
+
+set(IGC_OPENCL_CLANG_VERSION bbdd1587f577397a105c900be114b56755d1f7dc)
+set(IGC_OPENCL_CLANG_URI https://github.com/intel/opencl-clang/archive/${IGC_OPENCL_CLANG_VERSION}.tar.gz)
+set(IGC_OPENCL_CLANG_HASH d08315f1b0d8a6fef33de2b3e6aa7356534c324910634962c72523d970773efc)
+set(IGC_OPENCL_CLANG_HASH_TYPE SHA256)
+set(IGC_OPENCL_CLANG_FILE opencl-clang-${IGC_OPENCL_CLANG_VERSION}.tar.gz)
+
+set(IGC_VCINTRINSICS_VERSION v0.4.0)
+set(IGC_VCINTRINSICS_URI https://github.com/intel/vc-intrinsics/archive/refs/tags/${IGC_VCINTRINSICS_VERSION}.tar.gz)
+set(IGC_VCINTRINSICS_HASH c8b92682ad5031cf9d5b82a40e7d5c0e763cd9278660adbcaa69aab988e4b589)
+set(IGC_VCINTRINSICS_HASH_TYPE SHA256)
+set(IGC_VCINTRINSICS_FILE vc-intrinsics-${IGC_VCINTRINSICS_VERSION}.tar.gz)
+
+set(IGC_SPIRV_HEADERS_VERSION sdk-1.3.204.1)
+set(IGC_SPIRV_HEADERS_URI https://github.com/KhronosGroup/SPIRV-Headers/archive/refs/tags/${IGC_SPIRV_HEADERS_VERSION}.tar.gz)
+set(IGC_SPIRV_HEADERS_HASH 262864053968c217d45b24b89044a7736a32361894743dd6cfe788df258c746c)
+set(IGC_SPIRV_HEADERS_HASH_TYPE SHA256)
+set(IGC_SPIRV_HEADERS_FILE SPIR-V-Headers-${IGC_SPIRV_HEADERS_VERSION}.tar.gz)
+
+set(IGC_SPIRV_TOOLS_VERSION sdk-1.3.204.1)
+set(IGC_SPIRV_TOOLS_URI https://github.com/KhronosGroup/SPIRV-Tools/archive/refs/tags/${IGC_SPIRV_TOOLS_VERSION}.tar.gz)
+set(IGC_SPIRV_TOOLS_HASH 6e19900e948944243024aedd0a201baf3854b377b9cc7a386553bc103b087335)
+set(IGC_SPIRV_TOOLS_HASH_TYPE SHA256)
+set(IGC_SPIRV_TOOLS_FILE SPIR-V-Tools-${IGC_SPIRV_TOOLS_VERSION}.tar.gz)
+
+set(IGC_SPIRV_TRANSLATOR_VERSION 99420daab98998a7e36858befac9c5ed109d4920)
+set(IGC_SPIRV_TRANSLATOR_URI https://github.com/KhronosGroup/SPIRV-LLVM-Translator/archive/${IGC_SPIRV_TRANSLATOR_VERSION}.tar.gz)
+set(IGC_SPIRV_TRANSLATOR_HASH 77dfb4ddb6bfb993535562c02ddea23f0a0d1c5a0258c1afe7e27c894ff783a8)
+set(IGC_SPIRV_TRANSLATOR_HASH_TYPE SHA256)
+set(IGC_SPIRV_TRANSLATOR_FILE SPIR-V-Translator-${IGC_SPIRV_TRANSLATOR_VERSION}.tar.gz)
+
+########################################
+### Intel Graphics Compiler DEPS END ###
+########################################
+
+set(GMMLIB_VERSION intel-gmmlib-22.1.2)
+set(GMMLIB_URI https://github.com/intel/gmmlib/archive/refs/tags/${GMMLIB_VERSION}.tar.gz)
+set(GMMLIB_HASH 3b9a6d5e7e3f5748b3d0a2fb0e980ae943907fece0980bd9c0508e71c838e334)
+set(GMMLIB_HASH_TYPE SHA256)
+set(GMMLIB_FILE ${GMMLIB_VERSION}.tar.gz)
+
+set(OCLOC_VERSION 22.20.23198)
+set(OCLOC_URI https://github.com/intel/compute-runtime/archive/refs/tags/${OCLOC_VERSION}.tar.gz)
+set(OCLOC_HASH ab22b8bf2560a57fdd3def0e35a62ca75991406f959c0263abb00cd6cd9ae998)
+set(OCLOC_HASH_TYPE SHA256)
+set(OCLOC_FILE ocloc-${OCLOC_VERSION}.tar.gz)
+
+set(AOM_VERSION 3.4.0)
+set(AOM_URI https://storage.googleapis.com/aom-releases/libaom-${AOM_VERSION}.tar.gz)
+set(AOM_HASH bd754b58c3fa69f3ffd29da77de591bd9c26970e3b18537951336d6c0252e354)
+set(AOM_HASH_TYPE SHA256)
+set(AOM_FILE libaom-${AOM_VERSION}.tar.gz)
diff --git a/build_files/build_environment/cmake/vpx.cmake b/build_files/build_environment/cmake/vpx.cmake
index ba17acad80f..111e93e79e1 100644
--- a/build_files/build_environment/cmake/vpx.cmake
+++ b/build_files/build_environment/cmake/vpx.cmake
@@ -1,11 +1,13 @@
# SPDX-License-Identifier: GPL-2.0-or-later
if(WIN32)
- if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
- set(VPX_EXTRA_FLAGS --target=x86_64-win64-gcc --disable-multithread)
- else()
- set(VPX_EXTRA_FLAGS --target=x86-win32-gcc --disable-multithread)
- endif()
+ # VPX is determined to use pthreads which it will tell ffmpeg to dynamically
+ # link, which is not something we're super into distribution wise. However
+ # if it cannot find pthread.h it'll happily provide a pthread emulation
+ # layer using win32 threads. So all this patch does is make it not find
+ # pthead.h
+ set(VPX_PATCH ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/vpx/src/external_vpx < ${PATCH_DIR}/vpx_windows.diff)
+ set(VPX_EXTRA_FLAGS --target=x86_64-win64-gcc )
else()
if(APPLE)
if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")
@@ -18,6 +20,16 @@ else()
endif()
endif()
+if(NOT BLENDER_PLATFORM_ARM)
+ list(APPEND VPX_EXTRA_FLAGS
+ --enable-sse4_1
+ --enable-sse3
+ --enable-ssse3
+ --enable-avx
+ --enable-avx2
+ )
+endif()
+
ExternalProject_Add(external_vpx
URL file://${PACKAGE_DIR}/${VPX_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
@@ -30,11 +42,6 @@ ExternalProject_Add(external_vpx
--enable-static
--disable-install-bins
--disable-install-srcs
- --disable-sse4_1
- --disable-sse3
- --disable-ssse3
- --disable-avx
- --disable-avx2
--disable-unit-tests
--disable-examples
--enable-vp8
@@ -42,6 +49,7 @@ ExternalProject_Add(external_vpx
${VPX_EXTRA_FLAGS}
BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/vpx/src/external_vpx/ && make -j${MAKE_THREADS}
INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/vpx/src/external_vpx/ && make install
+ PATCH_COMMAND ${VPX_PATCH}
INSTALL_DIR ${LIBDIR}/vpx
)
diff --git a/build_files/build_environment/install_deps.sh b/build_files/build_environment/install_deps.sh
index 81db928a477..814834ccf34 100755
--- a/build_files/build_environment/install_deps.sh
+++ b/build_files/build_environment/install_deps.sh
@@ -465,7 +465,7 @@ TBB_VERSION="2020"
TBB_VERSION_SHORT="2020"
TBB_VERSION_UPDATE="_U3" # Used for source packages...
TBB_VERSION_MIN="2018"
-TBB_VERSION_MEX="2022"
+TBB_VERSION_MEX="2021" # 2021 introduces 'oneTBB', which has lots of compatibility breakage with previous versions
TBB_FORCE_BUILD=false
TBB_FORCE_REBUILD=false
TBB_SKIP=false
@@ -478,7 +478,7 @@ OCIO_FORCE_BUILD=false
OCIO_FORCE_REBUILD=false
OCIO_SKIP=false
-IMATH_VERSION="3.1.4"
+IMATH_VERSION="3.1.5"
IMATH_VERSION_SHORT="3.1"
IMATH_VERSION_MIN="3.0"
IMATH_VERSION_MEX="4.0"
@@ -487,7 +487,7 @@ IMATH_FORCE_REBUILD=false
IMATH_SKIP=false
_with_built_imath=false
-OPENEXR_VERSION="3.1.4"
+OPENEXR_VERSION="3.1.5"
OPENEXR_VERSION_SHORT="3.1"
OPENEXR_VERSION_MIN="3.0"
OPENEXR_VERSION_MEX="4.0"
@@ -567,7 +567,7 @@ OPENCOLLADA_FORCE_BUILD=false
OPENCOLLADA_FORCE_REBUILD=false
OPENCOLLADA_SKIP=false
-EMBREE_VERSION="3.13.3"
+EMBREE_VERSION="3.13.4"
EMBREE_VERSION_SHORT="3.13"
EMBREE_VERSION_MIN="3.13"
EMBREE_VERSION_MEX="4.0"
@@ -627,6 +627,9 @@ WEBP_DEV=""
VPX_USE=false
VPX_VERSION_MIN=0.9.7
VPX_DEV=""
+AOM_USE=false
+AOM_VERSION_MIN=3.3.0
+AOM_DEV=""
OPUS_USE=false
OPUS_VERSION_MIN=1.1.1
OPUS_DEV=""
@@ -635,9 +638,6 @@ MP3LAME_DEV=""
OPENJPEG_USE=false
OPENJPEG_DEV=""
-# Whether to use system GLEW or not (OpenSubDiv needs recent glew to work).
-NO_SYSTEM_GLEW=false
-
# Switch to english language, else some things (like check_package_DEB()) won't work!
LANG_BACK=$LANG
LANG=""
@@ -1193,7 +1193,7 @@ Those libraries should be available as packages in all recent distributions (opt
* libx11, libxcursor, libxi, libxrandr, libxinerama (and other libx... as needed).
* libwayland-client0, libwayland-cursor0, libwayland-egl1, libxkbcommon0, libdbus-1-3, libegl1 (Wayland)
* libsqlite3, libzstd, libbz2, libssl, libfftw3, libxml2, libtinyxml, yasm, libyaml-cpp, flex.
- * libsdl2, libglew, libpugixml, libpotrace, [libgmp], [libglewmx], fontconfig, [libharu/libhpdf].\""
+ * libsdl2, libepoxy, libpugixml, libpotrace, [libgmp], fontconfig, [libharu/libhpdf].\""
DEPS_SPECIFIC_INFO="\"BUILDABLE DEPENDENCIES:
@@ -1212,7 +1212,7 @@ You may also want to build them yourself (optional ones are [between brackets]):
** [NumPy $PYTHON_NUMPY_VERSION] (use pip).
* Boost $BOOST_VERSION (from $BOOST_SOURCE, modules: $BOOST_BUILD_MODULES).
* TBB $TBB_VERSION (from $TBB_SOURCE).
- * [FFMpeg $FFMPEG_VERSION (needs libvorbis, libogg, libtheora, libx264, libmp3lame, libxvidcore, libvpx, libwebp, ...)] (from $FFMPEG_SOURCE).
+ * [FFMpeg $FFMPEG_VERSION (needs libvorbis, libogg, libtheora, libx264, libmp3lame, libxvidcore, libvpx, libaom, libwebp, ...)] (from $FFMPEG_SOURCE).
* [OpenColorIO $OCIO_VERSION] (from $OCIO_SOURCE).
* Imath $IMATH_VERSION (from $IMATH_SOURCE).
* OpenEXR $OPENEXR_VERSION (from $OPENEXR_SOURCE).
@@ -1687,7 +1687,7 @@ compile_TBB() {
fi
# To be changed each time we make edits that would modify the compiled result!
- tbb_magic=0
+ tbb_magic=1
_init_tbb
# Force having own builds for the dependencies.
@@ -2696,14 +2696,13 @@ compile_OSD() {
mkdir build
cd build
+ cmake_d="-D CMAKE_BUILD_TYPE=Release"
if [ -d $INST/tbb ]; then
- cmake_d="$cmake_d $cmake_d -D TBB_LOCATION=$INST/tbb"
+ cmake_d="$cmake_d -D TBB_LOCATION=$INST/tbb"
fi
- cmake_d="-D CMAKE_BUILD_TYPE=Release"
cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
- # ptex is only needed when nicholas bishop is ready
cmake_d="$cmake_d -D NO_PTEX=1"
- cmake_d="$cmake_d -D NO_CLEW=1 -D NO_CUDA=1 -D NO_OPENCL=1"
+ cmake_d="$cmake_d -D NO_CLEW=1 -D NO_CUDA=1 -D NO_OPENCL=1 -D NO_GLEW=1"
# maya plugin, docs, tutorials, regression tests and examples are not needed
cmake_d="$cmake_d -D NO_MAYA=1 -D NO_DOC=1 -D NO_TUTORIALS=1 -D NO_REGRESSION=1 -DNO_EXAMPLES=1"
@@ -3004,7 +3003,7 @@ compile_ALEMBIC() {
fi
# To be changed each time we make edits that would modify the compiled result!
- alembic_magic=2
+ alembic_magic=3
_init_alembic
# Force having own builds for the dependencies.
@@ -3052,7 +3051,7 @@ compile_ALEMBIC() {
fi
if [ "$_with_built_openexr" = true ]; then
cmake_d="$cmake_d -D USE_ARNOLD=OFF"
- cmake_d="$cmake_d -D USE_BINARIES=OFF"
+ cmake_d="$cmake_d -D USE_BINARIES=ON" # Tests use some Alembic binaries...
cmake_d="$cmake_d -D USE_EXAMPLES=OFF"
cmake_d="$cmake_d -D USE_HDF5=OFF"
cmake_d="$cmake_d -D USE_MAYA=OFF"
@@ -3326,7 +3325,7 @@ compile_Embree() {
fi
# To be changed each time we make edits that would modify the compiled results!
- embree_magic=10
+ embree_magic=11
_init_embree
# Force having own builds for the dependencies.
@@ -3386,7 +3385,7 @@ compile_Embree() {
cmake_d="$cmake_d -D EMBREE_TASKING_SYSTEM=TBB"
if [ -d $INST/tbb ]; then
- make_d="$make_d EMBREE_TBB_ROOT=$INST/tbb"
+ cmake_d="$cmake_d -D EMBREE_TBB_ROOT=$INST/tbb"
fi
cmake $cmake_d ../
@@ -3525,7 +3524,7 @@ compile_OIDN() {
install_ISPC
# To be changed each time we make edits that would modify the compiled results!
- oidn_magic=9
+ oidn_magic=10
_init_oidn
# Force having own builds for the dependencies.
@@ -3581,7 +3580,7 @@ compile_OIDN() {
cmake_d="$cmake_d -D ISPC_DIR_HINT=$_ispc_path_bin"
if [ -d $INST/tbb ]; then
- make_d="$make_d TBB_ROOT=$INST/tbb"
+ cmake_d="$cmake_d -D TBB_ROOT=$INST/tbb"
fi
cmake $cmake_d ../
@@ -3638,7 +3637,7 @@ compile_FFmpeg() {
fi
# To be changed each time we make edits that would modify the compiled result!
- ffmpeg_magic=5
+ ffmpeg_magic=6
_init_ffmpeg
# Force having own builds for the dependencies.
@@ -3691,6 +3690,10 @@ compile_FFmpeg() {
extra="$extra --enable-libvpx"
fi
+ if [ "$AOM_USE" = true ]; then
+ extra="$extra --enable-libaom"
+ fi
+
if [ "$WEBP_USE" = true ]; then
extra="$extra --enable-libwebp"
fi
@@ -4059,10 +4062,9 @@ install_DEB() {
libxcursor-dev libxi-dev wget libsqlite3-dev libxrandr-dev libxinerama-dev \
libwayland-dev wayland-protocols libegl-dev libxkbcommon-dev libdbus-1-dev linux-libc-dev \
libbz2-dev libncurses5-dev libssl-dev liblzma-dev libreadline-dev \
- libopenal-dev libglew-dev yasm \
+ libopenal-dev libepoxy-dev yasm \
libsdl2-dev libfftw3-dev patch bzip2 libxml2-dev libtinyxml-dev libjemalloc-dev \
libgmp-dev libpugixml-dev libpotrace-dev libhpdf-dev libzstd-dev libpystring-dev"
- # libglewmx-dev (broken in deb testing currently...)
VORBIS_USE=true
OGG_USE=true
@@ -4145,33 +4147,37 @@ install_DEB() {
WEBP_USE=true
fi
- if [ "$WITH_ALL" = true ]; then
- XVID_DEV="libxvidcore-dev"
- check_package_DEB $XVID_DEV
- if [ $? -eq 0 ]; then
- XVID_USE=true
- fi
+ XVID_DEV="libxvidcore-dev"
+ check_package_DEB $XVID_DEV
+ if [ $? -eq 0 ]; then
+ XVID_USE=true
+ fi
- MP3LAME_DEV="libmp3lame-dev"
- check_package_DEB $MP3LAME_DEV
- if [ $? -eq 0 ]; then
- MP3LAME_USE=true
- fi
+ MP3LAME_DEV="libmp3lame-dev"
+ check_package_DEB $MP3LAME_DEV
+ if [ $? -eq 0 ]; then
+ MP3LAME_USE=true
+ fi
- VPX_DEV="libvpx-dev"
- check_package_version_ge_DEB $VPX_DEV $VPX_VERSION_MIN
- if [ $? -eq 0 ]; then
- VPX_USE=true
- fi
+ VPX_DEV="libvpx-dev"
+ check_package_version_ge_DEB $VPX_DEV $VPX_VERSION_MIN
+ if [ $? -eq 0 ]; then
+ VPX_USE=true
+ fi
- OPUS_DEV="libopus-dev"
- check_package_version_ge_DEB $OPUS_DEV $OPUS_VERSION_MIN
- if [ $? -eq 0 ]; then
- OPUS_USE=true
- fi
+ AOM_DEV="libaom-dev"
+ check_package_version_ge_DEB $AOM_DEV $AOM_VERSION_MIN
+ if [ $? -eq 0 ]; then
+ AOM_USE=true
+ fi
+
+ OPUS_DEV="libopus-dev"
+ check_package_version_ge_DEB $OPUS_DEV $OPUS_VERSION_MIN
+ if [ $? -eq 0 ]; then
+ OPUS_USE=true
fi
- # Check cmake/glew versions and disable features for older distros.
+ # Check cmake version and disable features for older distros.
# This is so Blender can at least compile.
PRINT ""
_cmake=`get_package_version_DEB cmake`
@@ -4189,28 +4195,6 @@ install_DEB() {
fi
PRINT ""
- _glew=`get_package_version_DEB libglew-dev`
- if [ -z $_glew ]; then
- # Stupid virtual package in Ubuntu 12.04 doesn't show version number...
- _glew=`apt-cache showpkg libglew-dev|tail -n1|awk '{print $2}'|sed 's/-.*//'`
- fi
- version_ge $_glew "1.9.0"
- if [ $? -eq 1 ]; then
- version_ge $_glew "1.7.0"
- if [ $? -eq 1 ]; then
- WARNING "OpenSubdiv disabled because GLEW-$_glew is not enough"
- WARNING "Blender will not use system GLEW library"
- OSD_SKIP=true
- NO_SYSTEM_GLEW=true
- else
- WARNING "OpenSubdiv will compile with GLEW-$_glew but with limited capability"
- WARNING "Blender will not use system GLEW library"
- NO_SYSTEM_GLEW=true
- fi
- fi
-
-
- PRINT ""
_do_compile_python=false
if [ "$PYTHON_SKIP" = true ]; then
WARNING "Skipping Python installation, as requested..."
@@ -4573,6 +4557,9 @@ install_DEB() {
if [ "$VPX_USE" = true ]; then
_packages="$_packages $VPX_DEV"
fi
+ if [ "$AOM_USE" = true ]; then
+ _packages="$_packages $AOM_DEV"
+ fi
if [ "$OPUS_USE" = true ]; then
_packages="$_packages $OPUS_DEV"
fi
@@ -4785,7 +4772,7 @@ install_RPM() {
libX11-devel libXi-devel libXcursor-devel libXrandr-devel libXinerama-devel \
wayland-devel wayland-protocols-devel mesa-libEGL-devel libxkbcommon-devel dbus-devel kernel-headers \
wget ncurses-devel readline-devel $OPENJPEG_DEV openal-soft-devel \
- glew-devel yasm patch \
+ libepoxy-devel yasm patch \
libxml2-devel yaml-cpp-devel tinyxml-devel jemalloc-devel \
gmp-devel pugixml-devel potrace-devel libharu-devel libzstd-devel pystring-devel"
@@ -4873,21 +4860,27 @@ install_RPM() {
WEBP_USE=true
fi
- if [ "$WITH_ALL" = true ]; then
- VPX_DEV="libvpx-devel"
- check_package_version_ge_RPM $VPX_DEV $VPX_VERSION_MIN
- if [ $? -eq 0 ]; then
- VPX_USE=true
- fi
+ VPX_DEV="libvpx-devel"
+ check_package_version_ge_RPM $VPX_DEV $VPX_VERSION_MIN
+ if [ $? -eq 0 ]; then
+ VPX_USE=true
+ fi
+
+ AOM_DEV="libaom-devel"
+ check_package_version_ge_RPM $AOM_DEV $AOM_VERSION_MIN
+ if [ $? -eq 0 ]; then
+ AOM_USE=true
+ fi
+ OPUS_DEV="libopus-devel"
+ check_package_version_ge_RPM $OPUS_DEV $OPUS_VERSION_MIN
+ if [ $? -eq 0 ]; then
+ OPUS_USE=true
+ fi
+
+ if [ "$WITH_ALL" = true ]; then
PRINT ""
install_packages_RPM libspnav-devel
-
- OPUS_DEV="libopus-devel"
- check_package_version_ge_RPM $OPUS_DEV $OPUS_VERSION_MIN
- if [ $? -eq 0 ]; then
- OPUS_USE=true
- fi
fi
PRINT ""
@@ -5272,6 +5265,9 @@ install_RPM() {
if [ "$VPX_USE" = true ]; then
_packages="$_packages $VPX_DEV"
fi
+ if [ "$AOM_USE" = true ]; then
+ _packages="$_packages $AOM_DEV"
+ fi
if [ "$OPUS_USE" = true ]; then
_packages="$_packages $OPUS_DEV"
fi
@@ -5416,7 +5412,7 @@ install_ARCH() {
fi
_packages="$BASE_DEVEL git cmake fontconfig flex \
- libxi libxcursor libxrandr libxinerama glew libpng libtiff wget openal \
+ libxi libxcursor libxrandr libxinerama libepoxy libpng libtiff wget openal \
$OPENJPEG_DEV yasm sdl2 fftw \
libxml2 yaml-cpp tinyxml python-requests jemalloc gmp potrace pugixml libharu \
zstd pystring"
@@ -5461,30 +5457,34 @@ install_ARCH() {
WEBP_USE=true
fi
- if [ "$WITH_ALL" = true ]; then
- XVID_DEV="xvidcore"
- check_package_ARCH $XVID_DEV
- if [ $? -eq 0 ]; then
- XVID_USE=true
- fi
+ XVID_DEV="xvidcore"
+ check_package_ARCH $XVID_DEV
+ if [ $? -eq 0 ]; then
+ XVID_USE=true
+ fi
- MP3LAME_DEV="lame"
- check_package_ARCH $MP3LAME_DEV
- if [ $? -eq 0 ]; then
- MP3LAME_USE=true
- fi
+ MP3LAME_DEV="lame"
+ check_package_ARCH $MP3LAME_DEV
+ if [ $? -eq 0 ]; then
+ MP3LAME_USE=true
+ fi
- VPX_DEV="libvpx"
- check_package_version_ge_ARCH $VPX_DEV $VPX_VERSION_MIN
- if [ $? -eq 0 ]; then
- VPX_USE=true
- fi
+ VPX_DEV="libvpx"
+ check_package_version_ge_ARCH $VPX_DEV $VPX_VERSION_MIN
+ if [ $? -eq 0 ]; then
+ VPX_USE=true
+ fi
- OPUS_DEV="opus"
- check_package_version_ge_ARCH $OPUS_DEV $OPUS_VERSION_MIN
- if [ $? -eq 0 ]; then
- OPUS_USE=true
- fi
+ AOM_DEV="libaom"
+ check_package_version_ge_ARCH $AOM_DEV $AOM_VERSION_MIN
+ if [ $? -eq 0 ]; then
+ AOM_USE=true
+ fi
+
+ OPUS_DEV="opus"
+ check_package_version_ge_ARCH $OPUS_DEV $OPUS_VERSION_MIN
+ if [ $? -eq 0 ]; then
+ OPUS_USE=true
fi
@@ -5862,6 +5862,9 @@ install_ARCH() {
if [ "$VPX_USE" = true ]; then
_packages="$_packages $VPX_DEV"
fi
+ if [ "$AOM_USE" = true ]; then
+ _packages="$_packages $AOM_DEV"
+ fi
if [ "$OPUS_USE" = true ]; then
_packages="$_packages $OPUS_DEV"
fi
@@ -6290,12 +6293,6 @@ print_info() {
fi
fi
- if [ "$NO_SYSTEM_GLEW" = true ]; then
- _1="-D WITH_SYSTEM_GLEW=OFF"
- PRINT " $_1"
- _buildargs="$_buildargs $_1"
- fi
-
if [ "$FFMPEG_SKIP" = false ]; then
_1="-D WITH_CODEC_FFMPEG=ON"
PRINT " $_1"
diff --git a/build_files/build_environment/patches/cmakelists_glew.txt b/build_files/build_environment/patches/cmakelists_glew.txt
deleted file mode 100644
index ec36d4bde63..00000000000
--- a/build_files/build_environment/patches/cmakelists_glew.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-cmake_minimum_required (VERSION 2.4)
-add_subdirectory(build/cmake) \ No newline at end of file
diff --git a/build_files/build_environment/patches/dpcpp.diff b/build_files/build_environment/patches/dpcpp.diff
new file mode 100644
index 00000000000..4a65a6c6cf0
--- /dev/null
+++ b/build_files/build_environment/patches/dpcpp.diff
@@ -0,0 +1,36 @@
+diff -Naur llvm-sycl-nightly-20220501.orig\opencl/CMakeLists.txt llvm-sycl-nightly-20220501\opencl/CMakeLists.txt
+--- llvm-sycl-nightly-20220501.orig/opencl/CMakeLists.txt 2022-04-29 13:47:11 -0600
++++ llvm-sycl-nightly-20220501/opencl/CMakeLists.txt 2022-05-21 15:25:06 -0600
+@@ -11,6 +11,11 @@
+ )
+ endif()
+
++# Blender code below is determined to use FetchContent_Declare
++# temporarily allow it (but feed it our downloaded tarball
++# in the OpenCL_HEADERS variable
++set(FETCHCONTENT_FULLY_DISCONNECTED OFF)
++
+ # Repo URLs
+
+ set(OCL_HEADERS_REPO
+@@ -77,5 +82,6 @@
+
+ FetchContent_MakeAvailable(ocl-icd)
+ add_library(OpenCL-ICD ALIAS OpenCL)
++set(FETCHCONTENT_FULLY_DISCONNECTED ON)
+
+ add_subdirectory(opencl-aot)
+diff -Naur llvm-sycl-nightly-20220208.orig/libdevice/cmake/modules/SYCLLibdevice.cmake llvm-sycl-nightly-20220208/libdevice/cmake/modules/SYCLLibdevice.cmake
+--- llvm-sycl-nightly-20220208.orig/libdevice/cmake/modules/SYCLLibdevice.cmake 2022-02-08 09:17:24 -0700
++++ llvm-sycl-nightly-20220208/libdevice/cmake/modules/SYCLLibdevice.cmake 2022-05-24 11:35:51 -0600
+@@ -36,7 +36,9 @@
+ add_custom_target(libsycldevice-obj)
+ add_custom_target(libsycldevice-spv)
+
+-add_custom_target(libsycldevice DEPENDS
++# Blender: add ALL here otherwise this target will not build
++# and cause an error due to missing files during the install phase.
++add_custom_target(libsycldevice ALL DEPENDS
+ libsycldevice-obj
+ libsycldevice-spv)
+
diff --git a/build_files/build_environment/patches/embree.diff b/build_files/build_environment/patches/embree.diff
index e83d754a465..e448fe5ee2e 100644
--- a/build_files/build_environment/patches/embree.diff
+++ b/build_files/build_environment/patches/embree.diff
@@ -1,30 +1,37 @@
-diff -Naur orig/common/sys/platform.h external_embree/common/sys/platform.h
---- orig/common/sys/platform.h 2020-05-13 23:08:53 -0600
-+++ external_embree/common/sys/platform.h 2020-06-13 17:40:26 -0600
-@@ -84,8 +84,8 @@
- ////////////////////////////////////////////////////////////////////////////////
+diff -Naur org/kernels/rtcore_config.h.in embree-3.13.4/kernels/rtcore_config.h.in
+--- org/kernels/rtcore_config.h.in 2022-06-14 22:13:52 -0600
++++ embree-3.13.4/kernels/rtcore_config.h.in 2022-06-24 15:20:12 -0600
+@@ -14,6 +14,7 @@
+ #cmakedefine01 EMBREE_MIN_WIDTH
+ #define RTC_MIN_WIDTH EMBREE_MIN_WIDTH
+
++#cmakedefine EMBREE_STATIC_LIB
+ #cmakedefine EMBREE_API_NAMESPACE
+
+ #if defined(EMBREE_API_NAMESPACE)
+diff --git a/kernels/CMakeLists.txt b/kernels/CMakeLists.txt
+index 7c2f43d..106b1d5 100644
+--- a/kernels/CMakeLists.txt
++++ b/kernels/CMakeLists.txt
+@@ -201,6 +201,12 @@ embree_files(EMBREE_LIBRARY_FILES_AVX512 ${AVX512})
+ #message("AVX2: ${EMBREE_LIBRARY_FILES_AVX2}")
+ #message("AVX512: ${EMBREE_LIBRARY_FILES_AVX512}")
- #ifdef __WIN32__
--#define dll_export __declspec(dllexport)
--#define dll_import __declspec(dllimport)
-+#define dll_export
-+#define dll_import
- #else
- #define dll_export __attribute__ ((visibility ("default")))
- #define dll_import
-diff --git orig/common/tasking/CMakeLists.txt external_embree/common/tasking/CMakeLists.txt
---- orig/common/tasking/CMakeLists.txt
-+++ external_embree/common/tasking/CMakeLists.txt
-@@ -27,7 +27,11 @@
- else()
- # If not found try getting older TBB via module (FindTBB.cmake)
- unset(TBB_DIR CACHE)
-- find_package(TBB 4.1 REQUIRED tbb)
-+ if (TBB_STATIC_LIB)
-+ find_package(TBB 4.1 REQUIRED tbb_static)
-+ else()
-+ find_package(TBB 4.1 REQUIRED tbb)
-+ endif()
- if (TBB_FOUND)
- TARGET_LINK_LIBRARIES(tasking PUBLIC TBB)
- TARGET_INCLUDE_DIRECTORIES(tasking PUBLIC "${TBB_INCLUDE_DIRS}")
++# Bundle Neon2x into the main static library.
++IF(EMBREE_ISA_NEON2X AND EMBREE_STATIC_LIB)
++ LIST(APPEND EMBREE_LIBRARY_FILES ${EMBREE_LIBRARY_FILES_AVX2})
++ LIST(REMOVE_DUPLICATES EMBREE_LIBRARY_FILES)
++ENDIF()
++
+ # replaces all .cpp files with a dummy file that includes that .cpp file
+ # this is to work around an ICC name mangling issue related to lambda functions under windows
+ MACRO (CreateISADummyFiles list isa)
+@@ -277,7 +283,7 @@ IF (EMBREE_ISA_AVX AND EMBREE_LIBRARY_FILES_AVX)
+ ENDIF()
+ ENDIF()
+
+-IF (EMBREE_ISA_AVX2 AND EMBREE_LIBRARY_FILES_AVX2)
++IF (EMBREE_ISA_AVX2 AND EMBREE_LIBRARY_FILES_AVX2 AND NOT (EMBREE_ISA_NEON2X AND EMBREE_STATIC_LIB))
+ DISABLE_STACK_PROTECTOR_FOR_INTERSECTORS(${EMBREE_LIBRARY_FILES_AVX2})
+ ADD_LIBRARY(embree_avx2 STATIC ${EMBREE_LIBRARY_FILES_AVX2})
+ TARGET_LINK_LIBRARIES(embree_avx2 PRIVATE tasking)
diff --git a/build_files/build_environment/patches/epoxy.diff b/build_files/build_environment/patches/epoxy.diff
new file mode 100644
index 00000000000..b0c3d7ea1dc
--- /dev/null
+++ b/build_files/build_environment/patches/epoxy.diff
@@ -0,0 +1,19 @@
+--- a/src/dispatch_wgl.c 2022-08-04 17:45:13.144924705 +0200
++++ b/src/dispatch_wgl.c 2022-08-04 17:45:47.657482971 +0200
+@@ -78,6 +78,8 @@
+ if (!first_context_current) {
+ first_context_current = true;
+ } else {
++ /* BLENDER: disable slow dispatch table switching. */
++#if 0
+ if (!already_switched_to_dispatch_table) {
+ already_switched_to_dispatch_table = true;
+ gl_switch_to_dispatch_table();
+@@ -86,6 +88,7 @@
+
+ gl_init_dispatch_table();
+ wgl_init_dispatch_table();
++#endif
+ }
+ }
+
diff --git a/build_files/build_environment/patches/igc_opencl_clang.diff b/build_files/build_environment/patches/igc_opencl_clang.diff
new file mode 100644
index 00000000000..adc592dd8b2
--- /dev/null
+++ b/build_files/build_environment/patches/igc_opencl_clang.diff
@@ -0,0 +1,44 @@
+diff -Naur external_igc_opencl_clang.orig/CMakeLists.txt external_igc_opencl_clang/CMakeLists.txt
+--- external_igc_opencl_clang.orig/CMakeLists.txt 2022-03-16 05:51:10 -0600
++++ external_igc_opencl_clang/CMakeLists.txt 2022-05-23 10:40:09 -0600
+@@ -126,22 +126,24 @@
+ )
+ endif()
+
+-
+- set(SPIRV_BASE_REVISION llvm_release_110)
+- set(TARGET_BRANCH "ocl-open-110")
+- get_filename_component(LLVM_MONOREPO_DIR ${LLVM_SOURCE_DIR} DIRECTORY)
+- set(LLVM_PATCHES_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/patches/llvm
+- ${CMAKE_CURRENT_SOURCE_DIR}/patches/clang)
+- apply_patches(${LLVM_MONOREPO_DIR}
+- "${LLVM_PATCHES_DIRS}"
+- ${LLVM_BASE_REVISION}
+- ${TARGET_BRANCH}
+- ret)
+- apply_patches(${SPIRV_SOURCE_DIR}
+- ${CMAKE_CURRENT_SOURCE_DIR}/patches/spirv
+- ${SPIRV_BASE_REVISION}
+- ${TARGET_BRANCH}
+- ret)
++ #
++ # Blender: Why apply these manually in igc.cmake
++ #
++ #set(SPIRV_BASE_REVISION llvm_release_110)
++ #set(TARGET_BRANCH "ocl-open-110")
++ #get_filename_component(LLVM_MONOREPO_DIR ${LLVM_SOURCE_DIR} DIRECTORY)
++ #set(LLVM_PATCHES_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/patches/llvm
++ # ${CMAKE_CURRENT_SOURCE_DIR}/patches/clang)
++ #apply_patches(${LLVM_MONOREPO_DIR}
++ # "${LLVM_PATCHES_DIRS}"
++ # ${LLVM_BASE_REVISION}
++ # ${TARGET_BRANCH}
++ # ret)
++ #apply_patches(${SPIRV_SOURCE_DIR}
++ # ${CMAKE_CURRENT_SOURCE_DIR}/patches/spirv
++ # ${SPIRV_BASE_REVISION}
++ # ${TARGET_BRANCH}
++ # ret)
+ endif(NOT USE_PREBUILT_LLVM)
+
+ #
diff --git a/build_files/build_environment/patches/python_windows.diff b/build_files/build_environment/patches/python_windows.diff
new file mode 100644
index 00000000000..f9c89a90fde
--- /dev/null
+++ b/build_files/build_environment/patches/python_windows.diff
@@ -0,0 +1,24 @@
+diff -Naur orig/PCbuild/get_externals.bat Python-3.10.2/PCbuild/get_externals.bat
+--- orig/PCbuild/get_externals.bat 2022-01-13 11:52:14 -0700
++++ Python-3.10.2/PCbuild/get_externals.bat 2022-08-17 11:24:42 -0600
+@@ -51,7 +51,7 @@
+ echo.Fetching external libraries...
+
+ set libraries=
+-set libraries=%libraries% bzip2-1.0.6
++set libraries=%libraries% bzip2-1.0.8
+ if NOT "%IncludeLibffiSrc%"=="false" set libraries=%libraries% libffi-3.3.0
+ if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries% openssl-1.1.1m
+ set libraries=%libraries% sqlite-3.35.5.0
+ diff -Naur orig/PCbuild/python.props external_python/PCbuild/python.props
+--- orig/PCbuild/python.props 2022-01-13 11:52:14 -0700
++++ external_python/PCbuild/python.props 2022-08-17 11:38:38 -0600
+@@ -58,7 +58,7 @@
+ <ExternalsDir Condition="$(ExternalsDir) == ''">$([System.IO.Path]::GetFullPath(`$(PySourcePath)externals`))</ExternalsDir>
+ <ExternalsDir Condition="!HasTrailingSlash($(ExternalsDir))">$(ExternalsDir)\</ExternalsDir>
+ <sqlite3Dir>$(ExternalsDir)sqlite-3.35.5.0\</sqlite3Dir>
+- <bz2Dir>$(ExternalsDir)bzip2-1.0.6\</bz2Dir>
++ <bz2Dir>$(ExternalsDir)bzip2-1.0.8\</bz2Dir>
+ <lzmaDir>$(ExternalsDir)xz-5.2.2\</lzmaDir>
+ <libffiDir>$(ExternalsDir)libffi-3.3.0\</libffiDir>
+ <libffiOutDir>$(ExternalsDir)libffi-3.3.0\$(ArchName)\</libffiOutDir>
diff --git a/build_files/build_environment/patches/vpx_windows.diff b/build_files/build_environment/patches/vpx_windows.diff
new file mode 100644
index 00000000000..13e3b06d95d
--- /dev/null
+++ b/build_files/build_environment/patches/vpx_windows.diff
@@ -0,0 +1,11 @@
+diff -Naur orig/configure external_vpx/configure
+--- orig/configure 2022-07-06 09:22:04 -0600
++++ external_vpx/configure 2022-07-06 09:24:12 -0600
+@@ -270,7 +270,6 @@
+ HAVE_LIST="
+ ${ARCH_EXT_LIST}
+ vpx_ports
+- pthread_h
+ unistd_h
+ "
+ EXPERIMENT_LIST="
diff --git a/build_files/cmake/Modules/FindEpoxy.cmake b/build_files/cmake/Modules/FindEpoxy.cmake
new file mode 100644
index 00000000000..7cd26e45398
--- /dev/null
+++ b/build_files/cmake/Modules/FindEpoxy.cmake
@@ -0,0 +1,47 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright 2022 Blender Foundation.
+
+# This module defines
+# Epoxy_INCLUDE_DIRS, where to find epoxy/gl.h
+# Epoxy_LIBRARY, where to find the epoxy library.
+# Epoxy_ROOT_DIR, The base directory to search for epoxy.
+# This can also be an environment variable.
+# Epoxy_FOUND, If false, do not try to use epoxy.
+
+IF(NOT EPOXY_ROOT_DIR AND NOT $ENV{EPOXY_ROOT_DIR} STREQUAL "")
+ SET(EPOXY_ROOT_DIR $ENV{EPOXY_ROOT_DIR})
+ENDIF()
+
+FIND_PATH(Epoxy_INCLUDE_DIR
+ NAMES
+ epoxy/gl.h
+ HINTS
+ ${EPOXY_ROOT_DIR}
+ PATH_SUFFIXES
+ include
+)
+
+FIND_LIBRARY(Epoxy_LIBRARY
+ NAMES
+ epoxy
+ HINTS
+ ${EPOXY_ROOT_DIR}
+ PATH_SUFFIXES
+ lib64 lib
+)
+
+# handle the QUIETLY and REQUIRED arguments and set Epoxy_FOUND to TRUE if
+# all listed variables are TRUE
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(Epoxy DEFAULT_MSG
+ Epoxy_LIBRARY Epoxy_INCLUDE_DIR)
+
+IF(Epoxy_FOUND)
+ SET(Epoxy_INCLUDE_DIRS ${Epoxy_INCLUDE_DIR})
+ SET(Epoxy_LIBRARIES ${Epoxy_LIBRARY})
+ENDIF()
+
+MARK_AS_ADVANCED(
+ Epoxy_INCLUDE_DIR
+ Epoxy_LIBRARY
+)
diff --git a/build_files/cmake/Modules/FindGLEW.cmake b/build_files/cmake/Modules/FindGLEW.cmake
deleted file mode 100644
index 33b989ec49e..00000000000
--- a/build_files/cmake/Modules/FindGLEW.cmake
+++ /dev/null
@@ -1,58 +0,0 @@
-# SPDX-License-Identifier: BSD-3-Clause
-# Copyright 2014 Blender Foundation.
-
-# - Find GLEW library
-# Find the native Glew includes and library
-# This module defines
-# GLEW_INCLUDE_DIRS, where to find glew.h, Set when
-# GLEW_INCLUDE_DIR is found.
-# GLEW_ROOT_DIR, The base directory to search for Glew.
-# This can also be an environment variable.
-# GLEW_FOUND, If false, do not try to use Glew.
-#
-# also defined,
-# GLEW_LIBRARY, where to find the Glew library.
-
-# If GLEW_ROOT_DIR was defined in the environment, use it.
-IF(NOT GLEW_ROOT_DIR AND NOT $ENV{GLEW_ROOT_DIR} STREQUAL "")
- SET(GLEW_ROOT_DIR $ENV{GLEW_ROOT_DIR})
-ENDIF()
-
-SET(_glew_SEARCH_DIRS
- ${GLEW_ROOT_DIR}
-)
-
-FIND_PATH(GLEW_INCLUDE_DIR
- NAMES
- GL/glew.h
- HINTS
- ${_glew_SEARCH_DIRS}
- PATH_SUFFIXES
- include
-)
-
-FIND_LIBRARY(GLEW_LIBRARY
- NAMES
- GLEW
- HINTS
- ${_glew_SEARCH_DIRS}
- PATH_SUFFIXES
- lib64 lib
- )
-
-# handle the QUIETLY and REQUIRED arguments and set GLEW_FOUND to TRUE if
-# all listed variables are TRUE
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLEW DEFAULT_MSG
- GLEW_LIBRARY GLEW_INCLUDE_DIR)
-
-IF(GLEW_FOUND)
- SET(GLEW_INCLUDE_DIRS ${GLEW_INCLUDE_DIR})
-ENDIF()
-
-MARK_AS_ADVANCED(
- GLEW_INCLUDE_DIR
- GLEW_LIBRARY
-)
-
-UNSET(_glew_SEARCH_DIRS)
diff --git a/build_files/cmake/Modules/FindLevelZero.cmake b/build_files/cmake/Modules/FindLevelZero.cmake
new file mode 100644
index 00000000000..a60d8ba9978
--- /dev/null
+++ b/build_files/cmake/Modules/FindLevelZero.cmake
@@ -0,0 +1,56 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright 2021-2022 Intel Corporation
+
+# - Find Level Zero library
+# Find Level Zero headers and libraries needed by oneAPI implementation
+# This module defines
+# LEVEL_ZERO_LIBRARY, libraries to link against in order to use L0.
+# LEVEL_ZERO_INCLUDE_DIR, directories where L0 headers can be found.
+# LEVEL_ZERO_ROOT_DIR, The base directory to search for L0 files.
+# This can also be an environment variable.
+# LEVEL_ZERO_FOUND, If false, then don't try to use L0.
+
+IF(NOT LEVEL_ZERO_ROOT_DIR AND NOT $ENV{LEVEL_ZERO_ROOT_DIR} STREQUAL "")
+ SET(LEVEL_ZERO_ROOT_DIR $ENV{LEVEL_ZERO_ROOT_DIR})
+ENDIF()
+
+SET(_level_zero_search_dirs
+ ${LEVEL_ZERO_ROOT_DIR}
+ /usr/lib
+ /usr/local/lib
+)
+
+FIND_LIBRARY(_LEVEL_ZERO_LIBRARY
+ NAMES
+ ze_loader
+ HINTS
+ ${_level_zero_search_dirs}
+ PATH_SUFFIXES
+ lib64 lib
+)
+
+FIND_PATH(_LEVEL_ZERO_INCLUDE_DIR
+ NAMES
+ level_zero/ze_api.h
+ HINTS
+ ${_level_zero_search_dirs}
+ PATH_SUFFIXES
+ include
+)
+
+INCLUDE(FindPackageHandleStandardArgs)
+
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(LevelZero DEFAULT_MSG _LEVEL_ZERO_LIBRARY _LEVEL_ZERO_INCLUDE_DIR)
+
+IF(LevelZero_FOUND)
+ SET(LEVEL_ZERO_LIBRARY ${_LEVEL_ZERO_LIBRARY})
+ SET(LEVEL_ZERO_INCLUDE_DIR ${_LEVEL_ZERO_INCLUDE_DIR} ${_LEVEL_ZERO_INCLUDE_PARENT_DIR})
+ SET(LEVEL_ZERO_FOUND TRUE)
+ELSE()
+ SET(LEVEL_ZERO_FOUND FALSE)
+ENDIF()
+
+MARK_AS_ADVANCED(
+ LEVEL_ZERO_LIBRARY
+ LEVEL_ZERO_INCLUDE_DIR
+)
diff --git a/build_files/cmake/Modules/FindLibEpoxy.cmake b/build_files/cmake/Modules/FindLibEpoxy.cmake
new file mode 100644
index 00000000000..1da52f95f68
--- /dev/null
+++ b/build_files/cmake/Modules/FindLibEpoxy.cmake
@@ -0,0 +1,47 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright 2022 Blender Foundation.
+
+# This module defines
+# LibEpoxy_INCLUDE_DIRS, where to find epoxy/gl.h
+# LibEpoxy_LIBRARY, where to find the epoxy library.
+# LibEpoxy_ROOT_DIR, The base directory to search for libepoxy.
+# This can also be an environment variable.
+# LibEpoxy_FOUND, If false, do not try to use libepoxy.
+
+IF(NOT EPOXY_ROOT_DIR AND NOT $ENV{EPOXY_ROOT_DIR} STREQUAL "")
+ SET(EPOXY_ROOT_DIR $ENV{EPOXY_ROOT_DIR})
+ENDIF()
+
+FIND_PATH(LibEpoxy_INCLUDE_DIR
+ NAMES
+ epoxy/gl.h
+ HINTS
+ ${EPOXY_ROOT_DIR}
+ PATH_SUFFIXES
+ include
+)
+
+FIND_LIBRARY(LibEpoxy_LIBRARY
+ NAMES
+ epoxy
+ HINTS
+ ${EPOXY_ROOT_DIR}
+ PATH_SUFFIXES
+ lib64 lib
+)
+
+# handle the QUIETLY and REQUIRED arguments and set LibEpoxy_FOUND to TRUE if
+# all listed variables are TRUE
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibEpoxy DEFAULT_MSG
+ LibEpoxy_LIBRARY LibEpoxy_INCLUDE_DIR)
+
+IF(LibEpoxy_FOUND)
+ SET(LibEpoxy_INCLUDE_DIRS ${LibEpoxy_INCLUDE_DIR})
+ SET(LibEpoxy_LIBRARIES ${LibEpoxy_LIBRARY})
+ENDIF()
+
+MARK_AS_ADVANCED(
+ LibEpoxy_INCLUDE_DIR
+ LibEpoxy_LIBRARY
+)
diff --git a/build_files/cmake/Modules/FindOpenGLES.cmake b/build_files/cmake/Modules/FindOpenGLES.cmake
deleted file mode 100644
index 5e82984bed6..00000000000
--- a/build_files/cmake/Modules/FindOpenGLES.cmake
+++ /dev/null
@@ -1,80 +0,0 @@
-# SPDX-License-Identifier: BSD-3-Clause
-# Copyright 2014 Blender Foundation.
-
-# - Try to find OpenGLES
-# Once done this will define
-#
-# OPENGLES_FOUND - system has OpenGLES and EGL
-# OPENGL_EGL_FOUND - system has EGL
-# OPENGLES_INCLUDE_DIR - the GLES include directory
-# OPENGLES_LIBRARY - the GLES library
-# OPENGLES_EGL_INCLUDE_DIR - the EGL include directory
-# OPENGLES_EGL_LIBRARY - the EGL library
-# OPENGLES_LIBRARIES - all libraries needed for OpenGLES
-# OPENGLES_INCLUDES - all includes needed for OpenGLES
-
-# If OPENGLES_ROOT_DIR was defined in the environment, use it.
-IF(NOT OPENGLES_ROOT_DIR AND NOT $ENV{OPENGLES_ROOT_DIR} STREQUAL "")
- SET(OPENGLES_ROOT_DIR $ENV{OPENGLES_ROOT_DIR})
-ENDIF()
-
-SET(_opengles_SEARCH_DIRS
- ${OPENGLES_ROOT_DIR}
-)
-
-FIND_PATH(OPENGLES_INCLUDE_DIR
- NAMES
- GLES2/gl2.h
- HINTS
- ${_opengles_SEARCH_DIRS}
-)
-
-FIND_LIBRARY(OPENGLES_LIBRARY
- NAMES
- GLESv2
- PATHS
- ${_opengles_SEARCH_DIRS}
- PATH_SUFFIXES
- lib64 lib
-)
-
-FIND_PATH(OPENGLES_EGL_INCLUDE_DIR
- NAMES
- EGL/egl.h
- HINTS
- ${_opengles_SEARCH_DIRS}
-)
-
-FIND_LIBRARY(OPENGLES_EGL_LIBRARY
- NAMES
- EGL
- HINTS
- ${_opengles_SEARCH_DIRS}
- PATH_SUFFIXES
- lib64 lib
-)
-
-IF(OPENGLES_EGL_LIBRARY AND OPENGLES_EGL_INCLUDE_DIR)
- SET(OPENGL_EGL_FOUND "YES")
-ELSE()
- SET(OPENGL_EGL_FOUND "NO")
-ENDIF()
-
-IF(OPENGLES_LIBRARY AND OPENGLES_INCLUDE_DIR AND
- OPENGLES_EGL_LIBRARY AND OPENGLES_EGL_INCLUDE_DIR)
- SET(OPENGLES_LIBRARIES ${OPENGLES_LIBRARY} ${OPENGLES_LIBRARIES}
- ${OPENGLES_EGL_LIBRARY})
- SET(OPENGLES_INCLUDES ${OPENGLES_INCLUDE_DIR} ${OPENGLES_EGL_INCLUDE_DIR})
- SET(OPENGLES_FOUND "YES")
-ELSE()
- SET(OPENGLES_FOUND "NO")
-ENDIF()
-
-MARK_AS_ADVANCED(
- OPENGLES_EGL_INCLUDE_DIR
- OPENGLES_EGL_LIBRARY
- OPENGLES_LIBRARY
- OPENGLES_INCLUDE_DIR
-)
-
-UNSET(_opengles_SEARCH_DIRS)
diff --git a/build_files/cmake/Modules/FindSYCL.cmake b/build_files/cmake/Modules/FindSYCL.cmake
new file mode 100644
index 00000000000..ac90cbfbe43
--- /dev/null
+++ b/build_files/cmake/Modules/FindSYCL.cmake
@@ -0,0 +1,88 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright 2021-2022 Intel Corporation
+
+# - Find SYCL library
+# Find the native SYCL header and libraries needed by oneAPI implementation
+# This module defines
+# SYCL_COMPILER, compiler which will be used for compilation of SYCL code
+# SYCL_LIBRARY, libraries to link against in order to use SYCL.
+# SYCL_INCLUDE_DIR, directories where SYCL headers can be found
+# SYCL_ROOT_DIR, The base directory to search for SYCL files.
+# This can also be an environment variable.
+# SYCL_FOUND, If false, then don't try to use SYCL.
+
+IF(NOT SYCL_ROOT_DIR AND NOT $ENV{SYCL_ROOT_DIR} STREQUAL "")
+ SET(SYCL_ROOT_DIR $ENV{SYCL_ROOT_DIR})
+ENDIF()
+
+SET(_sycl_search_dirs
+ ${SYCL_ROOT_DIR}
+ /usr/lib
+ /usr/local/lib
+ /opt/intel/oneapi/compiler/latest/linux/
+ C:/Program\ Files\ \(x86\)/Intel/oneAPI/compiler/latest/windows
+)
+
+# Find DPC++ compiler.
+# Since the compiler name is possibly conflicting with the system-wide
+# CLang start with looking for either dpcpp or clang binary in the given
+# list of search paths only. If that fails, try to look for a system-wide
+# dpcpp binary.
+FIND_PROGRAM(SYCL_COMPILER
+ NAMES
+ dpcpp
+ clang++
+ HINTS
+ ${_sycl_search_dirs}
+ PATH_SUFFIXES
+ bin
+ NO_CMAKE_FIND_ROOT_PATH
+ NAMES_PER_DIR
+)
+
+# NOTE: No clang++ here so that we do not pick up a system-wide CLang
+# compiler.
+if(NOT SYCL_COMPILER)
+ FIND_PROGRAM(SYCL_COMPILER
+ NAMES
+ dpcpp
+ HINTS
+ ${_sycl_search_dirs}
+ PATH_SUFFIXES
+ bin
+ )
+endif()
+
+FIND_LIBRARY(SYCL_LIBRARY
+ NAMES
+ sycl
+ HINTS
+ ${_sycl_search_dirs}
+ PATH_SUFFIXES
+ lib64 lib
+)
+
+FIND_PATH(SYCL_INCLUDE_DIR
+ NAMES
+ CL/sycl.hpp
+ HINTS
+ ${_sycl_search_dirs}
+ PATH_SUFFIXES
+ include
+ include/sycl
+)
+
+INCLUDE(FindPackageHandleStandardArgs)
+
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(SYCL DEFAULT_MSG SYCL_LIBRARY SYCL_INCLUDE_DIR)
+
+IF(SYCL_FOUND)
+ get_filename_component(_SYCL_INCLUDE_PARENT_DIR ${SYCL_INCLUDE_DIR} DIRECTORY)
+ SET(SYCL_INCLUDE_DIR ${SYCL_INCLUDE_DIR} ${_SYCL_INCLUDE_PARENT_DIR})
+ELSE()
+ SET(SYCL_SYCL_FOUND FALSE)
+ENDIF()
+
+MARK_AS_ADVANCED(
+ _SYCL_INCLUDE_PARENT_DIR
+)
diff --git a/build_files/cmake/cmake_static_check_cppcheck.py b/build_files/cmake/cmake_static_check_cppcheck.py
index 79f9498ce2e..d9271ff8268 100644
--- a/build_files/cmake/cmake_static_check_cppcheck.py
+++ b/build_files/cmake/cmake_static_check_cppcheck.py
@@ -10,40 +10,77 @@ import tempfile
from typing import (
Any,
List,
+ Tuple,
)
+USE_VERBOSE = (os.environ.get("VERBOSE", None) is not None)
+# Could make configurable.
+USE_VERBOSE_PROGRESS = True
-USE_QUIET = (os.environ.get("QUIET", None) is not None)
+CHECKER_BIN = "cppcheck"
CHECKER_IGNORE_PREFIX = [
"extern",
]
-CHECKER_BIN = "cppcheck"
+CHECKER_EXCLUDE_SOURCE_FILES = set(os.path.join(*f.split("/")) for f in (
+ # These files hang (taking longer than 5min with v2.8.2 at time of writing).
+ # All other files process in under around 10seconds.
+ "source/blender/editors/space_text/text_format_pov.c",
+ "source/blender/editors/space_text/text_format_pov_ini.c",
+))
CHECKER_ARGS = [
- # not sure why this is needed, but it is.
- "-I" + os.path.join(project_source_info.SOURCE_DIR, "extern", "glew", "include"),
- "--suppress=*:%s/extern/glew/include/GL/glew.h:241" % project_source_info.SOURCE_DIR,
- "--max-configs=1", # speeds up execution
- # "--check-config", # when includes are missing
- "--enable=all", # if you want sixty hundred pedantic suggestions
+ # Speed up execution.
+ # As Blender has many defines, the total number of configurations is large making execution unreasonably slow.
+ # This could be increased but do so with care.
+ "--max-configs=1",
+
+ # Enable this when includes are missing.
+ # "--check-config",
+
+ # Shows many pedantic issues, some are quite useful.
+ "--enable=all",
+
+ # Also shows useful messages, even if some are false-positives.
+ "--inconclusive",
# Quiet output, otherwise all defines/includes are printed (overly verbose).
# Only enable this for troubleshooting (if defines are not set as expected for example).
- "--quiet",
+ *(() if USE_VERBOSE else ("--quiet",))
# NOTE: `--cppcheck-build-dir=<dir>` is added later as a temporary directory.
]
-if USE_QUIET:
- CHECKER_ARGS.append("--quiet")
+
+def source_info_filter(
+ source_info: List[Tuple[str, List[str], List[str]]],
+) -> List[Tuple[str, List[str], List[str]]]:
+ source_dir = project_source_info.SOURCE_DIR
+ if not source_dir.endswith(os.sep):
+ source_dir += os.sep
+ source_info_result = []
+ for i, item in enumerate(source_info):
+ c = item[0]
+ if c.startswith(source_dir):
+ c_relative = c[len(source_dir):]
+ if c_relative in CHECKER_EXCLUDE_SOURCE_FILES:
+ CHECKER_EXCLUDE_SOURCE_FILES.remove(c_relative)
+ continue
+ source_info_result.append(item)
+ if CHECKER_EXCLUDE_SOURCE_FILES:
+ sys.stderr.write("Error: exclude file(s) are missing: %r\n" % list(sorted(CHECKER_EXCLUDE_SOURCE_FILES)))
+ sys.exit(1)
+ return source_info_result
def cppcheck() -> None:
source_info = project_source_info.build_info(ignore_prefix_list=CHECKER_IGNORE_PREFIX)
source_defines = project_source_info.build_defines_as_args()
+ # Apply exclusion.
+ source_info = source_info_filter(source_info)
+
check_commands = []
for c, inc_dirs, defs in source_info:
cmd = (
@@ -60,7 +97,7 @@ def cppcheck() -> None:
process_functions = []
def my_process(i: int, c: str, cmd: List[str]) -> subprocess.Popen[Any]:
- if not USE_QUIET:
+ if USE_VERBOSE_PROGRESS:
percent = 100.0 * (i / len(check_commands))
percent_str = "[" + ("%.2f]" % percent).rjust(7) + " %:"
diff --git a/build_files/cmake/config/blender_full.cmake b/build_files/cmake/config/blender_full.cmake
index e09577ac802..27577a9fbf7 100644
--- a/build_files/cmake/config/blender_full.cmake
+++ b/build_files/cmake/config/blender_full.cmake
@@ -13,7 +13,7 @@ set(WITH_BULLET ON CACHE BOOL "" FORCE)
set(WITH_CODEC_AVI ON CACHE BOOL "" FORCE)
set(WITH_CODEC_FFMPEG ON CACHE BOOL "" FORCE)
set(WITH_CODEC_SNDFILE ON CACHE BOOL "" FORCE)
-set(WITH_COMPOSITOR ON CACHE BOOL "" FORCE)
+set(WITH_COMPOSITOR_CPU ON CACHE BOOL "" FORCE)
set(WITH_CYCLES ON CACHE BOOL "" FORCE)
set(WITH_CYCLES_EMBREE ON CACHE BOOL "" FORCE)
set(WITH_CYCLES_OSL ON CACHE BOOL "" FORCE)
diff --git a/build_files/cmake/config/blender_lite.cmake b/build_files/cmake/config/blender_lite.cmake
index 5ce344d39e8..060fcc0638b 100644
--- a/build_files/cmake/config/blender_lite.cmake
+++ b/build_files/cmake/config/blender_lite.cmake
@@ -18,7 +18,7 @@ set(WITH_BULLET OFF CACHE BOOL "" FORCE)
set(WITH_CODEC_AVI OFF CACHE BOOL "" FORCE)
set(WITH_CODEC_FFMPEG OFF CACHE BOOL "" FORCE)
set(WITH_CODEC_SNDFILE OFF CACHE BOOL "" FORCE)
-set(WITH_COMPOSITOR OFF CACHE BOOL "" FORCE)
+set(WITH_COMPOSITOR_CPU OFF CACHE BOOL "" FORCE)
set(WITH_COREAUDIO OFF CACHE BOOL "" FORCE)
set(WITH_CYCLES OFF CACHE BOOL "" FORCE)
set(WITH_DRACO OFF CACHE BOOL "" FORCE)
@@ -35,6 +35,7 @@ set(WITH_IMAGE_OPENEXR OFF CACHE BOOL "" FORCE)
set(WITH_IMAGE_OPENJPEG OFF CACHE BOOL "" FORCE)
set(WITH_IMAGE_TIFF OFF CACHE BOOL "" FORCE)
set(WITH_IMAGE_WEBP OFF CACHE BOOL "" FORCE)
+set(WITH_INPUT_IME OFF CACHE BOOL "" FORCE)
set(WITH_INPUT_NDOF OFF CACHE BOOL "" FORCE)
set(WITH_INTERNATIONAL OFF CACHE BOOL "" FORCE)
set(WITH_IO_STL OFF CACHE BOOL "" FORCE)
diff --git a/build_files/cmake/config/blender_release.cmake b/build_files/cmake/config/blender_release.cmake
index 8ece5eec39e..793d1cb0853 100644
--- a/build_files/cmake/config/blender_release.cmake
+++ b/build_files/cmake/config/blender_release.cmake
@@ -14,7 +14,7 @@ set(WITH_BULLET ON CACHE BOOL "" FORCE)
set(WITH_CODEC_AVI ON CACHE BOOL "" FORCE)
set(WITH_CODEC_FFMPEG ON CACHE BOOL "" FORCE)
set(WITH_CODEC_SNDFILE ON CACHE BOOL "" FORCE)
-set(WITH_COMPOSITOR ON CACHE BOOL "" FORCE)
+set(WITH_COMPOSITOR_CPU ON CACHE BOOL "" FORCE)
set(WITH_CYCLES ON CACHE BOOL "" FORCE)
set(WITH_CYCLES_EMBREE ON CACHE BOOL "" FORCE)
set(WITH_CYCLES_OSL ON CACHE BOOL "" FORCE)
@@ -70,7 +70,7 @@ if(NOT WIN32)
set(WITH_JACK ON CACHE BOOL "" FORCE)
endif()
if(WIN32)
- set(WITH_WASAPI ON CACHE BOOL "" FORCE)
+ set(WITH_WASAPI ON CACHE BOOL "" FORCE)
endif()
if(UNIX AND NOT APPLE)
set(WITH_DOC_MANPAGE ON CACHE BOOL "" FORCE)
@@ -86,4 +86,6 @@ if(NOT APPLE)
set(WITH_CYCLES_CUDA_BINARIES ON CACHE BOOL "" FORCE)
set(WITH_CYCLES_CUBIN_COMPILER OFF CACHE BOOL "" FORCE)
set(WITH_CYCLES_HIP_BINARIES ON CACHE BOOL "" FORCE)
+ set(WITH_CYCLES_DEVICE_ONEAPI ON CACHE BOOL "" FORCE)
+ set(WITH_CYCLES_ONEAPI_BINARIES ON CACHE BOOL "" FORCE)
endif()
diff --git a/build_files/cmake/have_features.cmake b/build_files/cmake/have_features.cmake
new file mode 100644
index 00000000000..dc3b61849ea
--- /dev/null
+++ b/build_files/cmake/have_features.cmake
@@ -0,0 +1,33 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Copyright 2022 Blender Foundation. All rights reserved.
+
+# This file is used to test the system for headers & symbols.
+# Variables should use the `HAVE_` prefix.
+# Defines should use the same name as the CMAKE variable.
+
+include(CheckSymbolExists)
+
+# Used for: `intern/guardedalloc/intern/mallocn_intern.h`.
+# Function `malloc_stats` is only available on GLIBC,
+# so check that before defining `HAVE_MALLOC_STATS`.
+check_symbol_exists(malloc_stats "malloc.h" HAVE_MALLOC_STATS_H)
+
+# Used for: `source/creator/creator_signals.c`.
+# The function `feenableexcept` is not present non-GLIBC systems,
+# hence we need to check if it's available in the `fenv.h` file.
+set(HAVE_FEENABLEEXCEPT OFF)
+if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ check_symbol_exists(feenableexcept "fenv.h" HAVE_FEENABLEEXCEPT)
+endif()
+
+# Used for: `source/blender/blenlib/intern/system.c`.
+# `execinfo` is not available on non-GLIBC systems (at least not on MUSL-LIBC),
+# so check the presence of the header before including it and using the it for back-trace.
+set(HAVE_EXECINFO_H OFF)
+if(NOT MSVC)
+ include(CheckIncludeFiles)
+ check_include_files("execinfo.h" HAVE_EXECINFO_H)
+ if(HAVE_EXECINFO_H)
+ add_definitions(-DHAVE_EXECINFO_H)
+ endif()
+endif()
diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake/platform/platform_apple.cmake
index 32b10625590..bc5baf43530 100644
--- a/build_files/cmake/platform/platform_apple.cmake
+++ b/build_files/cmake/platform/platform_apple.cmake
@@ -21,6 +21,18 @@ function(print_found_status
endif()
endfunction()
+# Utility to install precompiled shared libraries.
+macro(add_bundled_libraries library)
+ if(EXISTS ${LIBDIR})
+ set(_library_dir ${LIBDIR}/${library}/lib)
+ file(GLOB _all_library_versions ${_library_dir}/*\.dylib*)
+ list(APPEND PLATFORM_BUNDLED_LIBRARIES ${_all_library_versions})
+ list(APPEND PLATFORM_BUNDLED_LIBRARY_DIRS ${_library_dir})
+ unset(_all_library_versions)
+ unset(_library_dir)
+ endif()
+endmacro()
+
# ------------------------------------------------------------------------
# Find system provided libraries.
@@ -162,6 +174,9 @@ if(WITH_CODEC_FFMPEG)
mp3lame ogg opus swresample swscale
theora theoradec theoraenc vorbis vorbisenc
vorbisfile vpx x264 xvidcore)
+ if(EXISTS ${LIBDIR}/ffmpeg/lib/libaom.a)
+ list(APPEND FFMPEG_FIND_COMPONENTS aom)
+ endif()
find_package(FFmpeg)
endif()
@@ -223,6 +238,9 @@ if(WITH_SDL)
endif()
endif()
+set(EPOXY_ROOT_DIR ${LIBDIR}/epoxy)
+find_package(Epoxy REQUIRED)
+
set(PNG_ROOT ${LIBDIR}/png)
find_package(PNG REQUIRED)
@@ -409,6 +427,7 @@ if(WITH_OPENMP)
set(OpenMP_LIBRARY_DIR "${LIBDIR}/openmp/lib/")
set(OpenMP_LINKER_FLAGS "-L'${OpenMP_LIBRARY_DIR}' -lomp")
set(OpenMP_LIBRARY "${OpenMP_LIBRARY_DIR}/libomp.dylib")
+ add_bundled_libraries(openmp)
endif()
endif()
@@ -467,8 +486,9 @@ string(APPEND CMAKE_CXX_FLAGS " -ftemplate-depth=1024")
# Avoid conflicts with Luxrender, and other plug-ins that may use the same
# libraries as Blender with a different version or build options.
+set(PLATFORM_SYMBOLS_MAP ${CMAKE_SOURCE_DIR}/source/creator/symbols_apple.map)
string(APPEND PLATFORM_LINKFLAGS
- " -Wl,-unexported_symbols_list,'${CMAKE_SOURCE_DIR}/source/creator/osx_locals.map'"
+ " -Wl,-unexported_symbols_list,'${PLATFORM_SYMBOLS_MAP}'"
)
string(APPEND CMAKE_CXX_FLAGS " -stdlib=libc++")
@@ -497,17 +517,27 @@ if(WITH_COMPILER_CCACHE)
endif()
endif()
-# For binaries that are built but not installed (also not distributed) (datatoc,
-# makesdna, tests, etc.), we add an rpath to the OpenMP library dir through
-# CMAKE_BUILD_RPATH. This avoids having to make many copies of the dylib next to each binary.
-#
-# For the installed Python module and installed Blender executable, CMAKE_INSTALL_RPATH
-# is modified to find the dylib in an adjacent folder. Install step puts the libraries there.
-set(CMAKE_SKIP_BUILD_RPATH FALSE)
-list(APPEND CMAKE_BUILD_RPATH "${OpenMP_LIBRARY_DIR}")
+if(WITH_COMPILER_ASAN)
+ list(APPEND PLATFORM_BUNDLED_LIBRARIES ${COMPILER_ASAN_LIBRARY})
+endif()
-set(CMAKE_SKIP_INSTALL_RPATH FALSE)
-list(APPEND CMAKE_INSTALL_RPATH "@loader_path/../Resources/${BLENDER_VERSION}/lib")
+if(PLATFORM_BUNDLED_LIBRARIES)
+ # For the installed Python module and installed Blender executable, we set the
+ # rpath to the location where install step will copy the shared libraries.
+ set(CMAKE_SKIP_INSTALL_RPATH FALSE)
+ if(WITH_PYTHON_MODULE)
+ list(APPEND CMAKE_INSTALL_RPATH "@loader_path/lib")
+ else()
+ list(APPEND CMAKE_INSTALL_RPATH "@loader_path/../Resources/lib")
+ endif()
+
+ # For binaries that are built but not installed (like makesdan or tests), we add
+ # the original directory of all shared libraries to the rpath. This is needed because
+ # these can be in different folders, and because the build and install folder may be
+ # different.
+ set(CMAKE_SKIP_BUILD_RPATH FALSE)
+ list(APPEND CMAKE_BUILD_RPATH ${PLATFORM_BUNDLED_LIBRARY_DIRS})
+endif()
# Same as `CFBundleIdentifier` in Info.plist.
set(CMAKE_XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "org.blenderfoundation.blender")
diff --git a/build_files/cmake/platform/platform_unix.cmake b/build_files/cmake/platform/platform_unix.cmake
index 6750c23d548..c321da80649 100644
--- a/build_files/cmake/platform/platform_unix.cmake
+++ b/build_files/cmake/platform/platform_unix.cmake
@@ -38,9 +38,15 @@ if(EXISTS ${LIBDIR})
message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}")
file(GLOB LIB_SUBDIRS ${LIBDIR}/*)
+
# Ignore Mesa software OpenGL libraries, they are not intended to be
# linked against but to optionally override at runtime.
list(REMOVE_ITEM LIB_SUBDIRS ${LIBDIR}/mesa)
+
+ # Ignore DPC++ as it contains its own copy of LLVM/CLang which we do
+ # not need to be ever discovered for the Blender linking.
+ list(REMOVE_ITEM LIB_SUBDIRS ${LIBDIR}/dpcpp)
+
# NOTE: Make sure "proper" compiled zlib comes first before the one
# which is a part of OpenCollada. They have different ABI, and we
# do need to use the official one.
@@ -75,6 +81,15 @@ macro(find_package_wrapper)
endif()
endmacro()
+# Utility to install precompiled shared libraries.
+macro(add_bundled_libraries library)
+ if(EXISTS ${LIBDIR})
+ file(GLOB _all_library_versions ${LIBDIR}/${library}/lib/*\.so*)
+ list(APPEND PLATFORM_BUNDLED_LIBRARIES ${_all_library_versions})
+ unset(_all_library_versions)
+ endif()
+endmacro()
+
# ----------------------------------------------------------------------------
# Precompiled Libraries
#
@@ -89,6 +104,19 @@ find_package_wrapper(JPEG REQUIRED)
find_package_wrapper(PNG REQUIRED)
find_package_wrapper(ZLIB REQUIRED)
find_package_wrapper(Zstd REQUIRED)
+find_package_wrapper(Epoxy REQUIRED)
+
+function(check_freetype_for_brotli)
+ include(CheckSymbolExists)
+ set(CMAKE_REQUIRED_INCLUDES ${FREETYPE_INCLUDE_DIRS})
+ check_symbol_exists(FT_CONFIG_OPTION_USE_BROTLI "freetype/config/ftconfig.h" HAVE_BROTLI)
+ unset(CMAKE_REQUIRED_INCLUDES)
+ if(NOT HAVE_BROTLI)
+ unset(HAVE_BROTLI CACHE)
+ message(FATAL_ERROR "Freetype needs to be compiled with brotli support!")
+ endif()
+ unset(HAVE_BROTLI CACHE)
+endfunction()
if(NOT WITH_SYSTEM_FREETYPE)
# FreeType compiled with Brotli compression for woff2.
@@ -104,6 +132,7 @@ if(NOT WITH_SYSTEM_FREETYPE)
# ${BROTLI_LIBRARIES}
# )
endif()
+ check_freetype_for_brotli()
endif()
if(WITH_PYTHON)
@@ -196,6 +225,9 @@ if(WITH_CODEC_FFMPEG)
vpx
x264
xvidcore)
+ if(EXISTS ${LIBDIR}/ffmpeg/lib/libaom.a)
+ list(APPEND FFMPEG_FIND_COMPONENTS aom)
+ endif()
elseif(FFMPEG)
# Old cache variable used for root dir, convert to new standard.
set(FFMPEG_ROOT_DIR ${FFMPEG})
@@ -271,6 +303,18 @@ if(WITH_CYCLES AND WITH_CYCLES_OSL)
endif()
endif()
+if(WITH_CYCLES_DEVICE_ONEAPI)
+ set(CYCLES_LEVEL_ZERO ${LIBDIR}/level-zero CACHE PATH "Path to Level Zero installation")
+ if(EXISTS ${CYCLES_LEVEL_ZERO} AND NOT LEVEL_ZERO_ROOT_DIR)
+ set(LEVEL_ZERO_ROOT_DIR ${CYCLES_LEVEL_ZERO})
+ endif()
+
+ set(CYCLES_SYCL ${LIBDIR}/dpcpp CACHE PATH "Path to DPC++ and SYCL installation")
+ if(EXISTS ${CYCLES_SYCL} AND NOT SYCL_ROOT_DIR)
+ set(SYCL_ROOT_DIR ${CYCLES_SYCL})
+ endif()
+endif()
+
if(WITH_OPENVDB)
find_package_wrapper(OpenVDB)
find_package_wrapper(Blosc)
@@ -566,6 +610,7 @@ if(WITH_SYSTEM_FREETYPE)
if(NOT FREETYPE_FOUND)
message(FATAL_ERROR "Failed finding system FreeType version!")
endif()
+ check_freetype_for_brotli()
endif()
if(WITH_LZO AND WITH_SYSTEM_LZO)
@@ -608,22 +653,93 @@ endif()
if(WITH_GHOST_WAYLAND)
find_package(PkgConfig)
- pkg_check_modules(wayland-client REQUIRED wayland-client>=1.12)
- pkg_check_modules(wayland-egl REQUIRED wayland-egl)
- pkg_check_modules(wayland-scanner REQUIRED wayland-scanner)
- pkg_check_modules(xkbcommon REQUIRED xkbcommon)
- pkg_check_modules(wayland-cursor REQUIRED wayland-cursor)
- pkg_check_modules(dbus REQUIRED dbus-1)
-
- set(WITH_GL_EGL ON)
-
- list(APPEND PLATFORM_LINKLIBS
- ${wayland-client_LINK_LIBRARIES}
- ${wayland-egl_LINK_LIBRARIES}
- ${xkbcommon_LINK_LIBRARIES}
- ${wayland-cursor_LINK_LIBRARIES}
- ${dbus_LINK_LIBRARIES}
- )
+ pkg_check_modules(wayland-client wayland-client>=1.12)
+ pkg_check_modules(wayland-egl wayland-egl)
+ pkg_check_modules(wayland-scanner wayland-scanner)
+ pkg_check_modules(xkbcommon xkbcommon)
+ pkg_check_modules(wayland-cursor wayland-cursor)
+ pkg_check_modules(wayland-protocols wayland-protocols>=1.15)
+
+ if(${wayland-protocols_FOUND})
+ pkg_get_variable(WAYLAND_PROTOCOLS_DIR wayland-protocols pkgdatadir)
+ else()
+ # CentOS 7 packages have too old a version, a newer version exist in the
+ # precompiled libraries.
+ find_path(WAYLAND_PROTOCOLS_DIR
+ NAMES unstable/xdg-decoration/xdg-decoration-unstable-v1.xml
+ PATH_SUFFIXES share/wayland-protocols
+ PATHS ${LIBDIR}/wayland-protocols
+ )
+
+ if(EXISTS ${WAYLAND_PROTOCOLS_DIR})
+ set(wayland-protocols_FOUND ON)
+ endif()
+ endif()
+
+ if (NOT ${wayland-client_FOUND})
+ message(STATUS "wayland-client not found, disabling WITH_GHOST_WAYLAND")
+ set(WITH_GHOST_WAYLAND OFF)
+ endif()
+ if (NOT ${wayland-egl_FOUND})
+ message(STATUS "wayland-egl not found, disabling WITH_GHOST_WAYLAND")
+ set(WITH_GHOST_WAYLAND OFF)
+ endif()
+ if (NOT ${wayland-scanner_FOUND})
+ message(STATUS "wayland-scanner not found, disabling WITH_GHOST_WAYLAND")
+ set(WITH_GHOST_WAYLAND OFF)
+ endif()
+ if (NOT ${wayland-cursor_FOUND})
+ message(STATUS "wayland-cursor not found, disabling WITH_GHOST_WAYLAND")
+ set(WITH_GHOST_WAYLAND OFF)
+ endif()
+ if (NOT ${wayland-protocols_FOUND})
+ message(STATUS "wayland-protocols not found, disabling WITH_GHOST_WAYLAND")
+ set(WITH_GHOST_WAYLAND OFF)
+ endif()
+ if (NOT ${xkbcommon_FOUND})
+ message(STATUS "xkbcommon not found, disabling WITH_GHOST_WAYLAND")
+ set(WITH_GHOST_WAYLAND OFF)
+ endif()
+
+ if(WITH_GHOST_WAYLAND)
+ if(WITH_GHOST_WAYLAND_DBUS)
+ pkg_check_modules(dbus REQUIRED dbus-1)
+ endif()
+
+ if(WITH_GHOST_WAYLAND_LIBDECOR)
+ pkg_check_modules(libdecor REQUIRED libdecor-0>=0.1)
+ endif()
+
+ list(APPEND PLATFORM_LINKLIBS
+ ${xkbcommon_LINK_LIBRARIES}
+ )
+
+ if(NOT WITH_GHOST_WAYLAND_DYNLOAD)
+ list(APPEND PLATFORM_LINKLIBS
+ ${wayland-client_LINK_LIBRARIES}
+ ${wayland-egl_LINK_LIBRARIES}
+ ${wayland-cursor_LINK_LIBRARIES}
+ )
+ endif()
+
+ if(WITH_GHOST_WAYLAND_DBUS)
+ list(APPEND PLATFORM_LINKLIBS
+ ${dbus_LINK_LIBRARIES}
+ )
+ add_definitions(-DWITH_GHOST_WAYLAND_DBUS)
+ endif()
+
+ if(WITH_GHOST_WAYLAND_LIBDECOR)
+ if(NOT WITH_GHOST_WAYLAND_DYNLOAD)
+ list(APPEND PLATFORM_LINKLIBS
+ ${libdecor_LIBRARIES}
+ )
+ endif()
+ add_definitions(-DWITH_GHOST_WAYLAND_LIBDECOR)
+ endif()
+
+ pkg_get_variable(WAYLAND_SCANNER wayland-scanner wayland_scanner)
+ endif()
endif()
if(WITH_GHOST_X11)
@@ -743,7 +859,8 @@ if(CMAKE_COMPILER_IS_GNUCC)
"The mold linker could not find the directory containing the linker command "
"(typically "
"\"${MOLD_PREFIX}/libexec/mold/ld\") or "
- "\"${MOLD_PREFIX}/lib/mold/ld\") using system linker.")
+ "\"${MOLD_PREFIX}/lib/mold/ld\") using system linker."
+ )
set(WITH_LINKER_MOLD OFF)
endif()
unset(MOLD_PREFIX)
@@ -842,8 +959,9 @@ unset(_IS_LINKER_DEFAULT)
# Avoid conflicts with Mesa llvmpipe, Luxrender, and other plug-ins that may
# use the same libraries as Blender with a different version or build options.
+set(PLATFORM_SYMBOLS_MAP ${CMAKE_SOURCE_DIR}/source/creator/symbols_unix.map)
set(PLATFORM_LINKFLAGS
- "${PLATFORM_LINKFLAGS} -Wl,--version-script='${CMAKE_SOURCE_DIR}/source/creator/blender.map'"
+ "${PLATFORM_LINKFLAGS} -Wl,--version-script='${PLATFORM_SYMBOLS_MAP}'"
)
# Don't use position independent executable for portable install since file
@@ -881,7 +999,8 @@ function(CONFIGURE_ATOMIC_LIB_IF_NEEDED)
int main(int argc, char **argv) {
std::atomic<uint64_t> uint64; uint64++;
return 0;
- }")
+ }"
+ )
include(CheckCXXSourceCompiles)
check_cxx_source_compiles("${_source}" ATOMIC_OPS_WITHOUT_LIBATOMIC)
@@ -893,6 +1012,7 @@ function(CONFIGURE_ATOMIC_LIB_IF_NEEDED)
set(CMAKE_REQUIRED_LIBRARIES atomic)
check_cxx_source_compiles("${_source}" ATOMIC_OPS_WITH_LIBATOMIC)
+ unset(CMAKE_REQUIRED_LIBRARIES)
if(ATOMIC_OPS_WITH_LIBATOMIC)
set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -latomic" PARENT_SCOPE)
@@ -906,3 +1026,16 @@ function(CONFIGURE_ATOMIC_LIB_IF_NEEDED)
endfunction()
CONFIGURE_ATOMIC_LIB_IF_NEEDED()
+
+if(PLATFORM_BUNDLED_LIBRARIES)
+ # For the installed Python module and installed Blender executable, we set the
+ # rpath to the relative path where the install step will copy the shared libraries.
+ set(CMAKE_SKIP_INSTALL_RPATH FALSE)
+ list(APPEND CMAKE_INSTALL_RPATH $ORIGIN/lib)
+
+ # For executables that are built but not installed (mainly tests) we set an absolute
+ # rpath to the lib folder. This is needed because these can be in different folders,
+ # and because the build and install folder may be different.
+ set(CMAKE_SKIP_BUILD_RPATH FALSE)
+ list(APPEND CMAKE_BUILD_RPATH $ORIGIN/lib ${CMAKE_INSTALL_PREFIX_WITH_CONFIG}/lib)
+endif()
diff --git a/build_files/cmake/platform/platform_win32.cmake b/build_files/cmake/platform/platform_win32.cmake
index 40c25abd585..66ab0d4169a 100644
--- a/build_files/cmake/platform/platform_win32.cmake
+++ b/build_files/cmake/platform/platform_win32.cmake
@@ -146,7 +146,7 @@ endif()
if(WITH_COMPILER_ASAN AND MSVC AND NOT MSVC_CLANG)
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.28.29828)
#set a flag so we don't have to do this comparison all the time
- SET(MSVC_ASAN ON)
+ set(MSVC_ASAN ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=address")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /fsanitize=address")
string(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG " /INCREMENTAL:NO")
@@ -185,20 +185,20 @@ endif()
if(WITH_WINDOWS_SCCACHE)
- set(CMAKE_C_COMPILER_LAUNCHER sccache)
- set(CMAKE_CXX_COMPILER_LAUNCHER sccache)
+ set(CMAKE_C_COMPILER_LAUNCHER sccache)
+ set(CMAKE_CXX_COMPILER_LAUNCHER sccache)
+ set(SYMBOL_FORMAT /Z7)
+ set(SYMBOL_FORMAT_RELEASE /Z7)
+else()
+ unset(CMAKE_C_COMPILER_LAUNCHER)
+ unset(CMAKE_CXX_COMPILER_LAUNCHER)
+ if(MSVC_ASAN)
set(SYMBOL_FORMAT /Z7)
set(SYMBOL_FORMAT_RELEASE /Z7)
-else()
- unset(CMAKE_C_COMPILER_LAUNCHER)
- unset(CMAKE_CXX_COMPILER_LAUNCHER)
- if(MSVC_ASAN)
- set(SYMBOL_FORMAT /Z7)
- set(SYMBOL_FORMAT_RELEASE /Z7)
- else()
- set(SYMBOL_FORMAT /ZI)
- set(SYMBOL_FORMAT_RELEASE /Zi)
- endif()
+ else()
+ set(SYMBOL_FORMAT /ZI)
+ set(SYMBOL_FORMAT_RELEASE /Zi)
+ endif()
endif()
if(WITH_WINDOWS_PDB)
@@ -323,6 +323,13 @@ if(NOT JPEG_FOUND)
set(JPEG_LIBRARIES ${LIBDIR}/jpeg/lib/libjpeg.lib)
endif()
+set(EPOXY_ROOT_DIR ${LIBDIR}/epoxy)
+windows_find_package(Epoxy REQUIRED)
+if(NOT EPOXY_FOUND)
+ set(Epoxy_INCLUDE_DIRS ${LIBDIR}/epoxy/include)
+ set(Epoxy_LIBRARIES ${LIBDIR}/epoxy/lib/epoxy.lib)
+endif()
+
set(PTHREADS_INCLUDE_DIRS ${LIBDIR}/pthreads/include)
set(PTHREADS_LIBRARIES ${LIBDIR}/pthreads/lib/pthreadVC3.lib)
@@ -416,7 +423,7 @@ if(WITH_CODEC_FFMPEG)
${LIBDIR}/ffmpeg/lib/avdevice.lib
${LIBDIR}/ffmpeg/lib/avutil.lib
${LIBDIR}/ffmpeg/lib/swscale.lib
- )
+ )
endif()
endif()
@@ -565,12 +572,14 @@ if(WITH_BOOST)
if(WITH_CYCLES AND WITH_CYCLES_OSL)
set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
optimized ${BOOST_LIBPATH}/libboost_wave-${BOOST_POSTFIX}
- debug ${BOOST_LIBPATH}/libboost_wave-${BOOST_DEBUG_POSTFIX})
+ debug ${BOOST_LIBPATH}/libboost_wave-${BOOST_DEBUG_POSTFIX}
+ )
endif()
if(WITH_INTERNATIONAL)
set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
optimized ${BOOST_LIBPATH}/libboost_locale-${BOOST_POSTFIX}
- debug ${BOOST_LIBPATH}/libboost_locale-${BOOST_DEBUG_POSTFIX})
+ debug ${BOOST_LIBPATH}/libboost_locale-${BOOST_DEBUG_POSTFIX}
+ )
endif()
else() # we found boost using find_package
set(BOOST_INCLUDE_DIR ${Boost_INCLUDE_DIRS})
@@ -677,7 +686,8 @@ if(WITH_OPENIMAGEDENOISE)
optimized ${OPENIMAGEDENOISE_LIBPATH}/dnnl.lib
debug ${OPENIMAGEDENOISE_LIBPATH}/OpenImageDenoise_d.lib
debug ${OPENIMAGEDENOISE_LIBPATH}/common_d.lib
- debug ${OPENIMAGEDENOISE_LIBPATH}/dnnl_d.lib)
+ debug ${OPENIMAGEDENOISE_LIBPATH}/dnnl_d.lib
+ )
set(OPENIMAGEDENOISE_DEFINITIONS)
endif()
@@ -832,7 +842,8 @@ if(WITH_CYCLES AND WITH_CYCLES_EMBREE)
debug ${LIBDIR}/embree/lib/math_d.lib
debug ${LIBDIR}/embree/lib/simd_d.lib
debug ${LIBDIR}/embree/lib/sys_d.lib
- debug ${LIBDIR}/embree/lib/tasking_d.lib)
+ debug ${LIBDIR}/embree/lib/tasking_d.lib
+ )
endif()
endif()
@@ -950,3 +961,6 @@ endif()
set(ZSTD_INCLUDE_DIRS ${LIBDIR}/zstd/include)
set(ZSTD_LIBRARIES ${LIBDIR}/zstd/lib/zstd_static.lib)
+
+set(LEVEL_ZERO_ROOT_DIR ${LIBDIR}/level_zero)
+set(SYCL_ROOT_DIR ${LIBDIR}/dpcpp)
diff --git a/build_files/config/pipeline_config.yaml b/build_files/config/pipeline_config.yaml
index 6bfb0125e95..12ef03647ef 100644
--- a/build_files/config/pipeline_config.yaml
+++ b/build_files/config/pipeline_config.yaml
@@ -54,6 +54,8 @@ buildbot:
version: '10.1.243'
cuda11:
version: '11.4.1'
+ hip:
+ version: '5.2.21440'
optix:
version: '7.3.0'
cmake:
diff --git a/build_files/utils/make_update.py b/build_files/utils/make_update.py
index bf140812ebb..254cccda301 100755
--- a/build_files/utils/make_update.py
+++ b/build_files/utils/make_update.py
@@ -110,6 +110,9 @@ def svn_update(args, release_version):
if not make_utils.command_missing(args.svn_command):
call(svn_non_interactive + ["cleanup", lib_dirpath])
continue
+ elif dirname.startswith("."):
+ # Temporary paths such as ".mypy_cache" will report a warning, skip hidden directories.
+ continue
svn_dirpath = os.path.join(dirpath, ".svn")
svn_root_dirpath = os.path.join(lib_dirpath, ".svn")