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 02eab251a13..edb831dc20f 100644 --- a/build_files/build_environment/patches/opencollada.diff +++ b/build_files/build_environment/patches/opencollada.diff @@ -3,19 +3,19 @@ index 95abbe2..4f14f30 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -254,11 +254,11 @@ if(USE_STATIC_MSVC_RUNTIME) - endif() - - #adding PCRE --find_package(PCRE) -+#find_package(PCRE) - if (PCRE_FOUND) - message(STATUS "SUCCESSFUL: PCRE found") - else () # if pcre not found building its local copy from ./Externals -- if (WIN32 OR APPLE) -+ if (1) - message("WARNING: Native PCRE not found, taking PCRE from ./Externals") - add_definitions(-DPCRE_STATIC) - add_subdirectory(${EXTERNAL_LIBRARIES}/pcre) + endif() + + #adding PCRE +-find_package(PCRE) ++#find_package(PCRE) + if (PCRE_FOUND) + message(STATUS "SUCCESSFUL: PCRE found") + else () # if pcre not found building its local copy from ./Externals +- if (WIN32 OR APPLE) ++ if (1) + message("WARNING: Native PCRE not found, taking PCRE from ./Externals") + add_definitions(-DPCRE_STATIC) + add_subdirectory(${EXTERNAL_LIBRARIES}/pcre) diff --git a/DAEValidator/CMakeLists.txt b/DAEValidator/CMakeLists.txt index 03ad540..f7d05cf 100644 --- a/DAEValidator/CMakeLists.txt @@ -66,13 +66,13 @@ index 40081e7..e1d1bfa 100644 --- a/Externals/LibXML/CMakeLists.txt +++ b/Externals/LibXML/CMakeLists.txt @@ -9,6 +9,7 @@ add_definitions( - -DLIBXML_SCHEMAS_ENABLED - -DLIBXML_XPATH_ENABLED - -DLIBXML_TREE_ENABLED -+ -DLIBXML_STATIC - ) - - if(USE_STATIC_MSVC_RUNTIME) + -DLIBXML_SCHEMAS_ENABLED + -DLIBXML_XPATH_ENABLED + -DLIBXML_TREE_ENABLED ++ -DLIBXML_STATIC + ) + + if(USE_STATIC_MSVC_RUNTIME) diff --git a/GeneratedSaxParser/src/GeneratedSaxParserUtils.cpp b/GeneratedSaxParser/src/GeneratedSaxParserUtils.cpp index 1f9a3ee..d151e9a 100644 --- a/GeneratedSaxParser/src/GeneratedSaxParserUtils.cpp @@ -155,3 +155,15 @@ diff -Naur a/CMakeLists.txt b/CMakeLists.txt # Library export install(EXPORT LibraryExport DESTINATION ${OPENCOLLADA_INST_CMAKECONFIG} FILE OpenCOLLADATargets.cmake) +diff -Naur OpenCOLLADA-1.6.68/common/libBuffer/include/CommonFWriteBufferFlusher.h external_opencollada/common/libBuffer/include/CommonFWriteBufferFlusher.h +--- OpenCOLLADA-1.6.68/common/libBuffer/include/CommonFWriteBufferFlusher.h 2018-11-26 14:43:10 -0700 ++++ external_opencollada/common/libBuffer/include/CommonFWriteBufferFlusher.h 2022-08-19 11:36:04 -0600 +@@ -23,7 +23,7 @@ + # include + #endif + +-#ifdef _LIBCPP_VERSION ++#if defined(_LIBCPP_VERSION) || defined(WIN32) + // If we're compiling with libc++, create a namespace alias for tr1 that points to std. + // Not particularly elegant, and largely should be filed under "hack", but it works for OS X with clang for now. + namespace std { \ No newline at end of file diff --git a/build_files/build_environment/patches/openimageio.diff b/build_files/build_environment/patches/openimageio.diff index d05fc1f295f..f4a4627fa03 100644 --- a/build_files/build_environment/patches/openimageio.diff +++ b/build_files/build_environment/patches/openimageio.diff @@ -21,16 +21,3 @@ diff -Naur orig/src/cmake/compiler.cmake external_openimageio/src/cmake/compiler endif (MSVC) if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD" -diff -Naur orig/src/include/OpenImageIO/platform.h external_openimageio/src/include/OpenImageIO/platform.h ---- orig/src/include/OpenImageIO/platform.h 2020-05-10 21:43:52 -0600 -+++ external_openimageio/src/include/OpenImageIO/platform.h 2020-05-13 17:04:36 -0600 -@@ -41,6 +41,9 @@ - # ifndef NOMINMAX - # define NOMINMAX - # endif -+# ifndef NOGDI -+# define NOGDI -+# endif - # include - #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)