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:
-rw-r--r--build_files/build_environment/CMakeLists.txt18
-rw-r--r--build_files/build_environment/cmake/alembic.cmake2
-rw-r--r--build_files/build_environment/cmake/blosc.cmake16
-rw-r--r--build_files/build_environment/cmake/boost.cmake48
-rw-r--r--build_files/build_environment/cmake/boost_build_options.cmake3
-rw-r--r--build_files/build_environment/cmake/check_software.cmake6
-rw-r--r--build_files/build_environment/cmake/download.cmake9
-rw-r--r--build_files/build_environment/cmake/dpcpp.cmake6
-rw-r--r--build_files/build_environment/cmake/fmt.cmake3
-rw-r--r--build_files/build_environment/cmake/freetype.cmake3
-rw-r--r--build_files/build_environment/cmake/fribidi.cmake30
-rw-r--r--build_files/build_environment/cmake/harfbuzz.cmake41
-rw-r--r--build_files/build_environment/cmake/harvest.cmake405
-rw-r--r--build_files/build_environment/cmake/imath.cmake4
-rw-r--r--build_files/build_environment/cmake/llvm.cmake11
-rw-r--r--build_files/build_environment/cmake/mesa.cmake1
-rw-r--r--build_files/build_environment/cmake/minizipng.cmake33
-rw-r--r--build_files/build_environment/cmake/opencolorio.cmake16
-rw-r--r--build_files/build_environment/cmake/openexr.cmake9
-rw-r--r--build_files/build_environment/cmake/openimageio.cmake19
-rw-r--r--build_files/build_environment/cmake/opensubdiv.cmake2
-rw-r--r--build_files/build_environment/cmake/openvdb.cmake53
-rw-r--r--build_files/build_environment/cmake/options.cmake63
-rw-r--r--build_files/build_environment/cmake/opus.cmake1
-rw-r--r--build_files/build_environment/cmake/osl.cmake7
-rw-r--r--build_files/build_environment/cmake/python.cmake35
-rw-r--r--build_files/build_environment/cmake/python_site_packages.cmake2
-rw-r--r--build_files/build_environment/cmake/shaderc.cmake64
-rw-r--r--build_files/build_environment/cmake/shaderc_deps.cmake51
-rw-r--r--build_files/build_environment/cmake/ssl.cmake66
-rw-r--r--build_files/build_environment/cmake/tbb.cmake32
-rw-r--r--build_files/build_environment/cmake/usd.cmake96
-rw-r--r--build_files/build_environment/cmake/versions.cmake118
-rw-r--r--build_files/build_environment/cmake/vulkan.cmake55
-rw-r--r--build_files/build_environment/cmake/yamlcpp.cmake1
-rw-r--r--build_files/build_environment/darwin/set_rpath.py19
-rwxr-xr-xbuild_files/build_environment/install_deps.sh1
-rw-r--r--build_files/build_environment/patches/boost.user.jam.in2
-rw-r--r--build_files/build_environment/patches/opencollada.diff52
-rw-r--r--build_files/build_environment/patches/openvdb.diff357
-rw-r--r--build_files/build_environment/patches/osl.diff120
-rw-r--r--build_files/build_environment/patches/python_windows.diff22
-rw-r--r--build_files/build_environment/patches/usd.diff100
-rw-r--r--build_files/build_environment/windows/build_deps.cmd14
-rw-r--r--build_files/buildbot/config/blender_linux.cmake2
-rw-r--r--build_files/cmake/Modules/FindOpenColorIO.cmake1
-rw-r--r--build_files/cmake/Modules/FindPythonLibsUnix.cmake6
-rw-r--r--build_files/cmake/Modules/FindUSD.cmake3
-rw-r--r--build_files/cmake/Modules/GTestTesting.cmake3
-rw-r--r--build_files/cmake/macros.cmake89
-rw-r--r--build_files/cmake/platform/platform_apple.cmake41
-rw-r--r--build_files/cmake/platform/platform_old_libs_update.cmake16
-rw-r--r--build_files/cmake/platform/platform_unix.cmake78
-rw-r--r--build_files/cmake/platform/platform_win32.cmake190
-rw-r--r--build_files/cmake/platform/platform_win32_bundle_crt.cmake56
-rw-r--r--build_files/config/pipeline_config.yaml9
-rw-r--r--extern/mantaflow/helper/util/vectorbase.h7
-rw-r--r--intern/cycles/cmake/macros.cmake1
-rw-r--r--intern/cycles/kernel/osl/shaders/CMakeLists.txt6
-rw-r--r--intern/ffmpeg/CMakeLists.txt2
-rw-r--r--intern/locale/CMakeLists.txt8
-rw-r--r--release/windows/manifest/Blender.manifest.in (renamed from release/windows/manifest/Blender.CRT.MANIFEST.in)4
-rw-r--r--release/windows/python/usercustomize.py14
-rw-r--r--source/blender/imbuf/intern/openexr/CMakeLists.txt5
-rw-r--r--source/blender/io/usd/CMakeLists.txt6
-rw-r--r--source/blender/io/usd/intern/usd_capi_export.cc2
-rw-r--r--source/blender/io/usd/intern/usd_capi_import.cc10
-rw-r--r--source/blender/io/usd/intern/usd_common.cc5
-rw-r--r--source/blender/io/usd/tests/usd_tests_common.cc7
-rw-r--r--source/blender/io/usd/usd.h2
-rw-r--r--source/creator/CMakeLists.txt341
-rw-r--r--source/creator/creator.c8
-rw-r--r--source/creator/symbols_apple.map1
-rw-r--r--tests/python/CMakeLists.txt7
74 files changed, 1777 insertions, 1169 deletions
diff --git a/build_files/build_environment/CMakeLists.txt b/build_files/build_environment/CMakeLists.txt
index 999223603d5..75591333c12 100644
--- a/build_files/build_environment/CMakeLists.txt
+++ b/build_files/build_environment/CMakeLists.txt
@@ -26,7 +26,9 @@
project("BlenderDependencies")
cmake_minimum_required(VERSION 3.5)
-
+if(POLICY CMP0135)
+ cmake_policy(SET CMP0135 NEW) # CMake 3.24+ Set the date/time for extracted files to time of extraction
+endif()
include(ExternalProject)
include(cmake/check_software.cmake)
include(cmake/options.cmake)
@@ -42,7 +44,7 @@ if(ENABLE_MINGW64)
else()
set(mingw_LIBDIR ${LIBDIR})
endif()
-
+include(cmake/ssl.cmake)
include(cmake/zlib.cmake)
include(cmake/zstd.cmake)
include(cmake/openal.cmake)
@@ -73,11 +75,10 @@ if(WIN32)
elseif(UNIX AND NOT APPLE)
include(cmake/flex.cmake)
endif()
-include(cmake/osl.cmake)
include(cmake/tbb.cmake)
-include(cmake/openvdb.cmake)
include(cmake/python.cmake)
include(cmake/llvm.cmake)
+include(cmake/osl.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)
@@ -87,6 +88,7 @@ endif()
include(cmake/python_site_packages.cmake)
include(cmake/package_python.cmake)
include(cmake/usd.cmake)
+include(cmake/openvdb.cmake)
include(cmake/potrace.cmake)
include(cmake/haru.cmake)
# Boost needs to be included after `python.cmake` due to the PYTHON_BINARY variable being needed.
@@ -100,6 +102,8 @@ include(cmake/fmt.cmake)
include(cmake/robinmap.cmake)
include(cmake/xml2.cmake)
+include(cmake/fribidi.cmake)
+include(cmake/harfbuzz.cmake)
if(NOT APPLE)
include(cmake/xr_openxr.cmake)
if(NOT WIN32 OR BUILD_MODE STREQUAL Release)
@@ -117,6 +121,7 @@ endif()
include(cmake/expat.cmake)
include(cmake/pystring.cmake)
include(cmake/yamlcpp.cmake)
+include(cmake/minizipng.cmake)
include(cmake/opencolorio.cmake)
if(BLENDER_PLATFORM_ARM)
@@ -164,7 +169,6 @@ if(UNIX)
include(cmake/bzip2.cmake)
include(cmake/ffi.cmake)
include(cmake/lzma.cmake)
- include(cmake/ssl.cmake)
include(cmake/sqlite.cmake)
endif()
@@ -176,6 +180,8 @@ if(UNIX AND NOT APPLE)
include(cmake/wayland.cmake)
include(cmake/wayland_libdecor.cmake)
endif()
-
+include(cmake/shaderc_deps.cmake)
+include(cmake/shaderc.cmake)
+include(cmake/vulkan.cmake)
include(cmake/harvest.cmake)
include(cmake/cve_check.cmake)
diff --git a/build_files/build_environment/cmake/alembic.cmake b/build_files/build_environment/cmake/alembic.cmake
index 8b049e9e206..7d253ff52b6 100644
--- a/build_files/build_environment/cmake/alembic.cmake
+++ b/build_files/build_environment/cmake/alembic.cmake
@@ -17,6 +17,7 @@ ExternalProject_Add(external_alembic
URL file://${PACKAGE_DIR}/${ALEMBIC_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${ALEMBIC_HASH_TYPE}=${ALEMBIC_HASH}
+ CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
PREFIX ${BUILD_DIR}/alembic
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/alembic -Wno-dev ${DEFAULT_CMAKE_FLAGS} ${ALEMBIC_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/alembic
@@ -41,6 +42,5 @@ endif()
add_dependencies(
external_alembic
- external_openexr
external_imath
)
diff --git a/build_files/build_environment/cmake/blosc.cmake b/build_files/build_environment/cmake/blosc.cmake
index 7dfa8853a8a..72368808744 100644
--- a/build_files/build_environment/cmake/blosc.cmake
+++ b/build_files/build_environment/cmake/blosc.cmake
@@ -38,19 +38,3 @@ if(WIN32)
external_pthreads
)
endif()
-
-if(WIN32)
- if(BUILD_MODE STREQUAL Release)
- ExternalProject_Add_Step(external_blosc after_install
- COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/blosc/lib/libblosc.lib ${HARVEST_TARGET}/blosc/lib/libblosc.lib
- COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/blosc/include/ ${HARVEST_TARGET}/blosc/include/
- DEPENDEES install
- )
- endif()
- if(BUILD_MODE STREQUAL Debug)
- ExternalProject_Add_Step(external_blosc after_install
- COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/blosc/lib/libblosc_d.lib ${HARVEST_TARGET}/blosc/lib/libblosc_d.lib
- DEPENDEES install
- )
- endif()
-endif()
diff --git a/build_files/build_environment/cmake/boost.cmake b/build_files/build_environment/cmake/boost.cmake
index 57088e59cee..495b419e69c 100644
--- a/build_files/build_environment/cmake/boost.cmake
+++ b/build_files/build_environment/cmake/boost.cmake
@@ -3,8 +3,18 @@
if(WIN32)
set(BOOST_CONFIGURE_COMMAND bootstrap.bat)
set(BOOST_BUILD_COMMAND b2)
- set(BOOST_BUILD_OPTIONS runtime-link=shared )
- set(BOOST_HARVEST_CMD ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/boost/lib/ ${HARVEST_TARGET}/boost/lib/ )
+ set(BOOST_BUILD_OPTIONS runtime-link=shared)
+ if(BUILD_MODE STREQUAL Debug)
+ list(APPEND BOOST_BUILD_OPTIONS python-debugging=on variant=debug)
+ if(WITH_OPTIMIZED_DEBUG)
+ list(APPEND BOOST_BUILD_OPTIONS debug-symbols=off)
+ else()
+ list(APPEND BOOST_BUILD_OPTIONS debug-symbols=on)
+ endif()
+ else()
+ list(APPEND BOOST_BUILD_OPTIONS variant=release)
+ endif()
+ set(BOOST_HARVEST_CMD ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/boost/lib/ ${HARVEST_TARGET}/boost/lib/)
if(BUILD_MODE STREQUAL Release)
set(BOOST_HARVEST_CMD ${BOOST_HARVEST_CMD} && ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/boost/include/boost-${BOOST_VERSION_NODOTS_SHORT}/ ${HARVEST_TARGET}/boost/include/)
endif()
@@ -22,19 +32,17 @@ else()
set(BOOST_PATCH_COMMAND echo .)
endif()
-if(WITH_BOOST_PYTHON)
- set(JAM_FILE ${BUILD_DIR}/boost.user-config.jam)
- configure_file(${PATCH_DIR}/boost.user.jam.in ${JAM_FILE})
+set(JAM_FILE ${BUILD_DIR}/boost.user-config.jam)
+configure_file(${PATCH_DIR}/boost.user.jam.in ${JAM_FILE})
+set(BOOST_PYTHON_OPTIONS
+ --with-python
+ --user-config=${JAM_FILE}
+)
+if(WIN32 AND BUILD_MODE STREQUAL Debug)
set(BOOST_PYTHON_OPTIONS
- --with-python
- --user-config=${JAM_FILE}
+ ${BOOST_PYTHON_OPTIONS}
+ define=BOOST_DEBUG_PYTHON
)
- if(WIN32 AND BUILD_MODE STREQUAL Debug)
- set(BOOST_PYTHON_OPTIONS
- ${BOOST_PYTHON_OPTIONS}
- define=BOOST_DEBUG_PYTHON
- )
- endif()
endif()
set(BOOST_OPTIONS
@@ -66,15 +74,13 @@ ExternalProject_Add(external_boost
UPDATE_COMMAND ""
PATCH_COMMAND ${BOOST_PATCH_COMMAND}
CONFIGURE_COMMAND ${BOOST_CONFIGURE_COMMAND}
- BUILD_COMMAND ${BOOST_BUILD_COMMAND} ${BOOST_BUILD_OPTIONS} -j${MAKE_THREADS} architecture=${BOOST_ARCHITECTURE} address-model=${BOOST_ADDRESS_MODEL} link=static threading=multi ${BOOST_OPTIONS} --prefix=${LIBDIR}/boost install
+ BUILD_COMMAND ${BOOST_BUILD_COMMAND} ${BOOST_BUILD_OPTIONS} -j${MAKE_THREADS} architecture=${BOOST_ARCHITECTURE} address-model=${BOOST_ADDRESS_MODEL} link=shared threading=multi ${BOOST_OPTIONS} --prefix=${LIBDIR}/boost install
BUILD_IN_SOURCE 1
INSTALL_COMMAND "${BOOST_HARVEST_CMD}"
)
-if(WITH_BOOST_PYTHON)
- add_dependencies(
- external_boost
- external_python
- external_numpy
- )
-endif()
+add_dependencies(
+ external_boost
+ external_python
+ external_numpy
+)
diff --git a/build_files/build_environment/cmake/boost_build_options.cmake b/build_files/build_environment/cmake/boost_build_options.cmake
index cc471078fcd..096534752f4 100644
--- a/build_files/build_environment/cmake/boost_build_options.cmake
+++ b/build_files/build_environment/cmake/boost_build_options.cmake
@@ -20,11 +20,12 @@ endif()
set(DEFAULT_BOOST_FLAGS
-DBoost_COMPILER:STRING=${BOOST_COMPILER_STRING}
-DBoost_USE_MULTITHREADED=ON
- -DBoost_USE_STATIC_LIBS=ON
+ -DBoost_USE_STATIC_LIBS=OFF
-DBoost_USE_STATIC_RUNTIME=OFF
-DBOOST_ROOT=${LIBDIR}/boost
-DBoost_NO_SYSTEM_PATHS=ON
-DBoost_NO_BOOST_CMAKE=ON
-DBoost_ADDITIONAL_VERSIONS=${BOOST_VERSION_SHORT}
-DBOOST_LIBRARYDIR=${LIBDIR}/boost/lib/
+ -DBoost_USE_DEBUG_PYTHON=On
)
diff --git a/build_files/build_environment/cmake/check_software.cmake b/build_files/build_environment/cmake/check_software.cmake
index bdb9036e3f9..903c2c3022f 100644
--- a/build_files/build_environment/cmake/check_software.cmake
+++ b/build_files/build_environment/cmake/check_software.cmake
@@ -19,6 +19,10 @@ if(UNIX)
yasm
)
+ if(NOT APPLE)
+ list(APPEND _required_software patchelf)
+ endif()
+
foreach(_software ${_required_software})
find_program(_software_find NAMES ${_software})
if(NOT _software_find)
@@ -46,7 +50,7 @@ if(UNIX)
" ${_software_missing}\n"
"\n"
"On Debian and Ubuntu:\n"
- " apt install autoconf automake bison libtool yasm tcl ninja-build meson python3-mako\n"
+ " apt install autoconf automake bison libtool yasm tcl ninja-build meson python3-mako patchelf\n"
"\n"
"On macOS (with homebrew):\n"
" brew install autoconf automake bison flex libtool meson ninja pkg-config yasm\n"
diff --git a/build_files/build_environment/cmake/download.cmake b/build_files/build_environment/cmake/download.cmake
index 8d75f0ff0ed..f2681bd33d6 100644
--- a/build_files/build_environment/cmake/download.cmake
+++ b/build_files/build_environment/cmake/download.cmake
@@ -87,6 +87,7 @@ download_source(OPENSUBDIV)
download_source(SDL)
download_source(OPENCOLLADA)
download_source(OPENCOLORIO)
+download_source(MINIZIPNG)
download_source(LLVM)
download_source(OPENMP)
download_source(OPENIMAGEIO)
@@ -163,3 +164,11 @@ download_source(IGC_SPIRV_TRANSLATOR)
download_source(GMMLIB)
download_source(OCLOC)
download_source(AOM)
+download_source(FRIBIDI)
+download_source(HARFBUZZ)
+download_source(SHADERC)
+download_source(SHADERC_SPIRV_TOOLS)
+download_source(SHADERC_SPIRV_HEADERS)
+download_source(SHADERC_GLSLANG)
+download_source(VULKAN_HEADERS)
+download_source(VULKAN_LOADER)
diff --git a/build_files/build_environment/cmake/dpcpp.cmake b/build_files/build_environment/cmake/dpcpp.cmake
index 28315d1f703..ef6fc9c40c9 100644
--- a/build_files/build_environment/cmake/dpcpp.cmake
+++ b/build_files/build_environment/cmake/dpcpp.cmake
@@ -1,5 +1,9 @@
# SPDX-License-Identifier: GPL-2.0-or-later
+# LLVM does not switch over to cpp17 until llvm 16 and building ealier versions with
+# MSVC is leading to some crashes in ISPC. Switch back to their default on all platforms
+# for now.
+string(REPLACE "-DCMAKE_CXX_STANDARD=17" " " DPCPP_CMAKE_FLAGS "${DEFAULT_CMAKE_FLAGS}")
if(WIN32)
set(LLVM_GENERATOR "Ninja")
@@ -79,7 +83,7 @@ ExternalProject_Add(external_dpcpp
CMAKE_GENERATOR ${LLVM_GENERATOR}
SOURCE_SUBDIR llvm
LIST_SEPARATOR ^^
- CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/dpcpp ${DEFAULT_CMAKE_FLAGS} ${DPCPP_EXTRA_ARGS}
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/dpcpp ${DPCPP_CMAKE_FLAGS} ${DPCPP_EXTRA_ARGS}
# CONFIGURE_COMMAND
# ${PYTHON_BINARY}
# ${BUILD_DIR}/dpcpp/src/external_dpcpp/buildbot/configure.py ${DPCPP_CONFIGURE_ARGS}
diff --git a/build_files/build_environment/cmake/fmt.cmake b/build_files/build_environment/cmake/fmt.cmake
index 74cb9e0c8ad..90982b44679 100644
--- a/build_files/build_environment/cmake/fmt.cmake
+++ b/build_files/build_environment/cmake/fmt.cmake
@@ -1,7 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-or-later
set(FMT_EXTRA_ARGS
- -DFMT_TEST=Off
+ -DFMT_TEST=OFF
+ -DFMT_DOC=OFF
)
ExternalProject_Add(external_fmt
diff --git a/build_files/build_environment/cmake/freetype.cmake b/build_files/build_environment/cmake/freetype.cmake
index 842e5c42e25..c0cb3c3401b 100644
--- a/build_files/build_environment/cmake/freetype.cmake
+++ b/build_files/build_environment/cmake/freetype.cmake
@@ -32,6 +32,9 @@ add_dependencies(
if(BUILD_MODE STREQUAL Release AND WIN32)
ExternalProject_Add_Step(external_freetype after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/freetype ${HARVEST_TARGET}/freetype
+ # harfbuzz *NEEDS* to find freetype.lib and will not be conviced to take alternative names so just give it
+ # what it wants.
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/freetype/lib/freetype2st.lib ${LIBDIR}/freetype/lib/freetype.lib
DEPENDEES install
)
endif()
diff --git a/build_files/build_environment/cmake/fribidi.cmake b/build_files/build_environment/cmake/fribidi.cmake
new file mode 100644
index 00000000000..6e063eb5b26
--- /dev/null
+++ b/build_files/build_environment/cmake/fribidi.cmake
@@ -0,0 +1,30 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+if(WIN32)
+ set(CONFIGURE_ENV ${CONFIGURE_ENV_MSVC})
+endif()
+
+ExternalProject_Add(external_fribidi
+ URL file://${PACKAGE_DIR}/${FRIBIDI_FILE}
+ URL_HASH ${FRIBIDI_HASH_TYPE}=${FRIBIDI_HASH}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ PREFIX ${BUILD_DIR}/fribidi
+ CONFIGURE_COMMAND ${MESON} setup --prefix ${LIBDIR}/fribidi -Ddocs=false --default-library static --libdir lib ${BUILD_DIR}/fribidi/src/external_fribidi-build ${BUILD_DIR}/fribidi/src/external_fribidi
+ BUILD_COMMAND ninja
+ INSTALL_COMMAND ninja install
+ INSTALL_DIR ${LIBDIR}/fribidi
+)
+
+add_dependencies(
+ external_fribidi
+ external_python
+ external_python_site_packages
+)
+
+if(BUILD_MODE STREQUAL Release AND WIN32)
+ ExternalProject_Add_Step(external_fribidi after_install
+ COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/fribidi/include ${HARVEST_TARGET}/fribidi/include
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/fribidi/lib/libfribidi.a ${HARVEST_TARGET}/fribidi/lib/libfribidi.lib
+ DEPENDEES install
+ )
+endif()
diff --git a/build_files/build_environment/cmake/harfbuzz.cmake b/build_files/build_environment/cmake/harfbuzz.cmake
new file mode 100644
index 00000000000..0ae9b11d627
--- /dev/null
+++ b/build_files/build_environment/cmake/harfbuzz.cmake
@@ -0,0 +1,41 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+if(WIN32)
+ set(HARFBUZZ_CONFIGURE_ENV ${CONFIGURE_ENV_MSVC} && set FREETYPE_DIR=${LIBDIR}/freetype)
+else()
+ set(HARFBUZZ_CONFIGURE_ENV ${CONFIGURE_ENV} && PKG_CONFIG_PATH=${LIBDIR}/freetype/lib/pkgconfig:${LIBDIR}/brotli/lib/pkgconfig)
+endif()
+
+set(HARFBUZZ_EXTRA_OPTIONS
+ -Dtests=disabled
+ -Dfreetype=enabled
+ -Dglib=disabled
+ -Dgobject=disabled
+)
+
+ExternalProject_Add(external_harfbuzz
+ URL file://${PACKAGE_DIR}/${HARFBUZZ_FILE}
+ URL_HASH ${HARFBUZZ_HASH_TYPE}=${HARFBUZZ_HASH}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ PREFIX ${BUILD_DIR}/harfbuzz
+ CONFIGURE_COMMAND ${HARFBUZZ_CONFIGURE_ENV} && ${MESON} setup --prefix ${LIBDIR}/harfbuzz ${HARFBUZZ_EXTRA_OPTIONS} --default-library static --libdir lib ${BUILD_DIR}/harfbuzz/src/external_harfbuzz-build ${BUILD_DIR}/harfbuzz/src/external_harfbuzz
+ BUILD_COMMAND ninja
+ INSTALL_COMMAND ninja install
+ INSTALL_DIR ${LIBDIR}/harfbuzz
+)
+
+add_dependencies(
+ external_harfbuzz
+ external_python
+ external_python_site_packages
+)
+
+if(BUILD_MODE STREQUAL Release AND WIN32)
+ ExternalProject_Add_Step(external_harfbuzz after_install
+ COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/harfbuzz/include ${HARVEST_TARGET}/harfbuzz/include
+ # We do not use the subset API currently, so copying only the main library will suffice for now
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/harfbuzz/lib/libharfbuzz.a ${HARVEST_TARGET}/harfbuzz/lib/libharfbuzz.lib
+ DEPENDEES install
+ )
+endif()
+
diff --git a/build_files/build_environment/cmake/harvest.cmake b/build_files/build_environment/cmake/harvest.cmake
index 9afc1974677..fc8845405dd 100644
--- a/build_files/build_environment/cmake/harvest.cmake
+++ b/build_files/build_environment/cmake/harvest.cmake
@@ -11,194 +11,249 @@ message("HARVEST_TARGET = ${HARVEST_TARGET}")
if(WIN32)
- if(BUILD_MODE STREQUAL Release)
- add_custom_target(Harvest_Release_Results
- COMMAND # jpeg rename libfile + copy include
- ${CMAKE_COMMAND} -E copy ${LIBDIR}/jpeg/lib/jpeg-static.lib ${HARVEST_TARGET}/jpeg/lib/libjpeg.lib &&
- ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/jpeg/include/ ${HARVEST_TARGET}/jpeg/include/ &&
- # png
- ${CMAKE_COMMAND} -E copy ${LIBDIR}/png/lib/libpng16_static.lib ${HARVEST_TARGET}/png/lib/libpng.lib &&
- ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/png/include/ ${HARVEST_TARGET}/png/include/ &&
- # 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/ &&
- DEPENDS
+if(BUILD_MODE STREQUAL Release)
+ add_custom_target(Harvest_Release_Results
+ COMMAND # jpeg rename libfile + copy include
+ ${CMAKE_COMMAND} -E copy ${LIBDIR}/jpeg/lib/jpeg-static.lib ${HARVEST_TARGET}/jpeg/lib/libjpeg.lib &&
+ ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/jpeg/include/ ${HARVEST_TARGET}/jpeg/include/ &&
+ # png
+ ${CMAKE_COMMAND} -E copy ${LIBDIR}/png/lib/libpng16_static.lib ${HARVEST_TARGET}/png/lib/libpng.lib &&
+ ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/png/include/ ${HARVEST_TARGET}/png/include/ &&
+ # 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/ &&
+ DEPENDS
+ )
+endif()
+
+else(WIN32)
+
+function(harvest from to)
+ set(pattern "")
+ foreach(f ${ARGN})
+ set(pattern ${f})
+ endforeach()
+
+ if(pattern STREQUAL "")
+ get_filename_component(dirpath ${to} DIRECTORY)
+ get_filename_component(filename ${to} NAME)
+ install(
+ FILES ${LIBDIR}/${from}
+ DESTINATION ${HARVEST_TARGET}/${dirpath}
+ RENAME ${filename}
+ )
+ else()
+ install(
+ DIRECTORY ${LIBDIR}/${from}/
+ DESTINATION ${HARVEST_TARGET}/${to}
+ USE_SOURCE_PERMISSIONS
+ FILES_MATCHING PATTERN ${pattern}
+ PATTERN "pkgconfig" EXCLUDE
+ PATTERN "cmake" EXCLUDE
+ PATTERN "__pycache__" EXCLUDE
+ PATTERN "tests" EXCLUDE
+ PATTERN "meson*" EXCLUDE
)
endif()
+endfunction()
+# Set rpath on shared libraries to $ORIGIN since all will be installed in the same
+# lib folder, and remove any absolute paths.
+#
+# Ideally this would be done as part of the Blender build since it makes assumptions
+# about where the files will be installed. However it would add patchelf as a new
+# dependency for building.
+if(APPLE)
+ set(set_rpath_cmd python3 ${CMAKE_CURRENT_SOURCE_DIR}/darwin/set_rpath.py @loader_path)
else()
+ set(set_rpath_cmd patchelf --set-rpath $ORIGIN)
+endif()
- function(harvest from to)
- set(pattern "")
- foreach(f ${ARGN})
- set(pattern ${f})
- endforeach()
-
- if(pattern STREQUAL "")
- get_filename_component(dirpath ${to} DIRECTORY)
- get_filename_component(filename ${to} NAME)
- install(
- FILES ${LIBDIR}/${from}
- DESTINATION ${HARVEST_TARGET}/${dirpath}
- RENAME ${filename}
- )
- else()
- install(
- DIRECTORY ${LIBDIR}/${from}/
- DESTINATION ${HARVEST_TARGET}/${to}
- USE_SOURCE_PERMISSIONS
- FILES_MATCHING PATTERN ${pattern}
- PATTERN "pkgconfig" EXCLUDE
- PATTERN "cmake" EXCLUDE
- PATTERN "__pycache__" EXCLUDE
- PATTERN "tests" EXCLUDE
- )
- endif()
- endfunction()
-
- harvest(alembic/include alembic/include "*.h")
- harvest(alembic/lib/libAlembic.a alembic/lib/libAlembic.a)
- harvest(alembic/bin alembic/bin "*")
- harvest(brotli/include brotli/include "*.h")
- harvest(brotli/lib brotli/lib "*.a")
- harvest(boost/include boost/include "*")
- harvest(boost/lib boost/lib "*.a")
- harvest(imath/include imath/include "*.h")
- harvest(imath/lib imath/lib "*.a")
- harvest(ffmpeg/include ffmpeg/include "*.h")
- harvest(ffmpeg/lib ffmpeg/lib "*.a")
- harvest(fftw3/include fftw3/include "*.h")
- 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(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")
- harvest(jemalloc/lib jemalloc/lib "*.a")
- harvest(jpeg/include jpeg/include "*.h")
- harvest(jpeg/lib jpeg/lib "libjpeg.a")
- harvest(lame/lib ffmpeg/lib "*.a")
- if(NOT APPLE)
- harvest(level-zero/include/level_zero level-zero/include/level_zero "*.h")
- harvest(level-zero/lib level-zero/lib "*.so*")
- endif()
- harvest(llvm/bin llvm/bin "clang-format")
- if(BUILD_CLANG_TOOLS)
- harvest(llvm/bin llvm/bin "clang-tidy")
- harvest(llvm/share/clang llvm/share "run-clang-tidy.py")
- endif()
- harvest(llvm/include llvm/include "*")
- harvest(llvm/bin llvm/bin "llvm-config")
- harvest(llvm/lib llvm/lib "libLLVM*.a")
- harvest(llvm/lib llvm/lib "libclang*.a")
- harvest(llvm/lib/clang llvm/lib/clang "*.h")
- if(APPLE)
- harvest(openmp/lib openmp/lib "*")
- harvest(openmp/include openmp/include "*.h")
- endif()
- if(BLENDER_PLATFORM_ARM)
- harvest(sse2neon sse2neon "*.h")
- endif()
- harvest(ogg/lib ffmpeg/lib "*.a")
- harvest(openal/include openal/include "*.h")
- if(UNIX AND NOT APPLE)
- harvest(openal/lib openal/lib "*.a")
+function(harvest_rpath_lib from to pattern)
+ harvest(${from} ${to} ${pattern})
+
+ install(CODE "\
+ cmake_policy(SET CMP0009 NEW)\n
+ file(GLOB_RECURSE shared_libs ${HARVEST_TARGET}/${to}/${pattern}) \n
+ foreach(f \${shared_libs}) \n
+ if(NOT IS_SYMLINK \${f})\n
+ execute_process(COMMAND ${set_rpath_cmd} \${f}) \n
+ endif()\n
+ endforeach()")
+endfunction()
+
+# Set rpath on utility binaries assuming they are run from their install location.
+function(harvest_rpath_bin from to pattern)
+ harvest(${from} ${to} ${pattern})
- harvest(blosc/include blosc/include "*.h")
- harvest(blosc/lib blosc/lib "*.a")
+ install(CODE "\
+ file(GLOB_RECURSE shared_libs ${HARVEST_TARGET}/${to}/${pattern}) \n
+ foreach(f \${shared_libs}) \n
+ execute_process(COMMAND ${set_rpath_cmd}/../lib; \${f}) \n
+ endforeach()")
+endfunction()
- harvest(zlib/include zlib/include "*.h")
- harvest(zlib/lib zlib/lib "*.a")
+# Set rpath on Python module to point to the shared libraries folder in the Blender
+# installation.
+function(harvest_rpath_python from to pattern)
+ harvest(${from} ${to} ${pattern})
- harvest(xml2/include xml2/include "*.h")
- harvest(xml2/lib xml2/lib "*.a")
+ install(CODE "\
+ file(GLOB_RECURSE shared_libs ${HARVEST_TARGET}/${to}/${pattern}\.so*) \n
+ foreach(f \${shared_libs}) \n
+ get_filename_component(f_dir \${f} DIRECTORY) \n
+ file(RELATIVE_PATH relative_dir \${f_dir} ${HARVEST_TARGET}) \n
+ execute_process(COMMAND ${set_rpath_cmd}/\${relative_dir}../lib \${f}) \n
+ endforeach()")
+endfunction()
- harvest(wayland-protocols/share/wayland-protocols wayland-protocols/share/wayland-protocols/ "*.xml")
+harvest(alembic/include alembic/include "*.h")
+harvest(alembic/lib/libAlembic.a alembic/lib/libAlembic.a)
+harvest(alembic/bin alembic/bin "*")
+harvest(brotli/include brotli/include "*.h")
+harvest(brotli/lib brotli/lib "*.a")
+harvest(boost/include boost/include "*")
+harvest_rpath_lib(boost/lib boost/lib "*${SHAREDLIBEXT}*")
+harvest(imath/include imath/include "*.h")
+harvest_rpath_lib(imath/lib imath/lib "*${SHAREDLIBEXT}*")
+harvest(ffmpeg/include ffmpeg/include "*.h")
+harvest(ffmpeg/lib ffmpeg/lib "*.a")
+harvest(fftw3/include fftw3/include "*.h")
+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(fribidi/include fribidi/include "*.h")
+harvest(fribidi/lib fribidi/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(harfbuzz/include harfbuzz/include "*.h")
+harvest(harfbuzz/lib harfbuzz/lib "*.a")
+harvest(jemalloc/include jemalloc/include "*.h")
+harvest(jemalloc/lib jemalloc/lib "*.a")
+harvest(jpeg/include jpeg/include "*.h")
+harvest(jpeg/lib jpeg/lib "libjpeg.a")
+harvest(lame/lib ffmpeg/lib "*.a")
+if(NOT APPLE)
+ harvest(level-zero/include/level_zero level-zero/include/level_zero "*.h")
+ harvest(level-zero/lib level-zero/lib "*${SHAREDLIBEXT}*")
+endif()
+harvest(llvm/bin llvm/bin "clang-format")
+if(BUILD_CLANG_TOOLS)
+ harvest(llvm/bin llvm/bin "clang-tidy")
+ harvest(llvm/share/clang llvm/share "run-clang-tidy.py")
+endif()
+harvest(llvm/include llvm/include "*")
+harvest(llvm/bin llvm/bin "llvm-config")
+harvest(llvm/lib llvm/lib "libLLVM*.a")
+harvest(llvm/lib llvm/lib "libclang*.a")
+harvest(llvm/lib/clang llvm/lib/clang "*.h")
+if(APPLE)
+ harvest(openmp/lib openmp/lib "*")
+ harvest(openmp/include openmp/include "*.h")
+endif()
+if(BLENDER_PLATFORM_ARM)
+ harvest(sse2neon sse2neon "*.h")
+endif()
+harvest(ogg/lib ffmpeg/lib "*.a")
+harvest(openal/include openal/include "*.h")
+if(UNIX AND NOT APPLE)
+ harvest(openal/lib openal/lib "*.a")
+
+ harvest(zlib/include zlib/include "*.h")
+ harvest(zlib/lib zlib/lib "*.a")
+
+ harvest(xml2/include xml2/include "*.h")
+ harvest(xml2/lib xml2/lib "*.a")
+
+ harvest(wayland-protocols/share/wayland-protocols wayland-protocols/share/wayland-protocols/ "*.xml")
harvest(wayland/bin wayland/bin "wayland-scanner")
harvest(wayland/include wayland/include "*.h")
harvest(wayland_libdecor/include wayland_libdecor/include "*.h")
else()
harvest(blosc/lib openvdb/lib "*.a")
- harvest(xml2/lib opencollada/lib "*.a")
- endif()
- harvest(opencollada/include/opencollada opencollada/include "*.h")
- harvest(opencollada/lib/opencollada opencollada/lib "*.a")
- harvest(opencolorio/include opencolorio/include "*.h")
- harvest(opencolorio/lib opencolorio/lib "*.a")
- harvest(opencolorio/lib/static opencolorio/lib "*.a")
- harvest(openexr/include openexr/include "*.h")
- harvest(openexr/lib openexr/lib "*.a")
- harvest(openimageio/bin openimageio/bin "idiff")
- harvest(openimageio/bin openimageio/bin "maketx")
- harvest(openimageio/bin openimageio/bin "oiiotool")
- harvest(openimageio/include openimageio/include "*")
- harvest(openimageio/lib openimageio/lib "*.a")
- harvest(openimagedenoise/include openimagedenoise/include "*")
- harvest(openimagedenoise/lib openimagedenoise/lib "*.a")
- harvest(embree/include embree/include "*.h")
- harvest(embree/lib embree/lib "*.a")
- harvest(openpgl/include openpgl/include "*.h")
- harvest(openpgl/lib openpgl/lib "*.a")
- harvest(openpgl/lib/cmake/openpgl-${OPENPGL_SHORT_VERSION} openpgl/lib/cmake/openpgl "*.cmake")
- harvest(openjpeg/include/openjpeg-${OPENJPEG_SHORT_VERSION} openjpeg/include "*.h")
- harvest(openjpeg/lib openjpeg/lib "*.a")
- harvest(opensubdiv/include opensubdiv/include "*.h")
- harvest(opensubdiv/lib opensubdiv/lib "*.a")
- harvest(openvdb/include/openvdb openvdb/include/openvdb "*.h")
- harvest(openvdb/include/nanovdb openvdb/include/nanovdb "*.h")
- harvest(openvdb/lib openvdb/lib "*.a")
- harvest(xr_openxr_sdk/include/openxr xr_openxr_sdk/include/openxr "*.h")
- harvest(xr_openxr_sdk/lib xr_openxr_sdk/lib "*.a")
- harvest(osl/bin osl/bin "oslc")
- harvest(osl/include osl/include "*.h")
- harvest(osl/lib osl/lib "*.a")
- harvest(osl/share/OSL/shaders osl/share/OSL/shaders "*.h")
- harvest(png/include png/include "*.h")
- harvest(png/lib png/lib "*.a")
- harvest(pugixml/include pugixml/include "*.hpp")
- harvest(pugixml/lib pugixml/lib "*.a")
- harvest(python/bin python/bin "python${PYTHON_SHORT_VERSION}")
- harvest(python/include python/include "*h")
- harvest(python/lib python/lib "*")
- harvest(sdl/include/SDL2 sdl/include "*.h")
- harvest(sdl/lib sdl/lib "libSDL2.a")
- harvest(sndfile/include sndfile/include "*.h")
- harvest(sndfile/lib sndfile/lib "*.a")
- harvest(spnav/include spnav/include "*.h")
- harvest(spnav/lib spnav/lib "*.a")
- harvest(tbb/include tbb/include "*.h")
- harvest(tbb/lib/libtbb_static.a tbb/lib/libtbb.a)
- harvest(theora/lib ffmpeg/lib "*.a")
- harvest(tiff/include tiff/include "*.h")
- harvest(tiff/lib tiff/lib "*.a")
- harvest(vorbis/lib ffmpeg/lib "*.a")
- 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")
- harvest(usd/lib/usd usd/lib/usd "*")
- harvest(usd/plugin usd/plugin "*")
- harvest(potrace/include potrace/include "*.h")
- harvest(potrace/lib potrace/lib "*.a")
- harvest(haru/include haru/include "*.h")
- harvest(haru/lib haru/lib "*.a")
- harvest(zstd/include zstd/include "*.h")
- harvest(zstd/lib zstd/lib "*.a")
-
- if(UNIX AND NOT APPLE)
- harvest(libglu/lib mesa/lib "*.so*")
- harvest(mesa/lib64 mesa/lib "*.so*")
-
- harvest(dpcpp dpcpp "*")
- harvest(igc dpcpp/lib/igc "*")
- harvest(ocloc dpcpp/lib/ocloc "*")
- endif()
+ harvest(xml2/lib opencollada/lib "*.a")
+endif()
+harvest(opencollada/include/opencollada opencollada/include "*.h")
+harvest(opencollada/lib/opencollada opencollada/lib "*.a")
+harvest(opencolorio/include opencolorio/include "*.h")
+harvest(opencolorio/lib opencolorio/lib "*.a")
+harvest(opencolorio/lib/static opencolorio/lib "*.a")
+harvest(minizipng/lib opencolorio/lib "*.a")
+harvest(openexr/include openexr/include "*.h")
+harvest_rpath_lib(openexr/lib openexr/lib "*${SHAREDLIBEXT}*")
+harvest_rpath_bin(openimageio/bin openimageio/bin "idiff")
+harvest_rpath_bin(openimageio/bin openimageio/bin "maketx")
+harvest_rpath_bin(openimageio/bin openimageio/bin "oiiotool")
+harvest(openimageio/include openimageio/include "*")
+harvest_rpath_lib(openimageio/lib openimageio/lib "*${SHAREDLIBEXT}*")
+harvest(openimagedenoise/include openimagedenoise/include "*")
+harvest(openimagedenoise/lib openimagedenoise/lib "*.a")
+harvest(embree/include embree/include "*.h")
+harvest(embree/lib embree/lib "*.a")
+harvest(openpgl/include openpgl/include "*.h")
+harvest(openpgl/lib openpgl/lib "*.a")
+harvest(openpgl/lib/cmake/openpgl-${OPENPGL_SHORT_VERSION} openpgl/lib/cmake/openpgl "*.cmake")
+harvest(openjpeg/include/openjpeg-${OPENJPEG_SHORT_VERSION} openjpeg/include "*.h")
+harvest(openjpeg/lib openjpeg/lib "*.a")
+harvest(opensubdiv/include opensubdiv/include "*.h")
+harvest_rpath_lib(opensubdiv/lib opensubdiv/lib "*${SHAREDLIBEXT}*")
+harvest(openvdb/include/openvdb openvdb/include/openvdb "*.h")
+harvest(openvdb/include/nanovdb openvdb/include/nanovdb "*.h")
+harvest_rpath_lib(openvdb/lib openvdb/lib "*${SHAREDLIBEXT}*")
+harvest_rpath_python(openvdb/lib/python${PYTHON_SHORT_VERSION} python/lib/python${PYTHON_SHORT_VERSION} "*pyopenvdb*")
+harvest(xr_openxr_sdk/include/openxr xr_openxr_sdk/include/openxr "*.h")
+harvest(xr_openxr_sdk/lib xr_openxr_sdk/lib "*.a")
+harvest(osl/bin osl/bin "oslc")
+harvest(osl/include osl/include "*.h")
+harvest(osl/lib osl/lib "*.a")
+harvest(osl/share/OSL/shaders osl/share/OSL/shaders "*.h")
+harvest(png/include png/include "*.h")
+harvest(png/lib png/lib "*.a")
+harvest(pugixml/include pugixml/include "*.hpp")
+harvest(pugixml/lib pugixml/lib "*.a")
+harvest(python/bin python/bin "python${PYTHON_SHORT_VERSION}")
+harvest(python/include python/include "*h")
+harvest(python/lib python/lib "*")
+harvest(sdl/include/SDL2 sdl/include "*.h")
+harvest(sdl/lib sdl/lib "libSDL2.a")
+harvest(sndfile/include sndfile/include "*.h")
+harvest(sndfile/lib sndfile/lib "*.a")
+harvest(spnav/include spnav/include "*.h")
+harvest(spnav/lib spnav/lib "*.a")
+harvest(tbb/include tbb/include "*.h")
+harvest_rpath_lib(tbb/lib tbb/lib "libtbb${SHAREDLIBEXT}")
+harvest(theora/lib ffmpeg/lib "*.a")
+harvest(tiff/include tiff/include "*.h")
+harvest(tiff/lib tiff/lib "*.a")
+harvest(vorbis/lib ffmpeg/lib "*.a")
+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")
+harvest_rpath_lib(usd/lib usd/lib "libusd_ms${SHAREDLIBEXT}")
+harvest(usd/lib/usd usd/lib/usd "*")
+harvest_rpath_python(usd/lib/python/pxr python/lib/python${PYTHON_SHORT_VERSION}/site-packages/pxr "*")
+harvest(usd/plugin usd/plugin "*")
+harvest(potrace/include potrace/include "*.h")
+harvest(potrace/lib potrace/lib "*.a")
+harvest(haru/include haru/include "*.h")
+harvest(haru/lib haru/lib "*.a")
+harvest(zstd/include zstd/include "*.h")
+harvest(zstd/lib zstd/lib "*.a")
+
+if(UNIX AND NOT APPLE)
+ harvest(libglu/lib mesa/lib "*${SHAREDLIBEXT}*")
+ harvest(mesa/lib64 mesa/lib "*${SHAREDLIBEXT}*")
+ harvest(dpcpp dpcpp "*")
+ harvest(igc dpcpp/lib/igc "*")
+ harvest(ocloc dpcpp/lib/ocloc "*")
+endif()
endif()
diff --git a/build_files/build_environment/cmake/imath.cmake b/build_files/build_environment/cmake/imath.cmake
index eb5465e6d37..1cad822c43a 100644
--- a/build_files/build_environment/cmake/imath.cmake
+++ b/build_files/build_environment/cmake/imath.cmake
@@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0-or-later
set(IMATH_EXTRA_ARGS
- -DBUILD_SHARED_LIBS=OFF
+ -DBUILD_SHARED_LIBS=ON
-DBUILD_TESTING=OFF
-DIMATH_LIB_SUFFIX=${OPENEXR_VERSION_BUILD_POSTFIX}
)
@@ -11,6 +11,7 @@ ExternalProject_Add(external_imath
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${IMATH_HASH_TYPE}=${IMATH_HASH}
PREFIX ${BUILD_DIR}/imath
+ CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/imath ${DEFAULT_CMAKE_FLAGS} ${IMATH_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/imath
)
@@ -19,6 +20,7 @@ if(WIN32)
ExternalProject_Add_Step(external_imath after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/imath/lib ${HARVEST_TARGET}/imath/lib
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/imath/include ${HARVEST_TARGET}/imath/include
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/imath/bin/imath${OPENEXR_VERSION_POSTFIX}.dll ${HARVEST_TARGET}/imath/bin/imath${OPENEXR_VERSION_POSTFIX}.dll
DEPENDEES install
)
endif()
diff --git a/build_files/build_environment/cmake/llvm.cmake b/build_files/build_environment/cmake/llvm.cmake
index 11f6bf7c218..26e1f1f58b4 100644
--- a/build_files/build_environment/cmake/llvm.cmake
+++ b/build_files/build_environment/cmake/llvm.cmake
@@ -13,9 +13,11 @@ if(APPLE)
)
set(LLVM_BUILD_CLANG_TOOLS_EXTRA ^^clang-tools-extra)
set(BUILD_CLANG_TOOLS ON)
+else()
+ # NVIDIA PTX for OSL on Windows and Linux.
+ set(LLVM_TARGETS ${LLVM_TARGETS}$<SEMICOLON>NVPTX)
endif()
-
set(LLVM_EXTRA_ARGS
-DLLVM_USE_CRT_RELEASE=MD
-DLLVM_USE_CRT_DEBUG=MDd
@@ -38,6 +40,11 @@ else()
set(LLVM_GENERATOR "Unix Makefiles")
endif()
+# LLVM does not switch over to cpp17 until llvm 16 and building ealier versions with
+# MSVC is leading to some crashes in ISPC. Switch back to their default on all platforms
+# for now.
+string(REPLACE "-DCMAKE_CXX_STANDARD=17" " " LLVM_CMAKE_FLAGS "${DEFAULT_CMAKE_FLAGS}")
+
# short project name due to long filename issues on windows
ExternalProject_Add(ll
URL file://${PACKAGE_DIR}/${LLVM_FILE}
@@ -48,7 +55,7 @@ ExternalProject_Add(ll
PREFIX ${BUILD_DIR}/ll
SOURCE_SUBDIR llvm
PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/ll/src/ll < ${PATCH_DIR}/llvm.diff
- CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/llvm ${DEFAULT_CMAKE_FLAGS} ${LLVM_EXTRA_ARGS}
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/llvm ${LLVM_CMAKE_FLAGS} ${LLVM_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/llvm
)
diff --git a/build_files/build_environment/cmake/mesa.cmake b/build_files/build_environment/cmake/mesa.cmake
index 8a40e8dc0de..9c0d613daa5 100644
--- a/build_files/build_environment/cmake/mesa.cmake
+++ b/build_files/build_environment/cmake/mesa.cmake
@@ -52,4 +52,5 @@ ExternalProject_Add(external_mesa
add_dependencies(
external_mesa
ll
+ external_zlib
)
diff --git a/build_files/build_environment/cmake/minizipng.cmake b/build_files/build_environment/cmake/minizipng.cmake
new file mode 100644
index 00000000000..f9bc7a4875f
--- /dev/null
+++ b/build_files/build_environment/cmake/minizipng.cmake
@@ -0,0 +1,33 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+set(MINIZIPNG_EXTRA_ARGS
+ -DMZ_FETCH_LIBS=OFF
+ -DMZ_LIBCOMP=OFF
+ -DMZ_PKCRYPT=OFF
+ -DMZ_WZAES=OFF
+ -DMZ_OPENSSL=OFF
+ -DMZ_SIGNING=OFF
+ -DMZ_LZMA=OFF
+ -DMZ_ZSTD=OFF
+ -DZLIB_LIBRARY=${LIBDIR}/zlib/lib/${ZLIB_LIBRARY}
+ -DZLIB_INCLUDE_DIR=${LIBDIR}/zlib/include/
+ -DBZIP2_LIBRARY=${LIBDIR}/bzip2/lib/${LIBPREFIX}bz2${LIBEXT}
+ -DBZIP2_INCLUDE_DIR=${LIBDIR}/bzip2/include/
+ # Because OCIO hardcodes a non standard include path
+ -DCMAKE_INSTALL_INCLUDEDIR=${LIBDIR}/minizipng/include/minizip-ng
+)
+
+ExternalProject_Add(external_minizipng
+ URL file://${PACKAGE_DIR}/${MINIZIPNG_FILE}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ URL_HASH ${MINIZIPNG_HASH_TYPE}=${MINIZIPNG_HASH}
+ PREFIX ${BUILD_DIR}/minizipng
+ CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/minizipng ${DEFAULT_CMAKE_FLAGS} ${MINIZIPNG_EXTRA_ARGS}
+ INSTALL_DIR ${LIBDIR}/minizipng
+)
+
+add_dependencies(
+ external_minizipng
+ external_zlib
+)
diff --git a/build_files/build_environment/cmake/opencolorio.cmake b/build_files/build_environment/cmake/opencolorio.cmake
index 4e2d1503406..79d1ffa9c2e 100644
--- a/build_files/build_environment/cmake/opencolorio.cmake
+++ b/build_files/build_environment/cmake/opencolorio.cmake
@@ -15,8 +15,14 @@ set(OPENCOLORIO_EXTRA_ARGS
-Dexpat_ROOT=${LIBDIR}/expat
-Dyaml-cpp_ROOT=${LIBDIR}/yamlcpp
+ -Dyaml-cpp_VERSION=${YAMLCPP_VERSION}
-Dpystring_ROOT=${LIBDIR}/pystring
-DImath_ROOT=${LIBDIR}/imath
+ -Dminizip-ng_ROOT=${LIBDIR}/minizipng
+ -Dminizip-ng_INCLUDE_DIR=${LIBDIR}/minizipng/include
+ -Dminizip-ng_LIBRARY=${LIBDIR}/minizipng/lib/libminizip${LIBEXT}
+ -DZLIB_LIBRARY=${LIBDIR}/zlib/lib/${ZLIB_LIBRARY}
+ -DZLIB_INCLUDE_DIR=${LIBDIR}/zlib/include/
)
if(BLENDER_PLATFORM_ARM)
@@ -30,8 +36,8 @@ if(WIN32)
set(OPENCOLORIO_EXTRA_ARGS
${OPENCOLORIO_EXTRA_ARGS}
-Dexpat_LIBRARY=${LIBDIR}/expat/lib/libexpatMD
- -Dyaml-cpp_LIBRARY=${LIBDIR}/expat/lib/libyaml-cppmd.lib
-DImath_LIBRARY=${LIBDIR}/imath/lib/imath${OPENEXR_VERSION_POSTFIX}
+ -DCMAKE_CXX_FLAGS=-DIMATH_DLL
)
else()
set(OPENCOLORIO_EXTRA_ARGS
@@ -43,6 +49,7 @@ ExternalProject_Add(external_opencolorio
URL file://${PACKAGE_DIR}/${OPENCOLORIO_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${OPENCOLORIO_HASH_TYPE}=${OPENCOLORIO_HASH}
+ CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
PREFIX ${BUILD_DIR}/opencolorio
PATCH_COMMAND ${PATCH_CMD} -p 1 -N -d ${BUILD_DIR}/opencolorio/src/external_opencolorio < ${PATCH_DIR}/opencolorio.diff
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/opencolorio ${DEFAULT_CMAKE_FLAGS} ${OPENCOLORIO_EXTRA_ARGS}
@@ -55,6 +62,8 @@ add_dependencies(
external_expat
external_imath
external_pystring
+ external_zlib
+ external_minizipng
)
if(WIN32)
@@ -62,16 +71,17 @@ if(WIN32)
ExternalProject_Add_Step(external_opencolorio after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/opencolorio/include ${HARVEST_TARGET}/opencolorio/include
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/opencolorio/lib ${HARVEST_TARGET}/opencolorio/lib
- COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/yamlcpp/lib/libyaml-cppmd.lib ${HARVEST_TARGET}/opencolorio/lib/libyaml-cpp.lib
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/yamlcpp/lib/yaml-cpp.lib ${HARVEST_TARGET}/opencolorio/lib/yaml-cpp.lib
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/expat/lib/libexpatMD.lib ${HARVEST_TARGET}/opencolorio/lib/libexpatMD.lib
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/pystring/lib/pystring.lib ${HARVEST_TARGET}/opencolorio/lib/pystring.lib
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/minizipng/lib/libminizip.lib ${HARVEST_TARGET}/opencolorio/lib/libminizip.lib
DEPENDEES install
)
endif()
if(BUILD_MODE STREQUAL Debug)
ExternalProject_Add_Step(external_opencolorio after_install
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/opencolorio/lib/Opencolorio.lib ${HARVEST_TARGET}/opencolorio/lib/OpencolorIO_d.lib
- COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/yamlcpp/lib/libyaml-cppmdd.lib ${HARVEST_TARGET}/opencolorio/lib/libyaml-cpp_d.lib
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/yamlcpp/lib/yaml-cppd.lib ${HARVEST_TARGET}/opencolorio/lib/yaml-cppd.lib
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/expat/lib/libexpatdMD.lib ${HARVEST_TARGET}/opencolorio/lib/libexpatdMD.lib
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/pystring/lib/pystring.lib ${HARVEST_TARGET}/opencolorio/lib/pystring_d.lib
DEPENDEES install
diff --git a/build_files/build_environment/cmake/openexr.cmake b/build_files/build_environment/cmake/openexr.cmake
index d283f638a17..617baeaebfc 100644
--- a/build_files/build_environment/cmake/openexr.cmake
+++ b/build_files/build_environment/cmake/openexr.cmake
@@ -16,7 +16,7 @@ set(OPENEXR_EXTRA_ARGS
-DZLIB_INCLUDE_DIR=${LIBDIR}/zlib/include/
-DBUILD_TESTING=OFF
-DOPENEXR_BUILD_BOTH_STATIC_SHARED=OFF
- -DBUILD_SHARED_LIBS=OFF
+ -DBUILD_SHARED_LIBS=ON
-DOPENEXR_INSTALL_TOOLS=OFF
-DOPENEXR_INSTALL_EXAMPLES=OFF
-DImath_DIR=${LIBDIR}/imath/lib/cmake/Imath
@@ -27,6 +27,7 @@ ExternalProject_Add(external_openexr
URL file://${PACKAGE_DIR}/${OPENEXR_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${OPENEXR_HASH_TYPE}=${OPENEXR_HASH}
+ CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
PREFIX ${BUILD_DIR}/openexr
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/openexr ${DEFAULT_CMAKE_FLAGS} ${OPENEXR_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/openexr
@@ -36,6 +37,11 @@ if(WIN32)
ExternalProject_Add_Step(external_openexr after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/openexr/lib ${HARVEST_TARGET}/openexr/lib
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/openexr/include ${HARVEST_TARGET}/openexr/include
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openexr/bin/Iex${OPENEXR_VERSION_POSTFIX}.dll ${HARVEST_TARGET}/openexr/bin/Iex${OPENEXR_VERSION_POSTFIX}.dll
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openexr/bin/IlmThread${OPENEXR_VERSION_POSTFIX}.dll ${HARVEST_TARGET}/openexr/bin/IlmThread${OPENEXR_VERSION_POSTFIX}.dll
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openexr/bin/OpenEXRCore${OPENEXR_VERSION_POSTFIX}.dll ${HARVEST_TARGET}/openexr/bin/OpenEXRCore${OPENEXR_VERSION_POSTFIX}.dll
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openexr/bin/OpenEXRUtil${OPENEXR_VERSION_POSTFIX}.dll ${HARVEST_TARGET}/openexr/bin/OpenEXRUtil${OPENEXR_VERSION_POSTFIX}.dll
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openexr/bin/OpenEXR${OPENEXR_VERSION_POSTFIX}.dll ${HARVEST_TARGET}/openexr/bin/OpenEXR${OPENEXR_VERSION_POSTFIX}.dll
DEPENDEES install
)
endif()
@@ -43,4 +49,5 @@ endif()
add_dependencies(
external_openexr
external_zlib
+ external_imath
)
diff --git a/build_files/build_environment/cmake/openimageio.cmake b/build_files/build_environment/cmake/openimageio.cmake
index 26881488039..33ab3d51b3a 100644
--- a/build_files/build_environment/cmake/openimageio.cmake
+++ b/build_files/build_environment/cmake/openimageio.cmake
@@ -15,14 +15,16 @@ else()
endif()
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)
+ set(PNG_POSTFIX d)
else()
set(TIFF_POSTFIX)
+ set(PNG_POSTFIX)
endif()
+ set(PNG_LIBNAME libpng16_static${PNG_POSTFIX}${LIBEXT})
else()
set(PNG_LIBNAME libpng${LIBEXT})
set(OIIO_SIMD_FLAGS)
@@ -40,7 +42,7 @@ else()
endif()
set(OPENIMAGEIO_EXTRA_ARGS
- -DBUILD_SHARED_LIBS=OFF
+ -DBUILD_SHARED_LIBS=ON
${OPENIMAGEIO_LINKSTATIC}
${DEFAULT_BOOST_FLAGS}
-DUSE_LIBSQUISH=OFF
@@ -76,13 +78,14 @@ set(OPENIMAGEIO_EXTRA_ARGS
-DJPEG_LIBRARY=${LIBDIR}/jpeg/lib/${JPEG_LIBRARY}
-DJPEG_INCLUDE_DIR=${LIBDIR}/jpeg/include
${OPENJPEG_FLAGS}
- -DOPENEXR_ILMTHREAD_LIBRARY=${LIBDIR}/openexr/lib/${LIBPREFIX}IlmThread${OPENEXR_VERSION_POSTFIX}${LIBEXT}
- -DOPENEXR_IEX_LIBRARY=${LIBDIR}/openexr/lib/${LIBPREFIX}Iex${OPENEXR_VERSION_POSTFIX}${LIBEXT}
- -DOPENEXR_ILMIMF_LIBRARY=${LIBDIR}/openexr/lib/${LIBPREFIX}IlmImf${OPENEXR_VERSION_POSTFIX}${LIBEXT}
+ -DOPENEXR_ILMTHREAD_LIBRARY=${LIBDIR}/openexr/lib/${LIBPREFIX}IlmThread${OPENEXR_VERSION_POSTFIX}${SHAREDLIBEXT}
+ -DOPENEXR_IEX_LIBRARY=${LIBDIR}/openexr/lib/${LIBPREFIX}Iex${OPENEXR_VERSION_POSTFIX}${SHAREDLIBEXT}
+ -DOPENEXR_ILMIMF_LIBRARY=${LIBDIR}/openexr/lib/${LIBPREFIX}IlmImf${OPENEXR_VERSION_POSTFIX}${SHAREDLIBEXT}
-DSTOP_ON_WARNING=OFF
-DUSE_EXTERNAL_PUGIXML=ON
-DPUGIXML_LIBRARY=${LIBDIR}/pugixml/lib/${LIBPREFIX}pugixml${LIBEXT}
-DPUGIXML_INCLUDE_DIR=${LIBDIR}/pugixml/include/
+ -Dpugixml_DIR=${LIBDIR}/pugixml/lib/cmake/pugixml
-DBUILD_MISSING_ROBINMAP=OFF
-DBUILD_MISSING_FMT=OFF
-DFMT_INCLUDE_DIR=${LIBDIR}/fmt/include/
@@ -97,6 +100,7 @@ ExternalProject_Add(external_openimageio
URL file://${PACKAGE_DIR}/${OPENIMAGEIO_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${OPENIMAGEIO_HASH_TYPE}=${OPENIMAGEIO_HASH}
+ CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
PREFIX ${BUILD_DIR}/openimageio
PATCH_COMMAND ${PATCH_CMD} -p 1 -N -d ${BUILD_DIR}/openimageio/src/external_openimageio/ < ${PATCH_DIR}/openimageio.diff
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/openimageio ${DEFAULT_CMAKE_FLAGS} ${OPENIMAGEIO_EXTRA_ARGS}
@@ -125,7 +129,8 @@ if(WIN32)
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/OpenImageIO/include ${HARVEST_TARGET}/OpenImageIO/include
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/OpenImageIO/lib ${HARVEST_TARGET}/OpenImageIO/lib
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/OpenImageIO/bin/idiff.exe ${HARVEST_TARGET}/OpenImageIO/bin/idiff.exe
-
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/OpenImageIO/bin/OpenImageIO.dll ${HARVEST_TARGET}/OpenImageIO/bin/OpenImageIO.dll
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/OpenImageIO/bin/OpenImageIO_Util.dll ${HARVEST_TARGET}/OpenImageIO/bin/OpenImageIO_Util.dll
DEPENDEES install
)
endif()
@@ -133,6 +138,8 @@ if(WIN32)
ExternalProject_Add_Step(external_openimageio after_install
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openimageio/lib/OpenImageIO_d.lib ${HARVEST_TARGET}/openimageio/lib/OpenImageIO_d.lib
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openimageio/lib/OpenImageIO_Util_d.lib ${HARVEST_TARGET}/openimageio/lib/OpenImageIO_Util_d.lib
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/OpenImageIO/bin/OpenImageIO_d.dll ${HARVEST_TARGET}/OpenImageIO/bin/OpenImageIO_d.dll
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/OpenImageIO/bin/OpenImageIO_Util_d.dll ${HARVEST_TARGET}/OpenImageIO/bin/OpenImageIO_Util_d.dll
DEPENDEES install
)
endif()
diff --git a/build_files/build_environment/cmake/opensubdiv.cmake b/build_files/build_environment/cmake/opensubdiv.cmake
index a142160b9cc..4f643868bfb 100644
--- a/build_files/build_environment/cmake/opensubdiv.cmake
+++ b/build_files/build_environment/cmake/opensubdiv.cmake
@@ -32,7 +32,7 @@ else()
set(OPENSUBDIV_EXTRA_ARGS
${OPENSUBDIV_EXTRA_ARGS}
-DTBB_INCLUDE_DIR=${LIBDIR}/tbb/include
- -DTBB_tbb_LIBRARY=${LIBDIR}/tbb/lib/${LIBPREFIX}tbb_static${LIBEXT}
+ -DTBB_tbb_LIBRARY=${LIBDIR}/tbb/lib/${LIBPREFIX}tbb${SHAREDLIBEXT}
)
endif()
diff --git a/build_files/build_environment/cmake/openvdb.cmake b/build_files/build_environment/cmake/openvdb.cmake
index 2d0f62cc1a0..bd008287f75 100644
--- a/build_files/build_environment/cmake/openvdb.cmake
+++ b/build_files/build_environment/cmake/openvdb.cmake
@@ -4,23 +4,14 @@ if(BUILD_MODE STREQUAL Debug)
set(BLOSC_POST _d)
endif()
-if(WIN32)
- set(OPENVDB_SHARED ON)
- set(OPENVDB_STATIC OFF)
-else()
- set(OPENVDB_SHARED OFF)
- set(OPENVDB_STATIC ON)
-endif()
-
set(OPENVDB_EXTRA_ARGS
${DEFAULT_BOOST_FLAGS}
- -DBoost_COMPILER:STRING=${BOOST_COMPILER_STRING}
- -DBoost_USE_MULTITHREADED=ON
- -DBoost_USE_STATIC_LIBS=ON
- -DBoost_USE_STATIC_RUNTIME=OFF
- -DBOOST_ROOT=${LIBDIR}/boost
- -DBoost_NO_SYSTEM_PATHS=ON
- -DBoost_NO_BOOST_CMAKE=ON
+ -DUSE_STATIC_DEPENDENCIES=OFF # This is the global toggle for static libs
+ # Once the above switch is off, you can set it
+ # for each individual library below.
+ -DBLOSC_USE_STATIC_LIBS=ON
+ -DTBB_USE_STATIC_LIBS=OFF
+ -DBoost_USE_STATIC_LIBS=OFF
-DZLIB_LIBRARY=${LIBDIR}/zlib/lib/${ZLIB_LIBRARY}
-DZLIB_INCLUDE_DIR=${LIBDIR}/zlib/include/
-DBlosc_INCLUDE_DIR=${LIBDIR}/blosc/include/
@@ -28,32 +19,36 @@ set(OPENVDB_EXTRA_ARGS
-DBlosc_LIBRARY_RELEASE=${LIBDIR}/blosc/lib/libblosc${BLOSC_POST}${LIBEXT}
-DBlosc_LIBRARY_DEBUG=${LIBDIR}/blosc/lib/libblosc${BLOSC_POST}${LIBEXT}
-DOPENVDB_BUILD_UNITTESTS=OFF
- -DOPENVDB_BUILD_PYTHON_MODULE=OFF
-DOPENVDB_BUILD_NANOVDB=ON
-DNANOVDB_BUILD_TOOLS=OFF
-DBlosc_ROOT=${LIBDIR}/blosc/
-DTBB_ROOT=${LIBDIR}/tbb/
- -DOPENVDB_CORE_SHARED=${OPENVDB_SHARED}
- -DOPENVDB_CORE_STATIC=${OPENVDB_STATIC}
+ -DTbb_INCLUDE_DIR=${LIBDIR}/tbb/include
+ -DTbb_LEGACY_INCLUDE_DIR=${LIBDIR}/tbb/include
+ -DOPENVDB_CORE_SHARED=ON
+ -DOPENVDB_CORE_STATIC=OFF
-DOPENVDB_BUILD_BINARIES=OFF
-DCMAKE_DEBUG_POSTFIX=_d
-DBLOSC_USE_STATIC_LIBS=ON
-DUSE_NANOVDB=ON
-)
+ -DOPENVDB_BUILD_PYTHON_MODULE=ON
+ -DOPENVDB_PYTHON_WRAP_ALL_GRID_TYPES=ON
+ -DUSE_NUMPY=ON
+ -DPython_EXECUTABLE=${PYTHON_BINARY}
-if(WIN32)
- # Namespaces seem to be buggy and cause linker errors due to things not
- # being in the correct namespace
- # needs to link pthreads due to it being a blosc dependency
- set(OPENVDB_EXTRA_ARGS ${OPENVDB_EXTRA_ARGS}
- -DCMAKE_CXX_STANDARD_LIBRARIES="${LIBDIR}/pthreads/lib/pthreadVC3.lib"
- )
-endif()
+ # OPENVDB_AX Disabled for now as it adds ~25MB distribution wise
+ # with no blender code depending on it, seems wasteful.
+ # -DOPENVDB_BUILD_AX=ON
+ # -DOPENVDB_AX_SHARED=ON
+ # -DOPENVDB_AX_STATIC=OFF
+ # -DLLVM_DIR=${LIBDIR}/llvm/lib/cmake/llvm
+)
ExternalProject_Add(openvdb
URL file://${PACKAGE_DIR}/${OPENVDB_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${OPENVDB_HASH_TYPE}=${OPENVDB_HASH}
+ CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
PREFIX ${BUILD_DIR}/openvdb
PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/openvdb/src/openvdb < ${PATCH_DIR}/openvdb.diff
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/openvdb ${DEFAULT_CMAKE_FLAGS} ${OPENVDB_EXTRA_ARGS}
@@ -66,6 +61,8 @@ add_dependencies(
external_boost
external_zlib
external_blosc
+ external_python
+ external_numpy
)
if(WIN32)
@@ -74,6 +71,7 @@ if(WIN32)
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/openvdb/include ${HARVEST_TARGET}/openvdb/include
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openvdb/lib/openvdb.lib ${HARVEST_TARGET}/openvdb/lib/openvdb.lib
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openvdb/bin/openvdb.dll ${HARVEST_TARGET}/openvdb/bin/openvdb.dll
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openvdb/lib/python${PYTHON_SHORT_VERSION}/site-packages/pyopenvdb.pyd ${HARVEST_TARGET}openvdb/python/pyopenvdb.pyd
DEPENDEES install
)
endif()
@@ -81,6 +79,7 @@ if(WIN32)
ExternalProject_Add_Step(openvdb after_install
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openvdb/lib/openvdb_d.lib ${HARVEST_TARGET}/openvdb/lib/openvdb_d.lib
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openvdb/bin/openvdb_d.dll ${HARVEST_TARGET}/openvdb/bin/openvdb_d.dll
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openvdb/lib/python${PYTHON_SHORT_VERSION}/site-packages/pyopenvdb_d.pyd ${HARVEST_TARGET}openvdb/python/pyopenvdb_d.pyd
DEPENDEES install
)
endif()
diff --git a/build_files/build_environment/cmake/options.cmake b/build_files/build_environment/cmake/options.cmake
index 13e7fb58be2..3d3e34e8444 100644
--- a/build_files/build_environment/cmake/options.cmake
+++ b/build_files/build_environment/cmake/options.cmake
@@ -4,7 +4,7 @@ if(WIN32)
option(ENABLE_MINGW64 "Enable building of ffmpeg/iconv/libsndfile/fftw3 by installing mingw64" ON)
endif()
option(FORCE_CHECK_HASH "Force a check of all hashses during CMake the configure phase" OFF)
-option(WITH_BOOST_PYTHON "Enable building of boost with python support" OFF)
+
cmake_host_system_information(RESULT NUM_CORES QUERY NUMBER_OF_LOGICAL_CORES)
set(MAKE_THREADS ${NUM_CORES} CACHE STRING "Number of threads to run make with")
@@ -41,31 +41,36 @@ if(WIN32)
set(LIBEXT ".lib")
set(SHAREDLIBEXT ".lib")
set(LIBPREFIX "")
-
+ set(MESON ${LIBDIR}/python/Scripts/meson)
# For OIIO and OSL
- set(COMMON_DEFINES /DPSAPI_VERSION=2 /DOIIO_STATIC_BUILD /DTINYFORMAT_ALLOW_WCHAR_STRINGS)
+ set(COMMON_DEFINES /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS)
if(MSVC_VERSION GREATER 1909)
set(COMMON_MSVC_FLAGS "/Wv:18") #some deps with warnings as error aren't quite ready for dealing with the new 2017 warnings.
endif()
string(APPEND COMMON_MSVC_FLAGS " /bigobj")
+ # To keep MSVC from oversubscribing the CPU, force it to single threaded mode
+ # msbuild/ninja will queue as many compile units as there are cores, no need for
+ # msvc to be internally threading as well.
+ string(APPEND COMMON_MSVC_FLAGS " /cgthreads1 ")
+
if(WITH_OPTIMIZED_DEBUG)
- set(BLENDER_CMAKE_C_FLAGS_DEBUG "/MDd ${COMMON_MSVC_FLAGS} /O2 /Ob2 /DNDEBUG /DPSAPI_VERSION=2 /DOIIO_STATIC_BUILD /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
+ set(BLENDER_CMAKE_C_FLAGS_DEBUG "/MDd ${COMMON_MSVC_FLAGS} /O2 /Ob2 /DNDEBUG /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
else()
- set(BLENDER_CMAKE_C_FLAGS_DEBUG "/MDd ${COMMON_MSVC_FLAGS} /Zi /Ob0 /Od /RTC1 /D_DEBUG /DPSAPI_VERSION=2 /DOIIO_STATIC_BUILD /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
+ set(BLENDER_CMAKE_C_FLAGS_DEBUG "/MDd ${COMMON_MSVC_FLAGS} /Zi /Ob0 /Od /RTC1 /D_DEBUG /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
endif()
- set(BLENDER_CMAKE_C_FLAGS_MINSIZEREL "/MD ${COMMON_MSVC_FLAGS} /O1 /Ob1 /D NDEBUG /DPSAPI_VERSION=2 /DOIIO_STATIC_BUILD /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
- set(BLENDER_CMAKE_C_FLAGS_RELEASE "/MD ${COMMON_MSVC_FLAGS} /O2 /Ob2 /DNDEBUG /DPSAPI_VERSION=2 /DOIIO_STATIC_BUILD /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
- set(BLENDER_CMAKE_C_FLAGS_RELWITHDEBINFO "/MD ${COMMON_MSVC_FLAGS} /Zi /O2 /Ob1 /D NDEBUG /DPSAPI_VERSION=2 /DOIIO_STATIC_BUILD /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
+ set(BLENDER_CMAKE_C_FLAGS_MINSIZEREL "/MD ${COMMON_MSVC_FLAGS} /O1 /Ob1 /D NDEBUG /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
+ set(BLENDER_CMAKE_C_FLAGS_RELEASE "/MD ${COMMON_MSVC_FLAGS} /O2 /Ob2 /DNDEBUG /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
+ set(BLENDER_CMAKE_C_FLAGS_RELWITHDEBINFO "/MD ${COMMON_MSVC_FLAGS} /Zi /O2 /Ob1 /D NDEBUG /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
if(WITH_OPTIMIZED_DEBUG)
- set(BLENDER_CMAKE_CXX_FLAGS_DEBUG "/MDd ${COMMON_MSVC_FLAGS} /O2 /Ob2 /D NDEBUG /D PLATFORM_WINDOWS /DPSAPI_VERSION=2 /DOIIO_STATIC_BUILD /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
+ set(BLENDER_CMAKE_CXX_FLAGS_DEBUG "/MDd ${COMMON_MSVC_FLAGS} /D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS /O2 /Ob2 /D NDEBUG /D PLATFORM_WINDOWS /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS /DBOOST_DEBUG_PYTHON /DBOOST_ALL_NO_LIB")
else()
- set(BLENDER_CMAKE_CXX_FLAGS_DEBUG "/D_DEBUG /D PLATFORM_WINDOWS /MTd ${COMMON_MSVC_FLAGS} /Zi /Ob0 /Od /RTC1 /DPSAPI_VERSION=2 /DOIIO_STATIC_BUILD /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
+ set(BLENDER_CMAKE_CXX_FLAGS_DEBUG "/D_DEBUG /D PLATFORM_WINDOWS /D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS /MTd ${COMMON_MSVC_FLAGS} /Zi /Ob0 /Od /RTC1 /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS /DBOOST_DEBUG_PYTHON /DBOOST_ALL_NO_LIB")
endif()
- set(BLENDER_CMAKE_CXX_FLAGS_MINSIZEREL "/MD /${COMMON_MSVC_FLAGS} /O1 /Ob1 /D NDEBUG /D PLATFORM_WINDOWS /DPSAPI_VERSION=2 /DOIIO_STATIC_BUILD /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
- set(BLENDER_CMAKE_CXX_FLAGS_RELEASE "/MD ${COMMON_MSVC_FLAGS} /O2 /Ob2 /D NDEBUG /D PLATFORM_WINDOWS /DPSAPI_VERSION=2 /DOIIO_STATIC_BUILD /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
- set(BLENDER_CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MD ${COMMON_MSVC_FLAGS} /Zi /O2 /Ob1 /D NDEBUG /D PLATFORM_WINDOWS /DPSAPI_VERSION=2 /DOIIO_STATIC_BUILD /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
+ set(BLENDER_CMAKE_CXX_FLAGS_MINSIZEREL "/MD /${COMMON_MSVC_FLAGS} /D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS /O1 /Ob1 /D NDEBUG /D PLATFORM_WINDOWS /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
+ set(BLENDER_CMAKE_CXX_FLAGS_RELEASE "/MD ${COMMON_MSVC_FLAGS} /D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS /O2 /Ob2 /D NDEBUG /D PLATFORM_WINDOWS /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
+ set(BLENDER_CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MD ${COMMON_MSVC_FLAGS} /D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS /Zi /O2 /Ob1 /D NDEBUG /D PLATFORM_WINDOWS /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
set(PLATFORM_FLAGS)
set(PLATFORM_CXX_FLAGS)
@@ -76,6 +81,18 @@ if(WIN32)
set(PERL_SHELL ${DOWNLOAD_DIR}/perl/portableshell.bat)
set(MINGW_HOST x86_64-w64-mingw32)
+ # some build systems like meson will respect the *nix like environment vars
+ # like CFLAGS and LDFlags but will still build with the MSVC compiler, so for
+ # those we need to empty out the gcc style flags that are normally in there.
+ set(CONFIGURE_ENV_MSVC
+ cd ${MINGW_PATH} &&
+ call ${PERL_SHELL} &&
+ call ${MINGW_SHELL} &&
+ set path &&
+ set CFLAGS= &&
+ set LDFLAGS=
+ )
+
set(CONFIGURE_ENV
cd ${MINGW_PATH} &&
call ${PERL_SHELL} &&
@@ -98,10 +115,11 @@ if(WIN32)
else()
set(PATCH_CMD patch)
set(LIBEXT ".a")
- set(SHAREDLIBEXT ".so")
set(LIBPREFIX "lib")
+ set(MESON ${LIBDIR}/python/bin/meson)
+if(APPLE)
+ set(SHAREDLIBEXT ".dylib")
- if(APPLE)
# Use same Xcode detection as Blender itself.
include(../cmake/platform/platform_apple_xcode.cmake)
@@ -110,7 +128,7 @@ else()
endif()
set(PLATFORM_CFLAGS "-isysroot ${CMAKE_OSX_SYSROOT} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET} -arch ${CMAKE_OSX_ARCHITECTURES}")
- set(PLATFORM_CXXFLAGS "-isysroot ${CMAKE_OSX_SYSROOT} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET} -std=c++11 -stdlib=libc++ -arch ${CMAKE_OSX_ARCHITECTURES}")
+ set(PLATFORM_CXXFLAGS "-isysroot ${CMAKE_OSX_SYSROOT} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET} -std=c++17 -stdlib=libc++ -arch ${CMAKE_OSX_ARCHITECTURES}")
set(PLATFORM_LDFLAGS "-isysroot ${CMAKE_OSX_SYSROOT} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET} -arch ${CMAKE_OSX_ARCHITECTURES}")
if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "x86_64")
set(PLATFORM_BUILD_TARGET --build=x86_64-apple-darwin17.0.0) # OS X 10.13
@@ -123,12 +141,14 @@ else()
-DCMAKE_OSX_SYSROOT:PATH=${CMAKE_OSX_SYSROOT}
)
else()
+ set(SHAREDLIBEXT ".so")
+
if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64")
set(BLENDER_PLATFORM_ARM ON)
endif()
set(PLATFORM_CFLAGS "-fPIC")
- set(PLATFORM_CXXFLAGS "-std=c++11 -fPIC")
+ set(PLATFORM_CXXFLAGS "-std=c++17 -fPIC")
set(PLATFORM_LDFLAGS)
set(PLATFORM_BUILD_TARGET)
set(PLATFORM_CMAKE_FLAGS -DCMAKE_INSTALL_LIBDIR=lib)
@@ -175,6 +195,7 @@ set(DEFAULT_CMAKE_FLAGS
-DCMAKE_CXX_FLAGS_MINSIZEREL=${BLENDER_CMAKE_CXX_FLAGS_MINSIZEREL}
-DCMAKE_CXX_FLAGS_RELEASE=${BLENDER_CMAKE_CXX_FLAGS_RELEASE}
-DCMAKE_CXX_FLAGS_RELWITHDEBINFO=${CMAKE_CXX_FLAGS_RELWITHDEBINFO}
+ -DCMAKE_CXX_STANDARD=17
${PLATFORM_CMAKE_FLAGS}
)
@@ -193,3 +214,11 @@ if(MSVC)
endif()
set(CMAKE_INSTALL_MESSAGE LAZY)
+
+# On windows we sometimes want to build with ninja, but not all projects quite
+# yet, so for select project we pass PLATFORM_ALT_GENERATOR as the generator
+if(WIN32)
+ set(PLATFORM_ALT_GENERATOR "Ninja")
+else()
+ set(PLATFORM_ALT_GENERATOR "Unix Makefiles")
+endif()
diff --git a/build_files/build_environment/cmake/opus.cmake b/build_files/build_environment/cmake/opus.cmake
index f4f77749e00..c5d1d207805 100644
--- a/build_files/build_environment/cmake/opus.cmake
+++ b/build_files/build_environment/cmake/opus.cmake
@@ -9,6 +9,7 @@ ExternalProject_Add(external_opus
--disable-shared
--enable-static
--with-pic
+ --disable-maintainer-mode
BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/opus/src/external_opus/ && make -j${MAKE_THREADS}
INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/opus/src/external_opus/ && make install
INSTALL_DIR ${LIBDIR}/opus
diff --git a/build_files/build_environment/cmake/osl.cmake b/build_files/build_environment/cmake/osl.cmake
index a5d000e4f44..05b079be2f6 100644
--- a/build_files/build_environment/cmake/osl.cmake
+++ b/build_files/build_environment/cmake/osl.cmake
@@ -6,7 +6,7 @@ if(WIN32)
else()
set(OSL_CMAKE_CXX_STANDARD_LIBRARIES)
set(OSL_FLEX_BISON)
- set(OSL_OPENIMAGEIO_LIBRARY "${LIBDIR}/openimageio/lib/${LIBPREFIX}OpenImageIO${LIBEXT};${LIBDIR}/openimageio/lib/${LIBPREFIX}OpenImageIO_Util${LIBEXT};${LIBDIR}/png/lib/${LIBPREFIX}png16${LIBEXT};${LIBDIR}/jpeg/lib/${LIBPREFIX}jpeg${LIBEXT};${LIBDIR}/tiff/lib/${LIBPREFIX}tiff${LIBEXT};${LIBDIR}/openexr/lib/${LIBPREFIX}IlmImf${OPENEXR_VERSION_POSTFIX}${LIBEXT}")
+ set(OSL_OPENIMAGEIO_LIBRARY "${LIBDIR}/openimageio/lib/OpenImageIO${SHAREDLIBEXT};${LIBDIR}/png/lib/${LIBPREFIX}png16${LIBEXT};${LIBDIR}/jpeg/lib/${LIBPREFIX}jpeg${LIBEXT};${LIBDIR}/tiff/lib/${LIBPREFIX}tiff${LIBEXT};${LIBDIR}/openexr/lib/IlmImf${OPENEXR_VERSION_POSTFIX}${SHAREDLIBEXT}")
endif()
set(OSL_EXTRA_ARGS
@@ -21,7 +21,7 @@ set(OSL_EXTRA_ARGS
${OSL_FLEX_BISON}
-DCMAKE_CXX_STANDARD_LIBRARIES=${OSL_CMAKE_CXX_STANDARD_LIBRARIES}
-DBUILD_SHARED_LIBS=OFF
- -DLINKSTATIC=ON
+ -DLINKSTATIC=OFF
-DOSL_BUILD_PLUGINS=OFF
-DSTOP_ON_WARNING=OFF
-DUSE_LLVM_BITCODE=OFF
@@ -35,13 +35,14 @@ set(OSL_EXTRA_ARGS
-DTIFF_ROOT=${LIBDIR}/tiff
-DJPEG_ROOT=${LIBDIR}/jpeg
-DUSE_PYTHON=OFF
- -DCMAKE_CXX_STANDARD=14
-DImath_ROOT=${LIBDIR}/imath
+ -DUSE_OIIO_STATIC=OFF
)
ExternalProject_Add(external_osl
URL file://${PACKAGE_DIR}/${OSL_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
LIST_SEPARATOR ^^
URL_HASH ${OSL_HASH_TYPE}=${OSL_HASH}
PREFIX ${BUILD_DIR}/osl
diff --git a/build_files/build_environment/cmake/python.cmake b/build_files/build_environment/cmake/python.cmake
index 72ae27ddfdb..c9a0d5ab6af 100644
--- a/build_files/build_environment/cmake/python.cmake
+++ b/build_files/build_environment/cmake/python.cmake
@@ -16,10 +16,12 @@ if(WIN32)
set(PYTHON_EXTERNALS_FOLDER ${BUILD_DIR}/python/src/external_python/externals)
set(ZLIB_SOURCE_FOLDER ${BUILD_DIR}/zlib/src/external_zlib)
+ set(SSL_SOURCE_FOLDER ${BUILD_DIR}/ssl/src/external_ssl)
set(DOWNLOADS_EXTERNALS_FOLDER ${DOWNLOAD_DIR}/externals)
cmake_to_dos_path(${PYTHON_EXTERNALS_FOLDER} PYTHON_EXTERNALS_FOLDER_DOS)
cmake_to_dos_path(${ZLIB_SOURCE_FOLDER} ZLIB_SOURCE_FOLDER_DOS)
+ cmake_to_dos_path(${SSL_SOURCE_FOLDER} SSL_SOURCE_FOLDER_DOS)
cmake_to_dos_path(${DOWNLOADS_EXTERNALS_FOLDER} DOWNLOADS_EXTERNALS_FOLDER_DOS)
ExternalProject_Add(external_python
@@ -31,11 +33,14 @@ if(WIN32)
# that beyond placing some code in their externals dir before it tries.
# the foldernames *HAVE* to match the ones inside pythons get_externals.cmd.
# python 3.10.8 still ships zlib 1.2.12, replace it with our 1.2.13
- # copy until they update.
+ # copy until they update. Same rules apply to openssl foldernames HAVE to match
+ # regardless of the version actually in there.
CONFIGURE_COMMAND mkdir ${PYTHON_EXTERNALS_FOLDER_DOS} &&
mklink /J ${PYTHON_EXTERNALS_FOLDER_DOS}\\zlib-1.2.12 ${ZLIB_SOURCE_FOLDER_DOS} &&
- ${CMAKE_COMMAND} -E copy ${ZLIB_SOURCE_FOLDER}/../external_zlib-build/zconf.h ${PYTHON_EXTERNALS_FOLDER}/zlib-1.2.12/zconf.h
- BUILD_COMMAND cd ${BUILD_DIR}/python/src/external_python/pcbuild/ && set IncludeTkinter=false && call build.bat -e -p x64 -c ${BUILD_MODE}
+ mklink /J ${PYTHON_EXTERNALS_FOLDER_DOS}\\openssl-1.1.1q ${SSL_SOURCE_FOLDER_DOS} &&
+ ${CMAKE_COMMAND} -E copy ${ZLIB_SOURCE_FOLDER}/../external_zlib-build/zconf.h ${PYTHON_EXTERNALS_FOLDER}/zlib-1.2.12/zconf.h &&
+ ${PATCH_CMD} --verbose -p1 -d ${BUILD_DIR}/python/src/external_python < ${PATCH_DIR}/python_windows.diff
+ BUILD_COMMAND ${CONFIGURE_ENV_MSVC} && cd ${BUILD_DIR}/python/src/external_python/pcbuild/ && set IncludeTkinter=false && set LDFLAGS=/DEBUG && call prepare_ssl.bat && call build.bat -e -p x64 -c ${BUILD_MODE}
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
)
add_dependencies(
@@ -69,11 +74,10 @@ else()
set(PYTHON_FUNC_CONFIGS ${PYTHON_FUNC_CONFIGS} && export PYTHON_DECIMAL_WITH_MACHINE=ansi64)
endif()
set(PYTHON_CONFIGURE_ENV ${CONFIGURE_ENV} && ${PYTHON_FUNC_CONFIGS})
- set(PYTHON_BINARY ${BUILD_DIR}/python/src/external_python/python.exe)
else()
set(PYTHON_CONFIGURE_ENV ${CONFIGURE_ENV})
- set(PYTHON_BINARY ${BUILD_DIR}/python/src/external_python/python)
endif()
+ set(PYTHON_BINARY ${LIBDIR}/python/bin/python${PYTHON_SHORT_VERSION})
# Link against zlib statically (Unix). Avoid rpath issues (macOS).
set(PYTHON_PATCH ${PATCH_CMD} --verbose -p1 -d ${BUILD_DIR}/python/src/external_python < ${PATCH_DIR}/python_unix.diff)
set(PYTHON_CONFIGURE_EXTRA_ARGS "--with-openssl=${LIBDIR}/ssl")
@@ -97,14 +101,31 @@ else()
INSTALL_DIR ${LIBDIR}/python)
endif()
+add_dependencies(
+ external_python
+ external_ssl
+ external_zlib
+)
if(UNIX)
add_dependencies(
external_python
external_bzip2
external_ffi
external_lzma
- external_ssl
external_sqlite
- external_zlib
)
endif()
+
+if(WIN32)
+ if(BUILD_MODE STREQUAL Debug)
+ ExternalProject_Add_Step(external_python after_install
+ # Boost can't keep it self from linking release python
+ # in a debug configuration even if all options are set
+ # correctly to instruct it to use the debug version
+ # of python. So just copy the debug imports file over
+ # and call it a day...
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/python/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}${PYTHON_POSTFIX}.lib ${LIBDIR}/python/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}.lib
+ DEPENDEES install
+ )
+ endif()
+endif()
diff --git a/build_files/build_environment/cmake/python_site_packages.cmake b/build_files/build_environment/cmake/python_site_packages.cmake
index 55d0d6c7400..91baaa4df0f 100644
--- a/build_files/build_environment/cmake/python_site_packages.cmake
+++ b/build_files/build_environment/cmake/python_site_packages.cmake
@@ -15,7 +15,7 @@ ExternalProject_Add(external_python_site_packages
CONFIGURE_COMMAND ${PIP_CONFIGURE_COMMAND}
BUILD_COMMAND ""
PREFIX ${BUILD_DIR}/site_packages
- INSTALL_COMMAND ${PYTHON_BINARY} -m pip install --no-cache-dir ${SITE_PACKAGES_EXTRA} cython==${CYTHON_VERSION} idna==${IDNA_VERSION} charset-normalizer==${CHARSET_NORMALIZER_VERSION} urllib3==${URLLIB3_VERSION} certifi==${CERTIFI_VERSION} requests==${REQUESTS_VERSION} zstandard==${ZSTANDARD_VERSION} autopep8==${AUTOPEP8_VERSION} pycodestyle==${PYCODESTYLE_VERSION} toml==${TOML_VERSION} --no-binary :all:
+ INSTALL_COMMAND ${PYTHON_BINARY} -m pip install --no-cache-dir ${SITE_PACKAGES_EXTRA} cython==${CYTHON_VERSION} idna==${IDNA_VERSION} charset-normalizer==${CHARSET_NORMALIZER_VERSION} urllib3==${URLLIB3_VERSION} certifi==${CERTIFI_VERSION} requests==${REQUESTS_VERSION} zstandard==${ZSTANDARD_VERSION} autopep8==${AUTOPEP8_VERSION} pycodestyle==${PYCODESTYLE_VERSION} toml==${TOML_VERSION} meson==${MESON_VERSION} --no-binary :all:
)
if(USE_PIP_NUMPY)
diff --git a/build_files/build_environment/cmake/shaderc.cmake b/build_files/build_environment/cmake/shaderc.cmake
new file mode 100644
index 00000000000..669750913f0
--- /dev/null
+++ b/build_files/build_environment/cmake/shaderc.cmake
@@ -0,0 +1,64 @@
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ***** END GPL LICENSE BLOCK *****
+set(SHADERC_EXTRA_ARGS
+ -DSHADERC_SKIP_TESTS=On
+ -DSHADERC_SPIRV_TOOLS_DIR=${BUILD_DIR}/shaderc_spirv_tools/src/external_shaderc_spirv_tools
+ -DSHADERC_SPIRV_HEADERS_DIR=${BUILD_DIR}/shaderc_spirv_headers/src/external_shaderc_spirv_headers
+ -DSHADERC_GLSLANG_DIR=${BUILD_DIR}/shaderc_glslang/src/external_shaderc_glslang
+ -DCMAKE_DEBUG_POSTFIX=_d
+ -DPYTHON_EXECUTABLE=${PYTHON_BINARY}
+)
+
+ExternalProject_Add(external_shaderc
+ URL file://${PACKAGE_DIR}/${SHADERC_FILE}
+ URL_HASH ${SHADERC_HASH_TYPE}=${SHADERC_HASH}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ PREFIX ${BUILD_DIR}/shaderc
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/shaderc ${DEFAULT_CMAKE_FLAGS} ${SHADERC_EXTRA_ARGS}
+ INSTALL_DIR ${LIBDIR}/shaderc
+)
+
+add_dependencies(
+ external_shaderc
+ external_shaderc_spirv_tools
+ external_shaderc_spirv_headers
+ external_shaderc_glslang
+ external_python
+)
+
+
+if(WIN32)
+ if(BUILD_MODE STREQUAL Release)
+ ExternalProject_Add_Step(external_shaderc after_install
+ COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/shaderc/include ${HARVEST_TARGET}/shaderc/include
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/shaderc/bin/shaderc_shared.dll ${HARVEST_TARGET}/shaderc/bin/shaderc_shared.dll
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/shaderc/lib/shaderc_shared.lib ${HARVEST_TARGET}/shaderc/lib/shaderc_shared.lib
+
+ DEPENDEES install
+ )
+ endif()
+ if(BUILD_MODE STREQUAL Debug)
+ ExternalProject_Add_Step(external_shaderc after_install
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/shaderc/bin/shaderc_shared_d.dll ${HARVEST_TARGET}/shaderc/bin/shaderc_shared_d.dll
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/shaderc/lib/shaderc_shared_d.lib ${HARVEST_TARGET}/shaderc/lib/shaderc_shared_d.lib
+ DEPENDEES install
+ )
+ endif()
+endif()
+
+
diff --git a/build_files/build_environment/cmake/shaderc_deps.cmake b/build_files/build_environment/cmake/shaderc_deps.cmake
new file mode 100644
index 00000000000..bfe14a55f5b
--- /dev/null
+++ b/build_files/build_environment/cmake/shaderc_deps.cmake
@@ -0,0 +1,51 @@
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ***** END GPL LICENSE BLOCK *****
+
+# These are build time requirements for shaderc. We only have to unpack these
+# shaderc will build them.
+
+ExternalProject_Add(external_shaderc_glslang
+ URL file://${PACKAGE_DIR}/${SHADERC_GLSLANG_FILE}
+ URL_HASH ${SHADERC_GLSLANG_HASH_TYPE}=${SHADERC_GLSLANG_HASH}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ PREFIX ${BUILD_DIR}/shaderc_glslang
+ CONFIGURE_COMMAND echo .
+ BUILD_COMMAND echo .
+ INSTALL_COMMAND echo .
+)
+
+ExternalProject_Add(external_shaderc_spirv_headers
+ URL file://${PACKAGE_DIR}/${SHADERC_SPIRV_HEADERS_FILE}
+ URL_HASH ${SHADERC_SPIRV_HEADERS_HASH_TYPE}=${SHADERC_SPIRV_HEADERS_HASH}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ PREFIX ${BUILD_DIR}/shaderc_spirv_headers
+ CONFIGURE_COMMAND echo .
+ BUILD_COMMAND echo .
+ INSTALL_COMMAND echo .
+)
+
+ExternalProject_Add(external_shaderc_spirv_tools
+ URL file://${PACKAGE_DIR}/${SHADERC_SPIRV_TOOLS_FILE}
+ URL_HASH ${SHADERC_SPIRV_TOOLS_HASH_TYPE}=${SHADERC_SPIRV_TOOLS_HASH}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ PREFIX ${BUILD_DIR}/shaderc_spirv_tools
+ CONFIGURE_COMMAND echo .
+ BUILD_COMMAND echo .
+ INSTALL_COMMAND echo .
+)
+
diff --git a/build_files/build_environment/cmake/ssl.cmake b/build_files/build_environment/cmake/ssl.cmake
index 628187dc0ac..6241e2d44e6 100644
--- a/build_files/build_environment/cmake/ssl.cmake
+++ b/build_files/build_environment/cmake/ssl.cmake
@@ -3,33 +3,47 @@
set(SSL_CONFIGURE_COMMAND ./Configure)
set(SSL_PATCH_CMD echo .)
-if(APPLE)
- set(SSL_OS_COMPILER "blender-darwin-${CMAKE_OSX_ARCHITECTURES}")
- set(SSL_PATCH_CMD ${PATCH_CMD} --verbose -p 0 -d ${BUILD_DIR}/ssl/src/external_ssl < ${PATCH_DIR}/ssl.diff)
+if(WIN32)
+ # Python will build this with its preferred build options and patches. We only need to unpack openssl
+ ExternalProject_Add(external_ssl
+ URL file://${PACKAGE_DIR}/${SSL_FILE}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ URL_HASH ${SSL_HASH_TYPE}=${SSL_HASH}
+ PREFIX ${BUILD_DIR}/ssl
+ CONFIGURE_COMMAND echo "."
+ BUILD_COMMAND echo "."
+ INSTALL_COMMAND echo "."
+ INSTALL_DIR ${LIBDIR}/ssl
+ )
else()
- if(BLENDER_PLATFORM_ARM)
- set(SSL_OS_COMPILER "blender-linux-aarch64")
- elseif("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
- set(SSL_EXTRA_ARGS enable-ec_nistp_64_gcc_128)
- set(SSL_OS_COMPILER "blender-linux-x86_64")
+ if(APPLE)
+ set(SSL_OS_COMPILER "blender-darwin-${CMAKE_OSX_ARCHITECTURES}")
+ set(SSL_PATCH_CMD ${PATCH_CMD} --verbose -p 0 -d ${BUILD_DIR}/ssl/src/external_ssl < ${PATCH_DIR}/ssl.diff)
else()
- set(SSL_OS_COMPILER "blender-linux-x86")
+ if(BLENDER_PLATFORM_ARM)
+ set(SSL_OS_COMPILER "blender-linux-aarch64")
+ elseif("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
+ set(SSL_EXTRA_ARGS enable-ec_nistp_64_gcc_128)
+ set(SSL_OS_COMPILER "blender-linux-x86_64")
+ else()
+ set(SSL_OS_COMPILER "blender-linux-x86")
+ endif()
endif()
-endif()
-ExternalProject_Add(external_ssl
- URL file://${PACKAGE_DIR}/${SSL_FILE}
- DOWNLOAD_DIR ${DOWNLOAD_DIR}
- URL_HASH ${SSL_HASH_TYPE}=${SSL_HASH}
- PREFIX ${BUILD_DIR}/ssl
- PATCH_COMMAND ${SSL_PATCH_CMD}
- CONFIGURE_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/ssl/src/external_ssl/ && ${SSL_CONFIGURE_COMMAND} --prefix=${LIBDIR}/ssl
- --openssldir=${LIBDIR}/ssl
- no-shared
- no-idea no-mdc2 no-rc5 no-zlib no-ssl3 enable-unit-test no-ssl3-method enable-rfc3779 enable-cms
- --config=${CMAKE_CURRENT_SOURCE_DIR}/cmake/ssl.conf
- ${SSL_OS_COMPILER}
- BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/ssl/src/external_ssl/ && make -j${MAKE_THREADS}
- INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/ssl/src/external_ssl/ && make install
- INSTALL_DIR ${LIBDIR}/ssl
-)
+ ExternalProject_Add(external_ssl
+ URL file://${PACKAGE_DIR}/${SSL_FILE}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ URL_HASH ${SSL_HASH_TYPE}=${SSL_HASH}
+ PREFIX ${BUILD_DIR}/ssl
+ PATCH_COMMAND ${SSL_PATCH_CMD}
+ CONFIGURE_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/ssl/src/external_ssl/ && ${SSL_CONFIGURE_COMMAND} --prefix=${LIBDIR}/ssl
+ --openssldir=${LIBDIR}/ssl
+ no-shared
+ no-idea no-mdc2 no-rc5 no-zlib no-ssl3 enable-unit-test no-ssl3-method enable-rfc3779 enable-cms
+ --config=${CMAKE_CURRENT_SOURCE_DIR}/cmake/ssl.conf
+ ${SSL_OS_COMPILER}
+ BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/ssl/src/external_ssl/ && make -j${MAKE_THREADS}
+ INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/ssl/src/external_ssl/ && make install
+ INSTALL_DIR ${LIBDIR}/ssl
+ )
+endif() \ No newline at end of file
diff --git a/build_files/build_environment/cmake/tbb.cmake b/build_files/build_environment/cmake/tbb.cmake
index 1c251fa37d9..17b1f0fd869 100644
--- a/build_files/build_environment/cmake/tbb.cmake
+++ b/build_files/build_environment/cmake/tbb.cmake
@@ -1,26 +1,14 @@
# SPDX-License-Identifier: GPL-2.0-or-later
-if(WIN32)
- set(TBB_EXTRA_ARGS
- -DTBB_BUILD_SHARED=On
- -DTBB_BUILD_TBBMALLOC=On
- -DTBB_BUILD_TBBMALLOC_PROXY=On
- -DTBB_BUILD_STATIC=Off
- -DTBB_BUILD_TESTS=Off
- -DCMAKE_DEBUG_POSTFIX=_debug
- )
- set(TBB_LIBRARY tbb)
- set(TBB_STATIC_LIBRARY Off)
-else()
- set(TBB_EXTRA_ARGS
- -DTBB_BUILD_SHARED=Off
- -DTBB_BUILD_TBBMALLOC=On
- -DTBB_BUILD_TBBMALLOC_PROXY=Off
- -DTBB_BUILD_STATIC=On
- -DTBB_BUILD_TESTS=Off
- )
- set(TBB_LIBRARY tbb_static)
- set(TBB_STATIC_LIBRARY On)
-endif()
+set(TBB_EXTRA_ARGS
+ -DTBB_BUILD_SHARED=On
+ -DTBB_BUILD_TBBMALLOC=On
+ -DTBB_BUILD_TBBMALLOC_PROXY=On
+ -DTBB_BUILD_STATIC=Off
+ -DTBB_BUILD_TESTS=Off
+ -DCMAKE_DEBUG_POSTFIX=_debug
+)
+set(TBB_LIBRARY tbb)
+set(TBB_STATIC_LIBRARY Off)
# CMake script for TBB from https://github.com/wjakob/tbb/blob/master/CMakeLists.txt
ExternalProject_Add(external_tbb
diff --git a/build_files/build_environment/cmake/usd.cmake b/build_files/build_environment/cmake/usd.cmake
index 0661be3ba14..645632043c2 100644
--- a/build_files/build_environment/cmake/usd.cmake
+++ b/build_files/build_environment/cmake/usd.cmake
@@ -7,32 +7,56 @@ if(WIN32)
# USD does not look for debug libs, nor does it link them
# when building static, so this is just to keep find_package happy
# if we ever link dynamically on windows util will need to be linked as well.
- set(USD_OIIO_CMAKE_DEFINES "-DOIIO_LIBRARIES=${LIBDIR}/openimageio/lib/OpenImageIO_d${LIBEXT}")
+ set(USD_OIIO_CMAKE_DEFINES "-DOIIO_LIBRARIES=${LIBDIR}/openimageio/lib/OpenImageIO_d${LIBEXT}^^${LIBDIR}/openimageio/lib/OpenImageIO_util_d${LIBEXT}")
endif()
set(USD_PLATFORM_FLAGS
${USD_OIIO_CMAKE_DEFINES}
-DCMAKE_CXX_FLAGS=${USD_CXX_FLAGS}
+ -D_PXR_CXX_DEFINITIONS=/DBOOST_ALL_NO_LIB
+ -DCMAKE_SHARED_LINKER_FLAGS_INIT=/LIBPATH:${LIBDIR}/tbb/lib
+ -DPython_FIND_REGISTRY=NEVER
+ -DPYTHON_INCLUDE_DIRS=${LIBDIR}/python/include
+ -DPYTHON_LIBRARY=${LIBDIR}/python/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}${PYTHON_POSTFIX}${LIBEXT}
)
+ if(BUILD_MODE STREQUAL Debug)
+ list(APPEND USD_PLATFORM_FLAGS -DPXR_USE_DEBUG_PYTHON=ON)
+ list(APPEND USD_PLATFORM_FLAGS -DOPENVDB_LIBRARY=${LIBDIR}/openvdb/lib/openvdb_d.lib)
+ endif()
+elseif(UNIX)
+ # Workaround USD not linking correctly with static Python library, where it would embed
+ # part of the interpret in the USD library. Allow undefined Python symbols and replace
+ # Python library with TBB so it doesn't complain about missing library.
+ set(USD_PLATFORM_FLAGS
+ -DPYTHON_INCLUDE_DIR=${LIBDIR}/python/include/python${PYTHON_SHORT_VERSION}/
+ -DPYTHON_LIBRARY=${LIBDIR}/tbb/lib/${LIBPREFIX}${TBB_LIBRARY}${SHAREDLIBEXT}
+ )
+
+ if(APPLE)
+ set(USD_SHARED_LINKER_FLAGS "-Xlinker -undefined -Xlinker dynamic_lookup")
+ list(APPEND USD_PLATFORM_FLAGS
+ -DCMAKE_SHARED_LINKER_FLAGS=${USD_SHARED_LINKER_FLAGS})
+ endif()
endif()
set(USD_EXTRA_ARGS
${DEFAULT_BOOST_FLAGS}
${USD_PLATFORM_FLAGS}
- # This is a preventative measure that avoids possible conflicts when add-ons
- # try to load another USD library into the same process space.
- -DPXR_SET_INTERNAL_NAMESPACE=usdBlender
-DOPENSUBDIV_ROOT_DIR=${LIBDIR}/opensubdiv
-DOpenImageIO_ROOT=${LIBDIR}/openimageio
- -DOPENEXR_LIBRARIES=${LIBDIR}/imath/lib/imath${OPENEXR_VERSION_POSTFIX}${LIBEXT}
+ -DOPENEXR_LIBRARIES=${LIBDIR}/imath/lib/${LIBPREFIX}Imath${OPENEXR_VERSION_POSTFIX}${LIBEXT}
-DOPENEXR_INCLUDE_DIR=${LIBDIR}/imath/include
- -DPXR_ENABLE_PYTHON_SUPPORT=OFF
+ -DImath_DIR=${LIBDIR}/imath
+ -DOPENVDB_LOCATION=${LIBDIR}/openvdb
+ -DPXR_ENABLE_PYTHON_SUPPORT=ON
+ -DPXR_USE_PYTHON_3=ON
-DPXR_BUILD_IMAGING=ON
-DPXR_BUILD_TESTS=OFF
-DPXR_BUILD_EXAMPLES=OFF
-DPXR_BUILD_TUTORIALS=OFF
+ -DPXR_BUILD_USDVIEW=OFF
-DPXR_ENABLE_HDF5_SUPPORT=OFF
-DPXR_ENABLE_MATERIALX_SUPPORT=OFF
- -DPXR_ENABLE_OPENVDB_SUPPORT=OFF
+ -DPXR_ENABLE_OPENVDB_SUPPORT=ON
-DPYTHON_EXECUTABLE=${PYTHON_BINARY}
-DPXR_BUILD_MONOLITHIC=ON
# OSL is an optional dependency of the Imaging module. However, since that
@@ -40,41 +64,36 @@ set(USD_EXTRA_ARGS
# cube, etc.) to geometry, it's not necessary. Disabling it will make it
# simpler to build Blender; currently only Cycles uses OSL.
-DPXR_ENABLE_OSL_SUPPORT=OFF
- # GL support on Linux also links to X11 libraries. Enabling it would break
- # headless or Wayland-only builds. OpenGL support would be useful if someone
- # wants to work on a Hydra viewport in Blender; when that's actually being
- # worked on, we could patch in a new PXR_ENABLE_X11_SUPPORT option (to
- # separate OpenGL from X11) and contribute it upstream.
- -DPXR_ENABLE_GL_SUPPORT=OFF
- # Disable Metal since USD fails to build this when OpenGL is disabled.
- -DPXR_ENABLE_METAL_SUPPORT=OFF
- # OIIO is used for loading image textures in Hydra Storm / Embree renderers,
- # which we don't use.
- -DPXR_BUILD_OPENIMAGEIO_PLUGIN=OFF
+ # Enable OpenGL for Hydra support. Note that this indirectly also adds an X11
+ # dependency on Linux. This would be good to eliminate for headless and Wayland
+ # only builds, however is not worse than what Blender already links to for
+ # official releases currently.
+ -DPXR_ENABLE_GL_SUPPORT=ON
+ # OIIO is used for loading image textures in Hydra Storm / Embree renderers.
+ -DPXR_BUILD_OPENIMAGEIO_PLUGIN=ON
# USD 22.03 does not support OCIO 2.x
# Tracking ticket https://github.com/PixarAnimationStudios/USD/issues/1386
-DPXR_BUILD_OPENCOLORIO_PLUGIN=OFF
-DPXR_ENABLE_PTEX_SUPPORT=OFF
-DPXR_BUILD_USD_TOOLS=OFF
-DCMAKE_DEBUG_POSTFIX=_d
- -DBUILD_SHARED_LIBS=Off
- # USD is hellbound on making a shared library,
- # unless you point this variable to a valid CMAKE file doesn't have to make sense,
- # but as long as it points somewhere valid it will skip the shared library.
- -DPXR_MONOLITHIC_IMPORT=${BUILD_DIR}/usd/src/external_usd/cmake/defaults/Version.cmake
+ -DBUILD_SHARED_LIBS=ON
-DTBB_INCLUDE_DIRS=${LIBDIR}/tbb/include
- -DTBB_LIBRARIES=${LIBDIR}/tbb/lib/${LIBPREFIX}${TBB_LIBRARY}${LIBEXT}
- -DTbb_TBB_LIBRARY=${LIBDIR}/tbb/lib/${LIBPREFIX}${TBB_LIBRARY}${LIBEXT}
+ -DTBB_LIBRARIES=${LIBDIR}/tbb/lib/${LIBPREFIX}${TBB_LIBRARY}${SHAREDLIBEXT}
+ -DTbb_TBB_LIBRARY=${LIBDIR}/tbb/lib/${LIBPREFIX}${TBB_LIBRARY}${SHAREDLIBEXT}
+ -DTBB_tbb_LIBRARY_RELEASE=${LIBDIR}/tbb/lib/${LIBPREFIX}${TBB_LIBRARY}${SHAREDLIBEXT}
# USD wants the tbb debug lib set even when you are doing a release build
# Otherwise it will error out during the cmake configure phase.
- -DTBB_LIBRARIES_DEBUG=${LIBDIR}/tbb/lib/${LIBPREFIX}${TBB_LIBRARY}${LIBEXT}
+ -DTBB_LIBRARIES_DEBUG=${LIBDIR}/tbb/lib/${LIBPREFIX}${TBB_LIBRARY}${SHAREDLIBEXT}
)
ExternalProject_Add(external_usd
URL file://${PACKAGE_DIR}/${USD_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${USD_HASH_TYPE}=${USD_HASH}
+ CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
PREFIX ${BUILD_DIR}/usd
+ LIST_SEPARATOR ^^
PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/usd/src/external_usd < ${PATCH_DIR}/usd.diff
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/usd -Wno-dev ${DEFAULT_CMAKE_FLAGS} ${USD_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/usd
@@ -85,10 +104,12 @@ add_dependencies(
external_tbb
external_boost
external_opensubdiv
+ external_python
+ external_openimageio
+ openvdb
)
-# Since USD 21.11 the libraries are prefixed with "usd_", i.e.
-# "libusd_m.a" became "libusd_usd_m.a".
+# Since USD 21.11 the libraries are prefixed with "usd_", i.e. "libusd_m.a" became "libusd_usd_m.a".
# See https://github.com/PixarAnimationStudios/USD/blob/release/CHANGELOG.md#2111---2021-11-01
if(NOT WIN32)
if (USD_VERSION VERSION_LESS 21.11)
@@ -101,27 +122,16 @@ endif()
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_usd after_install
- COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/usd/ ${HARVEST_TARGET}/usd
- COMMAND ${CMAKE_COMMAND} -E copy ${BUILD_DIR}/usd/src/external_usd-build/pxr/Release/usd_usd_m.lib ${HARVEST_TARGET}/usd/lib/usd_usd_m.lib
+ COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/usd ${HARVEST_TARGET}/usd
DEPENDEES install
)
endif()
if(BUILD_MODE STREQUAL Debug)
ExternalProject_Add_Step(external_usd after_install
- COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/usd/lib ${HARVEST_TARGET}/usd/lib
- COMMAND ${CMAKE_COMMAND} -E copy ${BUILD_DIR}/usd/src/external_usd-build/pxr/Debug/usd_usd_m_d.lib ${HARVEST_TARGET}/usd/lib/usd_usd_m_d.lib
+ COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/usd/lib/python ${HARVEST_TARGET}/usd/lib/debug/python
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/usd/lib/usd_ms_d.dll ${HARVEST_TARGET}/usd/lib/usd_ms_d.dll
+ COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/usd/lib/usd_ms_d.lib ${HARVEST_TARGET}/usd/lib/usd_ms_d.lib
DEPENDEES install
)
endif()
-else()
- # USD has two build options. The default build creates lots of small libraries,
- # whereas the 'monolithic' build produces only a single library. The latter
- # makes linking simpler, so that's what we use in Blender. However, running
- # 'make install' in the USD sources doesn't install the static library in that
- # case (only the shared library). As a result, we need to grab the `libusd_m.a`
- # file from the build directory instead of from the install directory.
- ExternalProject_Add_Step(external_usd after_install
- COMMAND ${CMAKE_COMMAND} -E copy ${BUILD_DIR}/usd/src/external_usd-build/pxr/lib${PXR_LIB_PREFIX}usd_m.a ${HARVEST_TARGET}/usd/lib/lib${PXR_LIB_PREFIX}usd_m.a
- DEPENDEES install
- )
endif()
diff --git a/build_files/build_environment/cmake/versions.cmake b/build_files/build_environment/cmake/versions.cmake
index 4f4330b56f4..c57e9da55e0 100644
--- a/build_files/build_environment/cmake/versions.cmake
+++ b/build_files/build_environment/cmake/versions.cmake
@@ -35,12 +35,12 @@ set(JPEG_HASH_TYPE MD5)
set(JPEG_FILE libjpeg-turbo-${JPEG_VERSION}.tar.gz)
set(JPEG_CPE "cpe:2.3:a:d.r.commander:libjpeg-turbo:${JPEG_VERSION}:*:*:*:*:*:*:*")
-set(BOOST_VERSION 1.78.0)
-set(BOOST_VERSION_SHORT 1.78)
-set(BOOST_VERSION_NODOTS 1_78_0)
-set(BOOST_VERSION_NODOTS_SHORT 1_78)
+set(BOOST_VERSION 1.80.0)
+set(BOOST_VERSION_SHORT 1.80)
+set(BOOST_VERSION_NODOTS 1_80_0)
+set(BOOST_VERSION_NODOTS_SHORT 1_80)
set(BOOST_URI https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION}/source/boost_${BOOST_VERSION_NODOTS}.tar.gz)
-set(BOOST_HASH c2f6428ac52b0e5a3c9b2e1d8cc832b5)
+set(BOOST_HASH 077f074743ea7b0cb49c6ed43953ae95)
set(BOOST_HASH_TYPE MD5)
set(BOOST_FILE boost_${BOOST_VERSION_NODOTS}.tar.gz)
set(BOOST_CPE "cpe:2.3:a:boost:boost:${BOOST_VERSION}:*:*:*:*:*:*:*")
@@ -77,11 +77,11 @@ if(WIN32)
# we need to tell the build the postfix is _s while
# telling all other deps the postfix is _s_d
if(BUILD_MODE STREQUAL Release)
- set(OPENEXR_VERSION_POSTFIX _s)
- set(OPENEXR_VERSION_BUILD_POSTFIX _s)
+ set(OPENEXR_VERSION_POSTFIX )
+ set(OPENEXR_VERSION_BUILD_POSTFIX )
else()
- set(OPENEXR_VERSION_POSTFIX _s_d)
- set(OPENEXR_VERSION_BUILD_POSTFIX _s)
+ set(OPENEXR_VERSION_POSTFIX _d)
+ set(OPENEXR_VERSION_BUILD_POSTFIX )
endif()
else()
set(OPENEXR_VERSION_BUILD_POSTFIX)
@@ -114,9 +114,9 @@ set(ALEMBIC_HASH_TYPE MD5)
set(ALEMBIC_FILE alembic-${ALEMBIC_VERSION}.tar.gz)
SET(FREETYPE_CPE "cpe:2.3:a:freetype:freetype:${FREETYPE_VERSION}:*:*:*:*:*:*:*")
-set(OPENSUBDIV_VERSION v3_4_4)
+set(OPENSUBDIV_VERSION v3_5_0)
set(OPENSUBDIV_URI https://github.com/PixarAnimationStudios/OpenSubdiv/archive/${OPENSUBDIV_VERSION}.tar.gz)
-set(OPENSUBDIV_HASH 39ecc5caf0abebc943d1ce131855e76e)
+set(OPENSUBDIV_HASH 230f5cd2911d6240e58a3773b9c6e5e4)
set(OPENSUBDIV_HASH_TYPE MD5)
set(OPENSUBDIV_FILE opensubdiv-${OPENSUBDIV_VERSION}.tar.gz)
@@ -133,12 +133,18 @@ set(OPENCOLLADA_HASH ee7dae874019fea7be11613d07567493)
set(OPENCOLLADA_HASH_TYPE MD5)
set(OPENCOLLADA_FILE opencollada-${OPENCOLLADA_VERSION}.tar.gz)
-set(OPENCOLORIO_VERSION 2.1.1)
+set(OPENCOLORIO_VERSION 2.2.0)
set(OPENCOLORIO_URI https://github.com/AcademySoftwareFoundation/OpenColorIO/archive/v${OPENCOLORIO_VERSION}.tar.gz)
-set(OPENCOLORIO_HASH 604f562e073f23d88ce89ed4f7f709ba)
+set(OPENCOLORIO_HASH d58a5980adba2d89a363100a09daa5f3)
set(OPENCOLORIO_HASH_TYPE MD5)
set(OPENCOLORIO_FILE OpenColorIO-${OPENCOLORIO_VERSION}.tar.gz)
+set(MINIZIPNG_VERSION 3.0.7)
+set(MINIZIPNG_URI https://github.com/zlib-ng/minizip-ng/archive/${MINIZIPNG_VERSION}.tar.gz)
+set(MINIZIPNG_HASH 09dcc8a9def348e1be9659e384c2cd55)
+set(MINIZIPNG_HASH_TYPE MD5)
+set(MINIZIPNG_FILE minizip-ng-${MINIZIPNG_VERSION}.tar.gz)
+
set(LLVM_VERSION 12.0.0)
set(LLVM_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.src.tar.xz)
set(LLVM_HASH 5a4fab4d7fc84aefffb118ac2c8a4fc0)
@@ -189,9 +195,12 @@ set(TIFF_HASH_TYPE MD5)
set(TIFF_FILE tiff-${TIFF_VERSION}.tar.gz)
set(TIFF_CPE "cpe:2.3:a:libtiff:libtiff:${TIFF_VERSION}:*:*:*:*:*:*:*")
-set(OSL_VERSION 1.12.6.2)
-set(OSL_URI https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/archive/refs/tags/v${OSL_VERSION}.tar.gz)
-set(OSL_HASH 6fef11548adfdd3e5b25c49d2dae96ee)
+# Commit c8dd33f5a37b6a6db0b6950d24f9a7cff5ceb799 breaks rendering in Cycles with OptiX, so this
+# is intentionally still a commit before that and therefore 1.13.0.1. To be updated to a newer
+# version before landing this in master.
+set(OSL_VERSION 1a7670600c8b08c2443a78d03c8c27e9a1149140)
+set(OSL_URI https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/archive/${OSL_VERSION}.tar.gz)
+set(OSL_HASH 7b6d6716b05d1addb92a8f47280bf77f)
set(OSL_HASH_TYPE MD5)
set(OSL_FILE OpenShadingLanguage-${OSL_VERSION}.tar.gz)
@@ -212,9 +221,9 @@ set(TBB_HASH_TYPE MD5)
set(TBB_FILE oneTBB-${TBB_VERSION}.tar.gz)
set(TBB_CPE "cpe:2.3:a:intel:threading_building_blocks:${TBB_YEAR}:*:*:*:*:*:*:*")
-set(OPENVDB_VERSION 9.0.0)
+set(OPENVDB_VERSION 10.0.0)
set(OPENVDB_URI https://github.com/AcademySoftwareFoundation/openvdb/archive/v${OPENVDB_VERSION}.tar.gz)
-set(OPENVDB_HASH 684ce40c2f74f3a0c9cac530e1c7b07e)
+set(OPENVDB_HASH 64301c737e16b26c8f3085a31e6397e9)
set(OPENVDB_HASH_TYPE MD5)
set(OPENVDB_FILE openvdb-${OPENVDB_VERSION}.tar.gz)
@@ -224,7 +233,7 @@ set(URLLIB3_VERSION 1.26.8)
set(URLLIB3_CPE "cpe:2.3:a:urllib3:urllib3:${URLLIB3_VERSION}:*:*:*:*:*:*:*")
set(CERTIFI_VERSION 2021.10.8)
set(REQUESTS_VERSION 2.27.1)
-set(CYTHON_VERSION 0.29.26)
+set(CYTHON_VERSION 0.29.30)
# The version of the zstd library used to build the Python package should match ZSTD_VERSION
# defined below. At this time of writing, 0.17.0 was already released,
# but built against zstd 1.5.1, while we use 1.5.0.
@@ -232,13 +241,14 @@ set(ZSTANDARD_VERSION 0.16.0)
set(AUTOPEP8_VERSION 1.6.0)
set(PYCODESTYLE_VERSION 2.8.0)
set(TOML_VERSION 0.10.2)
+set(MESON_VERSION 0.63.0)
-set(NUMPY_VERSION 1.22.0)
-set(NUMPY_SHORT_VERSION 1.22)
-set(NUMPY_URI https://github.com/numpy/numpy/releases/download/v${NUMPY_VERSION}/numpy-${NUMPY_VERSION}.zip)
-set(NUMPY_HASH 252de134862a27bd66705d29622edbfe)
+set(NUMPY_VERSION 1.23.2)
+set(NUMPY_SHORT_VERSION 1.23)
+set(NUMPY_URI https://github.com/numpy/numpy/releases/download/v${NUMPY_VERSION}/numpy-${NUMPY_VERSION}.tar.gz)
+set(NUMPY_HASH 9bf2a361509797de14ceee607387fe0f)
set(NUMPY_HASH_TYPE MD5)
-set(NUMPY_FILE numpy-${NUMPY_VERSION}.zip)
+set(NUMPY_FILE numpy-${NUMPY_VERSION}.tar.gz)
set(NUMPY_CPE "cpe:2.3:a:numpy:numpy:${NUMPY_VERSION}:*:*:*:*:*:*:*")
set(LAME_VERSION 3.100)
@@ -359,9 +369,9 @@ set(XML2_HASH_TYPE MD5)
set(XML2_FILE libxml2-${XML2_VERSION}.tar.xz)
set(XML2_CPE "cpe:2.3:a:xmlsoft:libxml2:${XML2_VERSION}:*:*:*:*:*:*:*")
-set(YAMLCPP_VERSION 0.6.3)
+set(YAMLCPP_VERSION 0.7.0)
set(YAMLCPP_URI https://codeload.github.com/jbeder/yaml-cpp/tar.gz/yaml-cpp-${YAMLCPP_VERSION})
-set(YAMLCPP_HASH b45bf1089a382e81f6b661062c10d0c2)
+set(YAMLCPP_HASH 74d646a3cc1b5d519829441db96744f0)
set(YAMLCPP_HASH_TYPE MD5)
set(YAMLCPP_FILE yaml-cpp-${YAMLCPP_VERSION}.tar.gz)
set(YAMLCPP "cpe:2.3:a:yaml-cpp_project:yaml-cpp:${YAMLCPP_VERSION}:*:*:*:*:*:*:*")
@@ -457,9 +467,9 @@ set(EMBREE_HASH 52d0be294d6c88ba7a6c9e046796e7be)
set(EMBREE_HASH_TYPE MD5)
set(EMBREE_FILE embree-v${EMBREE_VERSION}.zip)
-set(USD_VERSION 22.03)
+set(USD_VERSION 22.11)
set(USD_URI https://github.com/PixarAnimationStudios/USD/archive/v${USD_VERSION}.tar.gz)
-set(USD_HASH e0e441a05057692a83124a1195b09eed)
+set(USD_HASH 8c89459e48a2ef0e7ae9e7e490377507)
set(USD_HASH_TYPE MD5)
set(USD_FILE usd-v${USD_VERSION}.tar.gz)
@@ -708,3 +718,55 @@ set(AOM_URI https://storage.googleapis.com/aom-releases/libaom-${AOM_VERSION}.ta
set(AOM_HASH bd754b58c3fa69f3ffd29da77de591bd9c26970e3b18537951336d6c0252e354)
set(AOM_HASH_TYPE SHA256)
set(AOM_FILE libaom-${AOM_VERSION}.tar.gz)
+
+set(FRIBIDI_VERSION v1.0.12)
+set(FRIBIDI_URI https://github.com/fribidi/fribidi/archive/refs/tags/${FRIBIDI_VERSION}.tar.gz)
+set(FRIBIDI_HASH 2e9e859876571f03567ac91e5ed3b5308791f31cda083408c2b60fa1fe00a39d)
+set(FRIBIDI_HASH_TYPE SHA256)
+set(FRIBIDI_FILE fribidi-${FRIBIDI_VERSION}.tar.gz)
+
+set(HARFBUZZ_VERSION 5.1.0)
+set(HARFBUZZ_URI https://github.com/harfbuzz/harfbuzz/archive/refs/tags/${HARFBUZZ_VERSION}.tar.gz)
+set(HARFBUZZ_HASH 5352ff2eec538ea9a63a485cf01ad8332a3f63aa79921c5a2e301cef185caea1)
+set(HARFBUZZ_HASH_TYPE SHA256)
+set(HARFBUZZ_FILE harfbuzz-${HARFBUZZ_VERSION}.tar.gz)
+
+set(SHADERC_VERSION v2022.3)
+set(SHADERC_URI https://github.com/google/shaderc/archive/${SHADERC_VERSION}.tar.gz)
+set(SHADERC_HASH 5cb762af57637caf997d5f46baa4e8a4)
+set(SHADERC_HASH_TYPE MD5)
+set(SHADERC_FILE shaderc-${SHADERC_VERSION}.tar.gz)
+
+# The versions of shaderc's dependencies can be found in the root of shaderc's
+# source in a file called DEPS.
+
+set(SHADERC_SPIRV_TOOLS_VERSION eb0a36633d2acf4de82588504f951ad0f2cecacb)
+set(SHADERC_SPIRV_TOOLS_URI https://github.com/KhronosGroup/SPIRV-Tools/archive/${SHADERC_SPIRV_TOOLS_VERSION}.tar.gz)
+set(SHADERC_SPIRV_TOOLS_HASH a4bdb8161f0e959c75d0d82d367c24f2)
+set(SHADERC_SPIRV_TOOLS_HASH_TYPE MD5)
+set(SHADERC_SPIRV_TOOLS_FILE SPIRV-Tools-${SHADERC_SPIRV_TOOLS_VERSION}.tar.gz)
+
+set(SHADERC_SPIRV_HEADERS_VERSION 85a1ed200d50660786c1a88d9166e871123cce39)
+set(SHADERC_SPIRV_HEADERS_URI https://github.com/KhronosGroup/SPIRV-Headers/archive/${SHADERC_SPIRV_HEADERS_VERSION}.tar.gz)
+set(SHADERC_SPIRV_HEADERS_HASH 10d5e8160f39344a641523810b075568)
+set(SHADERC_SPIRV_HEADERS_HASH_TYPE MD5)
+set(SHADERC_SPIRV_HEADERS_FILE SPIRV-Headers-${SHADERC_SPIRV_HEADERS_VERSION}.tar.gz)
+
+set(SHADERC_GLSLANG_VERSION 89db4e1caa273a057ea46deba709c6e50001b314)
+set(SHADERC_GLSLANG_URI https://github.com/KhronosGroup/glslang/archive/${SHADERC_GLSLANG_VERSION}.tar.gz)
+set(SHADERC_GLSLANG_HASH 3b3c79ad8e9132ffcb8b63cc29c532e2)
+set(SHADERC_GLSLANG_HASH_TYPE MD5)
+set(SHADERC_GLSLANG_FILE glslang-${SHADERC_GLSLANG_VERSION}.tar.gz)
+
+set(VULKAN_VERSION v1.2.198)
+
+set(VULKAN_HEADERS_URI https://github.com/KhronosGroup/Vulkan-Headers/archive/refs/tags/${VULKAN_VERSION}.tar.gz)
+set(VULKAN_HEADERS_HASH 64fe73e887c963ad546bfc7f9505fa1d)
+set(VULKAN_HEADERS_HASH_TYPE MD5)
+set(VULKAN_HEADERS_FILE Vulkan-Headers-${VULKAN_VERSION}.tar.gz)
+
+set(VULKAN_LOADER_URI https://github.com/KhronosGroup/Vulkan-Loader/archive/refs/tags/${VULKAN_VERSION}.tar.gz)
+set(VULKAN_LOADER_HASH 015170a74f648fd2b41e209b6bf1ebc4)
+set(VULKAN_LOADER_HASH_TYPE MD5)
+set(VULKAN_LOADER_FILE Vulkan-Loader-${VULKAN_VERSION}.tar.gz)
+
diff --git a/build_files/build_environment/cmake/vulkan.cmake b/build_files/build_environment/cmake/vulkan.cmake
new file mode 100644
index 00000000000..1fd94dd59be
--- /dev/null
+++ b/build_files/build_environment/cmake/vulkan.cmake
@@ -0,0 +1,55 @@
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ***** END GPL LICENSE BLOCK *****
+
+set(VULKAN_HEADERS_EXTRA_ARGS)
+
+ExternalProject_Add(external_vulkan_headers
+ URL file://${PACKAGE_DIR}/${VULKAN_HEADERS_FILE}
+ URL_HASH ${VULKAN_HEADERS_HASH_TYPE}=${VULKAN_HEADERS_HASH}
+ PREFIX ${BUILD_DIR}/vulkan_headers
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/vulkan_headers -Wno-dev ${DEFAULT_CMAKE_FLAGS} ${VULKAN_HEADERS_EXTRA_ARGS}
+ INSTALL_DIR ${LIBDIR}/vulkan_headers
+)
+
+set(VULKAN_LOADER_EXTRA_ARGS
+ -DVULKAN_HEADERS_INSTALL_DIR=${LIBDIR}/vulkan_headers
+)
+
+ExternalProject_Add(external_vulkan_loader
+ URL file://${PACKAGE_DIR}/${VULKAN_LOADER_FILE}
+ URL_HASH ${VULKAN_LOADER_HASH_TYPE}=${VULKAN_LOADER_HASH}
+ PREFIX ${BUILD_DIR}/vulkan_loader
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/vulkan_loader -Wno-dev ${DEFAULT_CMAKE_FLAGS} ${VULKAN_LOADER_EXTRA_ARGS}
+ INSTALL_DIR ${LIBDIR}/vulkan_loader
+)
+
+add_dependencies(
+ external_vulkan_loader
+ external_vulkan_headers
+)
+
+if(WIN32)
+ if(BUILD_MODE STREQUAL Release)
+ ExternalProject_Add_Step(external_vulkan_loader after_install
+ COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/vulkan_loader/ ${HARVEST_TARGET}/vulkan
+ COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/vulkan_headers/ ${HARVEST_TARGET}/vulkan
+ DEPENDEES install
+ )
+ endif()
+endif()
+
diff --git a/build_files/build_environment/cmake/yamlcpp.cmake b/build_files/build_environment/cmake/yamlcpp.cmake
index abf6387fe36..d3be8854c57 100644
--- a/build_files/build_environment/cmake/yamlcpp.cmake
+++ b/build_files/build_environment/cmake/yamlcpp.cmake
@@ -18,6 +18,7 @@ ExternalProject_Add(external_yamlcpp
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${YAMLCPP_HASH_TYPE}=${YAMLCPP_HASH}
PREFIX ${BUILD_DIR}/yamlcpp
+ CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/yamlcpp ${DEFAULT_CMAKE_FLAGS} ${YAMLCPP_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/yamlcpp
)
diff --git a/build_files/build_environment/darwin/set_rpath.py b/build_files/build_environment/darwin/set_rpath.py
new file mode 100644
index 00000000000..190e619a5ba
--- /dev/null
+++ b/build_files/build_environment/darwin/set_rpath.py
@@ -0,0 +1,19 @@
+#!/usr/bin/env python3
+# macOS utility to remove all rpaths and add a new one.
+
+import subprocess
+import sys
+
+rpath = sys.argv[1]
+file = sys.argv[2]
+
+# Find existing rpaths and delete them one by one.
+p = subprocess.run(['otool', '-l', file], capture_output=True)
+tokens = p.stdout.split()
+
+for i, token in enumerate(tokens):
+ if token == b'LC_RPATH':
+ old_rpath = tokens[i + 4]
+ subprocess.run(['install_name_tool', '-delete_rpath', old_rpath, file])
+
+subprocess.run(['install_name_tool', '-add_rpath', rpath, file])
diff --git a/build_files/build_environment/install_deps.sh b/build_files/build_environment/install_deps.sh
index 5a191f7669b..555ef752a09 100755
--- a/build_files/build_environment/install_deps.sh
+++ b/build_files/build_environment/install_deps.sh
@@ -3187,7 +3187,6 @@ compile_USD() {
if [ -d $INST/tbb ]; then
cmake_d="$cmake_d $cmake_d -D TBB_ROOT_DIR=$INST/tbb"
fi
- cmake_d="$cmake_d -DPXR_SET_INTERNAL_NAMESPACE=usdBlender"
cmake_d="$cmake_d -DPXR_ENABLE_PYTHON_SUPPORT=OFF"
cmake_d="$cmake_d -DPXR_BUILD_IMAGING=OFF"
cmake_d="$cmake_d -DPXR_BUILD_TESTS=OFF"
diff --git a/build_files/build_environment/patches/boost.user.jam.in b/build_files/build_environment/patches/boost.user.jam.in
index b615b0cafad..b20a90d522c 100644
--- a/build_files/build_environment/patches/boost.user.jam.in
+++ b/build_files/build_environment/patches/boost.user.jam.in
@@ -1,4 +1,4 @@
using python : @PYTHON_SHORT_VERSION@ : @PYTHON_BINARY@
- : @LIBDIR@/python/include @LIBDIR@/python/include/python@PYTHON_SHORT_VERSION@m/
+ : @LIBDIR@/python/include @LIBDIR@/python/include/python@PYTHON_SHORT_VERSION@/
: @LIBDIR@/python/libs
; \ No newline at end of file
diff --git a/build_files/build_environment/patches/opencollada.diff b/build_files/build_environment/patches/opencollada.diff
index 02eab251a13..edb831dc20f 100644
--- a/build_files/build_environment/patches/opencollada.diff
+++ b/build_files/build_environment/patches/opencollada.diff
@@ -3,19 +3,19 @@ index 95abbe2..4f14f30 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -254,11 +254,11 @@ if(USE_STATIC_MSVC_RUNTIME)
- endif()
-
- #adding PCRE
--find_package(PCRE)
-+#find_package(PCRE)
- if (PCRE_FOUND)
- message(STATUS "SUCCESSFUL: PCRE found")
- else () # if pcre not found building its local copy from ./Externals
-- if (WIN32 OR APPLE)
-+ if (1)
- message("WARNING: Native PCRE not found, taking PCRE from ./Externals")
- add_definitions(-DPCRE_STATIC)
- add_subdirectory(${EXTERNAL_LIBRARIES}/pcre)
+ endif()
+
+ #adding PCRE
+-find_package(PCRE)
++#find_package(PCRE)
+ if (PCRE_FOUND)
+ message(STATUS "SUCCESSFUL: PCRE found")
+ else () # if pcre not found building its local copy from ./Externals
+- if (WIN32 OR APPLE)
++ if (1)
+ message("WARNING: Native PCRE not found, taking PCRE from ./Externals")
+ add_definitions(-DPCRE_STATIC)
+ add_subdirectory(${EXTERNAL_LIBRARIES}/pcre)
diff --git a/DAEValidator/CMakeLists.txt b/DAEValidator/CMakeLists.txt
index 03ad540..f7d05cf 100644
--- a/DAEValidator/CMakeLists.txt
@@ -66,13 +66,13 @@ index 40081e7..e1d1bfa 100644
--- a/Externals/LibXML/CMakeLists.txt
+++ b/Externals/LibXML/CMakeLists.txt
@@ -9,6 +9,7 @@ add_definitions(
- -DLIBXML_SCHEMAS_ENABLED
- -DLIBXML_XPATH_ENABLED
- -DLIBXML_TREE_ENABLED
-+ -DLIBXML_STATIC
- )
-
- if(USE_STATIC_MSVC_RUNTIME)
+ -DLIBXML_SCHEMAS_ENABLED
+ -DLIBXML_XPATH_ENABLED
+ -DLIBXML_TREE_ENABLED
++ -DLIBXML_STATIC
+ )
+
+ if(USE_STATIC_MSVC_RUNTIME)
diff --git a/GeneratedSaxParser/src/GeneratedSaxParserUtils.cpp b/GeneratedSaxParser/src/GeneratedSaxParserUtils.cpp
index 1f9a3ee..d151e9a 100644
--- a/GeneratedSaxParser/src/GeneratedSaxParserUtils.cpp
@@ -155,3 +155,15 @@ diff -Naur a/CMakeLists.txt b/CMakeLists.txt
# Library export
install(EXPORT LibraryExport DESTINATION ${OPENCOLLADA_INST_CMAKECONFIG} FILE OpenCOLLADATargets.cmake)
+diff -Naur OpenCOLLADA-1.6.68/common/libBuffer/include/CommonFWriteBufferFlusher.h external_opencollada/common/libBuffer/include/CommonFWriteBufferFlusher.h
+--- OpenCOLLADA-1.6.68/common/libBuffer/include/CommonFWriteBufferFlusher.h 2018-11-26 14:43:10 -0700
++++ external_opencollada/common/libBuffer/include/CommonFWriteBufferFlusher.h 2022-08-19 11:36:04 -0600
+@@ -23,7 +23,7 @@
+ # include <tr1/unordered_map>
+ #endif
+
+-#ifdef _LIBCPP_VERSION
++#if defined(_LIBCPP_VERSION) || defined(WIN32)
+ // If we're compiling with libc++, create a namespace alias for tr1 that points to std.
+ // Not particularly elegant, and largely should be filed under "hack", but it works for OS X with clang for now.
+ namespace std { \ No newline at end of file
diff --git a/build_files/build_environment/patches/openvdb.diff b/build_files/build_environment/patches/openvdb.diff
index f716df3d6e3..9896460c26c 100644
--- a/build_files/build_environment/patches/openvdb.diff
+++ b/build_files/build_environment/patches/openvdb.diff
@@ -1,30 +1,6 @@
-diff -ur openvdb-9.0.0/cmake/FindTBB.cmake openvdb/cmake/FindTBB.cmake
---- openvdb-9.0.0/cmake/FindTBB.cmake 2021-10-30 03:55:40.000000000 +0100
-+++ openvdb/cmake/FindTBB.cmake 2022-03-31 11:33:15.592329750 +0100
-@@ -252,7 +252,8 @@
- set(_TBB_LIB_NAME "${_TBB_LIB_NAME}${TBB_DEBUG_SUFFIX}")
- endif()
-
-- find_library(Tbb_${COMPONENT}_LIBRARY_${BUILD_TYPE} ${_TBB_LIB_NAME}
-+ find_library(Tbb_${COMPONENT}_LIBRARY_${BUILD_TYPE}
-+ NAMES ${_TBB_LIB_NAME} ${_TBB_LIB_NAME}_static
- ${_FIND_TBB_ADDITIONAL_OPTIONS}
- PATHS ${_TBB_LIBRARYDIR_SEARCH_DIRS}
- PATH_SUFFIXES ${CMAKE_INSTALL_LIBDIR} lib64 lib
diff -Naur openvdb-8.0.0/openvdb/openvdb/CMakeLists.txt openvdb/openvdb/openvdb/CMakeLists.txt
--- openvdb-8.0.0/openvdb/openvdb/CMakeLists.txt 2020-12-24 10:13:14 -0700
+++ openvdb/openvdb/openvdb/CMakeLists.txt 2021-02-05 11:18:33 -0700
-@@ -107,7 +107,9 @@
- # http://boost.2283326.n4.nabble.com/CMake-config-scripts-broken-in-1-70-td4708957.html
- # https://github.com/boostorg/boost_install/commit/160c7cb2b2c720e74463865ef0454d4c4cd9ae7c
- set(BUILD_SHARED_LIBS ON)
-- set(Boost_USE_STATIC_LIBS OFF)
-+ if(NOT WIN32) # blender links boost statically on windows
-+ set(Boost_USE_STATIC_LIBS OFF)
-+ endif()
- endif()
-
- find_package(Boost ${MINIMUM_BOOST_VERSION} REQUIRED COMPONENTS iostreams system)
@@ -146,6 +148,7 @@
Boost::disable_autolinking # add -DBOOST_ALL_NO_LIB
)
@@ -99,321 +75,18 @@ diff -Naur openvdb-8.0.0/openvdb/openvdb/version.rc.in openvdb/openvdb/openvdb/v
+
+ END
+END
-diff --git a/nanovdb/nanovdb/NanoVDB.h b/nanovdb/nanovdb/NanoVDB.h
-index cc2e54b77..703d2eabc 100644
---- a/nanovdb/nanovdb/NanoVDB.h
-+++ b/nanovdb/nanovdb/NanoVDB.h
-@@ -161,8 +161,8 @@ typedef unsigned long long uint64_t;
-
- #endif // __CUDACC_RTC__
-
--#ifdef __CUDACC__
--// Only define __hostdev__ when using NVIDIA CUDA compiler
-+#if defined(__CUDACC__) || defined(__HIP__)
-+// Only define __hostdev__ when using NVIDIA CUDA or HIP compiler
- #define __hostdev__ __host__ __device__
- #else
- #define __hostdev__
-@@ -611,7 +611,7 @@ struct Delta<double>
- /// Maximum floating-point values
- template<typename T>
- struct Maximum;
--#ifdef __CUDA_ARCH__
-+#if defined(__CUDA_ARCH__) || defined(__HIP__)
- template<>
- struct Maximum<int>
- {
-@@ -1176,10 +1176,10 @@ using Vec3f = Vec3<float>;
- using Vec3i = Vec3<int>;
-
- /// @brief Return a single precision floating-point vector of this coordinate
--Vec3f Coord::asVec3s() const { return Vec3f(float(mVec[0]), float(mVec[1]), float(mVec[2])); }
-+__hostdev__ inline Vec3f Coord::asVec3s() const { return Vec3f(float(mVec[0]), float(mVec[1]), float(mVec[2])); }
-
- /// @brief Return a double precision floating-point vector of this coordinate
--Vec3d Coord::asVec3d() const { return Vec3d(double(mVec[0]), double(mVec[1]), double(mVec[2])); }
-+__hostdev__ inline Vec3d Coord::asVec3d() const { return Vec3d(double(mVec[0]), double(mVec[1]), double(mVec[2])); }
-
- // ----------------------------> Vec4 <--------------------------------------
-
-@@ -2042,7 +2042,7 @@ struct Map
- }; // Map
-
- template<typename Mat4T>
--void Map::set(const Mat4T& mat, const Mat4T& invMat, double taper)
-+__hostdev__ void Map::set(const Mat4T& mat, const Mat4T& invMat, double taper)
- {
- float * mf = mMatF, *vf = mVecF;
- float* mif = mInvMatF;
-@@ -2486,7 +2486,7 @@ class Grid : private GridData
- }; // Class Grid
-
- template<typename TreeT>
--int Grid<TreeT>::findBlindDataForSemantic(GridBlindDataSemantic semantic) const
-+__hostdev__ int Grid<TreeT>::findBlindDataForSemantic(GridBlindDataSemantic semantic) const
- {
- for (uint32_t i = 0, n = this->blindDataCount(); i < n; ++i)
- if (this->blindMetaData(i).mSemantic == semantic)
-@@ -2671,7 +2671,7 @@ class Tree : private TreeData<RootT::LEVEL>
- }; // Tree class
-
- template<typename RootT>
--void Tree<RootT>::extrema(ValueType& min, ValueType& max) const
-+__hostdev__ void Tree<RootT>::extrema(ValueType& min, ValueType& max) const
- {
- min = this->root().minimum();
- max = this->root().maximum();
-@@ -3880,7 +3880,7 @@ class LeafNode : private LeafData<BuildT, CoordT, MaskT, Log2Dim>
- }; // LeafNode class
-
- template<typename ValueT, typename CoordT, template<uint32_t> class MaskT, uint32_t LOG2DIM>
--inline void LeafNode<ValueT, CoordT, MaskT, LOG2DIM>::updateBBox()
-+__hostdev__ inline void LeafNode<ValueT, CoordT, MaskT, LOG2DIM>::updateBBox()
- {
- static_assert(LOG2DIM == 3, "LeafNode::updateBBox: only supports LOGDIM = 3!");
- if (!this->isActive()) return;
-diff --git a/nanovdb/nanovdb/util/SampleFromVoxels.h b/nanovdb/nanovdb/util/SampleFromVoxels.h
-index 852123dac..e779d66cf 100644
---- a/nanovdb/nanovdb/util/SampleFromVoxels.h
-+++ b/nanovdb/nanovdb/util/SampleFromVoxels.h
-@@ -22,7 +22,7 @@
- #define NANOVDB_SAMPLE_FROM_VOXELS_H_HAS_BEEN_INCLUDED
-
- // Only define __hostdev__ when compiling as NVIDIA CUDA
--#ifdef __CUDACC__
-+#if defined(__CUDACC__) || defined(__HIP__)
- #define __hostdev__ __host__ __device__
- #else
- #include <cmath> // for floor
-@@ -136,7 +136,7 @@ class SampleFromVoxels<TreeOrAccT, 0, false>
-
- template<typename TreeOrAccT>
- template<typename Vec3T>
--typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, true>::operator()(const Vec3T& xyz) const
-+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, true>::operator()(const Vec3T& xyz) const
- {
- const CoordT ijk = Round<CoordT>(xyz);
- if (ijk != mPos) {
-@@ -147,7 +147,7 @@ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, true>::operator()
- }
-
- template<typename TreeOrAccT>
--typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, true>::operator()(const CoordT& ijk) const
-+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, true>::operator()(const CoordT& ijk) const
- {
- if (ijk != mPos) {
- mPos = ijk;
-@@ -158,7 +158,7 @@ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, true>::operator()
-
- template<typename TreeOrAccT>
- template<typename Vec3T>
--typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, false>::operator()(const Vec3T& xyz) const
-+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, false>::operator()(const Vec3T& xyz) const
- {
- return mAcc.getValue(Round<CoordT>(xyz));
- }
-@@ -195,7 +195,7 @@ class TrilinearSampler
- }; // TrilinearSamplerBase
-
- template<typename TreeOrAccT>
--void TrilinearSampler<TreeOrAccT>::stencil(CoordT& ijk, ValueT (&v)[2][2][2]) const
-+__hostdev__ void TrilinearSampler<TreeOrAccT>::stencil(CoordT& ijk, ValueT (&v)[2][2][2]) const
- {
- v[0][0][0] = mAcc.getValue(ijk); // i, j, k
-
-@@ -224,7 +224,7 @@ void TrilinearSampler<TreeOrAccT>::stencil(CoordT& ijk, ValueT (&v)[2][2][2]) co
-
- template<typename TreeOrAccT>
- template<typename RealT, template<typename...> class Vec3T>
--typename TreeOrAccT::ValueType TrilinearSampler<TreeOrAccT>::sample(const Vec3T<RealT> &uvw, const ValueT (&v)[2][2][2])
-+__hostdev__ typename TreeOrAccT::ValueType TrilinearSampler<TreeOrAccT>::sample(const Vec3T<RealT> &uvw, const ValueT (&v)[2][2][2])
- {
- #if 0
- auto lerp = [](ValueT a, ValueT b, ValueT w){ return fma(w, b-a, a); };// = w*(b-a) + a
-@@ -239,7 +239,7 @@ typename TreeOrAccT::ValueType TrilinearSampler<TreeOrAccT>::sample(const Vec3T<
-
- template<typename TreeOrAccT>
- template<typename RealT, template<typename...> class Vec3T>
--Vec3T<typename TreeOrAccT::ValueType> TrilinearSampler<TreeOrAccT>::gradient(const Vec3T<RealT> &uvw, const ValueT (&v)[2][2][2])
-+__hostdev__ Vec3T<typename TreeOrAccT::ValueType> TrilinearSampler<TreeOrAccT>::gradient(const Vec3T<RealT> &uvw, const ValueT (&v)[2][2][2])
- {
- static_assert(is_floating_point<ValueT>::value, "TrilinearSampler::gradient requires a floating-point type");
- #if 0
-@@ -270,7 +270,7 @@ Vec3T<typename TreeOrAccT::ValueType> TrilinearSampler<TreeOrAccT>::gradient(con
- }
-
- template<typename TreeOrAccT>
--bool TrilinearSampler<TreeOrAccT>::zeroCrossing(const ValueT (&v)[2][2][2])
-+__hostdev__ bool TrilinearSampler<TreeOrAccT>::zeroCrossing(const ValueT (&v)[2][2][2])
- {
- static_assert(is_floating_point<ValueT>::value, "TrilinearSampler::zeroCrossing requires a floating-point type");
- const bool less = v[0][0][0] < ValueT(0);
-@@ -363,21 +363,21 @@ class SampleFromVoxels<TreeOrAccT, 1, true> : public TrilinearSampler<TreeOrAccT
-
- template<typename TreeOrAccT>
- template<typename RealT, template<typename...> class Vec3T>
--typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, true>::operator()(Vec3T<RealT> xyz) const
-+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, true>::operator()(Vec3T<RealT> xyz) const
- {
- this->cache(xyz);
- return BaseT::sample(xyz, mVal);
- }
-
- template<typename TreeOrAccT>
--typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, true>::operator()(const CoordT &ijk) const
-+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, true>::operator()(const CoordT &ijk) const
- {
- return ijk == mPos ? mVal[0][0][0] : BaseT::mAcc.getValue(ijk);
- }
-
- template<typename TreeOrAccT>
- template<typename RealT, template<typename...> class Vec3T>
--Vec3T<typename TreeOrAccT::ValueType> SampleFromVoxels<TreeOrAccT, 1, true>::gradient(Vec3T<RealT> xyz) const
-+__hostdev__ Vec3T<typename TreeOrAccT::ValueType> SampleFromVoxels<TreeOrAccT, 1, true>::gradient(Vec3T<RealT> xyz) const
- {
- this->cache(xyz);
- return BaseT::gradient(xyz, mVal);
-@@ -393,7 +393,7 @@ __hostdev__ bool SampleFromVoxels<TreeOrAccT, 1, true>::zeroCrossing(Vec3T<RealT
-
- template<typename TreeOrAccT>
- template<typename RealT, template<typename...> class Vec3T>
--void SampleFromVoxels<TreeOrAccT, 1, true>::cache(Vec3T<RealT>& xyz) const
-+__hostdev__ void SampleFromVoxels<TreeOrAccT, 1, true>::cache(Vec3T<RealT>& xyz) const
- {
- CoordT ijk = Floor<CoordT>(xyz);
- if (ijk != mPos) {
-@@ -406,7 +406,7 @@ void SampleFromVoxels<TreeOrAccT, 1, true>::cache(Vec3T<RealT>& xyz) const
-
- template<typename TreeOrAccT>
- template<typename RealT, template<typename...> class Vec3T>
--typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, false>::operator()(Vec3T<RealT> xyz) const
-+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, false>::operator()(Vec3T<RealT> xyz) const
- {
- ValueT val[2][2][2];
- CoordT ijk = Floor<CoordT>(xyz);
-@@ -418,7 +418,7 @@ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, false>::operator(
-
- template<typename TreeOrAccT>
- template<typename RealT, template<typename...> class Vec3T>
--typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, false>::operator()(Vec3T<RealT> xyz) const
-+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, false>::operator()(Vec3T<RealT> xyz) const
- {
- auto lerp = [](ValueT a, ValueT b, RealT w) { return a + ValueT(w) * (b - a); };
-
-@@ -463,7 +463,7 @@ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, false>::operator(
-
- template<typename TreeOrAccT>
- template<typename RealT, template<typename...> class Vec3T>
--inline Vec3T<typename TreeOrAccT::ValueType> SampleFromVoxels<TreeOrAccT, 1, false>::gradient(Vec3T<RealT> xyz) const
-+__hostdev__ inline Vec3T<typename TreeOrAccT::ValueType> SampleFromVoxels<TreeOrAccT, 1, false>::gradient(Vec3T<RealT> xyz) const
- {
- ValueT val[2][2][2];
- CoordT ijk = Floor<CoordT>(xyz);
-@@ -473,7 +473,7 @@ inline Vec3T<typename TreeOrAccT::ValueType> SampleFromVoxels<TreeOrAccT, 1, fal
-
- template<typename TreeOrAccT>
- template<typename RealT, template<typename...> class Vec3T>
--bool SampleFromVoxels<TreeOrAccT, 1, false>::zeroCrossing(Vec3T<RealT> xyz) const
-+__hostdev__ bool SampleFromVoxels<TreeOrAccT, 1, false>::zeroCrossing(Vec3T<RealT> xyz) const
- {
- ValueT val[2][2][2];
- CoordT ijk = Floor<CoordT>(xyz);
-@@ -510,7 +510,7 @@ class TriquadraticSampler
- }; // TriquadraticSamplerBase
-
- template<typename TreeOrAccT>
--void TriquadraticSampler<TreeOrAccT>::stencil(const CoordT &ijk, ValueT (&v)[3][3][3]) const
-+__hostdev__ void TriquadraticSampler<TreeOrAccT>::stencil(const CoordT &ijk, ValueT (&v)[3][3][3]) const
- {
- CoordT p(ijk[0] - 1, 0, 0);
- for (int dx = 0; dx < 3; ++dx, ++p[0]) {
-@@ -526,7 +526,7 @@ void TriquadraticSampler<TreeOrAccT>::stencil(const CoordT &ijk, ValueT (&v)[3][
-
- template<typename TreeOrAccT>
- template<typename RealT, template<typename...> class Vec3T>
--typename TreeOrAccT::ValueType TriquadraticSampler<TreeOrAccT>::sample(const Vec3T<RealT> &uvw, const ValueT (&v)[3][3][3])
-+__hostdev__ typename TreeOrAccT::ValueType TriquadraticSampler<TreeOrAccT>::sample(const Vec3T<RealT> &uvw, const ValueT (&v)[3][3][3])
- {
- auto kernel = [](const ValueT* value, double weight)->ValueT {
- return weight * (weight * (0.5f * (value[0] + value[2]) - value[1]) +
-@@ -545,7 +545,7 @@ typename TreeOrAccT::ValueType TriquadraticSampler<TreeOrAccT>::sample(const Vec
- }
-
- template<typename TreeOrAccT>
--bool TriquadraticSampler<TreeOrAccT>::zeroCrossing(const ValueT (&v)[3][3][3])
-+__hostdev__ bool TriquadraticSampler<TreeOrAccT>::zeroCrossing(const ValueT (&v)[3][3][3])
- {
- static_assert(is_floating_point<ValueT>::value, "TrilinearSampler::zeroCrossing requires a floating-point type");
- const bool less = v[0][0][0] < ValueT(0);
-@@ -624,14 +624,14 @@ class SampleFromVoxels<TreeOrAccT, 2, true> : public TriquadraticSampler<TreeOrA
-
- template<typename TreeOrAccT>
- template<typename RealT, template<typename...> class Vec3T>
--typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, true>::operator()(Vec3T<RealT> xyz) const
-+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, true>::operator()(Vec3T<RealT> xyz) const
- {
- this->cache(xyz);
- return BaseT::sample(xyz, mVal);
- }
-
- template<typename TreeOrAccT>
--typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, true>::operator()(const CoordT &ijk) const
-+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, true>::operator()(const CoordT &ijk) const
- {
- return ijk == mPos ? mVal[1][1][1] : BaseT::mAcc.getValue(ijk);
- }
-@@ -646,7 +646,7 @@ __hostdev__ bool SampleFromVoxels<TreeOrAccT, 2, true>::zeroCrossing(Vec3T<RealT
-
- template<typename TreeOrAccT>
- template<typename RealT, template<typename...> class Vec3T>
--void SampleFromVoxels<TreeOrAccT, 2, true>::cache(Vec3T<RealT>& xyz) const
-+__hostdev__ void SampleFromVoxels<TreeOrAccT, 2, true>::cache(Vec3T<RealT>& xyz) const
- {
- CoordT ijk = Floor<CoordT>(xyz);
- if (ijk != mPos) {
-@@ -657,7 +657,7 @@ void SampleFromVoxels<TreeOrAccT, 2, true>::cache(Vec3T<RealT>& xyz) const
-
- template<typename TreeOrAccT>
- template<typename RealT, template<typename...> class Vec3T>
--typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, false>::operator()(Vec3T<RealT> xyz) const
-+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, false>::operator()(Vec3T<RealT> xyz) const
- {
- ValueT val[3][3][3];
- CoordT ijk = Floor<CoordT>(xyz);
-@@ -667,7 +667,7 @@ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, false>::operator(
-
- template<typename TreeOrAccT>
- template<typename RealT, template<typename...> class Vec3T>
--bool SampleFromVoxels<TreeOrAccT, 2, false>::zeroCrossing(Vec3T<RealT> xyz) const
-+__hostdev__ bool SampleFromVoxels<TreeOrAccT, 2, false>::zeroCrossing(Vec3T<RealT> xyz) const
- {
- ValueT val[3][3][3];
- CoordT ijk = Floor<CoordT>(xyz);
-@@ -710,7 +710,7 @@ class TricubicSampler
- }; // TricubicSampler
-
- template<typename TreeOrAccT>
--void TricubicSampler<TreeOrAccT>::stencil(const CoordT& ijk, ValueT (&C)[64]) const
-+__hostdev__ void TricubicSampler<TreeOrAccT>::stencil(const CoordT& ijk, ValueT (&C)[64]) const
- {
- auto fetch = [&](int i, int j, int k) -> ValueT& { return C[((i + 1) << 4) + ((j + 1) << 2) + k + 1]; };
-
-@@ -929,7 +929,7 @@ class SampleFromVoxels<TreeOrAccT, 3, true> : public TricubicSampler<TreeOrAccT>
-
- template<typename TreeOrAccT>
- template<typename RealT, template<typename...> class Vec3T>
--typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 3, true>::operator()(Vec3T<RealT> xyz) const
-+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 3, true>::operator()(Vec3T<RealT> xyz) const
- {
- this->cache(xyz);
- return BaseT::sample(xyz, mC);
-@@ -937,7 +937,7 @@ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 3, true>::operator()
-
- template<typename TreeOrAccT>
- template<typename RealT, template<typename...> class Vec3T>
--void SampleFromVoxels<TreeOrAccT, 3, true>::cache(Vec3T<RealT>& xyz) const
-+__hostdev__ void SampleFromVoxels<TreeOrAccT, 3, true>::cache(Vec3T<RealT>& xyz) const
- {
- CoordT ijk = Floor<CoordT>(xyz);
- if (ijk != mPos) {
-
+diff -Naur orig/openvdb/openvdb/tree/ValueAccessor.h openvdb/openvdb/openvdb/tree/ValueAccessor.h
+--- orig/openvdb/openvdb/tree/ValueAccessor.h 2022-11-02 13:58:26 -0600
++++ openvdb/openvdb/openvdb/tree/ValueAccessor.h 2022-11-02 18:55:09 -0600
+@@ -872,7 +872,10 @@
+ using LeafNodeType = typename NodeType::LeafNodeType;
+ using CoordLimits = std::numeric_limits<Int32>;
+
+- static_assert(std::is_same<NodeType, LeafNodeType>::value);
++ // Blender: Technically not an issue in OpenVDB, but USD 21.11 still builds
++ // as C++14 which does not support terse asserts yet. Add a message to
++ // explicitly select the C++14 supported static assert.
++ static_assert(std::is_same<NodeType, LeafNodeType>::value, "cache item node type is not leaf node type");
+
+ CacheItem(TreeCacheT& parent)
+ : mParent(&parent)
diff --git a/build_files/build_environment/patches/osl.diff b/build_files/build_environment/patches/osl.diff
index 3f4a485b037..8578a1b782b 100644
--- a/build_files/build_environment/patches/osl.diff
+++ b/build_files/build_environment/patches/osl.diff
@@ -1,7 +1,8 @@
-diff -Naur OpenShadingLanguage-1.12.6.2/CMakeLists.txt external_osl/CMakeLists.txt
---- OpenShadingLanguage-1.12.6.2/CMakeLists.txt 2022-09-30 17:43:53 -0600
-+++ external_osl/CMakeLists.txt 2022-10-15 14:49:26 -0600
-@@ -101,6 +101,11 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index d527232..5ad6eaa 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -99,6 +99,11 @@ set (OSL_PTX_INSTALL_DIR "${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT_NAME}/ptx"
CACHE STRING "Directory where OptiX PTX files will be installed")
set (CMAKE_DEBUG_POSTFIX "" CACHE STRING "Library naming postfix for Debug builds (e.g., '_debug')")
@@ -13,10 +14,11 @@ diff -Naur OpenShadingLanguage-1.12.6.2/CMakeLists.txt external_osl/CMakeLists.t
set (OSL_NO_DEFAULT_TEXTURESYSTEM OFF CACHE BOOL "Do not use create a raw OIIO::TextureSystem")
if (OSL_NO_DEFAULT_TEXTURESYSTEM)
-diff -Naur OpenShadingLanguage-1.12.6.2/src/cmake/externalpackages.cmake external_osl/src/cmake/externalpackages.cmake
---- OpenShadingLanguage-1.12.6.2/src/cmake/externalpackages.cmake 2022-09-30 17:43:53 -0600
-+++ external_osl/src/cmake/externalpackages.cmake 2022-10-15 14:49:26 -0600
-@@ -77,6 +77,7 @@
+diff --git a/src/cmake/externalpackages.cmake b/src/cmake/externalpackages.cmake
+index a7e098b..dad11d0 100644
+--- a/src/cmake/externalpackages.cmake
++++ b/src/cmake/externalpackages.cmake
+@@ -77,6 +77,7 @@ link_directories ("${Boost_LIBRARY_DIRS}")
checked_find_package (ZLIB REQUIRED) # Needed by several packages
@@ -24,30 +26,10 @@ diff -Naur OpenShadingLanguage-1.12.6.2/src/cmake/externalpackages.cmake externa
# IlmBase & OpenEXR
checked_find_package (OpenEXR REQUIRED
-diff -Naur OpenShadingLanguage-1.12.6.2/src/include/OSL/llvm_util.h external_osl/src/include/OSL/llvm_util.h
---- OpenShadingLanguage-1.12.6.2/src/include/OSL/llvm_util.h 2022-09-30 17:43:53 -0600
-+++ external_osl/src/include/OSL/llvm_util.h 2022-10-15 15:37:24 -0600
-@@ -9,6 +9,8 @@
- #include <unordered_set>
- #include <vector>
-
-+#define OSL_HAS_BLENDER_CLEANUP_FIX
-+
- #ifdef LLVM_NAMESPACE
- namespace llvm = LLVM_NAMESPACE;
- #endif
-@@ -455,7 +457,7 @@
- llvm::BasicBlock* masked_return_block() const;
-
- bool is_masking_required() const { return m_is_masking_required; }
--
-+ static void Cleanup ();
- struct ScopedMasking {
- ScopedMasking() {}
-
-diff -Naur OpenShadingLanguage-1.12.6.2/src/liboslcomp/oslcomp.cpp external_osl/src/liboslcomp/oslcomp.cpp
---- OpenShadingLanguage-1.12.6.2/src/liboslcomp/oslcomp.cpp 2022-09-30 17:43:53 -0600
-+++ external_osl/src/liboslcomp/oslcomp.cpp 2022-10-15 14:49:26 -0600
+diff --git a/src/liboslcomp/oslcomp.cpp b/src/liboslcomp/oslcomp.cpp
+index 8c2e77b..211b8a7 100644
+--- a/src/liboslcomp/oslcomp.cpp
++++ b/src/liboslcomp/oslcomp.cpp
@@ -21,6 +21,13 @@
#if !defined(__STDC_CONSTANT_MACROS)
# define __STDC_CONSTANT_MACROS 1
@@ -62,50 +44,34 @@ diff -Naur OpenShadingLanguage-1.12.6.2/src/liboslcomp/oslcomp.cpp external_osl/
#include <clang/Basic/TargetInfo.h>
#include <clang/Frontend/CompilerInstance.h>
#include <clang/Frontend/TextDiagnosticPrinter.h>
-diff -Naur OpenShadingLanguage-1.12.6.2/src/liboslexec/llvm_util.cpp external_osl/src/liboslexec/llvm_util.cpp
---- OpenShadingLanguage-1.12.6.2/src/liboslexec/llvm_util.cpp 2022-09-30 17:43:53 -0600
-+++ external_osl/src/liboslexec/llvm_util.cpp 2022-10-15 15:53:11 -0600
-@@ -116,8 +116,6 @@
- return { A.data(), size_t(A.size()) };
- }
-
--
--
- namespace pvt {
-
- typedef llvm::SectionMemoryManager LLVMMemoryManager;
-@@ -182,6 +180,13 @@
- ++jit_mem_hold_users;
- }
-
-+void
-+LLVM_Util::Cleanup()
-+{
-+ if (jitmm_hold)
-+ jitmm_hold->clear();
-+}
+diff --git a/src/liboslexec/llvm_instance.cpp b/src/liboslexec/llvm_instance.cpp
+index 8f52546..8c2d0c7 100644
+--- a/src/liboslexec/llvm_instance.cpp
++++ b/src/liboslexec/llvm_instance.cpp
+@@ -1363,6 +1363,10 @@ BackendLLVM::run()
+ #ifdef OSL_LLVM_NO_BITCODE
+ OSL_ASSERT(!use_rs_bitcode());
+ ll.module(ll.new_module("llvm_ops"));
++ if (use_optix()) {
++ ll.module()->setDataLayout("e-i64:64-i128:128-v16:16-v32:32-n16:32:64");
++ ll.module()->setTargetTriple("nvptx64-nvidia-cuda");
++ }
+ #else
+ if (!use_optix()) {
+ if (use_rs_bitcode()) {
+diff --git a/src/liboslexec/shadingsys.cpp b/src/liboslexec/shadingsys.cpp
+index 46e4529..8e86486 100644
+--- a/src/liboslexec/shadingsys.cpp
++++ b/src/liboslexec/shadingsys.cpp
+@@ -2121,6 +2121,11 @@ ShadingSystemImpl::getattribute(ShaderGroup* group, string_view name,
+ return true;
+ }
+
++ if (name == "groupdata_size" && type == TypeDesc::TypeInt) {
++ *(int*)val = (int)group->m_llvm_groupdata_size;
++ return true;
++ }
+
+ return false;
+ }
- LLVM_Util::ScopedJitMemoryUser::~ScopedJitMemoryUser()
- {
-diff --git a/src/include/OSL/mask.h b/src/include/OSL/mask.h
-index 24197af..b9275f6 100644
---- a/src/include/OSL/mask.h
-+++ b/src/include/OSL/mask.h
-@@ -4,7 +4,6 @@
-
- #pragma once
-
--#include <immintrin.h>
- #include <type_traits>
-
- #include <OSL/oslconfig.h>
-@@ -23,6 +22,8 @@ using std::countr_zero;
-
- #elif OSL_INTEL_CLASSIC_COMPILER_VERSION
-
-+#include <immintrin.h>
-+
- OSL_FORCEINLINE int popcount(uint32_t x) noexcept { return _mm_popcnt_u32(x);}
- OSL_FORCEINLINE int popcount(uint64_t x) noexcept { return _mm_popcnt_u64(x); }
- OSL_FORCEINLINE int countr_zero(uint32_t x) noexcept { return _bit_scan_forward(x); }
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..5b6434f1440
--- /dev/null
+++ b/build_files/build_environment/patches/python_windows.diff
@@ -0,0 +1,22 @@
+--- a/PCbuild/prepare_ssl.bat 2022-10-30 11:48:14 -0600
++++ b/PCbuild/prepare_ssl.bat 2022-10-30 11:53:16 -0600
+@@ -47,12 +47,13 @@
+ if "%PERL%" == "" where perl > "%TEMP%\perl.loc" 2> nul && set /P PERL= <"%TEMP%\perl.loc" & del "%TEMP%\perl.loc"
+ if "%PERL%" == "" (echo Cannot locate perl.exe on PATH or as PERL variable & exit /b 4)
+
+-%MSBUILD% "%PCBUILD%\openssl.vcxproj" /p:Configuration=Release /p:Platform=Win32
+-if errorlevel 1 exit /b
++REM Blender: we only need x64, ssl is kind of a long build, so just build what we need
++REM %MSBUILD% "%PCBUILD%\openssl.vcxproj" /p:Configuration=Release /p:Platform=Win32
++REMif errorlevel 1 exit /b
+ %MSBUILD% "%PCBUILD%\openssl.vcxproj" /p:Configuration=Release /p:Platform=x64
+ if errorlevel 1 exit /b
+-%MSBUILD% "%PCBUILD%\openssl.vcxproj" /p:Configuration=Release /p:Platform=ARM
+-if errorlevel 1 exit /b
+-%MSBUILD% "%PCBUILD%\openssl.vcxproj" /p:Configuration=Release /p:Platform=ARM64
+-if errorlevel 1 exit /b
++REM %MSBUILD% "%PCBUILD%\openssl.vcxproj" /p:Configuration=Release /p:Platform=ARM
++REM if errorlevel 1 exit /b
++REM %MSBUILD% "%PCBUILD%\openssl.vcxproj" /p:Configuration=Release /p:Platform=ARM64
++REM if errorlevel 1 exit /b
+
diff --git a/build_files/build_environment/patches/usd.diff b/build_files/build_environment/patches/usd.diff
index 3d0aa4498b7..39d34160d28 100644
--- a/build_files/build_environment/patches/usd.diff
+++ b/build_files/build_environment/patches/usd.diff
@@ -1,7 +1,7 @@
-diff -x .git -ur usd.orig/cmake/defaults/Packages.cmake external_usd/cmake/defaults/Packages.cmake
---- usd.orig/cmake/defaults/Packages.cmake 2019-10-24 22:39:53.000000000 +0200
-+++ external_usd/cmake/defaults/Packages.cmake 2019-11-28 13:00:33.185957483 +0100
-@@ -64,7 +64,7 @@
+diff -Naur orig/cmake/defaults/Packages.cmake external_usd/cmake/defaults/Packages.cmake
+--- orig/cmake/defaults/Packages.cmake 2022-10-27 12:56:33 -0600
++++ external_usd/cmake/defaults/Packages.cmake 2022-10-27 13:05:08 -0600
+@@ -129,7 +129,7 @@
endif()
# --TBB
@@ -10,10 +10,9 @@ diff -x .git -ur usd.orig/cmake/defaults/Packages.cmake external_usd/cmake/defau
add_definitions(${TBB_DEFINITIONS})
# --math
-
-diff -Naur usd_orig/cmake/defaults/msvcdefaults.cmake external_usd/cmake/defaults/msvcdefaults.cmake
---- usd_orig/cmake/defaults/msvcdefaults.cmake 2022-02-18 14:49:09 -0700
-+++ external_usd/cmake/defaults/msvcdefaults.cmake 2022-03-14 11:41:50 -0600
+diff -Naur orig/cmake/defaults/msvcdefaults.cmake external_usd/cmake/defaults/msvcdefaults.cmake
+--- orig/cmake/defaults/msvcdefaults.cmake 2022-10-27 12:56:33 -0600
++++ external_usd/cmake/defaults/msvcdefaults.cmake 2022-10-27 13:05:08 -0600
@@ -120,9 +120,6 @@
# for all translation units.
set(_PXR_CXX_FLAGS "${_PXR_CXX_FLAGS} /bigobj")
@@ -24,38 +23,10 @@ diff -Naur usd_orig/cmake/defaults/msvcdefaults.cmake external_usd/cmake/default
# Enable multiprocessor builds.
set(_PXR_CXX_FLAGS "${_PXR_CXX_FLAGS} /MP")
set(_PXR_CXX_FLAGS "${_PXR_CXX_FLAGS} /Gm-")
-
-diff --git a/pxr/base/work/singularTask.h b/pxr/base/work/singularTask.h
---- a/pxr/base/work/singularTask.h
-+++ b/pxr/base/work/singularTask.h
-@@ -120,7 +120,7 @@
- // case we go again to ensure the task can do whatever it
- // was awakened to do. Once we successfully take the count
- // to zero, we stop.
-- size_t old = count;
-+ std::size_t old = count;
- do { _fn(); } while (
- !count.compare_exchange_strong(old, 0));
- });
-
-diff --git a/pxr/usd/sdr/shaderMetadataHelpers.h b/pxr/usd/sdr/shaderMetadataHelpers.h
---- a/pxr/usd/sdr/shaderMetadataHelpers.h
-+++ b/pxr/usd/sdr/shaderMetadataHelpers.h
-@@ -32,6 +32,8 @@
- #include "pxr/base/tf/token.h"
- #include "pxr/usd/sdr/declare.h"
-
-+#include <limits>
-+
- PXR_NAMESPACE_OPEN_SCOPE
-
- /// \namespace ShaderMetadataHelpers
-
-diff --git a/pxr/base/arch/timing.h b/pxr/base/arch/timing.h
-index 517561f..fda5a1f 100644
---- a/pxr/base/arch/timing.h
-+++ b/pxr/base/arch/timing.h
-@@ -91,6 +91,10 @@ ArchGetTickTime()
+diff -Naur orig/pxr/base/arch/timing.h external_usd/pxr/base/arch/timing.h
+--- orig/pxr/base/arch/timing.h 2022-10-27 12:56:34 -0600
++++ external_usd/pxr/base/arch/timing.h 2022-10-27 13:05:08 -0600
+@@ -84,6 +84,10 @@
inline uint64_t
ArchGetStartTickTime()
{
@@ -66,7 +37,7 @@ index 517561f..fda5a1f 100644
uint64_t t;
#if defined (ARCH_OS_DARWIN)
return ArchGetTickTime();
-@@ -123,6 +127,7 @@ ArchGetStartTickTime()
+@@ -116,6 +120,7 @@
#error "Unsupported architecture."
#endif
return t;
@@ -74,7 +45,7 @@ index 517561f..fda5a1f 100644
}
/// Get a "stop" tick time for measuring an interval of time. See
-@@ -132,6 +137,10 @@ ArchGetStartTickTime()
+@@ -125,6 +130,10 @@
inline uint64_t
ArchGetStopTickTime()
{
@@ -85,7 +56,7 @@ index 517561f..fda5a1f 100644
uint64_t t;
#if defined (ARCH_OS_DARWIN)
return ArchGetTickTime();
-@@ -162,11 +171,11 @@ ArchGetStopTickTime()
+@@ -155,11 +164,11 @@
#error "Unsupported architecture."
#endif
return t;
@@ -100,3 +71,46 @@ index 517561f..fda5a1f 100644
/// A simple timer class for measuring an interval of time using the
/// ArchTickTimer facilities.
+diff -Naur orig/pxr/imaging/hioOpenVDB/CMakeLists.txt external_usd/pxr/imaging/hioOpenVDB/CMakeLists.txt
+--- orig/pxr/imaging/hioOpenVDB/CMakeLists.txt 2022-10-27 12:56:35 -0600
++++ external_usd/pxr/imaging/hioOpenVDB/CMakeLists.txt 2022-10-27 13:05:08 -0600
+@@ -20,6 +20,12 @@
+ LIST(APPEND __VDB_IMATH_LIBS ${OPENEXR_Half_LIBRARY})
+ endif()
+
++if (WIN32)
++ # OpenVDB uses constants from <cmath> that aren't available on
++ # Windows unless this is defined.
++ add_definitions(-D_USE_MATH_DEFINES)
++endif()
++
+ pxr_library(hioOpenVDB
+ LIBRARIES
+ ar
+diff -Naur orig/pxr/usdImaging/CMakeLists.txt external_usd/pxr/usdImaging/CMakeLists.txt
+--- orig/pxr/usdImaging/CMakeLists.txt 2022-10-27 12:56:37 -0600
++++ external_usd/pxr/usdImaging/CMakeLists.txt 2022-10-27 13:05:08 -0600
+@@ -7,7 +7,7 @@
+ usdVolImaging
+ usdAppUtils
+ usdviewq
+- bin
++# bin
+ plugin
+ )
+
+diff -Naur orig/cmake/macros/Private.cmake external_usd/cmake/macros/Private.cmake
+--- orig/cmake/macros/Private.cmake 2022-02-18 14:49:09 -0700
++++ external_usd/cmake/macros/Private.cmake 2022-08-05 10:42:03 -0600
+@@ -900,8 +900,10 @@
+ return()
+ endif()
+
+- if (WIN32 AND PXR_USE_DEBUG_PYTHON)
++ if (WIN32 AND PXR_USE_DEBUG_PYTHON AND NOT CMAKE_DEBUG_POSTFIX)
+ # On Windows when compiling with debug python the library must be named with _d.
++ # Blender: but this can be skipped if CMAKE_DEBUG_POSTFIX is set, it knows
++ # what it is doing and we don't want libraries ending in _d_d.pyd
+ set(LIBRARY_NAME "_${NAME}_d")
+ else()
+ set(LIBRARY_NAME "_${NAME}")
diff --git a/build_files/build_environment/windows/build_deps.cmd b/build_files/build_environment/windows/build_deps.cmd
index d3879f3d6ae..5f6cf4fc3ee 100644
--- a/build_files/build_environment/windows/build_deps.cmd
+++ b/build_files/build_environment/windows/build_deps.cmd
@@ -103,15 +103,19 @@ if %ERRORLEVEL% NEQ 0 (
)
set StatusFile=%BUILD_DIR%\%1_%2.log
-set path=%BUILD_DIR%\downloads\mingw\mingw64\msys\1.0\bin\;%BUILD_DIR%\downloads\nasm-2.12.01\;%path%
+set original_path=%path%
+set oiio_paths=%Staging%\%BuildDir%%ARCH%R\Release\openimageio\bin;%Staging%\%BuildDir%%ARCH%D\Debug\openimageio\bin
+set boost_paths=%Staging%\%BuildDir%%ARCH%R\Release\boost\lib;%Staging%\%BuildDir%%ARCH%D\Debug\boost\lib
+set openexr_paths=%Staging%\%BuildDir%%ARCH%R\Release\openexr\bin;%Staging%\%BuildDir%%ARCH%D\Debug\openexr\bin
+set imath_paths=%Staging%\%BuildDir%%ARCH%R\Release\imath\bin;%Staging%\%BuildDir%%ARCH%D\Debug\imath\bin
+set path=%BUILD_DIR%\downloads\mingw\mingw64\msys\1.0\bin\;%BUILD_DIR%\downloads\nasm-2.12.01\;%path%;%boost_paths%;%oiio_paths%;%openexr_paths%;%imath_paths%
mkdir %STAGING%\%BuildDir%%ARCH%R
cd %Staging%\%BuildDir%%ARCH%R
echo %DATE% %TIME% : Start > %StatusFile%
cmake -G "%CMAKE_BUILDER%" %CMAKE_BUILD_ARCH% -Thost=x64 %SOURCE_DIR% -DPACKAGE_DIR=%BUILD_DIR%/packages -DDOWNLOAD_DIR=%BUILD_DIR%/downloads -DBUILD_MODE=Release -DHARVEST_TARGET=%HARVEST_DIR%/%HARVESTROOT%%VSVER_SHORT%/
echo %DATE% %TIME% : Release Configuration done >> %StatusFile%
if "%dobuild%" == "1" (
- msbuild /m:1 "ll.vcxproj" /p:Configuration=Release /fl /flp:logfile=BlenderDeps_llvm.log;Verbosity=normal
- msbuild /m:1 "BlenderDependencies.sln" /p:Configuration=Release /fl /flp:logfile=BlenderDeps.log;Verbosity=minimal /verbosity:minimal
+ msbuild -maxcpucount:1 "BlenderDependencies.sln" /p:Configuration=Release /fl /flp:logfile=BlenderDeps.log;Verbosity=minimal /verbosity:minimal
echo %DATE% %TIME% : Release Build done >> %StatusFile%
cmake --build . --target Harvest_Release_Results > Harvest_Release.txt
)
@@ -123,8 +127,7 @@ cd %Staging%\%BuildDir%%ARCH%D
cmake -G "%CMAKE_BUILDER%" %CMAKE_BUILD_ARCH% -Thost=x64 %SOURCE_DIR% -DPACKAGE_DIR=%BUILD_DIR%/packages -DDOWNLOAD_DIR=%BUILD_DIR%/downloads -DCMAKE_BUILD_TYPE=Debug -DBUILD_MODE=Debug -DHARVEST_TARGET=%HARVEST_DIR%/%HARVESTROOT%%VSVER_SHORT%/ %CMAKE_DEBUG_OPTIONS%
echo %DATE% %TIME% : Debug Configuration done >> %StatusFile%
if "%dobuild%" == "1" (
- msbuild /m:1 "ll.vcxproj" /p:Configuration=Debug /fl /flp:logfile=BlenderDeps_llvm.log;;Verbosity=normal
- msbuild /m:1 "BlenderDependencies.sln" /p:Configuration=Debug /verbosity:n /fl /flp:logfile=BlenderDeps.log;;Verbosity=normal
+ msbuild -maxcpucount:1 "BlenderDependencies.sln" /p:Configuration=Debug /verbosity:n /fl /flp:logfile=BlenderDeps.log;;Verbosity=normal
echo %DATE% %TIME% : Debug Build done >> %StatusFile%
cmake --build . --target Harvest_Debug_Results> Harvest_Debug.txt
)
@@ -132,4 +135,5 @@ echo %DATE% %TIME% : Debug Harvest done >> %StatusFile%
cd %BUILD_DIR%
:exit
+set path=%original_path%
Echo .
diff --git a/build_files/buildbot/config/blender_linux.cmake b/build_files/buildbot/config/blender_linux.cmake
index bedeeb6a690..3f3695ed481 100644
--- a/build_files/buildbot/config/blender_linux.cmake
+++ b/build_files/buildbot/config/blender_linux.cmake
@@ -28,4 +28,4 @@ set(LIBDIR "${CMAKE_CURRENT_LIST_DIR}/../../../../lib/${LIBDIR_NAME}" CACHE STRI
# Platform specific configuration, to ensure static linking against everything.
# Additional linking libraries
-set(CMAKE_EXE_LINKER_FLAGS "-lrt -static-libstdc++ -no-pie" CACHE STRING "" FORCE)
+set(CMAKE_EXE_LINKER_FLAGS "-lrt -no-pie" CACHE STRING "" FORCE)
diff --git a/build_files/cmake/Modules/FindOpenColorIO.cmake b/build_files/cmake/Modules/FindOpenColorIO.cmake
index 8e152008ea7..01f808d947c 100644
--- a/build_files/cmake/Modules/FindOpenColorIO.cmake
+++ b/build_files/cmake/Modules/FindOpenColorIO.cmake
@@ -24,6 +24,7 @@ SET(_opencolorio_FIND_COMPONENTS
yaml-cpp
expat
pystring
+ minizip
)
SET(_opencolorio_SEARCH_DIRS
diff --git a/build_files/cmake/Modules/FindPythonLibsUnix.cmake b/build_files/cmake/Modules/FindPythonLibsUnix.cmake
index 0afe1299330..b222ed85a4f 100644
--- a/build_files/cmake/Modules/FindPythonLibsUnix.cmake
+++ b/build_files/cmake/Modules/FindPythonLibsUnix.cmake
@@ -13,6 +13,7 @@
#
# This module defines
# PYTHON_VERSION
+# PYTHON_VERSION_NO_DOTS
# PYTHON_INCLUDE_DIRS
# PYTHON_INCLUDE_CONFIG_DIRS
# PYTHON_LIBRARIES
@@ -64,11 +65,11 @@ IF(DEFINED PYTHON_LIBPATH)
SET(_IS_LIB_PATH_DEF ON)
ENDIF()
-STRING(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
+STRING(REPLACE "." "" PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
SET(_python_SEARCH_DIRS
${PYTHON_ROOT_DIR}
- "$ENV{HOME}/py${_PYTHON_VERSION_NO_DOTS}"
+ "$ENV{HOME}/py${PYTHON_VERSION_NO_DOTS}"
"/opt/lib/python-${PYTHON_VERSION}"
)
@@ -211,7 +212,6 @@ IF(PYTHONLIBSUNIX_FOUND)
)
ENDIF()
-UNSET(_PYTHON_VERSION_NO_DOTS)
UNSET(_PYTHON_ABI_FLAGS)
UNSET(_python_SEARCH_DIRS)
diff --git a/build_files/cmake/Modules/FindUSD.cmake b/build_files/cmake/Modules/FindUSD.cmake
index ba5a3d7c843..7b776560866 100644
--- a/build_files/cmake/Modules/FindUSD.cmake
+++ b/build_files/cmake/Modules/FindUSD.cmake
@@ -59,6 +59,9 @@ ELSE()
get_filename_component(USD_LIBRARY_DIR ${USD_LIBRARY} DIRECTORY)
SET(USD_INCLUDE_DIRS ${USD_INCLUDE_DIR})
set(USD_LIBRARIES ${USD_LIBRARY})
+ IF(EXISTS ${USD_INCLUDE_DIR}/pxr/base/tf/pyModule.h)
+ SET(USD_PYTHON_SUPPORT ON)
+ ENDIF()
ENDIF()
ENDIF()
diff --git a/build_files/cmake/Modules/GTestTesting.cmake b/build_files/cmake/Modules/GTestTesting.cmake
index 5ffd158361e..d6f5b2a5cd6 100644
--- a/build_files/cmake/Modules/GTestTesting.cmake
+++ b/build_files/cmake/Modules/GTestTesting.cmake
@@ -95,6 +95,9 @@ macro(BLENDER_SRC_GTEST_EX)
set_tests_properties(${TARGET_NAME} PROPERTIES
ENVIRONMENT LSAN_OPTIONS=exitcode=0:$ENV{LSAN_OPTIONS}
)
+ if(WIN32)
+ set_tests_properties(${TARGET_NAME} PROPERTIES ENVIRONMENT "PATH=${CMAKE_INSTALL_PREFIX_WITH_CONFIG}/blender.shared/;$ENV{PATH}")
+ endif()
endif()
if(WIN32)
set_target_properties(${TARGET_NAME} PROPERTIES VS_GLOBAL_VcpkgEnabled "false")
diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake
index 73883376060..2a82292e447 100644
--- a/build_files/cmake/macros.cmake
+++ b/build_files/cmake/macros.cmake
@@ -422,7 +422,9 @@ function(blender_add_test_suite)
--test-assets-dir "${CMAKE_SOURCE_DIR}/../lib/tests"
--test-release-dir "${_test_release_dir}"
)
-
+ if(WIN32)
+ set_tests_properties(${ARGS_SUITE_NAME} PROPERTIES ENVIRONMENT "PATH=${CMAKE_INSTALL_PREFIX_WITH_CONFIG}/blender.shared/;$ENV{PATH}")
+ endif()
unset(_test_release_dir)
endfunction()
@@ -1257,3 +1259,88 @@ endmacro()
macro(without_system_libs_end)
unset(CMAKE_IGNORE_PATH)
endmacro()
+
+# Utility to gather and install precompiled shared libraries.
+macro(add_bundled_libraries library_dir)
+ if(EXISTS ${LIBDIR})
+ set(_library_dir ${LIBDIR}/${library_dir})
+ if(WIN32)
+ file(GLOB _all_library_versions ${_library_dir}/*\.dll)
+ elseif(APPLE)
+ file(GLOB _all_library_versions ${_library_dir}/*\.dylib*)
+ else()
+ file(GLOB _all_library_versions ${_library_dir}/*\.so*)
+ endif()
+ 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()
+
+macro(windows_install_shared_manifest)
+ set(options OPTIONAL DEBUG RELEASE ALL)
+ set(oneValueArgs)
+ set(multiValueArgs FILES)
+ cmake_parse_arguments(WINDOWS_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
+ # If none of the options are set assume ALL.
+ unset(WINDOWS_CONFIGURATIONS)
+ if(NOT WINDOWS_INSTALL_ALL AND
+ NOT WINDOWS_INSTALL_DEBUG AND
+ NOT WINDOWS_INSTALL_RELEASE)
+ set(WINDOWS_INSTALL_ALL TRUE)
+ endif()
+ # If all is set, turn both DEBUG and RELEASE on.
+ if(WINDOWS_INSTALL_ALL)
+ set(WINDOWS_INSTALL_DEBUG TRUE)
+ set(WINDOWS_INSTALL_RELEASE TRUE)
+ endif()
+ if(WINDOWS_INSTALL_DEBUG)
+ set(WINDOWS_CONFIGURATIONS "${WINDOWS_CONFIGURATIONS};Debug")
+ list(APPEND WINDOWS_SHARED_MANIFEST_DEBUG ${WINDOWS_INSTALL_FILES})
+ endif()
+ if(WINDOWS_INSTALL_RELEASE)
+ list(APPEND WINDOWS_SHARED_MANIFEST_RELEASE ${WINDOWS_INSTALL_FILES})
+ set(WINDOWS_CONFIGURATIONS "${WINDOWS_CONFIGURATIONS};Release;RelWithDebInfo;MinSizeRel")
+ endif()
+ install(FILES ${WINDOWS_INSTALL_FILES}
+ CONFIGURATIONS ${WINDOWS_CONFIGURATIONS}
+ DESTINATION "./blender.shared"
+ )
+endmacro()
+
+macro(windows_generate_manifest)
+ set(options)
+ set(oneValueArgs OUTPUT NAME)
+ set(multiValueArgs FILES)
+ cmake_parse_arguments(WINDOWS_MANIFEST "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
+ set(MANIFEST_LIBS "")
+ foreach(lib ${WINDOWS_MANIFEST_FILES})
+ get_filename_component(filename ${lib} NAME)
+ set(MANIFEST_LIBS "${MANIFEST_LIBS} <file name=\"${filename}\"/>\n")
+ endforeach()
+ configure_file(${CMAKE_SOURCE_DIR}/release/windows/manifest/blender.manifest.in ${WINDOWS_MANIFEST_OUTPUT} @ONLY)
+endmacro()
+
+macro(windows_generate_shared_manifest)
+ windows_generate_manifest(
+ FILES "${WINDOWS_SHARED_MANIFEST_DEBUG}"
+ OUTPUT "${CMAKE_BINARY_DIR}/Debug/blender.shared.manifest"
+ NAME "blender.shared"
+ )
+ windows_generate_manifest(
+ FILES "${WINDOWS_SHARED_MANIFEST_RELEASE}"
+ OUTPUT "${CMAKE_BINARY_DIR}/Release/blender.shared.manifest"
+ NAME "blender.shared"
+ )
+ install(
+ FILES ${CMAKE_BINARY_DIR}/Release/blender.shared.manifest
+ DESTINATION "./blender.shared"
+ CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel
+ )
+ install(
+ FILES ${CMAKE_BINARY_DIR}/Debug/blender.shared.manifest
+ DESTINATION "./blender.shared"
+ CONFIGURATIONS Debug
+ )
+endmacro()
diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake/platform/platform_apple.cmake
index c5fe3c908de..07d7036f809 100644
--- a/build_files/cmake/platform/platform_apple.cmake
+++ b/build_files/cmake/platform/platform_apple.cmake
@@ -21,18 +21,6 @@ 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.
@@ -98,10 +86,12 @@ endif()
if(WITH_USD)
find_package(USD REQUIRED)
+ add_bundled_libraries(usd/lib)
endif()
if(WITH_OPENSUBDIV)
find_package(OpenSubdiv)
+ add_bundled_libraries(opensubdiv/lib)
endif()
if(WITH_CODEC_SNDFILE)
@@ -140,6 +130,8 @@ list(APPEND FREETYPE_LIBRARIES
if(WITH_IMAGE_OPENEXR)
find_package(OpenEXR)
+ add_bundled_libraries(openexr/lib)
+ add_bundled_libraries(imath/lib)
endif()
if(WITH_CODEC_FFMPEG)
@@ -238,12 +230,17 @@ if(WITH_BOOST)
if(WITH_OPENVDB)
list(APPEND _boost_FIND_COMPONENTS iostreams)
endif()
+ if(WITH_USD AND USD_PYTHON_SUPPORT)
+ list(APPEND _boost_FIND_COMPONENTS python${PYTHON_VERSION_NO_DOTS})
+ endif()
find_package(Boost COMPONENTS ${_boost_FIND_COMPONENTS})
set(BOOST_LIBRARIES ${Boost_LIBRARIES})
set(BOOST_INCLUDE_DIR ${Boost_INCLUDE_DIRS})
set(BOOST_DEFINITIONS)
+ add_bundled_libraries(boost/lib)
+
mark_as_advanced(Boost_LIBRARIES)
mark_as_advanced(Boost_INCLUDE_DIRS)
unset(_boost_FIND_COMPONENTS)
@@ -269,6 +266,7 @@ if(WITH_OPENIMAGEIO)
)
set(OPENIMAGEIO_DEFINITIONS "-DOIIO_STATIC_BUILD")
set(OPENIMAGEIO_IDIFF "${LIBDIR}/openimageio/bin/idiff")
+ add_bundled_libraries(openimageio/lib)
endif()
if(WITH_OPENCOLORIO)
@@ -278,9 +276,13 @@ endif()
if(WITH_OPENVDB)
find_package(OpenVDB)
find_library(BLOSC_LIBRARIES NAMES blosc HINTS ${LIBDIR}/openvdb/lib)
- print_found_status("Blosc" "${BLOSC_LIBRARIES}")
- list(APPEND OPENVDB_LIBRARIES ${BLOSC_LIBRARIES})
+ if(BLOSC_LIBRARIES)
+ list(APPEND OPENVDB_LIBRARIES ${BLOSC_LIBRARIES})
+ else()
+ unset(BLOSC_LIBRARIES CACHE)
+ endif()
set(OPENVDB_DEFINITIONS)
+ add_bundled_libraries(openvdb/lib)
endif()
if(WITH_NANOVDB)
@@ -299,7 +301,7 @@ if(WITH_LLVM)
if(WITH_CLANG)
find_package(Clang)
if(NOT CLANG_FOUND)
- message(FATAL_ERROR "Clang not found.")
+ message(FATAL_ERROR "Clang not found.")
endif()
endif()
@@ -329,6 +331,7 @@ endif()
if(WITH_TBB)
find_package(TBB REQUIRED)
+ add_bundled_libraries(tbb/lib)
endif()
if(WITH_POTRACE)
@@ -347,7 +350,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)
+ add_bundled_libraries(openmp/lib)
endif()
endif()
@@ -463,6 +466,12 @@ if(PLATFORM_BUNDLED_LIBRARIES)
# different.
set(CMAKE_SKIP_BUILD_RPATH FALSE)
list(APPEND CMAKE_BUILD_RPATH ${PLATFORM_BUNDLED_LIBRARY_DIRS})
+
+ # Environment variables to run precompiled executables that needed libraries.
+ list(JOIN PLATFORM_BUNDLED_LIBRARY_DIRS ":" _library_paths)
+ set(PLATFORM_ENV_BUILD "DYLD_LIBRARY_PATH=\"${_library_paths};${DYLD_LIBRARY_PATH}\"")
+ set(PLATFORM_ENV_INSTALL "DYLD_LIBRARY_PATH=${CMAKE_INSTALL_PREFIX_WITH_CONFIG}Blender.app/Contents/Resources/lib/;$DYLD_LIBRARY_PATH")
+ unset(_library_paths)
endif()
# Same as `CFBundleIdentifier` in Info.plist.
diff --git a/build_files/cmake/platform/platform_old_libs_update.cmake b/build_files/cmake/platform/platform_old_libs_update.cmake
index f0ca930bb39..77dc61c77b4 100644
--- a/build_files/cmake/platform/platform_old_libs_update.cmake
+++ b/build_files/cmake/platform/platform_old_libs_update.cmake
@@ -44,3 +44,19 @@ if(UNIX AND DEFINED NANOVDB_INCLUDE_DIR)
unset_cache_variables("^NANOVDB")
endif()
endif()
+
+# Detect update to 3.4 libs with shared libraries.
+if(UNIX AND
+ DEFINED TBB_LIBRARY AND
+ TBB_LIBRARY MATCHES "libtbb.a$" AND
+ EXISTS ${LIBDIR}/usd/include/pxr/base/tf/pyModule.h)
+ message(STATUS "Auto updating CMake configuration for Blender 3.4 libraries")
+ unset_cache_variables("^BLOSC")
+ unset_cache_variables("^BOOST")
+ unset_cache_variables("^OPENEXR")
+ unset_cache_variables("^OPENIMAGEIO")
+ unset_cache_variables("^OPENSUBDIV")
+ unset_cache_variables("^OPENVDB")
+ unset_cache_variables("^TBB")
+ unset_cache_variables("^USD")
+endif()
diff --git a/build_files/cmake/platform/platform_unix.cmake b/build_files/cmake/platform/platform_unix.cmake
index f1ce3221440..49b7f701de0 100644
--- a/build_files/cmake/platform/platform_unix.cmake
+++ b/build_files/cmake/platform/platform_unix.cmake
@@ -70,10 +70,6 @@ if(EXISTS ${LIBDIR})
set(CLANG_ROOT_DIR ${LIBDIR}/llvm)
endif()
-if(WITH_STATIC_LIBS)
- string(APPEND CMAKE_EXE_LINKER_FLAGS " -static-libstdc++")
-endif()
-
# Wrapper to prefer static libraries
macro(find_package_wrapper)
if(WITH_STATIC_LIBS)
@@ -83,15 +79,6 @@ 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
#
@@ -175,6 +162,10 @@ endif()
if(WITH_IMAGE_OPENEXR)
find_package_wrapper(OpenEXR) # our own module
set_and_warn_library_found("OpenEXR" OPENEXR_FOUND WITH_IMAGE_OPENEXR)
+ if(WITH_IMAGE_OPENEXR)
+ add_bundled_libraries(openexr/lib)
+ add_bundled_libraries(imath/lib)
+ endif()
endif()
if(WITH_IMAGE_OPENJPEG)
@@ -214,7 +205,7 @@ if(WITH_SDL)
)
# unset(SDLMAIN_LIBRARY CACHE)
set_and_warn_library_found("SDL" SDL_FOUND WITH_SDL)
- endif()
+ endif()
endif()
# Codecs
@@ -330,11 +321,12 @@ if(WITH_CYCLES AND WITH_CYCLES_DEVICE_ONEAPI)
endif()
if(WITH_OPENVDB)
- find_package_wrapper(OpenVDB)
+ find_package(OpenVDB)
set_and_warn_library_found("OpenVDB" OPENVDB_FOUND WITH_OPENVDB)
if(OPENVDB_FOUND)
- find_package_wrapper(Blosc)
+ add_bundled_libraries(openvdb/lib)
+ find_package_wrapper(Blosc)
set_and_warn_library_found("Blosc" BLOSC_FOUND WITH_OPENVDB_BLOSC)
endif()
endif()
@@ -356,13 +348,16 @@ endif()
if(WITH_USD)
find_package_wrapper(USD)
set_and_warn_library_found("USD" USD_FOUND WITH_USD)
+ if(WITH_USD)
+ add_bundled_libraries(usd/lib)
+ endif()
endif()
if(WITH_BOOST)
# uses in build instructions to override include and library variables
if(NOT BOOST_CUSTOM)
if(WITH_STATIC_LIBS)
- set(Boost_USE_STATIC_LIBS ON)
+ set(Boost_USE_STATIC_LIBS OFF)
endif()
set(Boost_USE_MULTITHREADED ON)
set(__boost_packages filesystem regex thread date_time)
@@ -378,6 +373,9 @@ if(WITH_BOOST)
if(WITH_OPENVDB)
list(APPEND __boost_packages iostreams)
endif()
+ if(WITH_USD AND USD_PYTHON_SUPPORT)
+ list(APPEND __boost_packages python${PYTHON_VERSION_NO_DOTS})
+ endif()
list(APPEND __boost_packages system)
find_package(Boost 1.48 COMPONENTS ${__boost_packages})
if(NOT Boost_FOUND)
@@ -404,6 +402,8 @@ if(WITH_BOOST)
find_package(IcuLinux)
list(APPEND BOOST_LIBRARIES ${ICU_LIBRARIES})
endif()
+
+ add_bundled_libraries(boost/lib)
endif()
if(WITH_PUGIXML)
@@ -426,7 +426,6 @@ if(WITH_OPENIMAGEIO)
${ZLIB_LIBRARIES}
${BOOST_LIBRARIES}
)
- set(OPENIMAGEIO_LIBPATH) # TODO, remove and reference the absolute path everywhere
set(OPENIMAGEIO_DEFINITIONS "")
if(WITH_IMAGE_TIFF)
@@ -440,6 +439,9 @@ if(WITH_OPENIMAGEIO)
endif()
set_and_warn_library_found("OPENIMAGEIO" OPENIMAGEIO_FOUND WITH_OPENIMAGEIO)
+ if(WITH_OPENIMAGEIO)
+ add_bundled_libraries(openimageio/lib)
+ endif()
endif()
if(WITH_OPENCOLORIO)
@@ -470,32 +472,38 @@ if(WITH_LLVM)
set_and_warn_library_found("LLVM" LLVM_FOUND WITH_LLVM)
if(LLVM_FOUND)
- if(WITH_CLANG)
- find_package_wrapper(Clang)
+ if(WITH_CLANG)
+ find_package_wrapper(Clang)
set_and_warn_library_found("Clang" CLANG_FOUND WITH_CLANG)
- endif()
+ endif()
- # Symbol conflicts with same UTF library used by OpenCollada
- if(EXISTS ${LIBDIR})
- if(WITH_OPENCOLLADA AND (${LLVM_VERSION} VERSION_LESS "4.0.0"))
- list(REMOVE_ITEM OPENCOLLADA_LIBRARIES ${OPENCOLLADA_UTF_LIBRARY})
- endif()
+ # Symbol conflicts with same UTF library used by OpenCollada
+ if(EXISTS ${LIBDIR})
+ if(WITH_OPENCOLLADA AND (${LLVM_VERSION} VERSION_LESS "4.0.0"))
+ list(REMOVE_ITEM OPENCOLLADA_LIBRARIES ${OPENCOLLADA_UTF_LIBRARY})
endif()
endif()
+ endif()
endif()
if(WITH_OPENSUBDIV)
- find_package_wrapper(OpenSubdiv)
+ find_package(OpenSubdiv)
set(OPENSUBDIV_LIBRARIES ${OPENSUBDIV_LIBRARIES})
set(OPENSUBDIV_LIBPATH) # TODO, remove and reference the absolute path everywhere
set_and_warn_library_found("OpenSubdiv" OPENSUBDIV_FOUND WITH_OPENSUBDIV)
+ if(WITH_OPENSUBDIV)
+ add_bundled_libraries(opensubdiv/lib)
+ endif()
endif()
if(WITH_TBB)
find_package_wrapper(TBB)
set_and_warn_library_found("TBB" TBB_FOUND WITH_TBB)
+ if(WITH_TBB)
+ add_bundled_libraries(tbb/lib)
+ endif()
endif()
if(WITH_XR_OPENXR)
@@ -632,11 +640,11 @@ if(WITH_GHOST_WAYLAND)
endif()
if(_use_system_wayland)
- 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(wayland-cursor wayland-cursor)
- pkg_check_modules(wayland-protocols wayland-protocols>=1.15)
+ 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(wayland-cursor wayland-cursor)
+ pkg_check_modules(wayland-protocols wayland-protocols>=1.15)
pkg_get_variable(WAYLAND_PROTOCOLS_DIR wayland-protocols pkgdatadir)
else()
# CentOS 7 packages have too old a version, a newer version exist in the
@@ -1020,4 +1028,10 @@ if(PLATFORM_BUNDLED_LIBRARIES)
# 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)
+
+ # Environment variables to run precompiled executables that needed libraries.
+ list(JOIN PLATFORM_BUNDLED_LIBRARY_DIRS ":" _library_paths)
+ set(PLATFORM_ENV_BUILD "LD_LIBRARY_PATH=\"${_library_paths};${LD_LIBRARY_PATH}\"")
+ set(PLATFORM_ENV_INSTALL "LD_LIBRARY_PATH=${CMAKE_INSTALL_PREFIX_WITH_CONFIG}/lib/;$LD_LIBRARY_PATH")
+ unset(_library_paths)
endif()
diff --git a/build_files/cmake/platform/platform_win32.cmake b/build_files/cmake/platform/platform_win32.cmake
index 47673794652..6cbc7656165 100644
--- a/build_files/cmake/platform/platform_win32.cmake
+++ b/build_files/cmake/platform/platform_win32.cmake
@@ -83,7 +83,7 @@ string(APPEND CMAKE_MODULE_LINKER_FLAGS " /SAFESEH:NO /ignore:4099")
list(APPEND PLATFORM_LINKLIBS
ws2_32 vfw32 winmm kernel32 user32 gdi32 comdlg32 Comctl32 version
advapi32 shfolder shell32 ole32 oleaut32 uuid psapi Dbghelp Shlwapi
- pathcch Shcore Dwmapi
+ pathcch Shcore Dwmapi Crypt32
)
if(WITH_INPUT_IME)
@@ -110,7 +110,41 @@ remove_cc_flag("/GR")
# Make the Windows 8.1 API available for use.
add_definitions(-D_WIN32_WINNT=0x603)
-include(build_files/cmake/platform/platform_win32_bundle_crt.cmake)
+
+# First generate the manifest for tests since it will not need the dependency on the CRT.
+configure_file(${CMAKE_SOURCE_DIR}/release/windows/manifest/blender.exe.manifest.in ${CMAKE_CURRENT_BINARY_DIR}/tests.exe.manifest @ONLY)
+
+if(WITH_WINDOWS_BUNDLE_CRT)
+ set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP TRUE)
+ set(CMAKE_INSTALL_UCRT_LIBRARIES TRUE)
+ set(CMAKE_INSTALL_OPENMP_LIBRARIES ${WITH_OPENMP})
+ include(InstallRequiredSystemLibraries)
+
+ # ucrtbase(d).dll cannot be in the manifest, due to the way windows 10 handles
+ # redirects for this dll, for details see T88813.
+ foreach(lib ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS})
+ string(FIND ${lib} "ucrtbase" pos)
+ if(NOT pos EQUAL -1)
+ list(REMOVE_ITEM CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS ${lib})
+ install(FILES ${lib} DESTINATION . COMPONENT Libraries)
+ endif()
+ endforeach()
+ # Install the CRT to the blender.crt Sub folder.
+ install(FILES ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} DESTINATION ./blender.crt COMPONENT Libraries)
+
+ windows_generate_manifest(
+ FILES "${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}"
+ OUTPUT "${CMAKE_BINARY_DIR}/blender.crt.manifest"
+ NAME "blender.crt"
+ )
+
+ install(FILES ${CMAKE_BINARY_DIR}/blender.crt.manifest DESTINATION ./blender.crt)
+ set(BUNDLECRT "<dependency><dependentAssembly><assemblyIdentity type=\"win32\" name=\"blender.crt\" version=\"1.0.0.0\" /></dependentAssembly></dependency>")
+ set(BUNDLECRT "${BUNDLECRT}<dependency><dependentAssembly><assemblyIdentity type=\"win32\" name=\"blender.shared\" version=\"1.0.0.0\" /></dependentAssembly></dependency>")
+endif()
+configure_file(${CMAKE_SOURCE_DIR}/release/windows/manifest/blender.exe.manifest.in ${CMAKE_CURRENT_BINARY_DIR}/blender.exe.manifest @ONLY)
+
+
remove_cc_flag("/MDd" "/MD" "/Zi")
if(MSVC_CLANG) # Clangs version of cl doesn't support all flags
@@ -407,9 +441,12 @@ if(WITH_IMAGE_OPENEXR)
set(IMATH_INCLUDE_DIR ${IMATH}/include)
set(IMATH_INCLUDE_DIRS ${IMATH_INCLUDE_DIR} ${IMATH}/include/Imath)
set(IMATH_LIBPATH ${IMATH}/lib)
+ if(EXISTS ${IMATH_LIBPATH}/Imath_s.lib)
+ set(IMATH_POSTFIX _s)
+ endif()
set(IMATH_LIBRARIES
- optimized ${IMATH_LIBPATH}/Imath_s.lib
- debug ${IMATH_LIBPATH}/Imath_s_d.lib
+ optimized ${IMATH_LIBPATH}/Imath${IMATH_POSTFIX}.lib
+ debug ${IMATH_LIBPATH}/Imath${IMATH_POSTFIX}_d.lib
)
endif()
set(OPENEXR_ROOT_DIR ${LIBDIR}/openexr)
@@ -421,36 +458,24 @@ if(WITH_IMAGE_OPENEXR)
set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include)
set(OPENEXR_INCLUDE_DIRS ${OPENEXR_INCLUDE_DIR} ${IMATH_INCLUDE_DIRS} ${OPENEXR_INCLUDE_DIR}/OpenEXR)
set(OPENEXR_LIBPATH ${OPENEXR}/lib)
- # Check if the 3.x library name exists
- # if not assume this is a 2.x library folder
+ # Check if the blender 3.3 lib static library eixts
+ # if not assume this is a 3.4+ dynamic version.
if(EXISTS "${OPENEXR_LIBPATH}/OpenEXR_s.lib")
- set(OPENEXR_LIBRARIES
- optimized ${OPENEXR_LIBPATH}/Iex_s.lib
- optimized ${OPENEXR_LIBPATH}/IlmThread_s.lib
- optimized ${OPENEXR_LIBPATH}/OpenEXR_s.lib
- optimized ${OPENEXR_LIBPATH}/OpenEXRCore_s.lib
- optimized ${OPENEXR_LIBPATH}/OpenEXRUtil_s.lib
- debug ${OPENEXR_LIBPATH}/Iex_s_d.lib
- debug ${OPENEXR_LIBPATH}/IlmThread_s_d.lib
- debug ${OPENEXR_LIBPATH}/OpenEXR_s_d.lib
- debug ${OPENEXR_LIBPATH}/OpenEXRCore_s_d.lib
- debug ${OPENEXR_LIBPATH}/OpenEXRUtil_s_d.lib
- ${IMATH_LIBRARIES}
- )
- else()
- set(OPENEXR_LIBRARIES
- optimized ${OPENEXR_LIBPATH}/Iex_s.lib
- optimized ${OPENEXR_LIBPATH}/Half_s.lib
- optimized ${OPENEXR_LIBPATH}/IlmImf_s.lib
- optimized ${OPENEXR_LIBPATH}/Imath_s.lib
- optimized ${OPENEXR_LIBPATH}/IlmThread_s.lib
- debug ${OPENEXR_LIBPATH}/Iex_s_d.lib
- debug ${OPENEXR_LIBPATH}/Half_s_d.lib
- debug ${OPENEXR_LIBPATH}/IlmImf_s_d.lib
- debug ${OPENEXR_LIBPATH}/Imath_s_d.lib
- debug ${OPENEXR_LIBPATH}/IlmThread_s_d.lib
- )
+ set(OPENEXR_POSTFIX _s)
endif()
+ set(OPENEXR_LIBRARIES
+ optimized ${OPENEXR_LIBPATH}/Iex${OPENEXR_POSTFIX}.lib
+ optimized ${OPENEXR_LIBPATH}/IlmThread${OPENEXR_POSTFIX}.lib
+ optimized ${OPENEXR_LIBPATH}/OpenEXR${OPENEXR_POSTFIX}.lib
+ optimized ${OPENEXR_LIBPATH}/OpenEXRCore${OPENEXR_POSTFIX}.lib
+ optimized ${OPENEXR_LIBPATH}/OpenEXRUtil${OPENEXR_POSTFIX}.lib
+ debug ${OPENEXR_LIBPATH}/Iex${OPENEXR_POSTFIX}_d.lib
+ debug ${OPENEXR_LIBPATH}/IlmThread${OPENEXR_POSTFIX}_d.lib
+ debug ${OPENEXR_LIBPATH}/OpenEXR${OPENEXR_POSTFIX}_d.lib
+ debug ${OPENEXR_LIBPATH}/OpenEXRCore${OPENEXR_POSTFIX}_d.lib
+ debug ${OPENEXR_LIBPATH}/OpenEXRUtil${OPENEXR_POSTFIX}_d.lib
+ ${IMATH_LIBRARIES}
+ )
endif()
endif()
@@ -520,38 +545,47 @@ if(WITH_BOOST)
if(NOT BOOST_VERSION)
message(FATAL_ERROR "Unable to determine Boost version")
endif()
- set(BOOST_POSTFIX "vc142-mt-x64-${BOOST_VERSION}.lib")
- set(BOOST_DEBUG_POSTFIX "vc142-mt-gd-x64-${BOOST_VERSION}.lib")
- if(NOT EXISTS ${BOOST_LIBPATH}/libboost_date_time-${BOOST_POSTFIX})
- # If the new library names do not exist fall back to the old ones
- # to ease the transition period between the libs.
- set(BOOST_POSTFIX "vc141-mt-x64-${BOOST_VERSION}.lib")
- set(BOOST_DEBUG_POSTFIX "vc141-mt-gd-x64-${BOOST_VERSION}.lib")
+ set(BOOST_POSTFIX "vc142-mt-x64-${BOOST_VERSION}")
+ set(BOOST_DEBUG_POSTFIX "vc142-mt-gyd-x64-${BOOST_VERSION}")
+ set(BOOST_PREFIX "")
+ # This is file new in 3.4 if it does not exist, assume we are building against 3.3 libs
+ set(BOOST_34_TRIGGER_FILE ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_python310-${BOOST_DEBUG_POSTFIX}.lib)
+ if (NOT EXISTS ${BOOST_34_TRIGGER_FILE})
+ set(BOOST_DEBUG_POSTFIX "vc142-mt-gd-x64-${BOOST_VERSION}")
+ set(BOOST_PREFIX "lib")
endif()
set(BOOST_LIBRARIES
- optimized ${BOOST_LIBPATH}/libboost_date_time-${BOOST_POSTFIX}
- optimized ${BOOST_LIBPATH}/libboost_filesystem-${BOOST_POSTFIX}
- optimized ${BOOST_LIBPATH}/libboost_regex-${BOOST_POSTFIX}
- optimized ${BOOST_LIBPATH}/libboost_system-${BOOST_POSTFIX}
- optimized ${BOOST_LIBPATH}/libboost_thread-${BOOST_POSTFIX}
- optimized ${BOOST_LIBPATH}/libboost_chrono-${BOOST_POSTFIX}
- debug ${BOOST_LIBPATH}/libboost_date_time-${BOOST_DEBUG_POSTFIX}
- debug ${BOOST_LIBPATH}/libboost_filesystem-${BOOST_DEBUG_POSTFIX}
- debug ${BOOST_LIBPATH}/libboost_regex-${BOOST_DEBUG_POSTFIX}
- debug ${BOOST_LIBPATH}/libboost_system-${BOOST_DEBUG_POSTFIX}
- debug ${BOOST_LIBPATH}/libboost_thread-${BOOST_DEBUG_POSTFIX}
- debug ${BOOST_LIBPATH}/libboost_chrono-${BOOST_DEBUG_POSTFIX}
+ optimized ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_date_time-${BOOST_POSTFIX}.lib
+ optimized ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_filesystem-${BOOST_POSTFIX}.lib
+ optimized ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_regex-${BOOST_POSTFIX}.lib
+ optimized ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_system-${BOOST_POSTFIX}.lib
+ optimized ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_thread-${BOOST_POSTFIX}.lib
+ optimized ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_chrono-${BOOST_POSTFIX}.lib
+ debug ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_date_time-${BOOST_DEBUG_POSTFIX}.lib
+ debug ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_filesystem-${BOOST_DEBUG_POSTFIX}.lib
+ debug ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_regex-${BOOST_DEBUG_POSTFIX}.lib
+ debug ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_system-${BOOST_DEBUG_POSTFIX}.lib
+ debug ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_thread-${BOOST_DEBUG_POSTFIX}.lib
+ debug ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_chrono-${BOOST_DEBUG_POSTFIX}.lib
)
+ if (EXISTS ${BOOST_34_TRIGGER_FILE})
+ if(WITH_USD)
+ set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
+ debug ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_python310-${BOOST_DEBUG_POSTFIX}.lib
+ optimized ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_python310-${BOOST_POSTFIX}.lib
+ )
+ endif()
+ endif()
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}
+ optimized ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_wave-${BOOST_POSTFIX}.lib
+ debug ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_wave-${BOOST_DEBUG_POSTFIX}.lib
)
endif()
if(WITH_INTERNATIONAL)
set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
- optimized ${BOOST_LIBPATH}/libboost_locale-${BOOST_POSTFIX}
- debug ${BOOST_LIBPATH}/libboost_locale-${BOOST_DEBUG_POSTFIX}
+ optimized ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_locale-${BOOST_POSTFIX}.lib
+ debug ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_locale-${BOOST_DEBUG_POSTFIX}.lib
)
endif()
else() # we found boost using find_package
@@ -576,7 +610,10 @@ if(WITH_OPENIMAGEIO)
endif()
set(OPENIMAGEIO_DEFINITIONS "-DUSE_TBB=0")
set(OPENIMAGEIO_IDIFF "${OPENIMAGEIO}/bin/idiff.exe")
- add_definitions(-DOIIO_STATIC_DEFINE)
+ # If the .dll does not exist, assume it is a static OIIO
+ if(NOT EXISTS ${OPENIMAGEIO}/bin/OpenImageIO.dll)
+ add_definitions(-DOIIO_STATIC_DEFINE)
+ endif()
add_definitions(-DOIIO_NO_SSE=1)
endif()
@@ -614,14 +651,27 @@ if(WITH_OPENCOLORIO)
set(OPENCOLORIO_LIBPATH ${OPENCOLORIO}/lib)
set(OPENCOLORIO_LIBRARIES
optimized ${OPENCOLORIO_LIBPATH}/OpenColorIO.lib
- optimized ${OPENCOLORIO_LIBPATH}/libyaml-cpp.lib
optimized ${OPENCOLORIO_LIBPATH}/libexpatMD.lib
optimized ${OPENCOLORIO_LIBPATH}/pystring.lib
debug ${OPENCOLORIO_LIBPATH}/OpencolorIO_d.lib
- debug ${OPENCOLORIO_LIBPATH}/libyaml-cpp_d.lib
debug ${OPENCOLORIO_LIBPATH}/libexpatdMD.lib
debug ${OPENCOLORIO_LIBPATH}/pystring_d.lib
)
+ if(EXISTS ${OPENCOLORIO_LIBPATH}/libyaml-cpp.lib) # 3.4 name
+ list(APPEND OPENCOLORIO_LIBRARIES
+ optimized ${OPENCOLORIO_LIBPATH}/libyaml-cpp.lib
+ debug ${OPENCOLORIO_LIBPATH}/libyaml-cpp_d.lib
+ )
+ elseif(EXISTS ${OPENCOLORIO_LIBPATH}/yaml-cpp.lib) # 3.5 name
+ list(APPEND OPENCOLORIO_LIBRARIES
+ optimized ${OPENCOLORIO_LIBPATH}/yaml-cpp.lib
+ optimized ${OPENCOLORIO_LIBPATH}/libminizip.lib
+ debug ${OPENCOLORIO_LIBPATH}/yaml-cppd.lib
+ debug ${OPENCOLORIO_LIBPATH}/libminizip.lib
+ )
+ else()
+ message("FATAL YAML-CPP dependency not found")
+ endif()
endif()
set(OPENCOLORIO_DEFINITIONS "-DOpenColorIO_SKIP_IMPORTS")
endif()
@@ -827,16 +877,21 @@ endif()
if(WITH_USD)
windows_find_package(USD)
if(NOT USD_FOUND)
+ # 3.5 22.03 libs
set(USD_INCLUDE_DIRS ${LIBDIR}/usd/include)
- set(USD_RELEASE_LIB ${LIBDIR}/usd/lib/usd_usd_m.lib)
- set(USD_DEBUG_LIB ${LIBDIR}/usd/lib/usd_usd_m_d.lib)
+ set(USD_RELEASE_LIB ${LIBDIR}/usd/lib/usd_usd_ms.lib)
+ set(USD_DEBUG_LIB ${LIBDIR}/usd/lib/usd_usd_ms_d.lib)
set(USD_LIBRARY_DIR ${LIBDIR}/usd/lib)
+ if(NOT EXISTS "${USD_RELEASE_LIB}") # 3.5 22.11 libs
+ set(USD_RELEASE_LIB ${LIBDIR}/usd/lib/usd_ms.lib)
+ set(USD_DEBUG_LIB ${LIBDIR}/usd/lib/usd_ms_d.lib)
+ endif()
# Older USD had different filenames, if the new ones are
# not found see if the older ones exist, to ease the
# transition period while landing libs.
- if(NOT EXISTS "${USD_RELEASE_LIB}")
- set(USD_RELEASE_LIB ${LIBDIR}/usd/lib/libusd_m.lib)
- set(USD_DEBUG_LIB ${LIBDIR}/usd/lib/libusd_m_d.lib)
+ if(NOT EXISTS "${USD_RELEASE_LIB}") # 3.3 static libs
+ set(USD_RELEASE_LIB ${LIBDIR}/usd/lib/usd_usd_m.lib)
+ set(USD_DEBUG_LIB ${LIBDIR}/usd/lib/usd_usd_m_d.lib)
endif()
set(USD_LIBRARIES
debug ${USD_DEBUG_LIB}
@@ -962,3 +1017,12 @@ if(WITH_CYCLES AND WITH_CYCLES_DEVICE_ONEAPI)
list(APPEND PLATFORM_BUNDLED_LIBRARIES ${_sycl_runtime_libraries})
unset(_sycl_runtime_libraries)
endif()
+
+
+# Environment variables to run precompiled executables that needed libraries.
+list(JOIN PLATFORM_BUNDLED_LIBRARY_DIRS ";" _library_paths)
+set(PLATFORM_ENV_BUILD_DIRS "${LIBDIR}/OpenImageIO/bin\;${LIBDIR}/boost/lib\;${LIBDIR}/openexr/bin\;${LIBDIR}/imath/bin\;${PATH}")
+set(PLATFORM_ENV_BUILD "PATH=${PLATFORM_ENV_BUILD_DIRS}")
+# Install needs the additional folders from PLATFORM_ENV_BUILD_DIRS as well, as tools like idiff and abcls use the release mode dlls
+set(PLATFORM_ENV_INSTALL "PATH=${CMAKE_INSTALL_PREFIX_WITH_CONFIG}/blender.shared/\;${PLATFORM_ENV_BUILD_DIRS}\;$ENV{PATH}")
+unset(_library_paths)
diff --git a/build_files/cmake/platform/platform_win32_bundle_crt.cmake b/build_files/cmake/platform/platform_win32_bundle_crt.cmake
deleted file mode 100644
index f197498d97b..00000000000
--- a/build_files/cmake/platform/platform_win32_bundle_crt.cmake
+++ /dev/null
@@ -1,56 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0-or-later
-
-# First generate the manifest for tests since it will not need the dependency on the CRT.
-configure_file(${CMAKE_SOURCE_DIR}/release/windows/manifest/blender.exe.manifest.in ${CMAKE_CURRENT_BINARY_DIR}/tests.exe.manifest @ONLY)
-
-# Always detect system libraries, since they are also used by oneAPI.
-# But don't always install them, only for WITH_WINDOWS_BUNDLE_CRT=ON.
-set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP TRUE)
-set(CMAKE_INSTALL_UCRT_LIBRARIES TRUE)
-set(CMAKE_INSTALL_OPENMP_LIBRARIES ${WITH_OPENMP})
-
-# This sometimes can change when updates are installed and the compiler version
-# changes, so test if it exists and if not, give InstallRequiredSystemLibraries
-# another chance to figure out the path.
-if(MSVC_REDIST_DIR AND NOT EXISTS "${MSVC_REDIST_DIR}")
- unset(MSVC_REDIST_DIR CACHE)
-endif()
-
-include(InstallRequiredSystemLibraries)
-
-if(WITH_WINDOWS_BUNDLE_CRT)
- # ucrtbase(d).dll cannot be in the manifest, due to the way windows 10 handles
- # redirects for this dll, for details see T88813.
- foreach(lib ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS})
- string(FIND ${lib} "ucrtbase" pos)
- if(NOT pos EQUAL -1)
- list(REMOVE_ITEM CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS ${lib})
- install(FILES ${lib} DESTINATION . COMPONENT Libraries)
- endif()
- endforeach()
- # Install the CRT to the blender.crt Sub folder.
- install(FILES ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} DESTINATION ./blender.crt COMPONENT Libraries)
-
- # Generating the manifest is a relatively expensive operation since
- # it is collecting an sha1 hash for every file required. so only do
- # this work when the libs have either changed or the manifest does
- # not exist yet.
-
- string(SHA1 libshash "${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}")
- set(manifest_trigger_file "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/crt_${libshash}")
-
- if(NOT EXISTS ${manifest_trigger_file})
- set(CRTLIBS "")
- foreach(lib ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS})
- get_filename_component(filename ${lib} NAME)
- file(SHA1 "${lib}" sha1_file)
- string(APPEND CRTLIBS " <file name=\"${filename}\" hash=\"${sha1_file}\" hashalg=\"SHA1\" />\n")
- endforeach()
- configure_file(${CMAKE_SOURCE_DIR}/release/windows/manifest/blender.crt.manifest.in ${CMAKE_CURRENT_BINARY_DIR}/blender.crt.manifest @ONLY)
- file(TOUCH ${manifest_trigger_file})
- endif()
-
- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/blender.crt.manifest DESTINATION ./blender.crt)
- set(BUNDLECRT "<dependency><dependentAssembly><assemblyIdentity type=\"win32\" name=\"blender.crt\" version=\"1.0.0.0\" /></dependentAssembly></dependency>")
-endif()
-configure_file(${CMAKE_SOURCE_DIR}/release/windows/manifest/blender.exe.manifest.in ${CMAKE_CURRENT_BINARY_DIR}/blender.exe.manifest @ONLY)
diff --git a/build_files/config/pipeline_config.yaml b/build_files/config/pipeline_config.yaml
index 3359f89c41e..31c0282dad5 100644
--- a/build_files/config/pipeline_config.yaml
+++ b/build_files/config/pipeline_config.yaml
@@ -19,20 +19,21 @@ update-code:
path: source/tools
svn:
libraries:
+ # Temporary branch names for testing, don't merge this into master.
darwin-arm64:
- branch: trunk
+ branch: branches/vfx-platform-2023
commit_id: HEAD
path: lib/darwin_arm64
darwin-x86_64:
- branch: trunk
+ branch: branches/vfx-platform-2023
commit_id: HEAD
path: lib/darwin
linux-x86_64:
- branch: trunk
+ branch: branches/vfx-platform-2023
commit_id: HEAD
path: lib/linux_centos7_x86_64
windows-amd64:
- branch: trunk
+ branch: branches/vfx-platform-2023
commit_id: HEAD
path: lib/win64_vc15
tests:
diff --git a/extern/mantaflow/helper/util/vectorbase.h b/extern/mantaflow/helper/util/vectorbase.h
index 3c7c6e6bc01..b05f90939d4 100644
--- a/extern/mantaflow/helper/util/vectorbase.h
+++ b/extern/mantaflow/helper/util/vectorbase.h
@@ -31,13 +31,6 @@
# undef max
#endif
-// redefine usage of some windows functions
-#if defined(WIN32) || defined(_WIN32)
-# ifndef snprintf
-# define snprintf _snprintf
-# endif
-#endif
-
// use which fp-precision? 1=float, 2=double
#ifndef FLOATINGPOINT_PRECISION
# define FLOATINGPOINT_PRECISION 1
diff --git a/intern/cycles/cmake/macros.cmake b/intern/cycles/cmake/macros.cmake
index 4ad438c65f9..cd6feee4a3c 100644
--- a/intern/cycles/cmake/macros.cmake
+++ b/intern/cycles/cmake/macros.cmake
@@ -133,6 +133,7 @@ macro(cycles_external_libraries_append libraries)
${OPENEXR_LIBRARIES} # For circular dependencies between libs.
${PUGIXML_LIBRARIES}
${BOOST_LIBRARIES}
+ ${PYTHON_LIBRARIES}
${ZLIB_LIBRARIES}
${CMAKE_DL_LIBS}
${PTHREADS_LIBRARIES}
diff --git a/intern/cycles/kernel/osl/shaders/CMakeLists.txt b/intern/cycles/kernel/osl/shaders/CMakeLists.txt
index c79af3f6112..0b5d11fc480 100644
--- a/intern/cycles/kernel/osl/shaders/CMakeLists.txt
+++ b/intern/cycles/kernel/osl/shaders/CMakeLists.txt
@@ -126,7 +126,6 @@ set(SRC_OSL_HEADERS
set(SRC_OSO
)
-
# TODO, add a module to compile OSL
foreach(_file ${SRC_OSL})
set(_OSL_FILE ${CMAKE_CURRENT_SOURCE_DIR}/${_file})
@@ -135,8 +134,9 @@ foreach(_file ${SRC_OSL})
string(REPLACE ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} _OSO_FILE ${_OSO_FILE})
add_custom_command(
OUTPUT ${_OSO_FILE}
- COMMAND ${OSL_COMPILER} -q -O2 -I"${CMAKE_CURRENT_SOURCE_DIR}" -I"${OSL_SHADER_DIR}" -o ${_OSO_FILE} ${_OSL_FILE}
- DEPENDS ${_OSL_FILE} ${SRC_OSL_HEADERS} ${OSL_COMPILER})
+ COMMAND ${CMAKE_COMMAND} -E env ${PLATFORM_ENV_BUILD} ${OSL_COMPILER} -q -O2 -I"${CMAKE_CURRENT_SOURCE_DIR}" -I"${OSL_SHADER_DIR}" -o ${_OSO_FILE} ${_OSL_FILE}
+ DEPENDS ${_OSL_FILE} ${SRC_OSL_HEADERS} ${OSL_COMPILER}
+ )
list(APPEND SRC_OSO
${_OSO_FILE}
)
diff --git a/intern/ffmpeg/CMakeLists.txt b/intern/ffmpeg/CMakeLists.txt
index 4fb5df9d4cd..0df0f19fc84 100644
--- a/intern/ffmpeg/CMakeLists.txt
+++ b/intern/ffmpeg/CMakeLists.txt
@@ -22,5 +22,5 @@ if(WITH_GTESTS)
set(TEST_LIB ${TEST_LIB} ${OPENJPEG_LIBRARIES})
endif()
include(GTestTesting)
- blender_add_test_executable(ffmpeg "${TEST_SRC}" "${TEST_INC}" "${TEST_INC_SYS}" "${TEST_LIB}")
+ blender_add_test_lib(ffmpeg_codecs "${TEST_SRC}" "${TEST_INC}" "${TEST_INC_SYS}" "${TEST_LIB}")
endif()
diff --git a/intern/locale/CMakeLists.txt b/intern/locale/CMakeLists.txt
index 8e3620d7db3..bdad0a0af79 100644
--- a/intern/locale/CMakeLists.txt
+++ b/intern/locale/CMakeLists.txt
@@ -17,6 +17,14 @@ set(SRC
set(LIB
)
+if(WIN32)
+ # This is set in platform_win32.cmake, will exist for 3.4+ library
+ # folders which are dynamic, but not for 3.3 which will be static.
+ if (EXISTS ${BOOST_34_TRIGGER_FILE})
+ add_definitions (-DBOOST_ALL_DYN_LINK=1)
+ endif()
+endif()
+
if(APPLE)
# Cocoa code to read the locale on OSX
list(APPEND SRC
diff --git a/release/windows/manifest/Blender.CRT.MANIFEST.in b/release/windows/manifest/Blender.manifest.in
index 27c4a6bce56..936494acc07 100644
--- a/release/windows/manifest/Blender.CRT.MANIFEST.in
+++ b/release/windows/manifest/Blender.manifest.in
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
- <assemblyIdentity type="win32" name="Blender.CRT" version="1.0.0.0" />
-@CRTLIBS@</assembly> \ No newline at end of file
+ <assemblyIdentity type="win32" name="@WINDOWS_MANIFEST_NAME@" version="1.0.0.0" />
+@MANIFEST_LIBS@</assembly> \ No newline at end of file
diff --git a/release/windows/python/usercustomize.py b/release/windows/python/usercustomize.py
new file mode 100644
index 00000000000..8d752581183
--- /dev/null
+++ b/release/windows/python/usercustomize.py
@@ -0,0 +1,14 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Make shared libraries needed by modules available in standalone Python binary.
+
+import sys
+import os
+
+if sys.platform == 'win32':
+ exe_dir, exe_file = os.path.split(sys.executable)
+ if exe_file.startswith('python'):
+ blender_dir = os.path.abspath(os.path.join(exe_dir, '..', '..', '..','blender.shared'))
+ os.add_dll_directory(blender_dir)
+ import_paths = os.getenv('PXR_USD_WINDOWS_DLL_PATH')
+ if import_paths is None:
+ os.environ["PXR_USD_WINDOWS_DLL_PATH"] = blender_dir
diff --git a/source/blender/imbuf/intern/openexr/CMakeLists.txt b/source/blender/imbuf/intern/openexr/CMakeLists.txt
index c34a97f6837..509255c37b9 100644
--- a/source/blender/imbuf/intern/openexr/CMakeLists.txt
+++ b/source/blender/imbuf/intern/openexr/CMakeLists.txt
@@ -32,6 +32,11 @@ if(WITH_IMAGE_OPENEXR)
${OPENEXR_LIBRARIES}
)
add_definitions(-DWITH_OPENEXR)
+ if(WIN32)
+ if(EXISTS ${LIBDIR}/imath/bin/imath.dll)
+ add_definitions(-DIMATH_DLL)
+ endif()
+ endif()
endif()
blender_add_lib(bf_imbuf_openexr "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
diff --git a/source/blender/io/usd/CMakeLists.txt b/source/blender/io/usd/CMakeLists.txt
index 06a0f12c571..745a1c69dce 100644
--- a/source/blender/io/usd/CMakeLists.txt
+++ b/source/blender/io/usd/CMakeLists.txt
@@ -9,9 +9,9 @@ if(UNIX AND NOT APPLE)
add_definitions(-D_GLIBCXX_PERMIT_BACKWARD_HASH)
endif()
if(WIN32)
- add_definitions(-DNOMINMAX -DWIN32_LEAN_AND_MEAN)
+ add_definitions(-DNOMINMAX -DWIN32_LEAN_AND_MEAN -DBOOST_DEBUG_PYTHON)
endif()
-add_definitions(-DPXR_STATIC)
+add_definitions(-DBOOST_ALL_NO_LIB)
# USD headers use deprecated TBB headers, silence warning.
add_definitions(-DTBB_SUPPRESS_DEPRECATED_MESSAGES=1)
@@ -56,6 +56,7 @@ set(INC_SYS
${USD_INCLUDE_DIRS}
${BOOST_INCLUDE_DIR}
${TBB_INCLUDE_DIR}
+ ${PYTHON_INCLUDE_DIR}
)
set(SRC
@@ -122,6 +123,7 @@ set(LIB
list(APPEND LIB
${BOOST_LIBRARIES}
+ ${PYTHON_LIBRARIES}
)
if(WITH_OPENVDB)
diff --git a/source/blender/io/usd/intern/usd_capi_export.cc b/source/blender/io/usd/intern/usd_capi_export.cc
index bf25c03fb7a..28da9e388c5 100644
--- a/source/blender/io/usd/intern/usd_capi_export.cc
+++ b/source/blender/io/usd/intern/usd_capi_export.cc
@@ -174,8 +174,6 @@ bool USD_export(bContext *C,
ViewLayer *view_layer = CTX_data_view_layer(C);
Scene *scene = CTX_data_scene(C);
- blender::io::usd::ensure_usd_plugin_path_registered();
-
blender::io::usd::ExportJobData *job = static_cast<blender::io::usd::ExportJobData *>(
MEM_mallocN(sizeof(blender::io::usd::ExportJobData), "ExportJobData"));
diff --git a/source/blender/io/usd/intern/usd_capi_import.cc b/source/blender/io/usd/intern/usd_capi_import.cc
index 680e9c758d3..319f15e09af 100644
--- a/source/blender/io/usd/intern/usd_capi_import.cc
+++ b/source/blender/io/usd/intern/usd_capi_import.cc
@@ -382,13 +382,16 @@ static void import_freejob(void *user_data)
using namespace blender::io::usd;
+void USD_ensure_plugin_path_registered()
+{
+ blender::io::usd::ensure_usd_plugin_path_registered();
+}
+
bool USD_import(struct bContext *C,
const char *filepath,
const USDImportParams *params,
bool as_background_job)
{
- blender::io::usd::ensure_usd_plugin_path_registered();
-
/* Using new here since `MEM_*` functions do not call constructor to properly initialize data. */
ImportJobData *job = new ImportJobData();
job->bmain = CTX_data_main(C);
@@ -542,9 +545,6 @@ CacheArchiveHandle *USD_create_handle(struct Main * /*bmain*/,
const char *filepath,
ListBase *object_paths)
{
- /* Must call this so that USD file format plugins are loaded. */
- ensure_usd_plugin_path_registered();
-
pxr::UsdStageRefPtr stage = pxr::UsdStage::Open(filepath);
if (!stage) {
diff --git a/source/blender/io/usd/intern/usd_common.cc b/source/blender/io/usd/intern/usd_common.cc
index 2b6b6f4ed43..e5a83442140 100644
--- a/source/blender/io/usd/intern/usd_common.cc
+++ b/source/blender/io/usd/intern/usd_common.cc
@@ -11,6 +11,10 @@ namespace blender::io::usd {
void ensure_usd_plugin_path_registered()
{
+ /* if PXR_PYTHON_SUPPORT_ENABLED is defined, we *must* be dynamic and
+ the plugins are placed relative to the USD shared library hence no
+ hinting is required. */
+#ifndef PXR_PYTHON_SUPPORT_ENABLED
static bool plugin_path_registered = false;
if (plugin_path_registered) {
return;
@@ -22,6 +26,7 @@ void ensure_usd_plugin_path_registered()
const std::string blender_usd_datafiles = BKE_appdir_folder_id(BLENDER_DATAFILES, "usd");
/* The trailing slash indicates to the USD library that the path is a directory. */
pxr::PlugRegistry::GetInstance().RegisterPlugins(blender_usd_datafiles + "/");
+#endif
}
} // namespace blender::io::usd
diff --git a/source/blender/io/usd/tests/usd_tests_common.cc b/source/blender/io/usd/tests/usd_tests_common.cc
index ea4e704006d..6c73788d866 100644
--- a/source/blender/io/usd/tests/usd_tests_common.cc
+++ b/source/blender/io/usd/tests/usd_tests_common.cc
@@ -36,9 +36,12 @@ std::string register_usd_plugins_for_tests()
BLI_assert(path_len + 1 < FILE_MAX);
usd_datafiles_dir[path_len] = '/';
usd_datafiles_dir[path_len + 1] = '\0';
-
+ /* if PXR_PYTHON_SUPPORT_ENABLED is defined, we *must* be dynamic and
+ the plugins are placed relative to the USD shared library hence no
+ hinting is required. */
+#ifndef PXR_PYTHON_SUPPORT_ENABLED
pxr::PlugRegistry::GetInstance().RegisterPlugins(usd_datafiles_dir);
-
+#endif
return usd_datafiles_dir;
}
diff --git a/source/blender/io/usd/usd.h b/source/blender/io/usd/usd.h
index 3494d8ffdc3..98d544df251 100644
--- a/source/blender/io/usd/usd.h
+++ b/source/blender/io/usd/usd.h
@@ -119,7 +119,7 @@ struct CacheReader *CacheReader_open_usd_object(struct CacheArchiveHandle *handl
void USD_CacheReader_incref(struct CacheReader *reader);
void USD_CacheReader_free(struct CacheReader *reader);
-
+void USD_ensure_plugin_path_registered(void);
#ifdef __cplusplus
}
#endif
diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt
index bb9e73c0895..b836046d29d 100644
--- a/source/creator/CMakeLists.txt
+++ b/source/creator/CMakeLists.txt
@@ -11,6 +11,7 @@ set(INC
../blender/editors/include
../blender/gpu
../blender/imbuf
+ ../blender/io/usd
../blender/makesdna
../blender/makesrna
../blender/render
@@ -371,7 +372,6 @@ elseif(APPLE)
set(TARGETDIR_LIB Blender.app/Contents/Resources/lib)
set(TARGETDIR_TEXT Blender.app/Contents/Resources/text)
endif()
-
# Skip re-linking on CPACK / install.
set_target_properties(blender PROPERTIES BUILD_WITH_INSTALL_RPATH true)
endif()
@@ -416,7 +416,12 @@ if(WITH_PYTHON)
PATTERN "${ADDON_EXCLUDE_CONDITIONAL}" EXCLUDE
PATTERN "${FREESTYLE_EXCLUDE_CONDITIONAL}" EXCLUDE
)
-
+ if(WIN32)
+ install(
+ FILES ${CMAKE_SOURCE_DIR}/release/windows/python/usercustomize.py
+ DESTINATION ${TARGETDIR_VER}/python/lib/site-packages
+ )
+ endif()
unset(ADDON_EXCLUDE_CONDITIONAL)
unset(FREESTYLE_EXCLUDE_CONDITIONAL)
endif()
@@ -488,6 +493,33 @@ if("${CMAKE_GENERATOR}" MATCHES ".*Makefiles.*")
)
endif()
+# macro to help install files without dragging in unnecessary data.
+macro(install_dir from to)
+ install(
+ DIRECTORY ${from}
+ DESTINATION ${to}
+ # Irrelevant files and caches.
+ PATTERN ".git" EXCLUDE
+ PATTERN ".svn" EXCLUDE
+ PATTERN "*.pyc" EXCLUDE
+ PATTERN "*.pyo" EXCLUDE
+ PATTERN "*.orig" EXCLUDE
+ PATTERN "*.rej" EXCLUDE
+ PATTERN "__pycache__" EXCLUDE
+ PATTERN "__MACOSX" EXCLUDE
+ PATTERN ".DS_Store" EXCLUDE
+ # Unneeded Python files.
+ PATTERN "config-${PYTHON_VERSION}/*.a" EXCLUDE # static lib
+ PATTERN "lib2to3" EXCLUDE # ./lib2to3
+ PATTERN "tkinter" EXCLUDE # ./tkinter
+ PATTERN "lib-dynload/_tkinter.*" EXCLUDE # ./lib-dynload/_tkinter.co
+ PATTERN "idlelib" EXCLUDE # ./idlelib
+ PATTERN "test" EXCLUDE # ./test
+ PATTERN "turtledemo" EXCLUDE # ./turtledemo
+ PATTERN "turtle.py" EXCLUDE # ./turtle.py
+ PATTERN "wininst*.exe" EXCLUDE # from distutils, avoid malware false positive
+ )
+endmacro()
# -----------------------------------------------------------------------------
# Install Targets (Platform Specific)
@@ -527,6 +559,7 @@ if(UNIX AND NOT APPLE)
LIBRARY DESTINATION ${TARGETDIR_BPY}
)
endif()
+
# none of the other files are needed currently
elseif(WITH_INSTALL_PORTABLE)
install(
@@ -615,9 +648,21 @@ if(UNIX AND NOT APPLE)
endif()
endif()
- if(WITH_PYTHON)
- if(WITH_PYTHON_INSTALL)
+ if(WITH_PYTHON AND WITH_PYTHON_INSTALL)
+ # Install executable
+ install(
+ PROGRAMS ${PYTHON_EXECUTABLE}
+ DESTINATION ${TARGETDIR_VER}/python/bin
+ )
+ if(EXISTS ${LIBDIR})
+ # Precompiled libraries, copy over complete lib directory.
+ install_dir(
+ ${PYTHON_LIBPATH}
+ ${TARGETDIR_VER}/python
+ )
+ else()
+ # System libraries.
install(
PROGRAMS ${PYTHON_EXECUTABLE}
DESTINATION ${TARGETDIR_VER}/python/bin
@@ -698,6 +743,24 @@ if(UNIX AND NOT APPLE)
unset(_suffix)
endif()
+ if(WITH_USD)
+ # Install to the same directory as the source, so debian-like
+ # distros are happy with their policy.
+ set(_suffix "site-packages")
+ if(${PYTHON_USD_PATH} MATCHES "dist-packages")
+ set(_suffix "dist-packages")
+ endif()
+ install(
+ DIRECTORY ${USD_LIBRARY_DIR}/python/
+ DESTINATION ${TARGETDIR_VER}/python/${_target_LIB}/python${PYTHON_VERSION}/${_suffix}
+ PATTERN ".svn" EXCLUDE
+ PATTERN "__pycache__" EXCLUDE # * any cache *
+ PATTERN "*.pyc" EXCLUDE # * any cache *
+ PATTERN "*.pyo" EXCLUDE # * any cache *
+ )
+ unset(_suffix)
+ endif()
+
if(WITH_PYTHON_INSTALL_ZSTANDARD)
# Install to the same directory as the source, so debian-like
# distributions are happy with their policy.
@@ -758,7 +821,6 @@ if(UNIX AND NOT APPLE)
unset(_suffix)
endif()
unset(_target_LIB)
-
endif()
endif()
@@ -769,22 +831,22 @@ if(UNIX AND NOT APPLE)
)
endif()
elseif(WIN32)
- install(
+ windows_install_shared_manifest(
FILES ${LIBDIR}/epoxy/bin/epoxy-0.dll
- DESTINATION ${TARGETDIR_LIB}
+ ALL
)
if(WITH_OPENMP AND MSVC_CLANG)
- install(
+ windows_install_shared_manifest(
FILES ${CLANG_OPENMP_DLL}
- DESTINATION ${TARGETDIR_LIB}
+ ALL
)
endif()
if(WITH_FFTW3)
- install(
+ windows_install_shared_manifest(
FILES ${LIBDIR}/fftw3/lib/libfftw3-3.dll
- DESTINATION ${TARGETDIR_LIB}
+ ALL
)
endif()
if(MSVC_ASAN)
@@ -799,34 +861,69 @@ elseif(WIN32)
"this is an optional component during the MSVC install, please install it"
)
endif()
- install(
+ windows_install_shared_manifest(
FILES ${ASAN_DLL}
- DESTINATION ${TARGETDIR_LIB}
- CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel
+ RELEASE
)
- install(
+ windows_install_shared_manifest(
FILES ${ASAN_DEBUG_DLL}
- DESTINATION ${TARGETDIR_LIB}
- CONFIGURATIONS Debug
+ DEBUG
)
unset(ASAN_DLL)
unset(ASAN_DEBUG_DLL)
endif()
-
+ if(WITH_IMAGE_OPENEXR OR WITH_OPENIMAGEIO)
+ if(EXISTS ${LIBDIR}/openexr/bin/Iex.dll)
+ windows_install_shared_manifest(
+ FILES
+ ${LIBDIR}/openexr/bin/Iex.dll
+ ${LIBDIR}/openexr/bin/IlmThread.dll
+ ${LIBDIR}/openexr/bin/OpenEXRCore.dll
+ ${LIBDIR}/openexr/bin/OpenEXRUtil.dll
+ ${LIBDIR}/openexr/bin/OpenEXR.dll
+ ${LIBDIR}/imath/bin/imath.dll
+ RELEASE
+ )
+ windows_install_shared_manifest(
+ FILES
+ ${LIBDIR}/openexr/bin/Iex_d.dll
+ ${LIBDIR}/openexr/bin/IlmThread_d.dll
+ ${LIBDIR}/openexr/bin/OpenEXRCore_d.dll
+ ${LIBDIR}/openexr/bin/OpenEXRUtil_d.dll
+ ${LIBDIR}/openexr/bin/OpenEXR_d.dll
+ ${LIBDIR}/imath/bin/imath_d.dll
+ DEBUG
+ )
+ endif()
+ endif()
+ if(WITH_OPENIMAGEIO)
+ if(EXISTS ${LIBDIR}/openimageio/bin/openimageio.dll)
+ windows_install_shared_manifest(
+ FILES
+ ${LIBDIR}/openimageio/bin/openimageio.dll
+ ${LIBDIR}/openimageio/bin/openimageio_util.dll
+ RELEASE
+ )
+ windows_install_shared_manifest(
+ FILES
+ ${LIBDIR}/openimageio/bin/openimageio_d.dll
+ ${LIBDIR}/openimageio/bin/openimageio_util_d.dll
+ DEBUG
+ )
+ endif()
+ endif()
if(WITH_GMP)
- install(
+ windows_install_shared_manifest(
FILES ${LIBDIR}/gmp/lib/libgmp-10.dll
- DESTINATION ${TARGETDIR_LIB}
+ ALL
)
- install(
+ windows_install_shared_manifest(
FILES ${LIBDIR}/gmp/lib/libgmpxx.dll
- DESTINATION ${TARGETDIR_LIB}
- CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel
+ RELEASE
)
- install(
+ windows_install_shared_manifest(
FILES ${LIBDIR}/gmp/lib/libgmpxx_d.dll
- DESTINATION ${TARGETDIR_LIB}
- CONFIGURATIONS Debug
+ DEBUG
)
endif()
@@ -846,16 +943,30 @@ elseif(WIN32)
endif()
if(WITH_OPENVDB)
- install(
- FILES ${LIBDIR}/openvdb/bin/openvdb.dll
- DESTINATION ${TARGETDIR_LIB}
- CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel
- )
- install(
- FILES ${LIBDIR}/openvdb/bin/openvdb_d.dll
- DESTINATION ${TARGETDIR_LIB}
- CONFIGURATIONS Debug
- )
+ windows_install_shared_manifest(
+ FILES ${LIBDIR}/openvdb/bin/openvdb.dll
+ RELEASE
+ )
+ windows_install_shared_manifest(
+ FILES ${LIBDIR}/openvdb/bin/openvdb_d.dll
+ DEBUG
+ )
+
+ # This will not exist for 3.4 and earlier lib folders
+ # to ease the transition, support both 3.4 and 3.5 lib
+ # folders.
+ if(EXISTS ${LIBDIR}/openvdb/python/pyopenvdb_d.pyd)
+ install(
+ FILES ${LIBDIR}/openvdb/python/pyopenvdb_d.pyd
+ DESTINATION ${TARGETDIR_VER}/python/lib/site-packages
+ CONFIGURATIONS Debug
+ )
+ install(
+ FILES ${LIBDIR}/openvdb/python/pyopenvdb.pyd
+ DESTINATION ${TARGETDIR_VER}/python/lib/site-packages
+ CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel
+ )
+ endif()
endif()
if(WITH_PYTHON)
@@ -906,7 +1017,7 @@ elseif(WIN32)
PATTERN ".svn" EXCLUDE
PATTERN "__pycache__" EXCLUDE # * any cache *
PATTERN "*.pyc" EXCLUDE # * any cache *
- PATTERN "*.pyo" EXCLUDE # * any cache *)
+ PATTERN "*.pyo" EXCLUDE # * any cache *
)
install(
@@ -938,31 +1049,58 @@ elseif(WIN32)
CONFIGURATIONS Debug
)
+ if(WITH_USD)
+ # This will not exist for 3.4 and earlier lib folders
+ # to ease the transition, support both 3.4 and 3.5 lib
+ # folders.
+ if(EXISTS ${USD_LIBRARY_DIR}/python/)
+ install(
+ DIRECTORY ${USD_LIBRARY_DIR}/python/
+ DESTINATION ${TARGETDIR_VER}/python/lib/site-packages
+ CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel
+ PATTERN ".svn" EXCLUDE
+ PATTERN "__pycache__" EXCLUDE # * any cache *
+ PATTERN "*.pyc" EXCLUDE # * any cache *
+ PATTERN "*.pyo" EXCLUDE # * any cache *
+ )
+ endif()
+ if(EXISTS ${USD_LIBRARY_DIR}/debug/python/)
+ install(
+ DIRECTORY ${USD_LIBRARY_DIR}/debug/python/
+ DESTINATION ${TARGETDIR_VER}/python/lib/site-packages
+ CONFIGURATIONS Debug
+ PATTERN ".svn" EXCLUDE
+ PATTERN "__pycache__" EXCLUDE # * any cache *
+ PATTERN "*.pyc" EXCLUDE # * any cache *
+ PATTERN "*.pyo" EXCLUDE # * any cache *
+ )
+ endif()
+ endif()
+
if(WINDOWS_PYTHON_DEBUG)
install(
FILES
${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/libs/python${_PYTHON_VERSION_NO_DOTS}.pdb
- DESTINATION ${TARGETDIR_LIB}
+ DESTINATION "."
CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel
)
install(
FILES
${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/libs/python${_PYTHON_VERSION_NO_DOTS}_d.pdb
- DESTINATION ${TARGETDIR_LIB}
+ DESTINATION "."
CONFIGURATIONS Debug
)
endif()
endif()
- unset(_PYTHON_VERSION_NO_DOTS)
endif()
if(WITH_CODEC_FFMPEG)
# Filenames change slightly between FFMPEG versions check both 5.0 and fallback to 4.4
# to ease the transition between versions.
if(EXISTS "${LIBDIR}/ffmpeg/lib/avcodec-59.dll")
- install(
+ windows_install_shared_manifest(
FILES
${LIBDIR}/ffmpeg/lib/avcodec-59.dll
${LIBDIR}/ffmpeg/lib/avformat-59.dll
@@ -970,10 +1108,10 @@ elseif(WIN32)
${LIBDIR}/ffmpeg/lib/avutil-57.dll
${LIBDIR}/ffmpeg/lib/swscale-6.dll
${LIBDIR}/ffmpeg/lib/swresample-4.dll
- DESTINATION ${TARGETDIR_LIB}
+ ALL
)
else()
- install(
+ windows_install_shared_manifest(
FILES
${LIBDIR}/ffmpeg/lib/avcodec-58.dll
${LIBDIR}/ffmpeg/lib/avformat-58.dll
@@ -981,61 +1119,57 @@ elseif(WIN32)
${LIBDIR}/ffmpeg/lib/avutil-56.dll
${LIBDIR}/ffmpeg/lib/swscale-5.dll
${LIBDIR}/ffmpeg/lib/swresample-3.dll
- DESTINATION ${TARGETDIR_LIB}
+ ALL
)
endif()
endif()
if(WITH_TBB)
- install(
+ windows_install_shared_manifest(
FILES
${LIBDIR}/tbb/bin/tbb.dll
- DESTINATION ${TARGETDIR_LIB}
- CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel
+ RELEASE
)
- install(
+ windows_install_shared_manifest(
FILES
${LIBDIR}/tbb/bin/tbb_debug.dll
- DESTINATION ${TARGETDIR_LIB}
- CONFIGURATIONS Debug
+ DEBUG
)
endif()
if(WITH_TBB_MALLOC_PROXY)
- install(
+ windows_install_shared_manifest(
FILES
${LIBDIR}/tbb/bin/tbbmalloc.dll
${LIBDIR}/tbb/bin/tbbmalloc_proxy.dll
- DESTINATION ${TARGETDIR_LIB}
- CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel
+ RELEASE
)
- install(
+ windows_install_shared_manifest(
FILES
${LIBDIR}/tbb/bin/tbbmalloc_debug.dll
${LIBDIR}/tbb/bin/tbbmalloc_proxy_debug.dll
- DESTINATION ${TARGETDIR_LIB}
- CONFIGURATIONS Debug
+ DEBUG
)
list(APPEND LIB ${TBB_MALLOC_LIBRARIES})
endif()
if(WITH_CODEC_SNDFILE)
- install(
+ windows_install_shared_manifest(
FILES ${LIBDIR}/sndfile/lib/libsndfile-1.dll
- DESTINATION ${TARGETDIR_LIB}
+ ALL
)
endif()
if(WITH_OPENAL)
- install(
+ windows_install_shared_manifest(
FILES
${LIBDIR}/openal/lib/OpenAL32.dll
- DESTINATION ${TARGETDIR_LIB}
+ ALL
)
endif()
if(WITH_SDL)
- install(
+ windows_install_shared_manifest(
FILES ${LIBDIR}/sdl/lib/SDL2.dll
- DESTINATION ${TARGETDIR_LIB}
+ ALL
)
endif()
@@ -1045,7 +1179,7 @@ elseif(WIN32)
${LIBDIR}/audaspace/lib/audaspace.dll
${LIBDIR}/audaspace/lib/audaspace-c.dll
${LIBDIR}/audaspace/lib/audaspace-py.dll
- DESTINATION ${TARGETDIR_LIB}
+ DESTINATION "."
)
endif()
@@ -1308,12 +1442,79 @@ blender_target_include_dirs(blender ${INC})
# These files are required at runtime.
if(WITH_USD)
add_definitions(-DWITH_USD)
- install(
- DIRECTORY ${USD_LIBRARY_DIR}/usd
- DESTINATION "${TARGETDIR_VER}/datafiles"
- )
+ absolute_include_dirs(../blender/io/usd)
+
+ # On windows the usd library sits in ./blender.shared copy the files
+ # relative to the location of the USD dll, if the dll does not exist
+ # assume we are linking against the static 3.5 lib.
+ if(WIN32 AND
+ (
+ EXISTS ${LIBDIR}/usd/lib/usd_usd_ms.dll OR # USD 22.03
+ EXISTS ${LIBDIR}/usd/lib/usd_ms.dll # USD 22.11
+ )
+ )
+ install(DIRECTORY
+ ${USD_LIBRARY_DIR}/usd
+ DESTINATION "./blender.shared"
+ )
+ elseif(USD_PYTHON_SUPPORT)
+ install(DIRECTORY
+ ${USD_LIBRARY_DIR}/usd
+ DESTINATION ${TARGETDIR_LIB}
+ )
+ else()
+ install(DIRECTORY
+ ${USD_LIBRARY_DIR}/usd
+ DESTINATION "${TARGETDIR_VER}/datafiles"
+ )
+ endif()
+ if(WIN32)
+ # If this file exists we are building against a 3.5 22.03 library folder
+ # that needs these dll's installed.
+ if(EXISTS ${LIBDIR}/usd/lib/usd_usd_ms.dll)
+ windows_install_shared_manifest(FILES
+ ${LIBDIR}/usd/lib/usd_usd_ms.dll
+ RELEASE
+ )
+ windows_install_shared_manifest(FILES
+ ${LIBDIR}/usd/lib/usd_usd_ms_d.dll
+ DEBUG
+ )
+ endif()
+ # If this file exists we are building against a 3.5 22.11 library folder
+ # that needs these dll's installed.
+ if(EXISTS ${LIBDIR}/usd/lib/usd_ms.dll)
+ windows_install_shared_manifest(FILES
+ ${LIBDIR}/usd/lib/usd_ms.dll
+ RELEASE
+ )
+ windows_install_shared_manifest(FILES
+ ${LIBDIR}/usd/lib/usd_ms_d.dll
+ DEBUG
+ )
+ endif()
+ endif()
endif()
+if(WIN32 AND WITH_BOOST)
+ set(BOOST_COMPONENTS atomic chrono date_time filesystem
+ iostreams locale program_options regex
+ serialization system thread wave wserialization
+ python${_PYTHON_VERSION_NO_DOTS} numpy${_PYTHON_VERSION_NO_DOTS}
+ )
+ foreach(component ${BOOST_COMPONENTS})
+ if(EXISTS ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_${component}-${BOOST_POSTFIX}.dll)
+ windows_install_shared_manifest(
+ FILES ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_${component}-${BOOST_POSTFIX}.dll
+ RELEASE
+ )
+ windows_install_shared_manifest(
+ FILES ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_${component}-${BOOST_DEBUG_POSTFIX}.dll
+ DEBUG
+ )
+ endif()
+ endforeach()
+endif()
# `vcpkg` substitutes our libraries with theirs, which will cause issues when you you run
# these builds on other systems due to missing DLL's. So we opt out the use of `vcpkg`.
@@ -1359,6 +1560,12 @@ if(WIN32 AND NOT WITH_PYTHON_MODULE)
endif()
# -----------------------------------------------------------------------------
+# Windows shared library manifest
+if(WIN32)
+ windows_generate_shared_manifest()
+endif()
+
+# -----------------------------------------------------------------------------
# Post-install script
if(POSTINSTALL_SCRIPT)
diff --git a/source/creator/creator.c b/source/creator/creator.c
index 2cd54deeab5..7f5ebb9e8a6 100644
--- a/source/creator/creator.c
+++ b/source/creator/creator.c
@@ -94,6 +94,10 @@
# include "sdlew.h"
#endif
+#ifdef WITH_USD
+# include "usd.h"
+#endif
+
#include "creator_intern.h" /* Own include. */
/* -------------------------------------------------------------------- */
@@ -469,6 +473,10 @@ int main(int argc,
/* Initialize sub-systems that use `BKE_appdir.h`. */
IMB_init();
+#ifdef WITH_USD
+ USD_ensure_plugin_path_registered();
+#endif
+
#ifndef WITH_PYTHON_MODULE
/* First test for background-mode (#Global.background) */
BLI_args_parse(ba, ARG_PASS_SETTINGS, NULL, NULL);
diff --git a/source/creator/symbols_apple.map b/source/creator/symbols_apple.map
index 5619f151bd2..7514921f839 100644
--- a/source/creator/symbols_apple.map
+++ b/source/creator/symbols_apple.map
@@ -59,7 +59,6 @@ png_*
*textFileFormatYy*
*TIFF*
*tinyformat*
-*usdBlender*
vorbis*
vp8*
vp9*
diff --git a/tests/python/CMakeLists.txt b/tests/python/CMakeLists.txt
index 14b00ace251..e5a9151ec3e 100644
--- a/tests/python/CMakeLists.txt
+++ b/tests/python/CMakeLists.txt
@@ -31,6 +31,9 @@ function(add_blender_test testname)
set_tests_properties(${testname} PROPERTIES ENVIRONMENT
LSAN_OPTIONS=exitcode=0:$ENV{LSAN_OPTIONS}
)
+ if(PLATFORM_ENV_INSTALL)
+ set_tests_properties(${testname} PROPERTIES ENVIRONMENT "${PLATFORM_ENV_INSTALL}")
+ endif()
endfunction()
# Run Python script outside Blender.
@@ -42,10 +45,14 @@ function(add_python_test testname testscript)
add_test(
NAME ${testname}
COMMAND ${TEST_PYTHON_EXE} ${TEST_PYTHON_EXE_EXTRA_ARGS} ${testscript} ${ARGN}
+ WORKING_DIRECTORY $<TARGET_FILE_DIR:blender>
)
set_tests_properties(${testname} PROPERTIES ENVIRONMENT
LSAN_OPTIONS=exitcode=0:$ENV{LSAN_OPTIONS}
)
+ if(PLATFORM_ENV_INSTALL)
+ set_tests_properties(${testname} PROPERTIES ENVIRONMENT "${PLATFORM_ENV_INSTALL}")
+ endif()
endfunction()
# ------------------------------------------------------------------------------