From 388bbc32902d5a66ccc13955b810cef12213aeca Mon Sep 17 00:00:00 2001 From: Ray Molenkamp Date: Mon, 5 Dec 2022 23:18:54 +0100 Subject: [PATCH] Build: library updates for Blender 3.5 This updates the libraries dependencies for VFX platform 2023, and adds various new libraries. It also enables Python bindings and switches from static to shared for various libraries. The precompiled libraries for all platforms will be updated to these new versions in the coming weeks. New: Fribidi 1.0.12 Harfbuzz 5.1.0 MaterialX 1.38.6 (shared lib with python bindings) Minizipng 3.0.7 Pybind11 2.10.1 Shaderc 2022.3 Vulkan 1.2.198 Updated: Boost 1.8.0 (shared lib) Cython 0.29.30 Numpy 1.23.2 OpenColorIO 2.2.0 (shared lib with python bindings) OpenImageIO 2.4.6.0 (shared lib with python bindings) OpenSubdiv 3.5.0 OpenVDB 10.0.0 (shared lib with python bindings) OSL 1.12.7.1 (enable nvptx backend) TBB (shared lib) USD 22.11 (shared lib with python bindings, enable hydra) yaml-cpp 0.8.0 Includes contributions by Ray Molenkamp, Brecht Van Lommel, Georgiy Markelov and Campbell Barton. Ref T99618 --- CMakeLists.txt | 4 + build_files/build_environment/CMakeLists.txt | 22 +- .../build_environment/cmake/alembic.cmake | 2 +- .../build_environment/cmake/blosc.cmake | 16 - .../build_environment/cmake/boost.cmake | 48 +- .../cmake/boost_build_options.cmake | 3 +- .../cmake/check_software.cmake | 10 +- .../build_environment/cmake/download.cmake | 11 + .../build_environment/cmake/dpcpp.cmake | 6 +- .../build_environment/cmake/epoxy.cmake | 7 +- build_files/build_environment/cmake/fmt.cmake | 3 +- .../build_environment/cmake/freetype.cmake | 3 + .../build_environment/cmake/fribidi.cmake | 30 ++ .../build_environment/cmake/harfbuzz.cmake | 44 ++ .../build_environment/cmake/harvest.cmake | 413 ++++++++++-------- .../build_environment/cmake/imath.cmake | 4 +- .../build_environment/cmake/llvm.cmake | 11 +- .../build_environment/cmake/materialx.cmake | 57 +++ .../build_environment/cmake/mesa.cmake | 3 +- .../build_environment/cmake/minizipng.cmake | 33 ++ .../build_environment/cmake/opencollada.cmake | 8 +- .../build_environment/cmake/opencolorio.cmake | 51 ++- .../build_environment/cmake/openexr.cmake | 9 +- .../build_environment/cmake/openimageio.cmake | 26 +- .../build_environment/cmake/opensubdiv.cmake | 2 +- .../build_environment/cmake/openvdb.cmake | 53 ++- .../build_environment/cmake/options.cmake | 69 ++- .../build_environment/cmake/opus.cmake | 1 + build_files/build_environment/cmake/osl.cmake | 7 +- .../build_environment/cmake/pybind11.cmake | 21 + .../build_environment/cmake/python.cmake | 38 +- .../cmake/python_site_packages.cmake | 2 +- .../build_environment/cmake/shaderc.cmake | 64 +++ .../cmake/shaderc_deps.cmake | 51 +++ .../build_environment/cmake/sndfile.cmake | 3 +- build_files/build_environment/cmake/ssl.cmake | 66 +-- build_files/build_environment/cmake/tbb.cmake | 32 +- build_files/build_environment/cmake/usd.cmake | 96 ++-- .../build_environment/cmake/versions.cmake | 130 ++++-- .../build_environment/cmake/vulkan.cmake | 55 +++ .../build_environment/cmake/wayland.cmake | 2 +- .../cmake/wayland_protocols.cmake | 2 +- .../build_environment/cmake/yamlcpp.cmake | 1 + .../build_environment/darwin/set_rpath.py | 19 + build_files/build_environment/install_deps.sh | 1 - .../patches/boost.user.jam.in | 2 +- .../build_environment/patches/materialx.diff | 13 + .../patches/opencollada.diff | Bin 5336 -> 6029 bytes .../patches/openimageio.diff | 13 - .../build_environment/patches/openvdb.diff | 353 +-------------- .../build_environment/patches/osl.diff | 120 ++--- .../patches/python_windows.diff | 22 + .../build_environment/patches/usd.diff | 100 +++-- .../build_environment/windows/build_deps.cmd | 14 +- .../cmake/Modules/FindOpenColorIO.cmake | 1 + build_files/cmake/config/blender_full.cmake | 1 + build_files/cmake/config/blender_lite.cmake | 1 + .../cmake/config/blender_release.cmake | 1 + .../cmake/platform/platform_apple.cmake | 28 +- .../platform/platform_old_libs_update.cmake | 17 + .../cmake/platform/platform_unix.cmake | 51 ++- .../cmake/platform/platform_win32.cmake | 162 ++++--- extern/mantaflow/helper/util/vectorbase.h | 7 - intern/cycles/cmake/macros.cmake | 1 + intern/ffmpeg/CMakeLists.txt | 2 +- intern/locale/CMakeLists.txt | 8 + release/scripts/site/sitecustomize.py | 41 ++ .../windows/manifest/Blender.CRT.MANIFEST.in | 4 - .../imbuf/intern/openexr/CMakeLists.txt | 5 + source/creator/CMakeLists.txt | 287 +++++++++++- 70 files changed, 1777 insertions(+), 1016 deletions(-) create mode 100644 build_files/build_environment/cmake/fribidi.cmake create mode 100644 build_files/build_environment/cmake/harfbuzz.cmake create mode 100644 build_files/build_environment/cmake/materialx.cmake create mode 100644 build_files/build_environment/cmake/minizipng.cmake create mode 100644 build_files/build_environment/cmake/pybind11.cmake create mode 100644 build_files/build_environment/cmake/shaderc.cmake create mode 100644 build_files/build_environment/cmake/shaderc_deps.cmake create mode 100644 build_files/build_environment/cmake/vulkan.cmake create mode 100644 build_files/build_environment/darwin/set_rpath.py create mode 100644 build_files/build_environment/patches/materialx.diff create mode 100644 build_files/build_environment/patches/python_windows.diff create mode 100644 release/scripts/site/sitecustomize.py delete mode 100644 release/windows/manifest/Blender.CRT.MANIFEST.in diff --git a/CMakeLists.txt b/CMakeLists.txt index f2d190be6bb..4de2454cfd8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -330,6 +330,9 @@ option(WITH_ALEMBIC "Enable Alembic Support" ON) # Universal Scene Description support option(WITH_USD "Enable Universal Scene Description (USD) Support" ON) +# MaterialX +option(WITH_MATERIALX "Enable MaterialX Support" OFF) + # 3D format support # Disable opencollada when we don't have precompiled libs option(WITH_OPENCOLLADA "Enable OpenCollada Support (http://www.opencollada.org)" ON) @@ -1920,6 +1923,7 @@ if(FIRST_RUN) info_cfg_option(WITH_QUADRIFLOW) info_cfg_option(WITH_TBB) info_cfg_option(WITH_USD) + info_cfg_option(WITH_MATERIALX) info_cfg_option(WITH_XR_OPENXR) info_cfg_text("Compiler Options:") diff --git a/build_files/build_environment/CMakeLists.txt b/build_files/build_environment/CMakeLists.txt index 999223603d5..f8a4d5d8c20 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) @@ -66,18 +68,16 @@ endif() if(UNIX) include(cmake/nasm.cmake) endif() -include(cmake/openimageio.cmake) include(cmake/tiff.cmake) if(WIN32) include(cmake/flexbison.cmake) 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) @@ -86,7 +86,10 @@ else() endif() include(cmake/python_site_packages.cmake) include(cmake/package_python.cmake) +include(cmake/openimageio.cmake) include(cmake/usd.cmake) +include(cmake/materialx.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 +103,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 +122,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 +170,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 +181,9 @@ 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/pybind11.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..34544ca176b 100644 --- a/build_files/build_environment/cmake/check_software.cmake +++ b/build_files/build_environment/cmake/check_software.cmake @@ -19,6 +19,12 @@ if(UNIX) yasm ) + if(APPLE) + list(APPEND _required_software dos2unix) + else() + list(APPEND _required_software patchelf) + endif() + foreach(_software ${_required_software}) find_program(_software_find NAMES ${_software}) if(NOT _software_find) @@ -46,10 +52,10 @@ 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" + " brew install autoconf automake bison dos2unix flex libtool meson ninja pkg-config yasm\n" "\n" "Other platforms:\n" " Install equivalent packages.\n") diff --git a/build_files/build_environment/cmake/download.cmake b/build_files/build_environment/cmake/download.cmake index 8d75f0ff0ed..a6fa82bceed 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) @@ -125,6 +126,7 @@ download_source(SSL) download_source(SQLITE) download_source(EMBREE) download_source(USD) +download_source(MATERIALX) download_source(OIDN) download_source(LIBGLU) download_source(MESA) @@ -163,3 +165,12 @@ 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) +download_source(PYBIND11) 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/epoxy.cmake b/build_files/build_environment/cmake/epoxy.cmake index 4cd9158f2ac..312784598d4 100644 --- a/build_files/build_environment/cmake/epoxy.cmake +++ b/build_files/build_environment/cmake/epoxy.cmake @@ -10,7 +10,7 @@ ExternalProject_Add(external_epoxy URL_HASH ${EPOXY_HASH_TYPE}=${EPOXY_HASH} PREFIX ${BUILD_DIR}/epoxy PATCH_COMMAND ${PATCH_CMD} -p 1 -N -d ${BUILD_DIR}/epoxy/src/external_epoxy/ < ${PATCH_DIR}/epoxy.diff - CONFIGURE_COMMAND ${CONFIGURE_ENV} && meson setup --prefix ${LIBDIR}/epoxy --default-library ${EPOXY_LIB_TYPE} --libdir lib ${BUILD_DIR}/epoxy/src/external_epoxy-build ${BUILD_DIR}/epoxy/src/external_epoxy -Dtests=false + CONFIGURE_COMMAND ${CONFIGURE_ENV} && ${MESON} setup --prefix ${LIBDIR}/epoxy --default-library ${EPOXY_LIB_TYPE} --libdir lib ${BUILD_DIR}/epoxy/src/external_epoxy-build ${BUILD_DIR}/epoxy/src/external_epoxy -Dtests=false BUILD_COMMAND ninja INSTALL_COMMAND ninja install ) @@ -23,3 +23,8 @@ if(BUILD_MODE STREQUAL Release AND WIN32) DEPENDEES install ) endif() + +add_dependencies( + external_epoxy + external_python_site_packages +) 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..619ed66f603 --- /dev/null +++ b/build_files/build_environment/cmake/harfbuzz.cmake @@ -0,0 +1,44 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + +if(WIN32) + set(HARFBUZZ_CONFIGURE_ENV ${CONFIGURE_ENV_MSVC}) + set(HARFBUZZ_PKG_ENV FREETYPE_DIR=${LIBDIR}/freetype) +else() + set(HARFBUZZ_CONFIGURE_ENV ${CONFIGURE_ENV}) + set(HARFBUZZ_PKG_ENV PKG_CONFIG_PATH=${LIBDIR}/freetype/lib/pkgconfig:${LIBDIR}/brotli/lib/pkgconfig:$PKG_CONFIG_PATH) +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} && + ${CMAKE_COMMAND} -E env ${HARFBUZZ_PKG_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..893042afa00 100644 --- a/build_files/build_environment/cmake/harvest.cmake +++ b/build_files/build_environment/cmake/harvest.cmake @@ -11,194 +11,259 @@ 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() +function(harvest_rpath_lib from to pattern) + harvest(${from} ${to} ${pattern}) - 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() + 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() - 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") +# 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_rpath_lib(opencolorio/lib opencolorio/lib "*${SHAREDLIBEXT}*") +harvest_rpath_python(opencolorio/lib/python${PYTHON_SHORT_VERSION} python/lib/python${PYTHON_SHORT_VERSION} "*") +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_rpath_python(openimageio/lib/python${PYTHON_SHORT_VERSION} python/lib/python${PYTHON_SHORT_VERSION} "*") +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(materialx/include materialx/include "*.h") +harvest(materialx/lib materialx/lib "*") +harvest(materialx/libraries materialx/libraries "*") +harvest(materialx/python materialx/python "*") +harvest(materialx/lib/cmake/MaterialX materialx/lib/cmake/MaterialX "*.cmake") +harvest_rpath_python(materialx/python/MaterialX python/lib/python${PYTHON_SHORT_VERSION}/site-packages/MaterialX "*") +# We do not need anything from the resources folder, but the MaterialX config +# file will complain if the folder does not exist, so just copy the readme.md +# files to ensure the folder will exist. +harvest(materialx/resources materialx/resources "README.md") +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}$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/materialx.cmake b/build_files/build_environment/cmake/materialx.cmake new file mode 100644 index 00000000000..cb45f444e59 --- /dev/null +++ b/build_files/build_environment/cmake/materialx.cmake @@ -0,0 +1,57 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + +set(MATERIALX_EXTRA_ARGS + -DMATERIALX_BUILD_PYTHON=ON + -DMATERIALX_BUILD_RENDER=OFF + -DMATERIALX_INSTALL_PYTHON=OFF + -DMATERIALX_PYTHON_EXECUTABLE=${PYTHON_BINARY} + -DMATERIALX_PYTHON_VERSION=${PYTHON_SHORT_VERSION} + -DMATERIALX_BUILD_SHARED_LIBS=ON + -DCMAKE_DEBUG_POSTFIX=_d + -Dpybind11_ROOT=${LIBDIR}/pybind11 + -DPython_EXECUTABLE=${PYTHON_BINARY} +) + +ExternalProject_Add(external_materialx + URL file://${PACKAGE_DIR}/${MATERIALX_FILE} + DOWNLOAD_DIR ${DOWNLOAD_DIR} + URL_HASH ${MATERIALX_HASH_TYPE}=${MATERIALX_HASH} + PREFIX ${BUILD_DIR}/materialx + CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR} + PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/materialx/src/external_materialx < ${PATCH_DIR}/materialx.diff + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/materialx ${DEFAULT_CMAKE_FLAGS} ${MATERIALX_EXTRA_ARGS} + INSTALL_DIR ${LIBDIR}/materialx +) + +if(WIN32) + set(MATERIALX_PYTHON_TARGET ${HARVEST_TARGET}/materialx/python/${BUILD_MODE}) + string(REPLACE "/" "\\" MATERIALX_PYTHON_TARGET_DOS "${MATERIALX_PYTHON_TARGET}") + if(BUILD_MODE STREQUAL Release) + ExternalProject_Add_Step(external_materialx after_install + COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/materialx/include ${HARVEST_TARGET}/materialx/include + COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/materialx/libraries ${HARVEST_TARGET}/materialx/libraries + COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/materialx/lib/ ${HARVEST_TARGET}/materialx/lib/ + COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/materialx/bin/ ${HARVEST_TARGET}/materialx/bin/ + COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/materialx/python/ ${MATERIALX_PYTHON_TARGET} + COMMAND del ${MATERIALX_PYTHON_TARGET_DOS}\\MaterialX\\*.lib + DEPENDEES install + ) + endif() + if(BUILD_MODE STREQUAL Debug) + ExternalProject_Add_Step(external_materialx after_install + COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/materialx/lib/ ${HARVEST_TARGET}/materialx/lib/ + COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/materialx/bin/ ${HARVEST_TARGET}/materialx/bin/ + COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/materialx/python/ ${MATERIALX_PYTHON_TARGET} + COMMAND del ${MATERIALX_PYTHON_TARGET_DOS}\\MaterialX\\*.lib + DEPENDEES install + ) + endif() + unset(MATERIALX_PYTHON_TARGET) + unset(MATERIALX_PYTHON_TARGET_DOS) +endif() + +add_dependencies( + external_materialx + external_python + external_pybind11 +) diff --git a/build_files/build_environment/cmake/mesa.cmake b/build_files/build_environment/cmake/mesa.cmake index 8a40e8dc0de..63b17189e10 100644 --- a/build_files/build_environment/cmake/mesa.cmake +++ b/build_files/build_environment/cmake/mesa.cmake @@ -43,7 +43,7 @@ ExternalProject_Add(external_mesa PREFIX ${BUILD_DIR}/mesa CONFIGURE_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/mesa/src/external_mesa/ && - meson ${BUILD_DIR}/mesa/src/external_mesa-build --prefix=${LIBDIR}/mesa ${MESA_EXTRA_FLAGS} + ${MESON} ${BUILD_DIR}/mesa/src/external_mesa-build --prefix=${LIBDIR}/mesa ${MESA_EXTRA_FLAGS} BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/mesa/src/external_mesa-build && ninja -j${MAKE_THREADS} INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/mesa/src/external_mesa-build && ninja install INSTALL_DIR ${LIBDIR}/mesa @@ -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/opencollada.cmake b/build_files/build_environment/cmake/opencollada.cmake index b1a3028debd..9e403f25181 100644 --- a/build_files/build_environment/cmake/opencollada.cmake +++ b/build_files/build_environment/cmake/opencollada.cmake @@ -9,13 +9,17 @@ if(UNIX) # as does the OPENCOLLADA package, if this can be corrected upstream that would be better. # For now use `sed` to force UNIX line endings so the patch applies. # Needed as neither ignoring white-space or applying as a binary resolve this problem. + if(APPLE) + set(_dos2unix dos2unix) + else() + set(_dos2unix sed -i "s/\\r//") + endif() set(PATCH_MAYBE_DOS2UNIX_CMD - sed -i "s/\\r//" + ${_dos2unix} ${PATCH_DIR}/opencollada.diff ${BUILD_DIR}/opencollada/src/external_opencollada/CMakeLists.txt ${BUILD_DIR}/opencollada/src/external_opencollada/Externals/LibXML/CMakeLists.txt && ) - else() set(OPENCOLLADA_EXTRA_ARGS -DCMAKE_DEBUG_POSTFIX=_d diff --git a/build_files/build_environment/cmake/opencolorio.cmake b/build_files/build_environment/cmake/opencolorio.cmake index 4e2d1503406..17336c73ddb 100644 --- a/build_files/build_environment/cmake/opencolorio.cmake +++ b/build_files/build_environment/cmake/opencolorio.cmake @@ -2,10 +2,10 @@ set(OPENCOLORIO_EXTRA_ARGS -DOCIO_BUILD_APPS=OFF - -DOCIO_BUILD_PYTHON=OFF + -DOCIO_BUILD_PYTHON=ON -DOCIO_BUILD_NUKE=OFF -DOCIO_BUILD_JAVA=OFF - -DBUILD_SHARED_LIBS=OFF + -DBUILD_SHARED_LIBS=ON -DOCIO_BUILD_DOCS=OFF -DOCIO_BUILD_TESTS=OFF -DOCIO_BUILD_GPU_TESTS=OFF @@ -15,10 +15,30 @@ 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/ + -DPython_EXECUTABLE=${PYTHON_BINARY} + -Dpybind11_ROOT=${LIBDIR}/pybind11 ) +if(APPLE) + set(OPENCOLORIO_EXTRA_ARGS + ${OPENCOLORIO_EXTRA_ARGS} + "-DCMAKE_SHARED_LINKER_FLAGS=-liconv ${LIBDIR}/bzip2/lib/${LIBPREFIX}bz2${LIBEXT}" + ) +elseif(UNIX) + set(OPENCOLORIO_EXTRA_ARGS + ${OPENCOLORIO_EXTRA_ARGS} + "-DCMAKE_SHARED_LINKER_FLAGS=${LIBDIR}/bzip2/lib/${LIBPREFIX}bz2${LIBEXT}" + ) +endif() + if(BLENDER_PLATFORM_ARM) set(OPENCOLORIO_EXTRA_ARGS ${OPENCOLORIO_EXTRA_ARGS} @@ -27,11 +47,16 @@ if(BLENDER_PLATFORM_ARM) endif() if(WIN32) + set(OPENCOLORIO_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DIMATH_DLL") + if(BUILD_MODE STREQUAL Debug) + set(OPENCOLORIO_CXX_FLAGS "${OPENCOLORIO_CXX_FLAGS} -DPy_DEBUG") + endif() 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_DEBUG_POSTFIX=_d + -Dexpat_LIBRARY=${LIBDIR}/expat/lib/libexpat$<$:d>MD${LIBEXT} + -DImath_LIBRARY=${LIBDIR}/imath/lib/imath${OPENEXR_VERSION_POSTFIX}${LIBEXT} + -DCMAKE_CXX_FLAGS=${OPENCOLORIO_CXX_FLAGS} ) else() set(OPENCOLORIO_EXTRA_ARGS @@ -43,6 +68,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,25 +81,26 @@ add_dependencies( external_expat external_imath external_pystring + external_zlib + external_minizipng + external_python + external_pybind11 ) if(WIN32) if(BUILD_MODE STREQUAL Release) 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 ${LIBDIR}/opencolorio/bin/OpenColorIO_2_2.dll ${HARVEST_TARGET}/opencolorio/bin/OpenColorIO_2_2.dll 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}/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 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}/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 + COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/opencolorio/bin/OpenColorIO_d_2_2.dll ${HARVEST_TARGET}/opencolorio/bin/OpenColorIO_d_2_2.dll + COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/opencolorio/lib/Opencolorio_d.lib ${HARVEST_TARGET}/opencolorio/lib/OpenColorIO_d.lib + COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/opencolorio/lib/site-packages ${HARVEST_TARGET}/opencolorio/lib/site-packages-debug DEPENDEES install ) endif() 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..d65fbe8223e 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 @@ -54,7 +56,7 @@ set(OPENIMAGEIO_EXTRA_ARGS -DUSE_OPENGL=OFF -DUSE_TBB=OFF -DUSE_QT=OFF - -DUSE_PYTHON=OFF + -DUSE_PYTHON=ON -DUSE_GIF=OFF -DUSE_OPENCV=OFF -DUSE_OPENJPEG=ON @@ -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/ @@ -91,12 +94,15 @@ set(OPENIMAGEIO_EXTRA_ARGS ${OIIO_SIMD_FLAGS} -DOpenEXR_ROOT=${LIBDIR}/openexr -DImath_ROOT=${LIBDIR}/imath + -Dpybind11_ROOT=${LIBDIR}/pybind11 + -DPython_EXECUTABLE=${PYTHON_BINARY} ) 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} @@ -117,6 +123,8 @@ add_dependencies( external_robinmap external_openjpeg${OPENJPEG_POSTFIX} external_webp + external_python + external_pybind11 ) if(WIN32) @@ -125,7 +133,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 +142,9 @@ 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 + COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/OpenImageIO/lib/python${PYTHON_SHORT_VERSION}/ ${HARVEST_TARGET}/OpenImageIO/lib/python${PYTHON_SHORT_VERSION}_debug/ 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..44eca741e77 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") - 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") - 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") - 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") + # 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_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_C_FLAGS_DEBUG "/MDd ${COMMON_MSVC_FLAGS} /O2 /Ob2 /D_DEBUG /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS") 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_C_FLAGS_DEBUG "/MDd ${COMMON_MSVC_FLAGS} /Zi /Ob0 /Od /RTC1 /D_DEBUG /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS") 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_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} /D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS /O2 /Ob2 /D_DEBUG /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 /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} /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/pybind11.cmake b/build_files/build_environment/cmake/pybind11.cmake new file mode 100644 index 00000000000..986da7f0006 --- /dev/null +++ b/build_files/build_environment/cmake/pybind11.cmake @@ -0,0 +1,21 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + +set(PYBIND11_EXTRA_ARGS + -DPYBIND11_TEST=OFF + -DPYTHON_EXECUTABLE=${PYTHON_BINARY} +) + +ExternalProject_Add(external_pybind11 + URL file://${PACKAGE_DIR}/${PYBIND11_FILE} + DOWNLOAD_DIR ${DOWNLOAD_DIR} + URL_HASH ${PYBIND11_HASH_TYPE}=${PYBIND11_HASH} + PREFIX ${BUILD_DIR}/pybind11 + CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/pybind11 ${DEFAULT_CMAKE_FLAGS} ${PYBIND11_EXTRA_ARGS} + INSTALL_DIR ${LIBDIR}/pybind11 +) + +add_dependencies( + external_pybind11 + external_python +) diff --git a/build_files/build_environment/cmake/python.cmake b/build_files/build_environment/cmake/python.cmake index 72ae27ddfdb..3d055a8af0b 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,15 @@ 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. - CONFIGURE_COMMAND mkdir ${PYTHON_EXTERNALS_FOLDER_DOS} && + # copy until they update. Same rules apply to openssl foldernames HAVE to match + # regardless of the version actually in there. + PATCH_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 + CONFIGURE_COMMAND echo "." + 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 +75,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 +102,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/sndfile.cmake b/build_files/build_environment/cmake/sndfile.cmake index a2ac2a33779..1e4249e7e53 100644 --- a/build_files/build_environment/cmake/sndfile.cmake +++ b/build_files/build_environment/cmake/sndfile.cmake @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later set(SNDFILE_EXTRA_ARGS) -set(SNDFILE_ENV PKG_CONFIG_PATH=${mingw_LIBDIR}/ogg/lib/pkgconfig:${mingw_LIBDIR}/vorbis/lib/pkgconfig:${mingw_LIBDIR}/flac/lib/pkgconfig:${mingw_LIBDIR}) +set(SNDFILE_ENV PKG_CONFIG_PATH=${mingw_LIBDIR}/ogg/lib/pkgconfig:${mingw_LIBDIR}/vorbis/lib/pkgconfig:${mingw_LIBDIR}/flac/lib/pkgconfig:${mingw_LIBDIR}/opus/lib/pkgconfig:${mingw_LIBDIR}) if(WIN32) set(SNDFILE_ENV set ${SNDFILE_ENV} &&) @@ -30,6 +30,7 @@ add_dependencies( external_sndfile external_ogg external_vorbis + external_opus ) if(UNIX) add_dependencies( 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..439d098a847 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}${SHAREDLIBEXT} -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..507fab2dc09 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) @@ -159,9 +165,9 @@ set(OPENMP_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${ set(OPENMP_HASH_TYPE MD5) set(OPENMP_FILE openmp-${OPENMP_VERSION}.src.tar.xz) -set(OPENIMAGEIO_VERSION v2.3.20.0) +set(OPENIMAGEIO_VERSION v2.4.6.0) set(OPENIMAGEIO_URI https://github.com/OpenImageIO/oiio/archive/refs/tags/${OPENIMAGEIO_VERSION}.tar.gz) -set(OPENIMAGEIO_HASH defb1fe7c8e64bac60eb3cacaf5c3736) +set(OPENIMAGEIO_HASH c7acc1b9a8fda04ef48f7de1feda4dae) set(OPENIMAGEIO_HASH_TYPE MD5) set(OPENIMAGEIO_FILE OpenImageIO-${OPENIMAGEIO_VERSION}.tar.gz) @@ -189,9 +195,9 @@ 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) +set(OSL_VERSION 1.12.7.1) +set(OSL_URI https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/archive/v${OSL_VERSION}.tar.gz) +set(OSL_HASH 53211da86c34ba6e0344998c1a6d219c) set(OSL_HASH_TYPE MD5) set(OSL_FILE OpenShadingLanguage-${OSL_VERSION}.tar.gz) @@ -212,9 +218,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 +230,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 +238,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 +366,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,12 +464,18 @@ 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) +set(MATERIALX_VERSION 1.38.6) +set(MATERIALX_URI https://github.com/AcademySoftwareFoundation/MaterialX/archive/refs/tags/v${MATERIALX_VERSION}.tar.gz) +set(MATERIALX_HASH d49c9fdef34b5702fc60058d3e1864f2) +set(MATERIALX_HASH_TYPE MD5) +set(MATERIALX_FILE materialx-v${MATERIALX_VERSION}.tar.gz) + set(OIDN_VERSION 1.4.3) set(OIDN_URI https://github.com/OpenImageDenoise/oidn/releases/download/v${OIDN_VERSION}/oidn-${OIDN_VERSION}.src.tar.gz) set(OIDN_HASH 027093eaf5e8b4e45835b991137b38e6) @@ -708,3 +721,60 @@ 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) + +set(PYBIND11_VERSION 2.10.1) +set(PYBIND11_URI https://github.com/pybind/pybind11/archive/refs/tags/v${PYBIND11_VERSION}.tar.gz) +set(PYBIND11_HASH ce07bfd5089245da7807b3faf6cbc878) +set(PYBIND11_HASH_TYPE MD5) +set(PYBIND11_FILE pybind-v${PYBIND11_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/wayland.cmake b/build_files/build_environment/cmake/wayland.cmake index c73db1d10ff..279ca6a787c 100644 --- a/build_files/build_environment/cmake/wayland.cmake +++ b/build_files/build_environment/cmake/wayland.cmake @@ -14,7 +14,7 @@ ExternalProject_Add(external_wayland # NOTE: `-lm` is needed for `libxml2` which is a static library that uses `libm.so`, # without this, math symbols such as `floor` aren't found. CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env PKG_CONFIG_PATH=${LIBDIR}/expat/lib/pkgconfig:${LIBDIR}/xml2/lib/pkgconfig:${LIBDIR}/ffi/lib/pkgconfig:$PKG_CONFIG_PATH - meson --prefix ${LIBDIR}/wayland -Ddocumentation=false -Dtests=false -D "c_link_args=-L${LIBDIR}/ffi/lib -lm" . ../external_wayland + ${MESON} --prefix ${LIBDIR}/wayland -Ddocumentation=false -Dtests=false -D "c_link_args=-L${LIBDIR}/ffi/lib -lm" . ../external_wayland BUILD_COMMAND ninja INSTALL_COMMAND ninja install ) diff --git a/build_files/build_environment/cmake/wayland_protocols.cmake b/build_files/build_environment/cmake/wayland_protocols.cmake index 9bdbc38fd6c..6d5ff3eb89e 100644 --- a/build_files/build_environment/cmake/wayland_protocols.cmake +++ b/build_files/build_environment/cmake/wayland_protocols.cmake @@ -7,7 +7,7 @@ ExternalProject_Add(external_wayland_protocols PREFIX ${BUILD_DIR}/wayland-protocols # Use `-E` so the `PKG_CONFIG_PATH` can be defined to link against our own WAYLAND. CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env PKG_CONFIG_PATH=${LIBDIR}/wayland/lib64/pkgconfig:$PKG_CONFIG_PATH - meson --prefix ${LIBDIR}/wayland-protocols . ../external_wayland_protocols -Dtests=false + ${MESON} --prefix ${LIBDIR}/wayland-protocols . ../external_wayland_protocols -Dtests=false BUILD_COMMAND ninja INSTALL_COMMAND ninja install ) 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 26da5819884..c7b4c5930af 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/materialx.diff b/build_files/build_environment/patches/materialx.diff new file mode 100644 index 00000000000..024d4b6ad74 --- /dev/null +++ b/build_files/build_environment/patches/materialx.diff @@ -0,0 +1,13 @@ +diff -Naur orig/source/PyMaterialX/PyBind11/tools/FindPythonLibsNew.cmake external_materialx/source/PyMaterialX/PyBind11/tools/FindPythonLibsNew.cmake +--- orig/source/PyMaterialX/PyBind11/tools/FindPythonLibsNew.cmake 2022-11-04 14:23:29 -0600 ++++ external_materialx/source/PyMaterialX/PyBind11/tools/FindPythonLibsNew.cmake 2022-11-08 11:58:45 -0700 +@@ -181,6 +181,9 @@ + string(REGEX REPLACE "\\\\" "/" PYTHON_SITE_PACKAGES "${PYTHON_SITE_PACKAGES}") + + if(CMAKE_HOST_WIN32) ++ if(PYTHON_EXECUTABLE MATCHES "_d.exe$") ++ set(PYTHON_LIBRARY_SUFFIX ${PYTHON_LIBRARY_SUFFIX}_d) ++ endif() + set(PYTHON_LIBRARY "${PYTHON_PREFIX}/libs/python${PYTHON_LIBRARY_SUFFIX}.lib") + + # when run in a venv, PYTHON_PREFIX points to it. But the libraries remain in the \ 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 02eab251a13bd56b6377ecaca2cc0f6b4ff78c16..edb831dc20fce60da07c657358bb6d8d79df9ec7 100644 GIT binary patch delta 938 zcmb_bL2DC17^PB`U2l5QB7QW7cG*mJHz{ciB1w}}qj5L1)%LbbcV?5Jli4ttC5pw| z1;G;khe(h94G$juC;BB73!(+V!w$=P%zJOxw!yMypKq>R9VMDOvrpGn&Y~-~uHTvCq}Aq$!Y)<{F|ASIwx~ZL}IBC{;_bMP;0!V3J8m8U35m^inCC z5c0obS!F-iB0)gPRR}g}8RBD z)ayXXmEtD2i?v?2r%4v2T7;wAfG{x0^zpf4vpX?ZCTMw) I4854orNkE`CTAz6r)q%2G0;LYJNKanC#J4$siIrUjEUW9{k}Ul;27c& x@9O91 - #endif - 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; +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; - #endif // __CUDACC_RTC__ +- static_assert(std::is_same::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::value, "cache item node type is not leaf node type"); --#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 - /// Maximum floating-point values - template - struct Maximum; --#ifdef __CUDA_ARCH__ -+#if defined(__CUDA_ARCH__) || defined(__HIP__) - template<> - struct Maximum - { -@@ -1176,10 +1176,10 @@ using Vec3f = Vec3; - using Vec3i = Vec3; - - /// @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 --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 --int Grid::findBlindDataForSemantic(GridBlindDataSemantic semantic) const -+__hostdev__ int Grid::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 - }; // Tree class - - template --void Tree::extrema(ValueType& min, ValueType& max) const -+__hostdev__ void Tree::extrema(ValueType& min, ValueType& max) const - { - min = this->root().minimum(); - max = this->root().maximum(); -@@ -3880,7 +3880,7 @@ class LeafNode : private LeafData - }; // LeafNode class - - template class MaskT, uint32_t LOG2DIM> --inline void LeafNode::updateBBox() -+__hostdev__ inline void LeafNode::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 // for floor -@@ -136,7 +136,7 @@ class SampleFromVoxels - - template - template --typename TreeOrAccT::ValueType SampleFromVoxels::operator()(const Vec3T& xyz) const -+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels::operator()(const Vec3T& xyz) const - { - const CoordT ijk = Round(xyz); - if (ijk != mPos) { -@@ -147,7 +147,7 @@ typename TreeOrAccT::ValueType SampleFromVoxels::operator() - } - - template --typename TreeOrAccT::ValueType SampleFromVoxels::operator()(const CoordT& ijk) const -+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels::operator()(const CoordT& ijk) const - { - if (ijk != mPos) { - mPos = ijk; -@@ -158,7 +158,7 @@ typename TreeOrAccT::ValueType SampleFromVoxels::operator() - - template - template --typename TreeOrAccT::ValueType SampleFromVoxels::operator()(const Vec3T& xyz) const -+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels::operator()(const Vec3T& xyz) const - { - return mAcc.getValue(Round(xyz)); - } -@@ -195,7 +195,7 @@ class TrilinearSampler - }; // TrilinearSamplerBase - - template --void TrilinearSampler::stencil(CoordT& ijk, ValueT (&v)[2][2][2]) const -+__hostdev__ void TrilinearSampler::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::stencil(CoordT& ijk, ValueT (&v)[2][2][2]) co - - template - template class Vec3T> --typename TreeOrAccT::ValueType TrilinearSampler::sample(const Vec3T &uvw, const ValueT (&v)[2][2][2]) -+__hostdev__ typename TreeOrAccT::ValueType TrilinearSampler::sample(const Vec3T &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::sample(const Vec3T< - - template - template class Vec3T> --Vec3T TrilinearSampler::gradient(const Vec3T &uvw, const ValueT (&v)[2][2][2]) -+__hostdev__ Vec3T TrilinearSampler::gradient(const Vec3T &uvw, const ValueT (&v)[2][2][2]) - { - static_assert(is_floating_point::value, "TrilinearSampler::gradient requires a floating-point type"); - #if 0 -@@ -270,7 +270,7 @@ Vec3T TrilinearSampler::gradient(con - } - - template --bool TrilinearSampler::zeroCrossing(const ValueT (&v)[2][2][2]) -+__hostdev__ bool TrilinearSampler::zeroCrossing(const ValueT (&v)[2][2][2]) - { - static_assert(is_floating_point::value, "TrilinearSampler::zeroCrossing requires a floating-point type"); - const bool less = v[0][0][0] < ValueT(0); -@@ -363,21 +363,21 @@ class SampleFromVoxels : public TrilinearSampler - template class Vec3T> --typename TreeOrAccT::ValueType SampleFromVoxels::operator()(Vec3T xyz) const -+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels::operator()(Vec3T xyz) const - { - this->cache(xyz); - return BaseT::sample(xyz, mVal); - } - - template --typename TreeOrAccT::ValueType SampleFromVoxels::operator()(const CoordT &ijk) const -+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels::operator()(const CoordT &ijk) const - { - return ijk == mPos ? mVal[0][0][0] : BaseT::mAcc.getValue(ijk); - } - - template - template class Vec3T> --Vec3T SampleFromVoxels::gradient(Vec3T xyz) const -+__hostdev__ Vec3T SampleFromVoxels::gradient(Vec3T xyz) const - { - this->cache(xyz); - return BaseT::gradient(xyz, mVal); -@@ -393,7 +393,7 @@ __hostdev__ bool SampleFromVoxels::zeroCrossing(Vec3T - template class Vec3T> --void SampleFromVoxels::cache(Vec3T& xyz) const -+__hostdev__ void SampleFromVoxels::cache(Vec3T& xyz) const - { - CoordT ijk = Floor(xyz); - if (ijk != mPos) { -@@ -406,7 +406,7 @@ void SampleFromVoxels::cache(Vec3T& xyz) const - - template - template class Vec3T> --typename TreeOrAccT::ValueType SampleFromVoxels::operator()(Vec3T xyz) const -+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels::operator()(Vec3T xyz) const - { - ValueT val[2][2][2]; - CoordT ijk = Floor(xyz); -@@ -418,7 +418,7 @@ typename TreeOrAccT::ValueType SampleFromVoxels::operator( - - template - template class Vec3T> --typename TreeOrAccT::ValueType SampleFromVoxels::operator()(Vec3T xyz) const -+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels::operator()(Vec3T xyz) const - { - auto lerp = [](ValueT a, ValueT b, RealT w) { return a + ValueT(w) * (b - a); }; - -@@ -463,7 +463,7 @@ typename TreeOrAccT::ValueType SampleFromVoxels::operator( - - template - template class Vec3T> --inline Vec3T SampleFromVoxels::gradient(Vec3T xyz) const -+__hostdev__ inline Vec3T SampleFromVoxels::gradient(Vec3T xyz) const - { - ValueT val[2][2][2]; - CoordT ijk = Floor(xyz); -@@ -473,7 +473,7 @@ inline Vec3T SampleFromVoxels - template class Vec3T> --bool SampleFromVoxels::zeroCrossing(Vec3T xyz) const -+__hostdev__ bool SampleFromVoxels::zeroCrossing(Vec3T xyz) const - { - ValueT val[2][2][2]; - CoordT ijk = Floor(xyz); -@@ -510,7 +510,7 @@ class TriquadraticSampler - }; // TriquadraticSamplerBase - - template --void TriquadraticSampler::stencil(const CoordT &ijk, ValueT (&v)[3][3][3]) const -+__hostdev__ void TriquadraticSampler::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::stencil(const CoordT &ijk, ValueT (&v)[3][ - - template - template class Vec3T> --typename TreeOrAccT::ValueType TriquadraticSampler::sample(const Vec3T &uvw, const ValueT (&v)[3][3][3]) -+__hostdev__ typename TreeOrAccT::ValueType TriquadraticSampler::sample(const Vec3T &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::sample(const Vec - } - - template --bool TriquadraticSampler::zeroCrossing(const ValueT (&v)[3][3][3]) -+__hostdev__ bool TriquadraticSampler::zeroCrossing(const ValueT (&v)[3][3][3]) - { - static_assert(is_floating_point::value, "TrilinearSampler::zeroCrossing requires a floating-point type"); - const bool less = v[0][0][0] < ValueT(0); -@@ -624,14 +624,14 @@ class SampleFromVoxels : public TriquadraticSampler - template class Vec3T> --typename TreeOrAccT::ValueType SampleFromVoxels::operator()(Vec3T xyz) const -+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels::operator()(Vec3T xyz) const - { - this->cache(xyz); - return BaseT::sample(xyz, mVal); - } - - template --typename TreeOrAccT::ValueType SampleFromVoxels::operator()(const CoordT &ijk) const -+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels::operator()(const CoordT &ijk) const - { - return ijk == mPos ? mVal[1][1][1] : BaseT::mAcc.getValue(ijk); - } -@@ -646,7 +646,7 @@ __hostdev__ bool SampleFromVoxels::zeroCrossing(Vec3T - template class Vec3T> --void SampleFromVoxels::cache(Vec3T& xyz) const -+__hostdev__ void SampleFromVoxels::cache(Vec3T& xyz) const - { - CoordT ijk = Floor(xyz); - if (ijk != mPos) { -@@ -657,7 +657,7 @@ void SampleFromVoxels::cache(Vec3T& xyz) const - - template - template class Vec3T> --typename TreeOrAccT::ValueType SampleFromVoxels::operator()(Vec3T xyz) const -+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels::operator()(Vec3T xyz) const - { - ValueT val[3][3][3]; - CoordT ijk = Floor(xyz); -@@ -667,7 +667,7 @@ typename TreeOrAccT::ValueType SampleFromVoxels::operator( - - template - template class Vec3T> --bool SampleFromVoxels::zeroCrossing(Vec3T xyz) const -+__hostdev__ bool SampleFromVoxels::zeroCrossing(Vec3T xyz) const - { - ValueT val[3][3][3]; - CoordT ijk = Floor(xyz); -@@ -710,7 +710,7 @@ class TricubicSampler - }; // TricubicSampler - - template --void TricubicSampler::stencil(const CoordT& ijk, ValueT (&C)[64]) const -+__hostdev__ void TricubicSampler::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 : public TricubicSampler - - template - template class Vec3T> --typename TreeOrAccT::ValueType SampleFromVoxels::operator()(Vec3T xyz) const -+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels::operator()(Vec3T xyz) const - { - this->cache(xyz); - return BaseT::sample(xyz, mC); -@@ -937,7 +937,7 @@ typename TreeOrAccT::ValueType SampleFromVoxels::operator() - - template - template class Vec3T> --void SampleFromVoxels::cache(Vec3T& xyz) const -+__hostdev__ void SampleFromVoxels::cache(Vec3T& xyz) const - { - CoordT ijk = Floor(xyz); - if (ijk != mPos) { - + 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 - #include - -+#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 #include #include -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()) }; +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; } -- -- - namespace pvt { - - typedef llvm::SectionMemoryManager LLVMMemoryManager; -@@ -182,6 +180,13 @@ - ++jit_mem_hold_users; - } - -+void -+LLVM_Util::Cleanup() -+{ -+ if (jitmm_hold) -+ jitmm_hold->clear(); -+} -+ - - 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 - #include - - #include -@@ -23,6 +22,8 @@ using std::countr_zero; - - #elif OSL_INTEL_CLASSIC_COMPILER_VERSION - -+#include -+ - 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..a8d0d6d8126 --- /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 ++REM if 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 -+ - 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 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/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/config/blender_full.cmake b/build_files/cmake/config/blender_full.cmake index 95304bd64c7..b44250b011b 100644 --- a/build_files/cmake/config/blender_full.cmake +++ b/build_files/cmake/config/blender_full.cmake @@ -58,6 +58,7 @@ set(WITH_QUADRIFLOW ON CACHE BOOL "" FORCE) set(WITH_SDL ON CACHE BOOL "" FORCE) set(WITH_TBB ON CACHE BOOL "" FORCE) set(WITH_USD ON CACHE BOOL "" FORCE) +set(WITH_MATERIALX OFF CACHE BOOL "" FORCE) set(WITH_MEM_JEMALLOC ON CACHE BOOL "" FORCE) diff --git a/build_files/cmake/config/blender_lite.cmake b/build_files/cmake/config/blender_lite.cmake index 38997e2139b..79a0e5f3858 100644 --- a/build_files/cmake/config/blender_lite.cmake +++ b/build_files/cmake/config/blender_lite.cmake @@ -63,6 +63,7 @@ set(WITH_QUADRIFLOW OFF CACHE BOOL "" FORCE) set(WITH_SDL OFF CACHE BOOL "" FORCE) set(WITH_TBB OFF CACHE BOOL "" FORCE) set(WITH_USD OFF CACHE BOOL "" FORCE) +set(WITH_MATERIALX OFF CACHE BOOL "" FORCE) set(WITH_WASAPI OFF CACHE BOOL "" FORCE) set(WITH_XR_OPENXR OFF CACHE BOOL "" FORCE) diff --git a/build_files/cmake/config/blender_release.cmake b/build_files/cmake/config/blender_release.cmake index 74bbcb223c3..08cb882ebfb 100644 --- a/build_files/cmake/config/blender_release.cmake +++ b/build_files/cmake/config/blender_release.cmake @@ -59,6 +59,7 @@ set(WITH_QUADRIFLOW ON CACHE BOOL "" FORCE) set(WITH_SDL ON CACHE BOOL "" FORCE) set(WITH_TBB ON CACHE BOOL "" FORCE) set(WITH_USD ON CACHE BOOL "" FORCE) +set(WITH_MATERIALX OFF CACHE BOOL "" FORCE) set(WITH_MEM_JEMALLOC ON CACHE BOOL "" FORCE) diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake/platform/platform_apple.cmake index cc13749a5ad..f7351f482bb 100644 --- a/build_files/cmake/platform/platform_apple.cmake +++ b/build_files/cmake/platform/platform_apple.cmake @@ -86,6 +86,15 @@ endif() if(WITH_USD) find_package(USD REQUIRED) + add_bundled_libraries(usd/lib) +endif() + +if(WITH_MATERIALX) + find_package(MaterialX) + set_and_warn_library_found("MaterialX" MaterialX_FOUND WITH_MATERIALX) + if(WITH_MATERIALX) + add_bundled_libraries(materialx/lib) + endif() endif() if(WITH_VULKAN_BACKEND) @@ -107,6 +116,7 @@ endif() if(WITH_OPENSUBDIV) find_package(OpenSubdiv) + add_bundled_libraries(opensubdiv/lib) endif() if(WITH_CODEC_SNDFILE) @@ -145,6 +155,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) @@ -243,12 +255,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) @@ -274,18 +291,24 @@ 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) find_package(OpenColorIO 2.0.0 REQUIRED) + add_bundled_libraries(opencolorio/lib) 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) @@ -334,6 +357,7 @@ endif() if(WITH_TBB) find_package(TBB REQUIRED) + add_bundled_libraries(tbb/lib) endif() if(WITH_POTRACE) diff --git a/build_files/cmake/platform/platform_old_libs_update.cmake b/build_files/cmake/platform/platform_old_libs_update.cmake index f0ca930bb39..1e98ea7a4ff 100644 --- a/build_files/cmake/platform/platform_old_libs_update.cmake +++ b/build_files/cmake/platform/platform_old_libs_update.cmake @@ -44,3 +44,20 @@ 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("^OPENCOLORIO") + 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 d27d3e04dbc..260fa2e58b2 100644 --- a/build_files/cmake/platform/platform_unix.cmake +++ b/build_files/cmake/platform/platform_unix.cmake @@ -68,10 +68,7 @@ if(EXISTS ${LIBDIR}) set(Boost_NO_SYSTEM_PATHS ON) set(OPENEXR_ROOT_DIR ${LIBDIR}/openexr) set(CLANG_ROOT_DIR ${LIBDIR}/llvm) -endif() - -if(WITH_STATIC_LIBS) - string(APPEND CMAKE_EXE_LINKER_FLAGS " -static-libstdc++") + set(MaterialX_DIR ${LIBDIR}/materialx/lib/cmake/MaterialX) endif() # Wrapper to prefer static libraries @@ -170,6 +167,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) @@ -326,11 +327,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() @@ -352,13 +354,24 @@ 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_MATERIALX) + find_package_wrapper(MaterialX) + set_and_warn_library_found("MaterialX" MaterialX_FOUND WITH_MATERIALX) + if(WITH_MATERIALX) + add_bundled_libraries(materialx/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) @@ -374,6 +387,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) @@ -400,6 +416,8 @@ if(WITH_BOOST) find_package(IcuLinux) list(APPEND BOOST_LIBRARIES ${ICU_LIBRARIES}) endif() + + add_bundled_libraries(boost/lib) endif() if(WITH_PUGIXML) @@ -422,7 +440,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) @@ -436,16 +453,20 @@ 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) find_package_wrapper(OpenColorIO 2.0.0) - set(OPENCOLORIO_LIBRARIES ${OPENCOLORIO_LIBRARIES}) - set(OPENCOLORIO_LIBPATH) # TODO, remove and reference the absolute path everywhere set(OPENCOLORIO_DEFINITIONS) - set_and_warn_library_found("OpenColorIO" OPENCOLORIO_FOUND WITH_OPENCOLORIO) + + if(WITH_OPENCOLORIO) + add_bundled_libraries(opencolorio/lib) + endif() endif() if(WITH_CYCLES AND WITH_CYCLES_EMBREE) @@ -481,17 +502,23 @@ if(WITH_LLVM) 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) diff --git a/build_files/cmake/platform/platform_win32.cmake b/build_files/cmake/platform/platform_win32.cmake index 4e3be0a9b0d..03132a5a079 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) @@ -285,6 +285,11 @@ if(CMAKE_GENERATOR MATCHES "^Visual Studio.+" AND WITH_CLANG_TIDY) set(VS_CLANG_TIDY ON) endif() +# To support building against both 3.4 and 3.5 lib folders, disable materialX if it is not found +set(MATERIALX_LIB_FOLDER_EXISTS EXISTS ${LIBDIR}/materialx) +set_and_warn_library_found("MaterialX" MATERIALX_LIB_FOLDER_EXISTS WITH_MATERIALX) +unset(MATERIALX_LIB_FOLDER_EXISTS) + # Mark libdir as system headers with a lower warn level, to resolve some warnings # that we have very little control over if(NOT MSVC_CLANG AND # Available with MSVC 15.7+ but not for CLANG. @@ -441,9 +446,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) @@ -455,36 +463,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() @@ -554,38 +550,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 @@ -610,7 +615,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() @@ -646,18 +654,25 @@ if(WITH_OPENCOLORIO) set(OPENCOLORIO ${LIBDIR}/OpenColorIO) set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include) 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}/libexpatMD.lib) # 3.4 + set(OPENCOLORIO_LIBRARIES + optimized ${OPENCOLORIO_LIBPATH}/OpenColorIO.lib + optimized ${OPENCOLORIO_LIBPATH}/libexpatMD.lib + optimized ${OPENCOLORIO_LIBPATH}/pystring.lib + optimized ${OPENCOLORIO_LIBPATH}/libyaml-cpp.lib + debug ${OPENCOLORIO_LIBPATH}/OpencolorIO_d.lib + debug ${OPENCOLORIO_LIBPATH}/libexpatdMD.lib + debug ${OPENCOLORIO_LIBPATH}/pystring_d.lib + debug ${OPENCOLORIO_LIBPATH}/yaml-cppd.lib + ) + set(OPENCOLORIO_DEFINITIONS "-DOpenColorIO_SKIP_IMPORTS") + else() + set(OPENCOLORIO_LIBRARIES + optimized ${OPENCOLORIO_LIBPATH}/OpenColorIO.lib + debug ${OPENCOLORIO_LIBPATH}/OpencolorIO_d.lib + ) + endif() endif() - set(OPENCOLORIO_DEFINITIONS "-DOpenColorIO_SKIP_IMPORTS") endif() if(WITH_OPENVDB) @@ -861,16 +876,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} 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/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/scripts/site/sitecustomize.py b/release/scripts/site/sitecustomize.py new file mode 100644 index 00000000000..891930eb132 --- /dev/null +++ b/release/scripts/site/sitecustomize.py @@ -0,0 +1,41 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# Make shared libraries needed by modules available in standalone Python binary. + +import sys +import os + +exe_dir, exe_file = os.path.split(sys.executable) +is_python = exe_file.startswith("python") + +# Path to Blender shared libraries. +shared_lib_dirname = "blender.shared" if sys.platform == "win32" else "lib" +if is_python: + shared_lib_dir = os.path.abspath(os.path.join(exe_dir, "..", "..", "..", shared_lib_dirname)) +else: + shared_lib_dir = os.path.abspath(os.path.join(exe_dir, shared_lib_dirname)) + +if sys.platform == "win32": + # Directory for extensions to find DLLs. + if is_python: + os.add_dll_directory(shared_lib_dir) + + # Directory for USD extension to find DLLs. + import_paths = os.getenv("PXR_USD_WINDOWS_DLL_PATH") + if import_paths is None: + os.environ["PXR_USD_WINDOWS_DLL_PATH"] = shared_lib_dir + + # OIIO will by default add all paths from the path variable to add_dll_directory + # problem there is that those folders will be searched before ours and versions of + # some dlls may be found that are not blenders and may not even be the right version + # causing compatibility issues. + os.environ["OIIO_LOAD_DLLS_FROM_PATH"] = "0" + +# MaterialX libraries, append if already specified. +materialx_libs_dir = os.path.abspath(os.path.join(shared_lib_dir, "materialx", "libraries")) +materialx_libs_env = os.getenv("MATERIALX_SEARCH_PATH") +if materialx_libs_env is None: + os.environ["MATERIALX_SEARCH_PATH"] = materialx_libs_dir +elif sys.platform == "win32": + os.environ["MATERIALX_SEARCH_PATH"] = materialx_libs_dir + ";" + materialx_libs_env +else: + os.environ["MATERIALX_SEARCH_PATH"] = materialx_libs_dir + ":" + materialx_libs_env diff --git a/release/windows/manifest/Blender.CRT.MANIFEST.in b/release/windows/manifest/Blender.CRT.MANIFEST.in deleted file mode 100644 index 27c4a6bce56..00000000000 --- a/release/windows/manifest/Blender.CRT.MANIFEST.in +++ /dev/null @@ -1,4 +0,0 @@ - - - -@CRTLIBS@ \ No newline at end of file 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/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index b62cc8403e3..6837bc0da9e 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -376,7 +376,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() @@ -418,10 +417,24 @@ if(WITH_PYTHON) PATTERN ".github" EXCLUDE PATTERN ".arcconfig" EXCLUDE PATTERN "__pycache__" EXCLUDE + PATTERN "site" EXCLUDE PATTERN "${ADDON_EXCLUDE_CONDITIONAL}" EXCLUDE PATTERN "${FREESTYLE_EXCLUDE_CONDITIONAL}" EXCLUDE ) + if(WITH_PYTHON_INSTALL) + if(WIN32) + install( + FILES ${CMAKE_SOURCE_DIR}/release/scripts/site/sitecustomize.py + DESTINATION ${TARGETDIR_VER}/python/lib/site-packages + ) + else() + install( + FILES ${CMAKE_SOURCE_DIR}/release/scripts/site/sitecustomize.py + DESTINATION ${TARGETDIR_VER}/python/lib/python${PYTHON_VERSION}/site-packages + ) + endif() + endif() unset(ADDON_EXCLUDE_CONDITIONAL) unset(FREESTYLE_EXCLUDE_CONDITIONAL) endif() @@ -480,6 +493,28 @@ if(WITH_OPENCOLORIO) DIRECTORY ${CMAKE_SOURCE_DIR}/release/datafiles/colormanagement DESTINATION ${TARGETDIR_VER}/datafiles ) + if(WIN32) + if(EXISTS ${LIBDIR}/opencolorio/bin/opencolorio_2_2.dll) # 3.5 + windows_install_shared_manifest( + FILES ${LIBDIR}/opencolorio/bin/opencolorio_2_2.dll + RELEASE + ) + windows_install_shared_manifest( + FILES ${LIBDIR}/opencolorio/bin/opencolorio_d_2_2.dll + DEBUG + ) + install( + FILES ${LIBDIR}/opencolorio/lib/site-packages-debug/PyOpenColorIO_d.pyd + DESTINATION ${TARGETDIR_VER}/python/lib/site-packages + CONFIGURATIONS Debug + ) + install( + FILES ${LIBDIR}/opencolorio/lib/site-packages/PyOpenColorIO.pyd + DESTINATION ${TARGETDIR_VER}/python/lib/site-packages + CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel + ) + endif() + endif() endif() # Helpful tip when using make. @@ -493,6 +528,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) @@ -532,6 +594,7 @@ if(UNIX AND NOT APPLE) LIBRARY DESTINATION ${TARGETDIR_BPY} ) endif() + # none of the other files are needed currently elseif(WITH_INSTALL_PORTABLE) install( @@ -620,9 +683,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 @@ -703,6 +778,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. @@ -814,6 +907,46 @@ elseif(WIN32) 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) windows_install_shared_manifest( FILES ${LIBDIR}/gmp/lib/libgmp-10.dll @@ -853,6 +986,45 @@ elseif(WIN32) 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_MATERIALX) + windows_install_shared_manifest( + FILES + ${LIBDIR}/materialx/bin/MaterialXCore.dll + ${LIBDIR}/materialx/bin/MaterialXFormat.dll + ${LIBDIR}/materialx/bin/MaterialXGenGlsl.dll + ${LIBDIR}/materialx/bin/MaterialXGenMdl.dll + ${LIBDIR}/materialx/bin/MaterialXGenOsl.dll + ${LIBDIR}/materialx/bin/MaterialXGenShader.dll + RELEASE + ) + windows_install_shared_manifest( + FILES + ${LIBDIR}/materialx/bin/MaterialXCore_d.dll + ${LIBDIR}/materialx/bin/MaterialXFormat_d.dll + ${LIBDIR}/materialx/bin/MaterialXGenGlsl_d.dll + ${LIBDIR}/materialx/bin/MaterialXGenMdl_d.dll + ${LIBDIR}/materialx/bin/MaterialXGenOsl_d.dll + ${LIBDIR}/materialx/bin/MaterialXGenShader_d.dll + DEBUG + ) endif() if(WITH_PYTHON) @@ -903,7 +1075,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( @@ -934,6 +1106,80 @@ elseif(WIN32) DESTINATION ${BLENDER_VERSION}/python/bin CONFIGURATIONS Debug ) + if(WITH_OPENIMAGEIO) + if(EXISTS ${LIBDIR}/openimageio/lib/python${PYTHON_VERSION}/site-packages) #this will only exist for 3.5+ + install( + DIRECTORY ${LIBDIR}/openimageio/lib/python${PYTHON_VERSION}/site-packages/ + 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 ${LIBDIR}/openimageio/lib/python${PYTHON_VERSION}_debug/site-packages) + install( + DIRECTORY ${LIBDIR}/openimageio/lib/python${PYTHON_VERSION}_debug/site-packages/ + 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(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(WITH_MATERIALX) + # MaterialX python bindings + + install( + DIRECTORY ${LIBDIR}/materialx/python/Release/MaterialX + 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 * + ) + install( + DIRECTORY ${LIBDIR}/materialx/python/Debug/MaterialX + 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() if(WINDOWS_PYTHON_DEBUG) install( @@ -1326,6 +1572,39 @@ if(WITH_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(WITH_MATERIALX AND TARGETDIR_LIB) + install( + DIRECTORY ${LIBDIR}/materialx/libraries + DESTINATION "${TARGETDIR_LIB}/materialx" + ) endif() if(WIN32 AND WITH_BOOST)