diff options
62 files changed, 1309 insertions, 1025 deletions
diff --git a/build_files/build_environment/CMakeLists.txt b/build_files/build_environment/CMakeLists.txt index 468a434b887..d1ef13e1d01 100644 --- a/build_files/build_environment/CMakeLists.txt +++ b/build_files/build_environment/CMakeLists.txt @@ -74,7 +74,6 @@ elseif(UNIX AND NOT APPLE) endif() include(cmake/osl.cmake) include(cmake/tbb.cmake) -include(cmake/openvdb.cmake) include(cmake/python.cmake) include(cmake/llvm.cmake) option(USE_PIP_NUMPY "Install NumPy using pip wheel instead of building from source" OFF) @@ -86,6 +85,7 @@ endif() include(cmake/python_site_packages.cmake) include(cmake/package_python.cmake) include(cmake/usd.cmake) +include(cmake/openvdb.cmake) include(cmake/potrace.cmake) include(cmake/haru.cmake) # Boost needs to be included after python.cmake due to the PYTHON_BINARY variable being needed. @@ -97,6 +97,8 @@ include(cmake/embree.cmake) include(cmake/openpgl.cmake) include(cmake/fmt.cmake) include(cmake/robinmap.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) 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 cc8fead6f81..a72f12bbfc3 100644 --- a/build_files/build_environment/cmake/check_software.cmake +++ b/build_files/build_environment/cmake/check_software.cmake @@ -19,6 +19,10 @@ if(UNIX) yasm ) + if(NOT APPLE) + list(APPEND _required_software patchelf) + endif() + foreach(_software ${_required_software}) find_program(_software_find NAMES ${_software}) if(NOT _software_find) @@ -46,7 +50,7 @@ if(UNIX) " ${_software_missing}\n" "\n" "On Debian and Ubuntu:\n" - " apt install autoconf automake libtool yasm tcl ninja-build meson python3-mako\n" + " apt install autoconf automake libtool yasm tcl ninja-build meson python3-mako patchelf\n" "\n" "On macOS (with homebrew):\n" " brew install autoconf automake bison flex libtool meson ninja pkg-config yasm\n" diff --git a/build_files/build_environment/cmake/download.cmake b/build_files/build_environment/cmake/download.cmake index c5b0c5ede84..f9f0c2fe9c9 100644 --- a/build_files/build_environment/cmake/download.cmake +++ b/build_files/build_environment/cmake/download.cmake @@ -120,3 +120,5 @@ download_source(IGC_SPIRV_TRANSLATOR) download_source(GMMLIB) download_source(OCLOC) download_source(AOM) +download_source(FRIBIDI) +download_source(HARFBUZZ) 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/fribidi.cmake b/build_files/build_environment/cmake/fribidi.cmake new file mode 100644 index 00000000000..6e063eb5b26 --- /dev/null +++ b/build_files/build_environment/cmake/fribidi.cmake @@ -0,0 +1,30 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + +if(WIN32) + set(CONFIGURE_ENV ${CONFIGURE_ENV_MSVC}) +endif() + +ExternalProject_Add(external_fribidi + URL file://${PACKAGE_DIR}/${FRIBIDI_FILE} + URL_HASH ${FRIBIDI_HASH_TYPE}=${FRIBIDI_HASH} + DOWNLOAD_DIR ${DOWNLOAD_DIR} + PREFIX ${BUILD_DIR}/fribidi + CONFIGURE_COMMAND ${MESON} setup --prefix ${LIBDIR}/fribidi -Ddocs=false --default-library static --libdir lib ${BUILD_DIR}/fribidi/src/external_fribidi-build ${BUILD_DIR}/fribidi/src/external_fribidi + BUILD_COMMAND ninja + INSTALL_COMMAND ninja install + INSTALL_DIR ${LIBDIR}/fribidi +) + +add_dependencies( + external_fribidi + external_python + external_python_site_packages +) + +if(BUILD_MODE STREQUAL Release AND WIN32) + ExternalProject_Add_Step(external_fribidi after_install + COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/fribidi/include ${HARVEST_TARGET}/fribidi/include + COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/fribidi/lib/libfribidi.a ${HARVEST_TARGET}/fribidi/lib/libfribidi.lib + DEPENDEES install + ) +endif() diff --git a/build_files/build_environment/cmake/harfbuzz.cmake b/build_files/build_environment/cmake/harfbuzz.cmake new file mode 100644 index 00000000000..0ae9b11d627 --- /dev/null +++ b/build_files/build_environment/cmake/harfbuzz.cmake @@ -0,0 +1,41 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + +if(WIN32) + set(HARFBUZZ_CONFIGURE_ENV ${CONFIGURE_ENV_MSVC} && set FREETYPE_DIR=${LIBDIR}/freetype) +else() + set(HARFBUZZ_CONFIGURE_ENV ${CONFIGURE_ENV} && PKG_CONFIG_PATH=${LIBDIR}/freetype/lib/pkgconfig:${LIBDIR}/brotli/lib/pkgconfig) +endif() + +set(HARFBUZZ_EXTRA_OPTIONS + -Dtests=disabled + -Dfreetype=enabled + -Dglib=disabled + -Dgobject=disabled +) + +ExternalProject_Add(external_harfbuzz + URL file://${PACKAGE_DIR}/${HARFBUZZ_FILE} + URL_HASH ${HARFBUZZ_HASH_TYPE}=${HARFBUZZ_HASH} + DOWNLOAD_DIR ${DOWNLOAD_DIR} + PREFIX ${BUILD_DIR}/harfbuzz + CONFIGURE_COMMAND ${HARFBUZZ_CONFIGURE_ENV} && ${MESON} setup --prefix ${LIBDIR}/harfbuzz ${HARFBUZZ_EXTRA_OPTIONS} --default-library static --libdir lib ${BUILD_DIR}/harfbuzz/src/external_harfbuzz-build ${BUILD_DIR}/harfbuzz/src/external_harfbuzz + BUILD_COMMAND ninja + INSTALL_COMMAND ninja install + INSTALL_DIR ${LIBDIR}/harfbuzz +) + +add_dependencies( + external_harfbuzz + external_python + external_python_site_packages +) + +if(BUILD_MODE STREQUAL Release AND WIN32) + ExternalProject_Add_Step(external_harfbuzz after_install + COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/harfbuzz/include ${HARVEST_TARGET}/harfbuzz/include + # We do not use the subset API currently, so copying only the main library will suffice for now + COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/harfbuzz/lib/libharfbuzz.a ${HARVEST_TARGET}/harfbuzz/lib/libharfbuzz.lib + DEPENDEES install + ) +endif() + diff --git a/build_files/build_environment/cmake/harvest.cmake b/build_files/build_environment/cmake/harvest.cmake index 6c920e651fe..8f38f0b79bd 100644 --- a/build_files/build_environment/cmake/harvest.cmake +++ b/build_files/build_environment/cmake/harvest.cmake @@ -11,192 +11,241 @@ message("HARVEST_TARGET = ${HARVEST_TARGET}") if(WIN32) - if(BUILD_MODE STREQUAL Release) - add_custom_target(Harvest_Release_Results - COMMAND # jpeg rename libfile + copy include - ${CMAKE_COMMAND} -E copy ${LIBDIR}/jpeg/lib/jpeg-static.lib ${HARVEST_TARGET}/jpeg/lib/libjpeg.lib && - ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/jpeg/include/ ${HARVEST_TARGET}/jpeg/include/ && - # png - ${CMAKE_COMMAND} -E copy ${LIBDIR}/png/lib/libpng16_static.lib ${HARVEST_TARGET}/png/lib/libpng.lib && - ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/png/include/ ${HARVEST_TARGET}/png/include/ && - # freeglut-> opengl - ${CMAKE_COMMAND} -E copy ${LIBDIR}/freeglut/lib/freeglut_static.lib ${HARVEST_TARGET}/opengl/lib/freeglut_static.lib && - ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/freeglut/include/ ${HARVEST_TARGET}/opengl/include/ && - DEPENDS +if(BUILD_MODE STREQUAL Release) + add_custom_target(Harvest_Release_Results + COMMAND # jpeg rename libfile + copy include + ${CMAKE_COMMAND} -E copy ${LIBDIR}/jpeg/lib/jpeg-static.lib ${HARVEST_TARGET}/jpeg/lib/libjpeg.lib && + ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/jpeg/include/ ${HARVEST_TARGET}/jpeg/include/ && + # png + ${CMAKE_COMMAND} -E copy ${LIBDIR}/png/lib/libpng16_static.lib ${HARVEST_TARGET}/png/lib/libpng.lib && + ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/png/include/ ${HARVEST_TARGET}/png/include/ && + # freeglut-> opengl + ${CMAKE_COMMAND} -E copy ${LIBDIR}/freeglut/lib/freeglut_static.lib ${HARVEST_TARGET}/opengl/lib/freeglut_static.lib && + ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/freeglut/include/ ${HARVEST_TARGET}/opengl/include/ && + DEPENDS + ) +endif() + +else(WIN32) + +function(harvest from to) + set(pattern "") + foreach(f ${ARGN}) + set(pattern ${f}) + endforeach() + + if(pattern STREQUAL "") + get_filename_component(dirpath ${to} DIRECTORY) + get_filename_component(filename ${to} NAME) + install( + FILES ${LIBDIR}/${from} + DESTINATION ${HARVEST_TARGET}/${dirpath} + RENAME ${filename} + ) + else() + install( + DIRECTORY ${LIBDIR}/${from}/ + DESTINATION ${HARVEST_TARGET}/${to} + USE_SOURCE_PERMISSIONS + FILES_MATCHING PATTERN ${pattern} + PATTERN "pkgconfig" EXCLUDE + PATTERN "cmake" EXCLUDE + PATTERN "__pycache__" EXCLUDE + PATTERN "tests" EXCLUDE + PATTERN "meson*" EXCLUDE ) endif() +endfunction() +# Set rpath on shared libraries to $ORIGIN since all will be installed in the same +# lib folder, and remove any absolute paths. +# +# Ideally this would be done as part of the Blender build since it makes assumptions +# about where the files will be installed. However it would add patchelf as a new +# dependency for building. +if(APPLE) + set(set_rpath_cmd python3 ${CMAKE_CURRENT_SOURCE_DIR}/darwin/set_rpath.py @loader_path) else() + set(set_rpath_cmd patchelf --set-rpath $ORIGIN) +endif() - function(harvest from to) - set(pattern "") - foreach(f ${ARGN}) - set(pattern ${f}) - endforeach() - - if(pattern STREQUAL "") - get_filename_component(dirpath ${to} DIRECTORY) - get_filename_component(filename ${to} NAME) - install( - FILES ${LIBDIR}/${from} - DESTINATION ${HARVEST_TARGET}/${dirpath} - RENAME ${filename} - ) - else() - install( - DIRECTORY ${LIBDIR}/${from}/ - DESTINATION ${HARVEST_TARGET}/${to} - USE_SOURCE_PERMISSIONS - FILES_MATCHING PATTERN ${pattern} - PATTERN "pkgconfig" EXCLUDE - PATTERN "cmake" EXCLUDE - PATTERN "__pycache__" EXCLUDE - PATTERN "tests" EXCLUDE - ) - endif() - endfunction() - - harvest(alembic/include alembic/include "*.h") - harvest(alembic/lib/libAlembic.a alembic/lib/libAlembic.a) - harvest(alembic/bin alembic/bin "*") - harvest(brotli/include brotli/include "*.h") - harvest(brotli/lib brotli/lib "*.a") - harvest(boost/include boost/include "*") - harvest(boost/lib boost/lib "*.a") - harvest(imath/include imath/include "*.h") - harvest(imath/lib imath/lib "*.a") - harvest(ffmpeg/include ffmpeg/include "*.h") - harvest(ffmpeg/lib ffmpeg/lib "*.a") - harvest(fftw3/include fftw3/include "*.h") - harvest(fftw3/lib fftw3/lib "*.a") - harvest(flac/lib sndfile/lib "libFLAC.a") - harvest(freetype/include freetype/include "*.h") - harvest(freetype/lib/libfreetype2ST.a freetype/lib/libfreetype.a) - harvest(epoxy/include epoxy/include "*.h") - harvest(epoxy/lib epoxy/lib "*.a") - harvest(gmp/include gmp/include "*.h") - harvest(gmp/lib gmp/lib "*.a") - harvest(jemalloc/include jemalloc/include "*.h") - harvest(jemalloc/lib jemalloc/lib "*.a") - harvest(jpeg/include jpeg/include "*.h") - harvest(jpeg/lib jpeg/lib "libjpeg.a") - harvest(lame/lib ffmpeg/lib "*.a") - if(NOT APPLE) - harvest(level-zero/include/level_zero level-zero/include/level_zero "*.h") - harvest(level-zero/lib level-zero/lib "*.so*") - endif() - harvest(llvm/bin llvm/bin "clang-format") - if(BUILD_CLANG_TOOLS) - harvest(llvm/bin llvm/bin "clang-tidy") - harvest(llvm/share/clang llvm/share "run-clang-tidy.py") - endif() - harvest(llvm/include llvm/include "*") - harvest(llvm/bin llvm/bin "llvm-config") - harvest(llvm/lib llvm/lib "libLLVM*.a") - harvest(llvm/lib llvm/lib "libclang*.a") - harvest(llvm/lib/clang llvm/lib/clang "*.h") - if(APPLE) - harvest(openmp/lib openmp/lib "*") - harvest(openmp/include openmp/include "*.h") - endif() - if(BLENDER_PLATFORM_ARM) - harvest(sse2neon sse2neon "*.h") - endif() - harvest(ogg/lib ffmpeg/lib "*.a") - harvest(openal/include openal/include "*.h") - if(UNIX AND NOT APPLE) - harvest(openal/lib openal/lib "*.a") +function(harvest_rpath_lib from to pattern) + harvest(${from} ${to} ${pattern}) - harvest(blosc/include blosc/include "*.h") - harvest(blosc/lib blosc/lib "*.a") + 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(zlib/include zlib/include "*.h") - harvest(zlib/lib zlib/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(xml2/include xml2/include "*.h") - harvest(xml2/lib xml2/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(wayland-protocols/share/wayland-protocols wayland-protocols/share/wayland-protocols/ "*.xml") - harvest(wayland/bin wayland/bin "wayland-scanner") - 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() +# 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}) + 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(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") +else() + 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_rpath_lib(openexr/lib openexr/lib "*${SHAREDLIBEXT}*") +harvest_rpath_bin(openimageio/bin openimageio/bin "idiff") +harvest_rpath_bin(openimageio/bin openimageio/bin "maketx") +harvest_rpath_bin(openimageio/bin openimageio/bin "oiiotool") +harvest(openimageio/include openimageio/include "*") +harvest_rpath_lib(openimageio/lib openimageio/lib "*${SHAREDLIBEXT}*") +harvest(openimagedenoise/include openimagedenoise/include "*") +harvest(openimagedenoise/lib openimagedenoise/lib "*.a") +harvest(embree/include embree/include "*.h") +harvest(embree/lib embree/lib "*.a") +harvest(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_usd_ms${SHAREDLIBEXT}") +harvest(usd/lib/usd usd/lib/usd "*") +harvest_rpath_python(usd/lib/python/pxr python/lib/python${PYTHON_SHORT_VERSION}/site-packages/pxr "*") +harvest(usd/plugin usd/plugin "*") +harvest(potrace/include potrace/include "*.h") +harvest(potrace/lib potrace/lib "*.a") +harvest(haru/include haru/include "*.h") +harvest(haru/lib haru/lib "*.a") +harvest(zstd/include zstd/include "*.h") +harvest(zstd/lib zstd/lib "*.a") + +if(UNIX AND NOT APPLE) + harvest(libglu/lib mesa/lib "*${SHAREDLIBEXT}*") + harvest(mesa/lib64 mesa/lib "*${SHAREDLIBEXT}*") + + harvest(dpcpp dpcpp "*") + harvest(igc dpcpp/lib/igc "*") + harvest(ocloc dpcpp/lib/ocloc "*") +endif() endif() diff --git a/build_files/build_environment/cmake/imath.cmake b/build_files/build_environment/cmake/imath.cmake index eb5465e6d37..1cad822c43a 100644 --- a/build_files/build_environment/cmake/imath.cmake +++ b/build_files/build_environment/cmake/imath.cmake @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later set(IMATH_EXTRA_ARGS - -DBUILD_SHARED_LIBS=OFF + -DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=OFF -DIMATH_LIB_SUFFIX=${OPENEXR_VERSION_BUILD_POSTFIX} ) @@ -11,6 +11,7 @@ ExternalProject_Add(external_imath DOWNLOAD_DIR ${DOWNLOAD_DIR} URL_HASH ${IMATH_HASH_TYPE}=${IMATH_HASH} PREFIX ${BUILD_DIR}/imath + CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR} CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/imath ${DEFAULT_CMAKE_FLAGS} ${IMATH_EXTRA_ARGS} INSTALL_DIR ${LIBDIR}/imath ) @@ -19,6 +20,7 @@ if(WIN32) ExternalProject_Add_Step(external_imath after_install COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/imath/lib ${HARVEST_TARGET}/imath/lib COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/imath/include ${HARVEST_TARGET}/imath/include + COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/imath/bin/imath${OPENEXR_VERSION_POSTFIX}.dll ${HARVEST_TARGET}/imath/bin/imath${OPENEXR_VERSION_POSTFIX}.dll DEPENDEES install ) endif() diff --git a/build_files/build_environment/cmake/opencolorio.cmake b/build_files/build_environment/cmake/opencolorio.cmake index 4e2d1503406..4bdf56081bc 100644 --- a/build_files/build_environment/cmake/opencolorio.cmake +++ b/build_files/build_environment/cmake/opencolorio.cmake @@ -32,6 +32,7 @@ if(WIN32) -Dexpat_LIBRARY=${LIBDIR}/expat/lib/libexpatMD -Dyaml-cpp_LIBRARY=${LIBDIR}/expat/lib/libyaml-cppmd.lib -DImath_LIBRARY=${LIBDIR}/imath/lib/imath${OPENEXR_VERSION_POSTFIX} + -DCMAKE_CXX_FLAGS=-DIMATH_DLL ) else() set(OPENCOLORIO_EXTRA_ARGS @@ -43,6 +44,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} diff --git a/build_files/build_environment/cmake/openexr.cmake b/build_files/build_environment/cmake/openexr.cmake index d283f638a17..617baeaebfc 100644 --- a/build_files/build_environment/cmake/openexr.cmake +++ b/build_files/build_environment/cmake/openexr.cmake @@ -16,7 +16,7 @@ set(OPENEXR_EXTRA_ARGS -DZLIB_INCLUDE_DIR=${LIBDIR}/zlib/include/ -DBUILD_TESTING=OFF -DOPENEXR_BUILD_BOTH_STATIC_SHARED=OFF - -DBUILD_SHARED_LIBS=OFF + -DBUILD_SHARED_LIBS=ON -DOPENEXR_INSTALL_TOOLS=OFF -DOPENEXR_INSTALL_EXAMPLES=OFF -DImath_DIR=${LIBDIR}/imath/lib/cmake/Imath @@ -27,6 +27,7 @@ ExternalProject_Add(external_openexr URL file://${PACKAGE_DIR}/${OPENEXR_FILE} DOWNLOAD_DIR ${DOWNLOAD_DIR} URL_HASH ${OPENEXR_HASH_TYPE}=${OPENEXR_HASH} + CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR} PREFIX ${BUILD_DIR}/openexr CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/openexr ${DEFAULT_CMAKE_FLAGS} ${OPENEXR_EXTRA_ARGS} INSTALL_DIR ${LIBDIR}/openexr @@ -36,6 +37,11 @@ if(WIN32) ExternalProject_Add_Step(external_openexr after_install COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/openexr/lib ${HARVEST_TARGET}/openexr/lib COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/openexr/include ${HARVEST_TARGET}/openexr/include + COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openexr/bin/Iex${OPENEXR_VERSION_POSTFIX}.dll ${HARVEST_TARGET}/openexr/bin/Iex${OPENEXR_VERSION_POSTFIX}.dll + COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openexr/bin/IlmThread${OPENEXR_VERSION_POSTFIX}.dll ${HARVEST_TARGET}/openexr/bin/IlmThread${OPENEXR_VERSION_POSTFIX}.dll + COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openexr/bin/OpenEXRCore${OPENEXR_VERSION_POSTFIX}.dll ${HARVEST_TARGET}/openexr/bin/OpenEXRCore${OPENEXR_VERSION_POSTFIX}.dll + COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openexr/bin/OpenEXRUtil${OPENEXR_VERSION_POSTFIX}.dll ${HARVEST_TARGET}/openexr/bin/OpenEXRUtil${OPENEXR_VERSION_POSTFIX}.dll + COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openexr/bin/OpenEXR${OPENEXR_VERSION_POSTFIX}.dll ${HARVEST_TARGET}/openexr/bin/OpenEXR${OPENEXR_VERSION_POSTFIX}.dll DEPENDEES install ) endif() @@ -43,4 +49,5 @@ endif() add_dependencies( external_openexr external_zlib + external_imath ) diff --git a/build_files/build_environment/cmake/openimageio.cmake b/build_files/build_environment/cmake/openimageio.cmake index 26881488039..33ab3d51b3a 100644 --- a/build_files/build_environment/cmake/openimageio.cmake +++ b/build_files/build_environment/cmake/openimageio.cmake @@ -15,14 +15,16 @@ else() endif() if(WIN32) - set(PNG_LIBNAME libpng16_static${LIBEXT}) set(OIIO_SIMD_FLAGS -DUSE_SIMD=sse2) set(OPENJPEG_POSTFIX _msvc) if(BUILD_MODE STREQUAL Debug) set(TIFF_POSTFIX d) + set(PNG_POSTFIX d) else() set(TIFF_POSTFIX) + set(PNG_POSTFIX) endif() + set(PNG_LIBNAME libpng16_static${PNG_POSTFIX}${LIBEXT}) else() set(PNG_LIBNAME libpng${LIBEXT}) set(OIIO_SIMD_FLAGS) @@ -40,7 +42,7 @@ else() endif() set(OPENIMAGEIO_EXTRA_ARGS - -DBUILD_SHARED_LIBS=OFF + -DBUILD_SHARED_LIBS=ON ${OPENIMAGEIO_LINKSTATIC} ${DEFAULT_BOOST_FLAGS} -DUSE_LIBSQUISH=OFF @@ -76,13 +78,14 @@ set(OPENIMAGEIO_EXTRA_ARGS -DJPEG_LIBRARY=${LIBDIR}/jpeg/lib/${JPEG_LIBRARY} -DJPEG_INCLUDE_DIR=${LIBDIR}/jpeg/include ${OPENJPEG_FLAGS} - -DOPENEXR_ILMTHREAD_LIBRARY=${LIBDIR}/openexr/lib/${LIBPREFIX}IlmThread${OPENEXR_VERSION_POSTFIX}${LIBEXT} - -DOPENEXR_IEX_LIBRARY=${LIBDIR}/openexr/lib/${LIBPREFIX}Iex${OPENEXR_VERSION_POSTFIX}${LIBEXT} - -DOPENEXR_ILMIMF_LIBRARY=${LIBDIR}/openexr/lib/${LIBPREFIX}IlmImf${OPENEXR_VERSION_POSTFIX}${LIBEXT} + -DOPENEXR_ILMTHREAD_LIBRARY=${LIBDIR}/openexr/lib/${LIBPREFIX}IlmThread${OPENEXR_VERSION_POSTFIX}${SHAREDLIBEXT} + -DOPENEXR_IEX_LIBRARY=${LIBDIR}/openexr/lib/${LIBPREFIX}Iex${OPENEXR_VERSION_POSTFIX}${SHAREDLIBEXT} + -DOPENEXR_ILMIMF_LIBRARY=${LIBDIR}/openexr/lib/${LIBPREFIX}IlmImf${OPENEXR_VERSION_POSTFIX}${SHAREDLIBEXT} -DSTOP_ON_WARNING=OFF -DUSE_EXTERNAL_PUGIXML=ON -DPUGIXML_LIBRARY=${LIBDIR}/pugixml/lib/${LIBPREFIX}pugixml${LIBEXT} -DPUGIXML_INCLUDE_DIR=${LIBDIR}/pugixml/include/ + -Dpugixml_DIR=${LIBDIR}/pugixml/lib/cmake/pugixml -DBUILD_MISSING_ROBINMAP=OFF -DBUILD_MISSING_FMT=OFF -DFMT_INCLUDE_DIR=${LIBDIR}/fmt/include/ @@ -97,6 +100,7 @@ ExternalProject_Add(external_openimageio URL file://${PACKAGE_DIR}/${OPENIMAGEIO_FILE} DOWNLOAD_DIR ${DOWNLOAD_DIR} URL_HASH ${OPENIMAGEIO_HASH_TYPE}=${OPENIMAGEIO_HASH} + CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR} PREFIX ${BUILD_DIR}/openimageio PATCH_COMMAND ${PATCH_CMD} -p 1 -N -d ${BUILD_DIR}/openimageio/src/external_openimageio/ < ${PATCH_DIR}/openimageio.diff CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/openimageio ${DEFAULT_CMAKE_FLAGS} ${OPENIMAGEIO_EXTRA_ARGS} @@ -125,7 +129,8 @@ if(WIN32) COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/OpenImageIO/include ${HARVEST_TARGET}/OpenImageIO/include COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/OpenImageIO/lib ${HARVEST_TARGET}/OpenImageIO/lib COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/OpenImageIO/bin/idiff.exe ${HARVEST_TARGET}/OpenImageIO/bin/idiff.exe - + COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/OpenImageIO/bin/OpenImageIO.dll ${HARVEST_TARGET}/OpenImageIO/bin/OpenImageIO.dll + COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/OpenImageIO/bin/OpenImageIO_Util.dll ${HARVEST_TARGET}/OpenImageIO/bin/OpenImageIO_Util.dll DEPENDEES install ) endif() @@ -133,6 +138,8 @@ if(WIN32) ExternalProject_Add_Step(external_openimageio after_install COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openimageio/lib/OpenImageIO_d.lib ${HARVEST_TARGET}/openimageio/lib/OpenImageIO_d.lib COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openimageio/lib/OpenImageIO_Util_d.lib ${HARVEST_TARGET}/openimageio/lib/OpenImageIO_Util_d.lib + COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/OpenImageIO/bin/OpenImageIO_d.dll ${HARVEST_TARGET}/OpenImageIO/bin/OpenImageIO_d.dll + COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/OpenImageIO/bin/OpenImageIO_Util_d.dll ${HARVEST_TARGET}/OpenImageIO/bin/OpenImageIO_Util_d.dll DEPENDEES install ) endif() diff --git a/build_files/build_environment/cmake/opensubdiv.cmake b/build_files/build_environment/cmake/opensubdiv.cmake index a142160b9cc..4f643868bfb 100644 --- a/build_files/build_environment/cmake/opensubdiv.cmake +++ b/build_files/build_environment/cmake/opensubdiv.cmake @@ -32,7 +32,7 @@ else() set(OPENSUBDIV_EXTRA_ARGS ${OPENSUBDIV_EXTRA_ARGS} -DTBB_INCLUDE_DIR=${LIBDIR}/tbb/include - -DTBB_tbb_LIBRARY=${LIBDIR}/tbb/lib/${LIBPREFIX}tbb_static${LIBEXT} + -DTBB_tbb_LIBRARY=${LIBDIR}/tbb/lib/${LIBPREFIX}tbb${SHAREDLIBEXT} ) endif() diff --git a/build_files/build_environment/cmake/openvdb.cmake b/build_files/build_environment/cmake/openvdb.cmake index 2d0f62cc1a0..bd008287f75 100644 --- a/build_files/build_environment/cmake/openvdb.cmake +++ b/build_files/build_environment/cmake/openvdb.cmake @@ -4,23 +4,14 @@ if(BUILD_MODE STREQUAL Debug) set(BLOSC_POST _d) endif() -if(WIN32) - set(OPENVDB_SHARED ON) - set(OPENVDB_STATIC OFF) -else() - set(OPENVDB_SHARED OFF) - set(OPENVDB_STATIC ON) -endif() - set(OPENVDB_EXTRA_ARGS ${DEFAULT_BOOST_FLAGS} - -DBoost_COMPILER:STRING=${BOOST_COMPILER_STRING} - -DBoost_USE_MULTITHREADED=ON - -DBoost_USE_STATIC_LIBS=ON - -DBoost_USE_STATIC_RUNTIME=OFF - -DBOOST_ROOT=${LIBDIR}/boost - -DBoost_NO_SYSTEM_PATHS=ON - -DBoost_NO_BOOST_CMAKE=ON + -DUSE_STATIC_DEPENDENCIES=OFF # This is the global toggle for static libs + # Once the above switch is off, you can set it + # for each individual library below. + -DBLOSC_USE_STATIC_LIBS=ON + -DTBB_USE_STATIC_LIBS=OFF + -DBoost_USE_STATIC_LIBS=OFF -DZLIB_LIBRARY=${LIBDIR}/zlib/lib/${ZLIB_LIBRARY} -DZLIB_INCLUDE_DIR=${LIBDIR}/zlib/include/ -DBlosc_INCLUDE_DIR=${LIBDIR}/blosc/include/ @@ -28,32 +19,36 @@ set(OPENVDB_EXTRA_ARGS -DBlosc_LIBRARY_RELEASE=${LIBDIR}/blosc/lib/libblosc${BLOSC_POST}${LIBEXT} -DBlosc_LIBRARY_DEBUG=${LIBDIR}/blosc/lib/libblosc${BLOSC_POST}${LIBEXT} -DOPENVDB_BUILD_UNITTESTS=OFF - -DOPENVDB_BUILD_PYTHON_MODULE=OFF -DOPENVDB_BUILD_NANOVDB=ON -DNANOVDB_BUILD_TOOLS=OFF -DBlosc_ROOT=${LIBDIR}/blosc/ -DTBB_ROOT=${LIBDIR}/tbb/ - -DOPENVDB_CORE_SHARED=${OPENVDB_SHARED} - -DOPENVDB_CORE_STATIC=${OPENVDB_STATIC} + -DTbb_INCLUDE_DIR=${LIBDIR}/tbb/include + -DTbb_LEGACY_INCLUDE_DIR=${LIBDIR}/tbb/include + -DOPENVDB_CORE_SHARED=ON + -DOPENVDB_CORE_STATIC=OFF -DOPENVDB_BUILD_BINARIES=OFF -DCMAKE_DEBUG_POSTFIX=_d -DBLOSC_USE_STATIC_LIBS=ON -DUSE_NANOVDB=ON -) + -DOPENVDB_BUILD_PYTHON_MODULE=ON + -DOPENVDB_PYTHON_WRAP_ALL_GRID_TYPES=ON + -DUSE_NUMPY=ON + -DPython_EXECUTABLE=${PYTHON_BINARY} -if(WIN32) - # Namespaces seem to be buggy and cause linker errors due to things not - # being in the correct namespace - # needs to link pthreads due to it being a blosc dependency - set(OPENVDB_EXTRA_ARGS ${OPENVDB_EXTRA_ARGS} - -DCMAKE_CXX_STANDARD_LIBRARIES="${LIBDIR}/pthreads/lib/pthreadVC3.lib" - ) -endif() + # OPENVDB_AX Disabled for now as it adds ~25MB distribution wise + # with no blender code depending on it, seems wasteful. + # -DOPENVDB_BUILD_AX=ON + # -DOPENVDB_AX_SHARED=ON + # -DOPENVDB_AX_STATIC=OFF + # -DLLVM_DIR=${LIBDIR}/llvm/lib/cmake/llvm +) ExternalProject_Add(openvdb URL file://${PACKAGE_DIR}/${OPENVDB_FILE} DOWNLOAD_DIR ${DOWNLOAD_DIR} URL_HASH ${OPENVDB_HASH_TYPE}=${OPENVDB_HASH} + CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR} PREFIX ${BUILD_DIR}/openvdb PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/openvdb/src/openvdb < ${PATCH_DIR}/openvdb.diff CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/openvdb ${DEFAULT_CMAKE_FLAGS} ${OPENVDB_EXTRA_ARGS} @@ -66,6 +61,8 @@ add_dependencies( external_boost external_zlib external_blosc + external_python + external_numpy ) if(WIN32) @@ -74,6 +71,7 @@ if(WIN32) COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/openvdb/include ${HARVEST_TARGET}/openvdb/include COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openvdb/lib/openvdb.lib ${HARVEST_TARGET}/openvdb/lib/openvdb.lib COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openvdb/bin/openvdb.dll ${HARVEST_TARGET}/openvdb/bin/openvdb.dll + COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openvdb/lib/python${PYTHON_SHORT_VERSION}/site-packages/pyopenvdb.pyd ${HARVEST_TARGET}openvdb/python/pyopenvdb.pyd DEPENDEES install ) endif() @@ -81,6 +79,7 @@ if(WIN32) ExternalProject_Add_Step(openvdb after_install COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openvdb/lib/openvdb_d.lib ${HARVEST_TARGET}/openvdb/lib/openvdb_d.lib COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openvdb/bin/openvdb_d.dll ${HARVEST_TARGET}/openvdb/bin/openvdb_d.dll + COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/openvdb/lib/python${PYTHON_SHORT_VERSION}/site-packages/pyopenvdb_d.pyd ${HARVEST_TARGET}openvdb/python/pyopenvdb_d.pyd DEPENDEES install ) endif() diff --git a/build_files/build_environment/cmake/options.cmake b/build_files/build_environment/cmake/options.cmake index 299b82f6d05..0a45d843547 100644 --- a/build_files/build_environment/cmake/options.cmake +++ b/build_files/build_environment/cmake/options.cmake @@ -3,7 +3,6 @@ if(WIN32) option(ENABLE_MINGW64 "Enable building of ffmpeg/iconv/libsndfile/fftw3 by installing mingw64" ON) endif() -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") @@ -40,31 +39,36 @@ if(WIN32) set(LIBEXT ".lib") set(SHAREDLIBEXT ".lib") set(LIBPREFIX "") - + set(MESON ${LIBDIR}/python/Scripts/meson) # For OIIO and OSL - set(COMMON_DEFINES /DPSAPI_VERSION=2 /DOIIO_STATIC_BUILD /DTINYFORMAT_ALLOW_WCHAR_STRINGS) + set(COMMON_DEFINES /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS) if(MSVC_VERSION GREATER 1909) set(COMMON_MSVC_FLAGS "/Wv:18") #some deps with warnings as error aren't quite ready for dealing with the new 2017 warnings. endif() string(APPEND COMMON_MSVC_FLAGS " /bigobj") + # To keep MSVC from oversubscribing the CPU, force it to single threaded mode + # msbuild/ninja will queue as many compile units as there are cores, no need for + # msvc to be internally threading as well. + string(APPEND COMMON_MSVC_FLAGS " /cgthreads1 ") + if(WITH_OPTIMIZED_DEBUG) - set(BLENDER_CMAKE_C_FLAGS_DEBUG "/MDd ${COMMON_MSVC_FLAGS} /O2 /Ob2 /DNDEBUG /DPSAPI_VERSION=2 /DOIIO_STATIC_BUILD /DTINYFORMAT_ALLOW_WCHAR_STRINGS") + set(BLENDER_CMAKE_C_FLAGS_DEBUG "/MDd ${COMMON_MSVC_FLAGS} /O2 /Ob2 /DNDEBUG /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS") else() - set(BLENDER_CMAKE_C_FLAGS_DEBUG "/MDd ${COMMON_MSVC_FLAGS} /Zi /Ob0 /Od /RTC1 /D_DEBUG /DPSAPI_VERSION=2 /DOIIO_STATIC_BUILD /DTINYFORMAT_ALLOW_WCHAR_STRINGS") + set(BLENDER_CMAKE_C_FLAGS_DEBUG "/MDd ${COMMON_MSVC_FLAGS} /Zi /Ob0 /Od /RTC1 /D_DEBUG /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS") endif() - set(BLENDER_CMAKE_C_FLAGS_MINSIZEREL "/MD ${COMMON_MSVC_FLAGS} /O1 /Ob1 /D NDEBUG /DPSAPI_VERSION=2 /DOIIO_STATIC_BUILD /DTINYFORMAT_ALLOW_WCHAR_STRINGS") - set(BLENDER_CMAKE_C_FLAGS_RELEASE "/MD ${COMMON_MSVC_FLAGS} /O2 /Ob2 /DNDEBUG /DPSAPI_VERSION=2 /DOIIO_STATIC_BUILD /DTINYFORMAT_ALLOW_WCHAR_STRINGS") - set(BLENDER_CMAKE_C_FLAGS_RELWITHDEBINFO "/MD ${COMMON_MSVC_FLAGS} /Zi /O2 /Ob1 /D NDEBUG /DPSAPI_VERSION=2 /DOIIO_STATIC_BUILD /DTINYFORMAT_ALLOW_WCHAR_STRINGS") + set(BLENDER_CMAKE_C_FLAGS_MINSIZEREL "/MD ${COMMON_MSVC_FLAGS} /O1 /Ob1 /D NDEBUG /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS") + set(BLENDER_CMAKE_C_FLAGS_RELEASE "/MD ${COMMON_MSVC_FLAGS} /O2 /Ob2 /DNDEBUG /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS") + set(BLENDER_CMAKE_C_FLAGS_RELWITHDEBINFO "/MD ${COMMON_MSVC_FLAGS} /Zi /O2 /Ob1 /D NDEBUG /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS") if(WITH_OPTIMIZED_DEBUG) - set(BLENDER_CMAKE_CXX_FLAGS_DEBUG "/MDd ${COMMON_MSVC_FLAGS} /O2 /Ob2 /D NDEBUG /D PLATFORM_WINDOWS /DPSAPI_VERSION=2 /DOIIO_STATIC_BUILD /DTINYFORMAT_ALLOW_WCHAR_STRINGS") + set(BLENDER_CMAKE_CXX_FLAGS_DEBUG "/MDd ${COMMON_MSVC_FLAGS} /D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS /O2 /Ob2 /D NDEBUG /D PLATFORM_WINDOWS /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS /DBOOST_DEBUG_PYTHON /DBOOST_ALL_NO_LIB") else() - set(BLENDER_CMAKE_CXX_FLAGS_DEBUG "/D_DEBUG /D PLATFORM_WINDOWS /MTd ${COMMON_MSVC_FLAGS} /Zi /Ob0 /Od /RTC1 /DPSAPI_VERSION=2 /DOIIO_STATIC_BUILD /DTINYFORMAT_ALLOW_WCHAR_STRINGS") + set(BLENDER_CMAKE_CXX_FLAGS_DEBUG "/D_DEBUG /D PLATFORM_WINDOWS /D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS /MTd ${COMMON_MSVC_FLAGS} /Zi /Ob0 /Od /RTC1 /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS /DBOOST_DEBUG_PYTHON /DBOOST_ALL_NO_LIB") endif() - set(BLENDER_CMAKE_CXX_FLAGS_MINSIZEREL "/MD /${COMMON_MSVC_FLAGS} /O1 /Ob1 /D NDEBUG /D PLATFORM_WINDOWS /DPSAPI_VERSION=2 /DOIIO_STATIC_BUILD /DTINYFORMAT_ALLOW_WCHAR_STRINGS") - set(BLENDER_CMAKE_CXX_FLAGS_RELEASE "/MD ${COMMON_MSVC_FLAGS} /O2 /Ob2 /D NDEBUG /D PLATFORM_WINDOWS /DPSAPI_VERSION=2 /DOIIO_STATIC_BUILD /DTINYFORMAT_ALLOW_WCHAR_STRINGS") - set(BLENDER_CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MD ${COMMON_MSVC_FLAGS} /Zi /O2 /Ob1 /D NDEBUG /D PLATFORM_WINDOWS /DPSAPI_VERSION=2 /DOIIO_STATIC_BUILD /DTINYFORMAT_ALLOW_WCHAR_STRINGS") + set(BLENDER_CMAKE_CXX_FLAGS_MINSIZEREL "/MD /${COMMON_MSVC_FLAGS} /D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS /O1 /Ob1 /D NDEBUG /D PLATFORM_WINDOWS /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS") + set(BLENDER_CMAKE_CXX_FLAGS_RELEASE "/MD ${COMMON_MSVC_FLAGS} /D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS /O2 /Ob2 /D NDEBUG /D PLATFORM_WINDOWS /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS") + set(BLENDER_CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MD ${COMMON_MSVC_FLAGS} /D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS /Zi /O2 /Ob1 /D NDEBUG /D PLATFORM_WINDOWS /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS") set(PLATFORM_FLAGS) set(PLATFORM_CXX_FLAGS) @@ -75,6 +79,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} && @@ -97,10 +113,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) # Let's get the current Xcode dir, to support xcode-select execute_process( COMMAND xcode-select --print-path @@ -127,7 +144,7 @@ else() endif() set(PLATFORM_CFLAGS "-isysroot ${OSX_SYSROOT} -mmacosx-version-min=${OSX_DEPLOYMENT_TARGET} -arch ${CMAKE_OSX_ARCHITECTURES}") - set(PLATFORM_CXXFLAGS "-isysroot ${OSX_SYSROOT} -mmacosx-version-min=${OSX_DEPLOYMENT_TARGET} -std=c++11 -stdlib=libc++ -arch ${CMAKE_OSX_ARCHITECTURES}") + set(PLATFORM_CXXFLAGS "-isysroot ${OSX_SYSROOT} -mmacosx-version-min=${OSX_DEPLOYMENT_TARGET} -std=c++17 -stdlib=libc++ -arch ${CMAKE_OSX_ARCHITECTURES}") set(PLATFORM_LDFLAGS "-isysroot ${OSX_SYSROOT} -mmacosx-version-min=${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 @@ -140,12 +157,14 @@ else() -DCMAKE_OSX_SYSROOT:PATH=${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) @@ -192,6 +211,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} ) @@ -210,3 +230,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/osl.cmake b/build_files/build_environment/cmake/osl.cmake index 9719de94d47..0c82bbbba4b 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 @@ -33,13 +33,14 @@ set(OSL_EXTRA_ARGS -DINSTALL_DOCS=OFF -Dpugixml_ROOT=${LIBDIR}/pugixml -DUSE_PYTHON=OFF - -DCMAKE_CXX_STANDARD=14 -DImath_ROOT=${LIBDIR}/imath + -DUSE_OIIO_STATIC=OFF ) ExternalProject_Add(external_osl URL file://${PACKAGE_DIR}/${OSL_FILE} DOWNLOAD_DIR ${DOWNLOAD_DIR} + CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR} LIST_SEPARATOR ^^ URL_HASH ${OSL_HASH_TYPE}=${OSL_HASH} PREFIX ${BUILD_DIR}/osl diff --git a/build_files/build_environment/cmake/python.cmake b/build_files/build_environment/cmake/python.cmake index 8fed10e9d72..ec54e0be4a8 100644 --- a/build_files/build_environment/cmake/python.cmake +++ b/build_files/build_environment/cmake/python.cmake @@ -27,7 +27,6 @@ if(WIN32) PREFIX ${BUILD_DIR}/python CONFIGURE_COMMAND "" BUILD_COMMAND cd ${BUILD_DIR}/python/src/external_python/pcbuild/ && set IncludeTkinter=false && call build.bat -e -p x64 -c ${BUILD_MODE} - PATCH_COMMAND ${PATCH_CMD} --verbose -p1 -d ${BUILD_DIR}/python/src/external_python < ${PATCH_DIR}/python_windows.diff INSTALL_COMMAND ${PYTHON_BINARY_INTERNAL} ${PYTHON_SRC}/PC/layout/main.py -b ${PYTHON_SRC}/PCbuild/amd64 -s ${PYTHON_SRC} -t ${PYTHON_SRC}/tmp/ --include-stable --include-pip --include-dev --include-launchers --include-venv --include-symbols ${PYTHON_EXTRA_INSTLAL_FLAGS} --copy ${LIBDIR}/python ) @@ -58,11 +57,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,3 +95,17 @@ if(UNIX) 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/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 34e43383637..8601bd91f25 100644 --- a/build_files/build_environment/cmake/usd.cmake +++ b/build_files/build_environment/cmake/usd.cmake @@ -7,32 +7,50 @@ 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_SHARED_LINKER_FLAGS "-Xlinker -undefined -Xlinker dynamic_lookup") + set(USD_PLATFORM_FLAGS + -DPYTHON_INCLUDE_DIR=${LIBDIR}/python/include/python${PYTHON_SHORT_VERSION}/ + -DPYTHON_LIBRARY=${LIBDIR}/tbb/lib/${LIBPREFIX}${TBB_LIBRARY}${SHAREDLIBEXT} + ) endif() set(USD_EXTRA_ARGS ${DEFAULT_BOOST_FLAGS} ${USD_PLATFORM_FLAGS} - # This is a preventative measure that avoids possible conflicts when add-ons - # try to load another USD library into the same process space. - -DPXR_SET_INTERNAL_NAMESPACE=usdBlender -DOPENSUBDIV_ROOT_DIR=${LIBDIR}/opensubdiv -DOpenImageIO_ROOT=${LIBDIR}/openimageio - -DOPENEXR_LIBRARIES=${LIBDIR}/imath/lib/imath${OPENEXR_VERSION_POSTFIX}${LIBEXT} + -DOPENEXR_LIBRARIES=${LIBDIR}/imath/lib/${LIBPREFIX}Imath${OPENEXR_VERSION_POSTFIX}${LIBEXT} -DOPENEXR_INCLUDE_DIR=${LIBDIR}/imath/include - -DPXR_ENABLE_PYTHON_SUPPORT=OFF + -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,40 +58,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 lib, 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 lib. - -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 @@ -84,6 +98,8 @@ add_dependencies( external_tbb external_boost external_opensubdiv + external_python + openvdb ) # Since USD 21.11 the libraries are prefixed with "usd_", i.e. "libusd_m.a" became "libusd_usd_m.a". @@ -99,15 +115,15 @@ 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_usd_ms_d.dll ${HARVEST_TARGET}/usd/lib/usd_usd_ms_d.dll + COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/usd/lib/usd_usd_ms_d.lib ${HARVEST_TARGET}/usd/lib/usd_usd_ms_d.lib DEPENDEES install ) endif() diff --git a/build_files/build_environment/cmake/versions.cmake b/build_files/build_environment/cmake/versions.cmake index 01996efa9bd..6be013f4200 100644 --- a/build_files/build_environment/cmake/versions.cmake +++ b/build_files/build_environment/cmake/versions.cmake @@ -24,12 +24,12 @@ set(JPEG_HASH 627b980fad0573e08e4c3b80b290fc91) set(JPEG_HASH_TYPE MD5) set(JPEG_FILE libjpeg-turbo-${JPEG_VERSION}.tar.gz) -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) @@ -63,11 +63,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) @@ -141,9 +141,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.13.0) +set(OPENIMAGEIO_VERSION v2.3.18.0) set(OPENIMAGEIO_URI https://github.com/OpenImageIO/oiio/archive/refs/tags/${OPENIMAGEIO_VERSION}.tar.gz) -set(OPENIMAGEIO_HASH de45fb38501c4581062b522b53b6141c) +set(OPENIMAGEIO_HASH adf78f089ff90cde77ad442cb3f4c1c2) set(OPENIMAGEIO_HASH_TYPE MD5) set(OPENIMAGEIO_FILE OpenImageIO-${OPENIMAGEIO_VERSION}.tar.gz) @@ -175,11 +175,11 @@ set(OSL_HASH 63265472ce14548839ace2e21e401544) set(OSL_HASH_TYPE MD5) set(OSL_FILE OpenShadingLanguage-${OSL_VERSION}.tar.gz) -set(PYTHON_VERSION 3.10.2) +set(PYTHON_VERSION 3.10.6) set(PYTHON_SHORT_VERSION 3.10) set(PYTHON_SHORT_VERSION_NO_DOTS 310) set(PYTHON_URI https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tar.xz) -set(PYTHON_HASH 14e8c22458ed7779a1957b26cde01db9) +set(PYTHON_HASH afc7e14f7118d10d1ba95ae8e2134bf0) set(PYTHON_HASH_TYPE MD5) set(PYTHON_FILE Python-${PYTHON_VERSION}.tar.xz) @@ -189,9 +189,9 @@ set(TBB_HASH 55ec8df6eae5ed6364a47f0e671e460c) set(TBB_HASH_TYPE MD5) set(TBB_FILE oneTBB-${TBB_VERSION}.tar.gz) -set(OPENVDB_VERSION 9.0.0) +set(OPENVDB_VERSION 9.1.0) set(OPENVDB_URI https://github.com/AcademySoftwareFoundation/openvdb/archive/v${OPENVDB_VERSION}.tar.gz) -set(OPENVDB_HASH 684ce40c2f74f3a0c9cac530e1c7b07e) +set(OPENVDB_HASH 8918de645a737734e577e16753325703) set(OPENVDB_HASH_TYPE MD5) set(OPENVDB_FILE openvdb-${OPENVDB_VERSION}.tar.gz) @@ -200,20 +200,21 @@ set(CHARSET_NORMALIZER_VERSION 2.0.10) set(URLLIB3_VERSION 1.26.8) 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. 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(LAME_VERSION 3.100) set(LAME_URI http://downloads.sourceforge.net/project/lame/lame/3.100/lame-${LAME_VERSION}.tar.gz) @@ -655,3 +656,15 @@ 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) 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 78f093d7bc6..29fac711bbf 100755 --- a/build_files/build_environment/install_deps.sh +++ b/build_files/build_environment/install_deps.sh @@ -3187,7 +3187,6 @@ compile_USD() { if [ -d $INST/tbb ]; then cmake_d="$cmake_d $cmake_d -D TBB_ROOT_DIR=$INST/tbb" fi - cmake_d="$cmake_d -DPXR_SET_INTERNAL_NAMESPACE=usdBlender" cmake_d="$cmake_d -DPXR_ENABLE_PYTHON_SUPPORT=OFF" cmake_d="$cmake_d -DPXR_BUILD_IMAGING=OFF" cmake_d="$cmake_d -DPXR_BUILD_TESTS=OFF" diff --git a/build_files/build_environment/patches/boost.user.jam.in b/build_files/build_environment/patches/boost.user.jam.in index b615b0cafad..b20a90d522c 100644 --- a/build_files/build_environment/patches/boost.user.jam.in +++ b/build_files/build_environment/patches/boost.user.jam.in @@ -1,4 +1,4 @@ using python : @PYTHON_SHORT_VERSION@ : @PYTHON_BINARY@ - : @LIBDIR@/python/include @LIBDIR@/python/include/python@PYTHON_SHORT_VERSION@m/ + : @LIBDIR@/python/include @LIBDIR@/python/include/python@PYTHON_SHORT_VERSION@/ : @LIBDIR@/python/libs ;
\ No newline at end of file diff --git a/build_files/build_environment/patches/opencollada.diff b/build_files/build_environment/patches/opencollada.diff index e8efc1a6909..5ae2d06e120 100644 --- a/build_files/build_environment/patches/opencollada.diff +++ b/build_files/build_environment/patches/opencollada.diff @@ -130,3 +130,15 @@ index 715d903..24423ce 100644 { string id = node.attribute("id").value(); size_t line = node.line(); +diff -Naur OpenCOLLADA-1.6.68/common/libBuffer/include/CommonFWriteBufferFlusher.h external_opencollada/common/libBuffer/include/CommonFWriteBufferFlusher.h +--- OpenCOLLADA-1.6.68/common/libBuffer/include/CommonFWriteBufferFlusher.h 2018-11-26 14:43:10 -0700 ++++ external_opencollada/common/libBuffer/include/CommonFWriteBufferFlusher.h 2022-08-19 11:36:04 -0600 +@@ -23,7 +23,7 @@ + # include <tr1/unordered_map> + #endif + +-#ifdef _LIBCPP_VERSION ++#if defined(_LIBCPP_VERSION) || defined(WIN32) + // If we're compiling with libc++, create a namespace alias for tr1 that points to std. + // Not particularly elegant, and largely should be filed under "hack", but it works for OS X with clang for now. + namespace std { diff --git a/build_files/build_environment/patches/openvdb.diff b/build_files/build_environment/patches/openvdb.diff index f716df3d6e3..9ad231e0c6d 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,16 @@ diff -Naur openvdb-8.0.0/openvdb/openvdb/version.rc.in openvdb/openvdb/openvdb/v + + END +END -diff --git a/nanovdb/nanovdb/NanoVDB.h b/nanovdb/nanovdb/NanoVDB.h -index cc2e54b77..703d2eabc 100644 ---- a/nanovdb/nanovdb/NanoVDB.h -+++ b/nanovdb/nanovdb/NanoVDB.h -@@ -161,8 +161,8 @@ typedef unsigned long long uint64_t; - - #endif // __CUDACC_RTC__ - --#ifdef __CUDACC__ --// Only define __hostdev__ when using NVIDIA CUDA compiler -+#if defined(__CUDACC__) || defined(__HIP__) -+// Only define __hostdev__ when using NVIDIA CUDA or HIP compiler - #define __hostdev__ __host__ __device__ - #else - #define __hostdev__ -@@ -611,7 +611,7 @@ struct Delta<double> - /// Maximum floating-point values - template<typename T> - struct Maximum; --#ifdef __CUDA_ARCH__ -+#if defined(__CUDA_ARCH__) || defined(__HIP__) - template<> - struct Maximum<int> - { -@@ -1176,10 +1176,10 @@ using Vec3f = Vec3<float>; - using Vec3i = Vec3<int>; - - /// @brief Return a single precision floating-point vector of this coordinate --Vec3f Coord::asVec3s() const { return Vec3f(float(mVec[0]), float(mVec[1]), float(mVec[2])); } -+__hostdev__ inline Vec3f Coord::asVec3s() const { return Vec3f(float(mVec[0]), float(mVec[1]), float(mVec[2])); } - - /// @brief Return a double precision floating-point vector of this coordinate --Vec3d Coord::asVec3d() const { return Vec3d(double(mVec[0]), double(mVec[1]), double(mVec[2])); } -+__hostdev__ inline Vec3d Coord::asVec3d() const { return Vec3d(double(mVec[0]), double(mVec[1]), double(mVec[2])); } - - // ----------------------------> Vec4 <-------------------------------------- - -@@ -2042,7 +2042,7 @@ struct Map - }; // Map - - template<typename Mat4T> --void Map::set(const Mat4T& mat, const Mat4T& invMat, double taper) -+__hostdev__ void Map::set(const Mat4T& mat, const Mat4T& invMat, double taper) - { - float * mf = mMatF, *vf = mVecF; - float* mif = mInvMatF; -@@ -2486,7 +2486,7 @@ class Grid : private GridData - }; // Class Grid - - template<typename TreeT> --int Grid<TreeT>::findBlindDataForSemantic(GridBlindDataSemantic semantic) const -+__hostdev__ int Grid<TreeT>::findBlindDataForSemantic(GridBlindDataSemantic semantic) const - { - for (uint32_t i = 0, n = this->blindDataCount(); i < n; ++i) - if (this->blindMetaData(i).mSemantic == semantic) -@@ -2671,7 +2671,7 @@ class Tree : private TreeData<RootT::LEVEL> - }; // Tree class - - template<typename RootT> --void Tree<RootT>::extrema(ValueType& min, ValueType& max) const -+__hostdev__ void Tree<RootT>::extrema(ValueType& min, ValueType& max) const - { - min = this->root().minimum(); - max = this->root().maximum(); -@@ -3880,7 +3880,7 @@ class LeafNode : private LeafData<BuildT, CoordT, MaskT, Log2Dim> - }; // LeafNode class - - template<typename ValueT, typename CoordT, template<uint32_t> class MaskT, uint32_t LOG2DIM> --inline void LeafNode<ValueT, CoordT, MaskT, LOG2DIM>::updateBBox() -+__hostdev__ inline void LeafNode<ValueT, CoordT, MaskT, LOG2DIM>::updateBBox() - { - static_assert(LOG2DIM == 3, "LeafNode::updateBBox: only supports LOGDIM = 3!"); - if (!this->isActive()) return; -diff --git a/nanovdb/nanovdb/util/SampleFromVoxels.h b/nanovdb/nanovdb/util/SampleFromVoxels.h -index 852123dac..e779d66cf 100644 ---- a/nanovdb/nanovdb/util/SampleFromVoxels.h -+++ b/nanovdb/nanovdb/util/SampleFromVoxels.h -@@ -22,7 +22,7 @@ - #define NANOVDB_SAMPLE_FROM_VOXELS_H_HAS_BEEN_INCLUDED - - // Only define __hostdev__ when compiling as NVIDIA CUDA --#ifdef __CUDACC__ -+#if defined(__CUDACC__) || defined(__HIP__) - #define __hostdev__ __host__ __device__ - #else - #include <cmath> // for floor -@@ -136,7 +136,7 @@ class SampleFromVoxels<TreeOrAccT, 0, false> - - template<typename TreeOrAccT> - template<typename Vec3T> --typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, true>::operator()(const Vec3T& xyz) const -+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, true>::operator()(const Vec3T& xyz) const - { - const CoordT ijk = Round<CoordT>(xyz); - if (ijk != mPos) { -@@ -147,7 +147,7 @@ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, true>::operator() - } - - template<typename TreeOrAccT> --typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, true>::operator()(const CoordT& ijk) const -+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, true>::operator()(const CoordT& ijk) const - { - if (ijk != mPos) { - mPos = ijk; -@@ -158,7 +158,7 @@ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, true>::operator() - - template<typename TreeOrAccT> - template<typename Vec3T> --typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, false>::operator()(const Vec3T& xyz) const -+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, false>::operator()(const Vec3T& xyz) const - { - return mAcc.getValue(Round<CoordT>(xyz)); - } -@@ -195,7 +195,7 @@ class TrilinearSampler - }; // TrilinearSamplerBase - - template<typename TreeOrAccT> --void TrilinearSampler<TreeOrAccT>::stencil(CoordT& ijk, ValueT (&v)[2][2][2]) const -+__hostdev__ void TrilinearSampler<TreeOrAccT>::stencil(CoordT& ijk, ValueT (&v)[2][2][2]) const - { - v[0][0][0] = mAcc.getValue(ijk); // i, j, k - -@@ -224,7 +224,7 @@ void TrilinearSampler<TreeOrAccT>::stencil(CoordT& ijk, ValueT (&v)[2][2][2]) co - - template<typename TreeOrAccT> - template<typename RealT, template<typename...> class Vec3T> --typename TreeOrAccT::ValueType TrilinearSampler<TreeOrAccT>::sample(const Vec3T<RealT> &uvw, const ValueT (&v)[2][2][2]) -+__hostdev__ typename TreeOrAccT::ValueType TrilinearSampler<TreeOrAccT>::sample(const Vec3T<RealT> &uvw, const ValueT (&v)[2][2][2]) - { - #if 0 - auto lerp = [](ValueT a, ValueT b, ValueT w){ return fma(w, b-a, a); };// = w*(b-a) + a -@@ -239,7 +239,7 @@ typename TreeOrAccT::ValueType TrilinearSampler<TreeOrAccT>::sample(const Vec3T< - - template<typename TreeOrAccT> - template<typename RealT, template<typename...> class Vec3T> --Vec3T<typename TreeOrAccT::ValueType> TrilinearSampler<TreeOrAccT>::gradient(const Vec3T<RealT> &uvw, const ValueT (&v)[2][2][2]) -+__hostdev__ Vec3T<typename TreeOrAccT::ValueType> TrilinearSampler<TreeOrAccT>::gradient(const Vec3T<RealT> &uvw, const ValueT (&v)[2][2][2]) - { - static_assert(is_floating_point<ValueT>::value, "TrilinearSampler::gradient requires a floating-point type"); - #if 0 -@@ -270,7 +270,7 @@ Vec3T<typename TreeOrAccT::ValueType> TrilinearSampler<TreeOrAccT>::gradient(con - } - - template<typename TreeOrAccT> --bool TrilinearSampler<TreeOrAccT>::zeroCrossing(const ValueT (&v)[2][2][2]) -+__hostdev__ bool TrilinearSampler<TreeOrAccT>::zeroCrossing(const ValueT (&v)[2][2][2]) - { - static_assert(is_floating_point<ValueT>::value, "TrilinearSampler::zeroCrossing requires a floating-point type"); - const bool less = v[0][0][0] < ValueT(0); -@@ -363,21 +363,21 @@ class SampleFromVoxels<TreeOrAccT, 1, true> : public TrilinearSampler<TreeOrAccT - - template<typename TreeOrAccT> - template<typename RealT, template<typename...> class Vec3T> --typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, true>::operator()(Vec3T<RealT> xyz) const -+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, true>::operator()(Vec3T<RealT> xyz) const - { - this->cache(xyz); - return BaseT::sample(xyz, mVal); - } - - template<typename TreeOrAccT> --typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, true>::operator()(const CoordT &ijk) const -+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, true>::operator()(const CoordT &ijk) const - { - return ijk == mPos ? mVal[0][0][0] : BaseT::mAcc.getValue(ijk); - } - - template<typename TreeOrAccT> - template<typename RealT, template<typename...> class Vec3T> --Vec3T<typename TreeOrAccT::ValueType> SampleFromVoxels<TreeOrAccT, 1, true>::gradient(Vec3T<RealT> xyz) const -+__hostdev__ Vec3T<typename TreeOrAccT::ValueType> SampleFromVoxels<TreeOrAccT, 1, true>::gradient(Vec3T<RealT> xyz) const - { - this->cache(xyz); - return BaseT::gradient(xyz, mVal); -@@ -393,7 +393,7 @@ __hostdev__ bool SampleFromVoxels<TreeOrAccT, 1, true>::zeroCrossing(Vec3T<RealT - - template<typename TreeOrAccT> - template<typename RealT, template<typename...> class Vec3T> --void SampleFromVoxels<TreeOrAccT, 1, true>::cache(Vec3T<RealT>& xyz) const -+__hostdev__ void SampleFromVoxels<TreeOrAccT, 1, true>::cache(Vec3T<RealT>& xyz) const - { - CoordT ijk = Floor<CoordT>(xyz); - if (ijk != mPos) { -@@ -406,7 +406,7 @@ void SampleFromVoxels<TreeOrAccT, 1, true>::cache(Vec3T<RealT>& xyz) const - - template<typename TreeOrAccT> - template<typename RealT, template<typename...> class Vec3T> --typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, false>::operator()(Vec3T<RealT> xyz) const -+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, false>::operator()(Vec3T<RealT> xyz) const - { - ValueT val[2][2][2]; - CoordT ijk = Floor<CoordT>(xyz); -@@ -418,7 +418,7 @@ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, false>::operator( - - template<typename TreeOrAccT> - template<typename RealT, template<typename...> class Vec3T> --typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, false>::operator()(Vec3T<RealT> xyz) const -+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, false>::operator()(Vec3T<RealT> xyz) const - { - auto lerp = [](ValueT a, ValueT b, RealT w) { return a + ValueT(w) * (b - a); }; - -@@ -463,7 +463,7 @@ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, false>::operator( - - template<typename TreeOrAccT> - template<typename RealT, template<typename...> class Vec3T> --inline Vec3T<typename TreeOrAccT::ValueType> SampleFromVoxels<TreeOrAccT, 1, false>::gradient(Vec3T<RealT> xyz) const -+__hostdev__ inline Vec3T<typename TreeOrAccT::ValueType> SampleFromVoxels<TreeOrAccT, 1, false>::gradient(Vec3T<RealT> xyz) const - { - ValueT val[2][2][2]; - CoordT ijk = Floor<CoordT>(xyz); -@@ -473,7 +473,7 @@ inline Vec3T<typename TreeOrAccT::ValueType> SampleFromVoxels<TreeOrAccT, 1, fal - - template<typename TreeOrAccT> - template<typename RealT, template<typename...> class Vec3T> --bool SampleFromVoxels<TreeOrAccT, 1, false>::zeroCrossing(Vec3T<RealT> xyz) const -+__hostdev__ bool SampleFromVoxels<TreeOrAccT, 1, false>::zeroCrossing(Vec3T<RealT> xyz) const - { - ValueT val[2][2][2]; - CoordT ijk = Floor<CoordT>(xyz); -@@ -510,7 +510,7 @@ class TriquadraticSampler - }; // TriquadraticSamplerBase - - template<typename TreeOrAccT> --void TriquadraticSampler<TreeOrAccT>::stencil(const CoordT &ijk, ValueT (&v)[3][3][3]) const -+__hostdev__ void TriquadraticSampler<TreeOrAccT>::stencil(const CoordT &ijk, ValueT (&v)[3][3][3]) const - { - CoordT p(ijk[0] - 1, 0, 0); - for (int dx = 0; dx < 3; ++dx, ++p[0]) { -@@ -526,7 +526,7 @@ void TriquadraticSampler<TreeOrAccT>::stencil(const CoordT &ijk, ValueT (&v)[3][ - - template<typename TreeOrAccT> - template<typename RealT, template<typename...> class Vec3T> --typename TreeOrAccT::ValueType TriquadraticSampler<TreeOrAccT>::sample(const Vec3T<RealT> &uvw, const ValueT (&v)[3][3][3]) -+__hostdev__ typename TreeOrAccT::ValueType TriquadraticSampler<TreeOrAccT>::sample(const Vec3T<RealT> &uvw, const ValueT (&v)[3][3][3]) - { - auto kernel = [](const ValueT* value, double weight)->ValueT { - return weight * (weight * (0.5f * (value[0] + value[2]) - value[1]) + -@@ -545,7 +545,7 @@ typename TreeOrAccT::ValueType TriquadraticSampler<TreeOrAccT>::sample(const Vec - } - - template<typename TreeOrAccT> --bool TriquadraticSampler<TreeOrAccT>::zeroCrossing(const ValueT (&v)[3][3][3]) -+__hostdev__ bool TriquadraticSampler<TreeOrAccT>::zeroCrossing(const ValueT (&v)[3][3][3]) - { - static_assert(is_floating_point<ValueT>::value, "TrilinearSampler::zeroCrossing requires a floating-point type"); - const bool less = v[0][0][0] < ValueT(0); -@@ -624,14 +624,14 @@ class SampleFromVoxels<TreeOrAccT, 2, true> : public TriquadraticSampler<TreeOrA - - template<typename TreeOrAccT> - template<typename RealT, template<typename...> class Vec3T> --typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, true>::operator()(Vec3T<RealT> xyz) const -+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, true>::operator()(Vec3T<RealT> xyz) const - { - this->cache(xyz); - return BaseT::sample(xyz, mVal); - } - - template<typename TreeOrAccT> --typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, true>::operator()(const CoordT &ijk) const -+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, true>::operator()(const CoordT &ijk) const - { - return ijk == mPos ? mVal[1][1][1] : BaseT::mAcc.getValue(ijk); - } -@@ -646,7 +646,7 @@ __hostdev__ bool SampleFromVoxels<TreeOrAccT, 2, true>::zeroCrossing(Vec3T<RealT - - template<typename TreeOrAccT> - template<typename RealT, template<typename...> class Vec3T> --void SampleFromVoxels<TreeOrAccT, 2, true>::cache(Vec3T<RealT>& xyz) const -+__hostdev__ void SampleFromVoxels<TreeOrAccT, 2, true>::cache(Vec3T<RealT>& xyz) const - { - CoordT ijk = Floor<CoordT>(xyz); - if (ijk != mPos) { -@@ -657,7 +657,7 @@ void SampleFromVoxels<TreeOrAccT, 2, true>::cache(Vec3T<RealT>& xyz) const - - template<typename TreeOrAccT> - template<typename RealT, template<typename...> class Vec3T> --typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, false>::operator()(Vec3T<RealT> xyz) const -+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, false>::operator()(Vec3T<RealT> xyz) const - { - ValueT val[3][3][3]; - CoordT ijk = Floor<CoordT>(xyz); -@@ -667,7 +667,7 @@ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, false>::operator( - - template<typename TreeOrAccT> - template<typename RealT, template<typename...> class Vec3T> --bool SampleFromVoxels<TreeOrAccT, 2, false>::zeroCrossing(Vec3T<RealT> xyz) const -+__hostdev__ bool SampleFromVoxels<TreeOrAccT, 2, false>::zeroCrossing(Vec3T<RealT> xyz) const - { - ValueT val[3][3][3]; - CoordT ijk = Floor<CoordT>(xyz); -@@ -710,7 +710,7 @@ class TricubicSampler - }; // TricubicSampler - - template<typename TreeOrAccT> --void TricubicSampler<TreeOrAccT>::stencil(const CoordT& ijk, ValueT (&C)[64]) const -+__hostdev__ void TricubicSampler<TreeOrAccT>::stencil(const CoordT& ijk, ValueT (&C)[64]) const - { - auto fetch = [&](int i, int j, int k) -> ValueT& { return C[((i + 1) << 4) + ((j + 1) << 2) + k + 1]; }; - -@@ -929,7 +929,7 @@ class SampleFromVoxels<TreeOrAccT, 3, true> : public TricubicSampler<TreeOrAccT> - - template<typename TreeOrAccT> - template<typename RealT, template<typename...> class Vec3T> --typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 3, true>::operator()(Vec3T<RealT> xyz) const -+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 3, true>::operator()(Vec3T<RealT> xyz) const - { - this->cache(xyz); - return BaseT::sample(xyz, mC); -@@ -937,7 +937,7 @@ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 3, true>::operator() - - template<typename TreeOrAccT> - template<typename RealT, template<typename...> class Vec3T> --void SampleFromVoxels<TreeOrAccT, 3, true>::cache(Vec3T<RealT>& xyz) const -+__hostdev__ void SampleFromVoxels<TreeOrAccT, 3, true>::cache(Vec3T<RealT>& xyz) const - { - CoordT ijk = Floor<CoordT>(xyz); - if (ijk != mPos) { +diff -Naur orig/openvdb_ax/openvdb_ax/CMakeLists.txt openvdb/openvdb_ax/openvdb_ax/CMakeLists.txt +--- orig/openvdb_ax/openvdb_ax/CMakeLists.txt 2022-06-09 08:50:40 -0600 ++++ openvdb/openvdb_ax/openvdb_ax/CMakeLists.txt 2022-08-08 22:11:02 -0600 +@@ -305,6 +305,9 @@ + # Configure shared build + if(OPENVDB_AX_SHARED) ++ if(WIN32) ++ list(APPEND OPENVDB_AX_PUBLIC_DEFINES -DOPENVDB_AX_DLL) ++ endif() + target_compile_definitions(openvdb_ax_shared PUBLIC ${OPENVDB_AX_PUBLIC_DEFINES}) + target_compile_definitions(openvdb_ax_shared PRIVATE ${OPENVDB_AX_PRIVATE_DEFINES}) + target_compile_options(openvdb_ax_shared PUBLIC ${OPENVDB_AX_PUBLIC_OPTIONS}) diff --git a/build_files/build_environment/patches/osl.diff b/build_files/build_environment/patches/osl.diff index 28e1d6e101d..0fa23293205 100644 --- a/build_files/build_environment/patches/osl.diff +++ b/build_files/build_environment/patches/osl.diff @@ -48,17 +48,6 @@ diff -Naur org/CMakeLists.txt external_osl/CMakeLists.txt set (OSL_NO_DEFAULT_TEXTURESYSTEM OFF CACHE BOOL "Do not use create a raw OIIO::TextureSystem") if (OSL_NO_DEFAULT_TEXTURESYSTEM) -diff -Naur external_osl_orig/src/cmake/externalpackages.cmake external_osl/src/cmake/externalpackages.cmake ---- external_osl_orig/src/cmake/externalpackages.cmake 2021-06-01 13:44:18 -0600 -+++ external_osl/src/cmake/externalpackages.cmake 2021-06-28 07:44:32 -0600 -@@ -80,6 +80,7 @@ - - - checked_find_package (ZLIB REQUIRED) # Needed by several packages -+checked_find_package (PNG REQUIRED) # Needed since OIIO needs it - - # IlmBase & OpenEXR - checked_find_package (OpenEXR REQUIRED diff -Naur external_osl_orig/src/liboslcomp/oslcomp.cpp external_osl/src/liboslcomp/oslcomp.cpp --- external_osl_orig/src/liboslcomp/oslcomp.cpp 2021-06-01 13:44:18 -0600 +++ external_osl/src/liboslcomp/oslcomp.cpp 2021-06-28 09:11:06 -0600 @@ -76,3 +65,31 @@ diff -Naur external_osl_orig/src/liboslcomp/oslcomp.cpp external_osl/src/liboslc #include <clang/Basic/TargetInfo.h> #include <clang/Frontend/CompilerInstance.h> #include <clang/Frontend/TextDiagnosticPrinter.h> +diff -Naur orig/src/cmake/externalpackages.cmake external_osl/src/cmake/externalpackages.cmake +--- orig/src/cmake/externalpackages.cmake 2022-01-07 18:36:45 -0700 ++++ external_osl/src/cmake/externalpackages.cmake 2022-08-02 08:10:27 -0600 +@@ -36,12 +36,10 @@ + + ########################################################################### + # Boost setup +-if (LINKSTATIC) +- set (Boost_USE_STATIC_LIBS ON) +-else () +- if (MSVC) +- add_definitions (-DBOOST_ALL_DYN_LINK=1) +- endif () ++# Blender links most things static, but not boost ++set (Boost_USE_STATIC_LIBS OFF) ++if (MSVC) ++ add_definitions (-DBOOST_ALL_DYN_LINK=1) + endif () + if (BOOST_CUSTOM) + set (Boost_FOUND true) +@@ -80,6 +78,7 @@ + + + checked_find_package (ZLIB REQUIRED) # Needed by several packages ++checked_find_package (PNG REQUIRED) # Needed since OIIO needs it + + # IlmBase & OpenEXR + checked_find_package (OpenEXR REQUIRED diff --git a/build_files/build_environment/patches/python_windows.diff b/build_files/build_environment/patches/python_windows.diff deleted file mode 100644 index f9c89a90fde..00000000000 --- a/build_files/build_environment/patches/python_windows.diff +++ /dev/null @@ -1,24 +0,0 @@ -diff -Naur orig/PCbuild/get_externals.bat Python-3.10.2/PCbuild/get_externals.bat ---- orig/PCbuild/get_externals.bat 2022-01-13 11:52:14 -0700 -+++ Python-3.10.2/PCbuild/get_externals.bat 2022-08-17 11:24:42 -0600 -@@ -51,7 +51,7 @@ - echo.Fetching external libraries... - - set libraries= --set libraries=%libraries% bzip2-1.0.6 -+set libraries=%libraries% bzip2-1.0.8 - if NOT "%IncludeLibffiSrc%"=="false" set libraries=%libraries% libffi-3.3.0 - if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries% openssl-1.1.1m - set libraries=%libraries% sqlite-3.35.5.0 - diff -Naur orig/PCbuild/python.props external_python/PCbuild/python.props ---- orig/PCbuild/python.props 2022-01-13 11:52:14 -0700 -+++ external_python/PCbuild/python.props 2022-08-17 11:38:38 -0600 -@@ -58,7 +58,7 @@ - <ExternalsDir Condition="$(ExternalsDir) == ''">$([System.IO.Path]::GetFullPath(`$(PySourcePath)externals`))</ExternalsDir> - <ExternalsDir Condition="!HasTrailingSlash($(ExternalsDir))">$(ExternalsDir)\</ExternalsDir> - <sqlite3Dir>$(ExternalsDir)sqlite-3.35.5.0\</sqlite3Dir> -- <bz2Dir>$(ExternalsDir)bzip2-1.0.6\</bz2Dir> -+ <bz2Dir>$(ExternalsDir)bzip2-1.0.8\</bz2Dir> - <lzmaDir>$(ExternalsDir)xz-5.2.2\</lzmaDir> - <libffiDir>$(ExternalsDir)libffi-3.3.0\</libffiDir> - <libffiOutDir>$(ExternalsDir)libffi-3.3.0\$(ArchName)\</libffiOutDir> diff --git a/build_files/build_environment/patches/usd.diff b/build_files/build_environment/patches/usd.diff index 3d0aa4498b7..881d856ca25 100644 --- a/build_files/build_environment/patches/usd.diff +++ b/build_files/build_environment/patches/usd.diff @@ -100,3 +100,47 @@ index 517561f..fda5a1f 100644 /// A simple timer class for measuring an interval of time using the /// ArchTickTimer facilities. +diff -Naur usd_orig/pxr/usdImaging/CMakeLists.txt external_usd/pxr/usdImaging/CMakeLists.txt +--- usd_orig/pxr/usdImaging/CMakeLists.txt 2022-02-18 14:49:09 -0700 ++++ external_usd/pxr/usdImaging/CMakeLists.txt 2022-08-05 10:06:44 -0600 +@@ -6,7 +6,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/pxr/imaging/hioOpenVDB/CMakeLists.txt b/pxr/imaging/hioOpenVDB/CMakeLists.txt +index e3db1d1319..2a2dfd5e72 100644 +--- a/pxr/imaging/hioOpenVDB/CMakeLists.txt ++++ b/pxr/imaging/hioOpenVDB/CMakeLists.txt +@@ -7,6 +7,12 @@ if (NOT ${PXR_BUILD_GPU_SUPPORT}) + return() + endif() + ++if (WIN32) ++ # OpenVDB uses constants from <cmath> that aren't available on ++ # Windows unless this is defined. ++ add_definitions(-D_USE_MATH_DEFINES) ++endif() ++ + pxr_library(hioOpenVDB + LIBRARIES + ar
\ No newline at end of file diff --git a/build_files/build_environment/windows/build_deps.cmd b/build_files/build_environment/windows/build_deps.cmd index d3879f3d6ae..6fe9521b5b9 100644 --- a/build_files/build_environment/windows/build_deps.cmd +++ b/build_files/build_environment/windows/build_deps.cmd @@ -103,15 +103,14 @@ 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 path=%BUILD_DIR%\downloads\mingw\mingw64\msys\1.0\bin\;%BUILD_DIR%\downloads\nasm-2.12.01\;%path%;%Staging%\%BuildDir%%ARCH%R\Release\boost\lib;%Staging%\%BuildDir%%ARCH%D\Debug\boost\lib; 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 +122,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 ) diff --git a/build_files/buildbot/config/blender_linux.cmake b/build_files/buildbot/config/blender_linux.cmake index bedeeb6a690..3f3695ed481 100644 --- a/build_files/buildbot/config/blender_linux.cmake +++ b/build_files/buildbot/config/blender_linux.cmake @@ -28,4 +28,4 @@ set(LIBDIR "${CMAKE_CURRENT_LIST_DIR}/../../../../lib/${LIBDIR_NAME}" CACHE STRI # Platform specific configuration, to ensure static linking against everything. # Additional linking libraries -set(CMAKE_EXE_LINKER_FLAGS "-lrt -static-libstdc++ -no-pie" CACHE STRING "" FORCE) +set(CMAKE_EXE_LINKER_FLAGS "-lrt -no-pie" CACHE STRING "" FORCE) diff --git a/build_files/cmake/Modules/FindPythonLibsUnix.cmake b/build_files/cmake/Modules/FindPythonLibsUnix.cmake index 0afe1299330..b222ed85a4f 100644 --- a/build_files/cmake/Modules/FindPythonLibsUnix.cmake +++ b/build_files/cmake/Modules/FindPythonLibsUnix.cmake @@ -13,6 +13,7 @@ # # This module defines # PYTHON_VERSION +# PYTHON_VERSION_NO_DOTS # PYTHON_INCLUDE_DIRS # PYTHON_INCLUDE_CONFIG_DIRS # PYTHON_LIBRARIES @@ -64,11 +65,11 @@ IF(DEFINED PYTHON_LIBPATH) SET(_IS_LIB_PATH_DEF ON) ENDIF() -STRING(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION}) +STRING(REPLACE "." "" PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION}) SET(_python_SEARCH_DIRS ${PYTHON_ROOT_DIR} - "$ENV{HOME}/py${_PYTHON_VERSION_NO_DOTS}" + "$ENV{HOME}/py${PYTHON_VERSION_NO_DOTS}" "/opt/lib/python-${PYTHON_VERSION}" ) @@ -211,7 +212,6 @@ IF(PYTHONLIBSUNIX_FOUND) ) ENDIF() -UNSET(_PYTHON_VERSION_NO_DOTS) UNSET(_PYTHON_ABI_FLAGS) UNSET(_python_SEARCH_DIRS) diff --git a/build_files/cmake/Modules/FindUSD.cmake b/build_files/cmake/Modules/FindUSD.cmake index 0fd5f06bb35..f975b20806e 100644 --- a/build_files/cmake/Modules/FindUSD.cmake +++ b/build_files/cmake/Modules/FindUSD.cmake @@ -58,6 +58,9 @@ ELSE() get_filename_component(USD_LIBRARY_DIR ${USD_LIBRARY} DIRECTORY) SET(USD_INCLUDE_DIRS ${USD_INCLUDE_DIR}) set(USD_LIBRARIES ${USD_LIBRARY}) + IF(EXISTS ${USD_INCLUDE_DIR}/pxr/base/tf/pyModule.h) + SET(USD_PYTHON_SUPPORT ON) + ENDIF() ENDIF() ENDIF() diff --git a/build_files/cmake/Modules/GTestTesting.cmake b/build_files/cmake/Modules/GTestTesting.cmake index 5ffd158361e..d6f5b2a5cd6 100644 --- a/build_files/cmake/Modules/GTestTesting.cmake +++ b/build_files/cmake/Modules/GTestTesting.cmake @@ -95,6 +95,9 @@ macro(BLENDER_SRC_GTEST_EX) set_tests_properties(${TARGET_NAME} PROPERTIES ENVIRONMENT LSAN_OPTIONS=exitcode=0:$ENV{LSAN_OPTIONS} ) + if(WIN32) + set_tests_properties(${TARGET_NAME} PROPERTIES ENVIRONMENT "PATH=${CMAKE_INSTALL_PREFIX_WITH_CONFIG}/blender.shared/;$ENV{PATH}") + endif() endif() if(WIN32) set_target_properties(${TARGET_NAME} PROPERTIES VS_GLOBAL_VcpkgEnabled "false") diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake index 3acea19079b..e067fc0f2c2 100644 --- a/build_files/cmake/macros.cmake +++ b/build_files/cmake/macros.cmake @@ -403,7 +403,9 @@ function(blender_add_test_suite) --test-assets-dir "${CMAKE_SOURCE_DIR}/../lib/tests" --test-release-dir "${_test_release_dir}" ) - + if(WIN32) + set_tests_properties(${ARGS_SUITE_NAME} PROPERTIES ENVIRONMENT "PATH=${CMAKE_INSTALL_PREFIX_WITH_CONFIG}/blender.shared/;$ENV{PATH}") + endif() unset(_test_release_dir) endfunction() @@ -1217,3 +1219,88 @@ endmacro() macro(without_system_libs_end) unset(CMAKE_IGNORE_PATH) endmacro() + +# Utility to gather and install precompiled shared libraries. +macro(add_bundled_libraries library_dir) + if(EXISTS ${LIBDIR}) + set(_library_dir ${LIBDIR}/${library_dir}) + if(WIN32) + file(GLOB _all_library_versions ${_library_dir}/*\.dll) + elseif(APPLE) + file(GLOB _all_library_versions ${_library_dir}/*\.dylib*) + else() + file(GLOB _all_library_versions ${_library_dir}/*\.so*) + endif() + list(APPEND PLATFORM_BUNDLED_LIBRARIES ${_all_library_versions}) + list(APPEND PLATFORM_BUNDLED_LIBRARY_DIRS ${_library_dir}) + unset(_all_library_versions) + unset(_library_dir) + endif() +endmacro() + +macro(windows_install_shared_manifest) + set(options OPTIONAL DEBUG RELEASE ALL) + set(oneValueArgs) + set(multiValueArgs FILES) + cmake_parse_arguments(WINDOWS_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) + # If none of the options are set assume ALL. + unset(WINDOWS_CONFIGURATIONS) + if(NOT WINDOWS_INSTALL_ALL AND + NOT WINDOWS_INSTALL_DEBUG AND + NOT WINDOWS_INSTALL_RELEASE) + set(WINDOWS_INSTALL_ALL TRUE) + endif() + # If all is set, turn both DEBUG and RELEASE on. + if(WINDOWS_INSTALL_ALL) + set(WINDOWS_INSTALL_DEBUG TRUE) + set(WINDOWS_INSTALL_RELEASE TRUE) + endif() + if(WINDOWS_INSTALL_DEBUG) + set(WINDOWS_CONFIGURATIONS "${WINDOWS_CONFIGURATIONS};Debug") + list(APPEND WINDOWS_SHARED_MANIFEST_DEBUG ${WINDOWS_INSTALL_FILES}) + endif() + if(WINDOWS_INSTALL_RELEASE) + list(APPEND WINDOWS_SHARED_MANIFEST_RELEASE ${WINDOWS_INSTALL_FILES}) + set(WINDOWS_CONFIGURATIONS "${WINDOWS_CONFIGURATIONS};Release;RelWithDebInfo;MinSizeRel") + endif() + install(FILES ${WINDOWS_INSTALL_FILES} + CONFIGURATIONS ${WINDOWS_CONFIGURATIONS} + DESTINATION "./blender.shared" + ) +endmacro() + +macro(windows_generate_manifest) + set(options) + set(oneValueArgs OUTPUT NAME) + set(multiValueArgs FILES) + cmake_parse_arguments(WINDOWS_MANIFEST "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) + set(MANIFEST_LIBS "") + foreach(lib ${WINDOWS_MANIFEST_FILES}) + get_filename_component(filename ${lib} NAME) + set(MANIFEST_LIBS "${MANIFEST_LIBS} <file name=\"${filename}\"/>\n") + endforeach() + configure_file(${CMAKE_SOURCE_DIR}/release/windows/manifest/blender.manifest.in ${WINDOWS_MANIFEST_OUTPUT} @ONLY) +endmacro() + +macro(windows_generate_shared_manifest) + windows_generate_manifest( + FILES "${WINDOWS_SHARED_MANIFEST_DEBUG}" + OUTPUT "${CMAKE_BINARY_DIR}/Debug/blender.shared.manifest" + NAME "blender.shared" + ) + windows_generate_manifest( + FILES "${WINDOWS_SHARED_MANIFEST_RELEASE}" + OUTPUT "${CMAKE_BINARY_DIR}/Release/blender.shared.manifest" + NAME "blender.shared" + ) + install( + FILES ${CMAKE_BINARY_DIR}/Release/blender.shared.manifest + DESTINATION "./blender.shared" + CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel + ) + install( + FILES ${CMAKE_BINARY_DIR}/Debug/blender.shared.manifest + DESTINATION "./blender.shared" + CONFIGURATIONS Debug + ) +endmacro() diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake/platform/platform_apple.cmake index 9f1824ec827..a94986a010b 100644 --- a/build_files/cmake/platform/platform_apple.cmake +++ b/build_files/cmake/platform/platform_apple.cmake @@ -21,18 +21,7 @@ function(print_found_status endif() endfunction() -# Utility to install precompiled shared libraries. -macro(add_bundled_libraries library) - if(EXISTS ${LIBDIR}) - set(_library_dir ${LIBDIR}/${library}/lib) - file(GLOB _all_library_versions ${_library_dir}/*\.dylib*) - list(APPEND PLATFORM_BUNDLED_LIBRARIES ${_all_library_versions}) - list(APPEND PLATFORM_BUNDLED_LIBRARY_DIRS ${_library_dir}) - unset(_all_library_versions) - unset(_library_dir) endif() -endmacro() - # ------------------------------------------------------------------------ # Find system provided libraries. @@ -102,7 +91,9 @@ endif() if(WITH_USD) find_package(USD) - if(NOT USD_FOUND) + if(USD_FOUND) + add_bundled_libraries(usd/lib) + else() message(STATUS "USD not found, disabling WITH_USD") set(WITH_USD OFF) endif() @@ -110,6 +101,7 @@ endif() if(WITH_OPENSUBDIV) find_package(OpenSubdiv) + add_bundled_libraries(opensubdiv/lib) endif() if(WITH_CODEC_SNDFILE) @@ -148,6 +140,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) @@ -254,12 +248,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) @@ -289,6 +288,7 @@ if(WITH_OPENIMAGEIO) ) set(OPENIMAGEIO_DEFINITIONS "-DOIIO_STATIC_BUILD") set(OPENIMAGEIO_IDIFF "${LIBDIR}/openimageio/bin/idiff") + add_bundled_libraries(openimageio/lib) endif() if(WITH_OPENCOLORIO) @@ -303,9 +303,13 @@ endif() if(WITH_OPENVDB) find_package(OpenVDB) find_library(BLOSC_LIBRARIES NAMES blosc HINTS ${LIBDIR}/openvdb/lib) - print_found_status("Blosc" "${BLOSC_LIBRARIES}") - list(APPEND OPENVDB_LIBRARIES ${BLOSC_LIBRARIES}) + if(BLOSC_LIBRARIES) + list(APPEND OPENVDB_LIBRARIES ${BLOSC_LIBRARIES}) + else() + unset(BLOSC_LIBRARIES CACHE) + endif() set(OPENVDB_DEFINITIONS) + add_bundled_libraries(openvdb/lib) endif() if(WITH_NANOVDB) @@ -324,7 +328,7 @@ if(WITH_LLVM) if(WITH_CLANG) find_package(Clang) if(NOT CLANG_FOUND) - message(FATAL_ERROR "Clang not found.") + message(FATAL_ERROR "Clang not found.") endif() endif() @@ -375,7 +379,9 @@ endif() if(WITH_TBB) find_package(TBB) - if(NOT TBB_FOUND) + if(TBB_FOUND) + add_bundled_libraries(tbb/lib) + else() message(WARNING "TBB not found, disabling WITH_TBB") set(WITH_TBB OFF) endif() @@ -401,7 +407,7 @@ if(WITH_OPENMP) set(OpenMP_LIBRARY_DIR "${LIBDIR}/openmp/lib/") set(OpenMP_LINKER_FLAGS "-L'${OpenMP_LIBRARY_DIR}' -lomp") set(OpenMP_LIBRARY "${OpenMP_LIBRARY_DIR}/libomp.dylib") - add_bundled_libraries(openmp) + add_bundled_libraries(openmp/lib) endif() endif() @@ -529,6 +535,12 @@ if(PLATFORM_BUNDLED_LIBRARIES) # different. set(CMAKE_SKIP_BUILD_RPATH FALSE) list(APPEND CMAKE_BUILD_RPATH ${PLATFORM_BUNDLED_LIBRARY_DIRS}) + + # Environment variables to run precompiled executables that needed libraries. + list(JOIN PLATFORM_BUNDLED_LIBRARY_DIRS ":" _library_paths) + set(PLATFORM_ENV_BUILD "DYLD_LIBRARY_PATH=\"${_library_paths};${DYLD_LIBRARY_PATH}\"") + set(PLATFORM_ENV_INSTALL "DYLD_LIBRARY_PATH=${CMAKE_INSTALL_PREFIX_WITH_CONFIG}/lib/;$DYLD_LIBRARY_PATH") + unset(_library_paths) endif() # Same as `CFBundleIdentifier` in Info.plist. diff --git a/build_files/cmake/platform/platform_old_libs_update.cmake b/build_files/cmake/platform/platform_old_libs_update.cmake index f0ca930bb39..77dc61c77b4 100644 --- a/build_files/cmake/platform/platform_old_libs_update.cmake +++ b/build_files/cmake/platform/platform_old_libs_update.cmake @@ -44,3 +44,19 @@ if(UNIX AND DEFINED NANOVDB_INCLUDE_DIR) unset_cache_variables("^NANOVDB") endif() endif() + +# Detect update to 3.4 libs with shared libraries. +if(UNIX AND + DEFINED TBB_LIBRARY AND + TBB_LIBRARY MATCHES "libtbb.a$" AND + EXISTS ${LIBDIR}/usd/include/pxr/base/tf/pyModule.h) + message(STATUS "Auto updating CMake configuration for Blender 3.4 libraries") + unset_cache_variables("^BLOSC") + unset_cache_variables("^BOOST") + unset_cache_variables("^OPENEXR") + unset_cache_variables("^OPENIMAGEIO") + unset_cache_variables("^OPENSUBDIV") + unset_cache_variables("^OPENVDB") + unset_cache_variables("^TBB") + unset_cache_variables("^USD") +endif() diff --git a/build_files/cmake/platform/platform_unix.cmake b/build_files/cmake/platform/platform_unix.cmake index 35103ec441b..405afcec836 100644 --- a/build_files/cmake/platform/platform_unix.cmake +++ b/build_files/cmake/platform/platform_unix.cmake @@ -70,10 +70,6 @@ if(EXISTS ${LIBDIR}) set(CLANG_ROOT_DIR ${LIBDIR}/llvm) endif() -if(WITH_STATIC_LIBS) - string(APPEND CMAKE_EXE_LINKER_FLAGS " -static-libstdc++") -endif() - # Wrapper to prefer static libraries macro(find_package_wrapper) if(WITH_STATIC_LIBS) @@ -83,15 +79,6 @@ macro(find_package_wrapper) endif() endmacro() -# Utility to install precompiled shared libraries. -macro(add_bundled_libraries library) - if(EXISTS ${LIBDIR}) - file(GLOB _all_library_versions ${LIBDIR}/${library}/lib/*\.so*) - list(APPEND PLATFORM_BUNDLED_LIBRARIES ${_all_library_versions}) - unset(_all_library_versions) - endif() -endmacro() - # ---------------------------------------------------------------------------- # Precompiled Libraries # @@ -174,7 +161,10 @@ endif() if(WITH_IMAGE_OPENEXR) find_package_wrapper(OpenEXR) # our own module - if(NOT OPENEXR_FOUND) + if(OPENEXR_FOUND) + add_bundled_libraries(openexr/lib) + add_bundled_libraries(imath/lib) + else() set(WITH_IMAGE_OPENEXR OFF) endif() endif() @@ -342,16 +332,20 @@ if(WITH_CYCLES_DEVICE_ONEAPI) endif() if(WITH_OPENVDB) - find_package_wrapper(OpenVDB) + find_package(OpenVDB) find_package_wrapper(Blosc) - if(NOT OPENVDB_FOUND) + if(OPENVDB_FOUND) + add_bundled_libraries(openvdb/lib) + + if(NOT EXISTS ${LIBDIR} AND NOT BLOSC_FOUND) + set(WITH_OPENVDB_BLOSC OFF) + message(STATUS "Blosc not found, disabling it for OpenVBD") + endif() + else() set(WITH_OPENVDB OFF) set(WITH_OPENVDB_BLOSC OFF) message(STATUS "OpenVDB not found, disabling it") - elseif(NOT BLOSC_FOUND) - set(WITH_OPENVDB_BLOSC OFF) - message(STATUS "Blosc not found, disabling it for OpenVBD") endif() endif() @@ -377,9 +371,11 @@ if(WITH_ALEMBIC) endif() if(WITH_USD) - find_package_wrapper(USD) + find_package(USD) - if(NOT USD_FOUND) + if(USD_FOUND) + add_bundled_libraries(usd/lib) + else() set(WITH_USD OFF) endif() endif() @@ -388,7 +384,7 @@ 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) @@ -404,6 +400,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) @@ -430,6 +429,8 @@ if(WITH_BOOST) find_package(IcuLinux) list(APPEND BOOST_LIBRARIES ${ICU_LIBRARIES}) endif() + + add_bundled_libraries(boost/lib) endif() if(WITH_PUGIXML) @@ -459,7 +460,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) @@ -472,7 +472,9 @@ if(WITH_OPENIMAGEIO) list(APPEND OPENIMAGEIO_LIBRARIES "${WEBP_LIBRARIES}") endif() - if(NOT OPENIMAGEIO_FOUND) + if(OPENIMAGEIO_FOUND) + add_bundled_libraries(openimageio/lib) + else() set(WITH_OPENIMAGEIO OFF) message(STATUS "OpenImageIO not found, disabling WITH_CYCLES") endif() @@ -533,12 +535,11 @@ 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 - - if(NOT OPENSUBDIV_FOUND) + if(OPENSUBDIV_FOUND) + add_bundled_libraries(opensubdiv/lib) + else() set(WITH_OPENSUBDIV OFF) message(STATUS "OpenSubdiv not found") endif() @@ -546,7 +547,9 @@ endif() if(WITH_TBB) find_package_wrapper(TBB) - if(NOT TBB_FOUND) + if(TBB_FOUND) + add_bundled_libraries(tbb/lib) + elseif(EXISTS ${LIBDIR}) message(WARNING "TBB not found, disabling WITH_TBB") set(WITH_TBB OFF) endif() @@ -740,41 +743,41 @@ if(WITH_GHOST_WAYLAND) endif() if(WITH_GHOST_WAYLAND) - if(WITH_GHOST_WAYLAND_DBUS) - pkg_check_modules(dbus REQUIRED dbus-1) - endif() + if(WITH_GHOST_WAYLAND_DBUS) + pkg_check_modules(dbus REQUIRED dbus-1) + endif() - if(WITH_GHOST_WAYLAND_LIBDECOR) - pkg_check_modules(libdecor REQUIRED libdecor-0>=0.1) - endif() + if(WITH_GHOST_WAYLAND_LIBDECOR) + pkg_check_modules(libdecor REQUIRED libdecor-0>=0.1) + endif() + list(APPEND PLATFORM_LINKLIBS + ${xkbcommon_LINK_LIBRARIES} + ) + + if(NOT WITH_GHOST_WAYLAND_DYNLOAD) list(APPEND PLATFORM_LINKLIBS - ${xkbcommon_LINK_LIBRARIES} + ${wayland-client_LINK_LIBRARIES} + ${wayland-egl_LINK_LIBRARIES} + ${wayland-cursor_LINK_LIBRARIES} ) + endif() - if(NOT WITH_GHOST_WAYLAND_DYNLOAD) - list(APPEND PLATFORM_LINKLIBS - ${wayland-client_LINK_LIBRARIES} - ${wayland-egl_LINK_LIBRARIES} - ${wayland-cursor_LINK_LIBRARIES} - ) - endif() + if(WITH_GHOST_WAYLAND_DBUS) + list(APPEND PLATFORM_LINKLIBS + ${dbus_LINK_LIBRARIES} + ) + add_definitions(-DWITH_GHOST_WAYLAND_DBUS) + endif() - if(WITH_GHOST_WAYLAND_DBUS) + if(WITH_GHOST_WAYLAND_LIBDECOR) + if(NOT WITH_GHOST_WAYLAND_DYNLOAD) list(APPEND PLATFORM_LINKLIBS - ${dbus_LINK_LIBRARIES} + ${libdecor_LIBRARIES} ) - add_definitions(-DWITH_GHOST_WAYLAND_DBUS) - endif() - - if(WITH_GHOST_WAYLAND_LIBDECOR) - if(NOT WITH_GHOST_WAYLAND_DYNLOAD) - list(APPEND PLATFORM_LINKLIBS - ${libdecor_LIBRARIES} - ) - endif() - add_definitions(-DWITH_GHOST_WAYLAND_LIBDECOR) endif() + add_definitions(-DWITH_GHOST_WAYLAND_LIBDECOR) + endif() if(EXISTS "${LIBDIR}/wayland/bin/wayland-scanner") set(WAYLAND_SCANNER "${LIBDIR}/wayland/bin/wayland-scanner") @@ -1113,4 +1116,10 @@ if(PLATFORM_BUNDLED_LIBRARIES) # and because the build and install folder may be different. set(CMAKE_SKIP_BUILD_RPATH FALSE) list(APPEND CMAKE_BUILD_RPATH $ORIGIN/lib ${CMAKE_INSTALL_PREFIX_WITH_CONFIG}/lib) + + # Environment variables to run precompiled executables that needed libraries. + list(JOIN PLATFORM_BUNDLED_LIBRARY_DIRS ":" _library_paths) + set(PLATFORM_ENV_BUILD "LD_LIBRARY_PATH=\"${_library_paths};${LD_LIBRARY_PATH}\"") + set(PLATFORM_ENV_INSTALL "LD_LIBRARY_PATH=${CMAKE_INSTALL_PREFIX_WITH_CONFIG}/lib/;$LD_LIBRARY_PATH") + unset(_library_paths) endif() diff --git a/build_files/cmake/platform/platform_win32.cmake b/build_files/cmake/platform/platform_win32.cmake index 4778ddebea6..afcb1a2a4f0 100644 --- a/build_files/cmake/platform/platform_win32.cmake +++ b/build_files/cmake/platform/platform_win32.cmake @@ -110,7 +110,41 @@ remove_cc_flag("/GR") # Make the Windows 8.1 API available for use. add_definitions(-D_WIN32_WINNT=0x603) -include(build_files/cmake/platform/platform_win32_bundle_crt.cmake) + +# First generate the manifest for tests since it will not need the dependency on the CRT. +configure_file(${CMAKE_SOURCE_DIR}/release/windows/manifest/blender.exe.manifest.in ${CMAKE_CURRENT_BINARY_DIR}/tests.exe.manifest @ONLY) + +if(WITH_WINDOWS_BUNDLE_CRT) + set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP TRUE) + set(CMAKE_INSTALL_UCRT_LIBRARIES TRUE) + set(CMAKE_INSTALL_OPENMP_LIBRARIES ${WITH_OPENMP}) + include(InstallRequiredSystemLibraries) + + # ucrtbase(d).dll cannot be in the manifest, due to the way windows 10 handles + # redirects for this dll, for details see T88813. + foreach(lib ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}) + string(FIND ${lib} "ucrtbase" pos) + if(NOT pos EQUAL -1) + list(REMOVE_ITEM CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS ${lib}) + install(FILES ${lib} DESTINATION . COMPONENT Libraries) + endif() + endforeach() + # Install the CRT to the blender.crt Sub folder. + install(FILES ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} DESTINATION ./blender.crt COMPONENT Libraries) + + windows_generate_manifest( + FILES "${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}" + OUTPUT "${CMAKE_BINARY_DIR}/blender.crt.manifest" + NAME "blender.crt" + ) + + install(FILES ${CMAKE_BINARY_DIR}/blender.crt.manifest DESTINATION ./blender.crt) + set(BUNDLECRT "<dependency><dependentAssembly><assemblyIdentity type=\"win32\" name=\"blender.crt\" version=\"1.0.0.0\" /></dependentAssembly></dependency>") + set(BUNDLECRT "${BUNDLECRT}<dependency><dependentAssembly><assemblyIdentity type=\"win32\" name=\"blender.shared\" version=\"1.0.0.0\" /></dependentAssembly></dependency>") +endif() +configure_file(${CMAKE_SOURCE_DIR}/release/windows/manifest/blender.exe.manifest.in ${CMAKE_CURRENT_BINARY_DIR}/blender.exe.manifest @ONLY) + + remove_cc_flag("/MDd" "/MD" "/Zi") if(MSVC_CLANG) # Clangs version of cl doesn't support all flags @@ -411,9 +445,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) @@ -425,36 +462,24 @@ if(WITH_IMAGE_OPENEXR) set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include) set(OPENEXR_INCLUDE_DIRS ${OPENEXR_INCLUDE_DIR} ${IMATH_INCLUDE_DIRS} ${OPENEXR}/include/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() @@ -524,38 +549,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 @@ -579,7 +613,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() @@ -828,15 +865,15 @@ if(WITH_USD) windows_find_package(USD) if(NOT USD_FOUND) 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) # 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) + 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} @@ -954,3 +991,12 @@ set(ZSTD_LIBRARIES ${LIBDIR}/zstd/lib/zstd_static.lib) set(LEVEL_ZERO_ROOT_DIR ${LIBDIR}/level_zero) set(SYCL_ROOT_DIR ${LIBDIR}/dpcpp) + +# Environment variables to run precompiled executables that needed libraries. +list(JOIN PLATFORM_BUNDLED_LIBRARY_DIRS ";" _library_paths) +set(PLATFORM_ENV_BUILD "PATH=${LIBDIR}/OpenImageIO/bin\;${LIBDIR}/boost/lib\;${LIBDIR}/openexr/bin\;${LIBDIR}/imath/bin\;${PATH}") +# Install also needs some additional folders, since idiff requires the +# release oiio dll's not available in the blender.shared folder when doing +# a debug build. +set(PLATFORM_ENV_INSTALL "PATH=${CMAKE_INSTALL_PREFIX_WITH_CONFIG}/blender.shared/;${PLATFORM_ENV_BUILD}") +unset(_library_paths) diff --git a/build_files/cmake/platform/platform_win32_bundle_crt.cmake b/build_files/cmake/platform/platform_win32_bundle_crt.cmake deleted file mode 100644 index f197498d97b..00000000000 --- a/build_files/cmake/platform/platform_win32_bundle_crt.cmake +++ /dev/null @@ -1,56 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later - -# First generate the manifest for tests since it will not need the dependency on the CRT. -configure_file(${CMAKE_SOURCE_DIR}/release/windows/manifest/blender.exe.manifest.in ${CMAKE_CURRENT_BINARY_DIR}/tests.exe.manifest @ONLY) - -# Always detect system libraries, since they are also used by oneAPI. -# But don't always install them, only for WITH_WINDOWS_BUNDLE_CRT=ON. -set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP TRUE) -set(CMAKE_INSTALL_UCRT_LIBRARIES TRUE) -set(CMAKE_INSTALL_OPENMP_LIBRARIES ${WITH_OPENMP}) - -# This sometimes can change when updates are installed and the compiler version -# changes, so test if it exists and if not, give InstallRequiredSystemLibraries -# another chance to figure out the path. -if(MSVC_REDIST_DIR AND NOT EXISTS "${MSVC_REDIST_DIR}") - unset(MSVC_REDIST_DIR CACHE) -endif() - -include(InstallRequiredSystemLibraries) - -if(WITH_WINDOWS_BUNDLE_CRT) - # ucrtbase(d).dll cannot be in the manifest, due to the way windows 10 handles - # redirects for this dll, for details see T88813. - foreach(lib ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}) - string(FIND ${lib} "ucrtbase" pos) - if(NOT pos EQUAL -1) - list(REMOVE_ITEM CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS ${lib}) - install(FILES ${lib} DESTINATION . COMPONENT Libraries) - endif() - endforeach() - # Install the CRT to the blender.crt Sub folder. - install(FILES ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} DESTINATION ./blender.crt COMPONENT Libraries) - - # Generating the manifest is a relatively expensive operation since - # it is collecting an sha1 hash for every file required. so only do - # this work when the libs have either changed or the manifest does - # not exist yet. - - string(SHA1 libshash "${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}") - set(manifest_trigger_file "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/crt_${libshash}") - - if(NOT EXISTS ${manifest_trigger_file}) - set(CRTLIBS "") - foreach(lib ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}) - get_filename_component(filename ${lib} NAME) - file(SHA1 "${lib}" sha1_file) - string(APPEND CRTLIBS " <file name=\"${filename}\" hash=\"${sha1_file}\" hashalg=\"SHA1\" />\n") - endforeach() - configure_file(${CMAKE_SOURCE_DIR}/release/windows/manifest/blender.crt.manifest.in ${CMAKE_CURRENT_BINARY_DIR}/blender.crt.manifest @ONLY) - file(TOUCH ${manifest_trigger_file}) - endif() - - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/blender.crt.manifest DESTINATION ./blender.crt) - set(BUNDLECRT "<dependency><dependentAssembly><assemblyIdentity type=\"win32\" name=\"blender.crt\" version=\"1.0.0.0\" /></dependentAssembly></dependency>") -endif() -configure_file(${CMAKE_SOURCE_DIR}/release/windows/manifest/blender.exe.manifest.in ${CMAKE_CURRENT_BINARY_DIR}/blender.exe.manifest @ONLY) diff --git a/build_files/config/pipeline_config.yaml b/build_files/config/pipeline_config.yaml index 82cd009ea95..6cd507bcc78 100644 --- a/build_files/config/pipeline_config.yaml +++ b/build_files/config/pipeline_config.yaml @@ -19,20 +19,21 @@ update-code: path: source/tools svn: libraries: + # Temporary branch names for testing, don't merge this into master. darwin-arm64: - branch: trunk + branch: branches/vfx-platform-2023 commit_id: HEAD path: lib/darwin_arm64 darwin-x86_64: - branch: trunk + branch: branches/vfx-platform-2023 commit_id: HEAD path: lib/darwin linux-x86_64: - branch: trunk + branch: branches/vfx-platform-2023 commit_id: HEAD path: lib/linux_centos7_x86_64 windows-amd64: - branch: trunk + branch: branches/vfx-platform-2023 commit_id: HEAD path: lib/win64_vc15 tests: diff --git a/extern/mantaflow/helper/util/vectorbase.h b/extern/mantaflow/helper/util/vectorbase.h index 3c7c6e6bc01..b05f90939d4 100644 --- a/extern/mantaflow/helper/util/vectorbase.h +++ b/extern/mantaflow/helper/util/vectorbase.h @@ -31,13 +31,6 @@ # undef max #endif -// redefine usage of some windows functions -#if defined(WIN32) || defined(_WIN32) -# ifndef snprintf -# define snprintf _snprintf -# endif -#endif - // use which fp-precision? 1=float, 2=double #ifndef FLOATINGPOINT_PRECISION # define FLOATINGPOINT_PRECISION 1 diff --git a/intern/cycles/cmake/macros.cmake b/intern/cycles/cmake/macros.cmake index 4ad438c65f9..cd6feee4a3c 100644 --- a/intern/cycles/cmake/macros.cmake +++ b/intern/cycles/cmake/macros.cmake @@ -133,6 +133,7 @@ macro(cycles_external_libraries_append libraries) ${OPENEXR_LIBRARIES} # For circular dependencies between libs. ${PUGIXML_LIBRARIES} ${BOOST_LIBRARIES} + ${PYTHON_LIBRARIES} ${ZLIB_LIBRARIES} ${CMAKE_DL_LIBS} ${PTHREADS_LIBRARIES} diff --git a/intern/cycles/kernel/osl/shaders/CMakeLists.txt b/intern/cycles/kernel/osl/shaders/CMakeLists.txt index c79af3f6112..0b5d11fc480 100644 --- a/intern/cycles/kernel/osl/shaders/CMakeLists.txt +++ b/intern/cycles/kernel/osl/shaders/CMakeLists.txt @@ -126,7 +126,6 @@ set(SRC_OSL_HEADERS set(SRC_OSO ) - # TODO, add a module to compile OSL foreach(_file ${SRC_OSL}) set(_OSL_FILE ${CMAKE_CURRENT_SOURCE_DIR}/${_file}) @@ -135,8 +134,9 @@ foreach(_file ${SRC_OSL}) string(REPLACE ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} _OSO_FILE ${_OSO_FILE}) add_custom_command( OUTPUT ${_OSO_FILE} - COMMAND ${OSL_COMPILER} -q -O2 -I"${CMAKE_CURRENT_SOURCE_DIR}" -I"${OSL_SHADER_DIR}" -o ${_OSO_FILE} ${_OSL_FILE} - DEPENDS ${_OSL_FILE} ${SRC_OSL_HEADERS} ${OSL_COMPILER}) + COMMAND ${CMAKE_COMMAND} -E env ${PLATFORM_ENV_BUILD} ${OSL_COMPILER} -q -O2 -I"${CMAKE_CURRENT_SOURCE_DIR}" -I"${OSL_SHADER_DIR}" -o ${_OSO_FILE} ${_OSL_FILE} + DEPENDS ${_OSL_FILE} ${SRC_OSL_HEADERS} ${OSL_COMPILER} + ) list(APPEND SRC_OSO ${_OSO_FILE} ) diff --git a/intern/ffmpeg/CMakeLists.txt b/intern/ffmpeg/CMakeLists.txt index 0de8496f3f3..fd5a593f700 100644 --- a/intern/ffmpeg/CMakeLists.txt +++ b/intern/ffmpeg/CMakeLists.txt @@ -21,5 +21,5 @@ if(WITH_GTESTS) set(TEST_LIB ${TEST_LIB} ${OPENJPEG_LIBRARIES}) endif() include(GTestTesting) - blender_add_test_executable(ffmpeg "${TEST_SRC}" "${TEST_INC}" "${TEST_INC_SYS}" "${TEST_LIB}") + blender_add_test_lib(ffmpeg_codecs "${TEST_SRC}" "${TEST_INC}" "${TEST_INC_SYS}" "${TEST_LIB}") endif() diff --git a/intern/locale/CMakeLists.txt b/intern/locale/CMakeLists.txt index 8e3620d7db3..bdad0a0af79 100644 --- a/intern/locale/CMakeLists.txt +++ b/intern/locale/CMakeLists.txt @@ -17,6 +17,14 @@ set(SRC set(LIB ) +if(WIN32) + # This is set in platform_win32.cmake, will exist for 3.4+ library + # folders which are dynamic, but not for 3.3 which will be static. + if (EXISTS ${BOOST_34_TRIGGER_FILE}) + add_definitions (-DBOOST_ALL_DYN_LINK=1) + endif() +endif() + if(APPLE) # Cocoa code to read the locale on OSX list(APPEND SRC diff --git a/release/windows/manifest/Blender.CRT.MANIFEST.in b/release/windows/manifest/Blender.manifest.in index 27c4a6bce56..936494acc07 100644 --- a/release/windows/manifest/Blender.CRT.MANIFEST.in +++ b/release/windows/manifest/Blender.manifest.in @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> - <assemblyIdentity type="win32" name="Blender.CRT" version="1.0.0.0" /> -@CRTLIBS@</assembly>
\ No newline at end of file + <assemblyIdentity type="win32" name="@WINDOWS_MANIFEST_NAME@" version="1.0.0.0" /> +@MANIFEST_LIBS@</assembly>
\ No newline at end of file diff --git a/release/windows/python/usercustomize.py b/release/windows/python/usercustomize.py new file mode 100644 index 00000000000..8d752581183 --- /dev/null +++ b/release/windows/python/usercustomize.py @@ -0,0 +1,14 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# Make shared libraries needed by modules available in standalone Python binary. + +import sys +import os + +if sys.platform == 'win32': + exe_dir, exe_file = os.path.split(sys.executable) + if exe_file.startswith('python'): + blender_dir = os.path.abspath(os.path.join(exe_dir, '..', '..', '..','blender.shared')) + os.add_dll_directory(blender_dir) + import_paths = os.getenv('PXR_USD_WINDOWS_DLL_PATH') + if import_paths is None: + os.environ["PXR_USD_WINDOWS_DLL_PATH"] = blender_dir diff --git a/source/blender/imbuf/intern/openexr/CMakeLists.txt b/source/blender/imbuf/intern/openexr/CMakeLists.txt index c34a97f6837..509255c37b9 100644 --- a/source/blender/imbuf/intern/openexr/CMakeLists.txt +++ b/source/blender/imbuf/intern/openexr/CMakeLists.txt @@ -32,6 +32,11 @@ if(WITH_IMAGE_OPENEXR) ${OPENEXR_LIBRARIES} ) add_definitions(-DWITH_OPENEXR) + if(WIN32) + if(EXISTS ${LIBDIR}/imath/bin/imath.dll) + add_definitions(-DIMATH_DLL) + endif() + endif() endif() blender_add_lib(bf_imbuf_openexr "${SRC}" "${INC}" "${INC_SYS}" "${LIB}") diff --git a/source/blender/io/usd/CMakeLists.txt b/source/blender/io/usd/CMakeLists.txt index 4f1bc29cd0d..efa22b2add2 100644 --- a/source/blender/io/usd/CMakeLists.txt +++ b/source/blender/io/usd/CMakeLists.txt @@ -9,9 +9,9 @@ if(UNIX AND NOT APPLE) add_definitions(-D_GLIBCXX_PERMIT_BACKWARD_HASH) endif() if(WIN32) - add_definitions(-DNOMINMAX -DWIN32_LEAN_AND_MEAN) + add_definitions(-DNOMINMAX -DWIN32_LEAN_AND_MEAN -DBOOST_DEBUG_PYTHON) endif() -add_definitions(-DPXR_STATIC) +add_definitions(-DBOOST_ALL_NO_LIB) # USD headers use deprecated TBB headers, silence warning. add_definitions(-DTBB_SUPPRESS_DEPRECATED_MESSAGES=1) @@ -56,6 +56,7 @@ set(INC_SYS ${USD_INCLUDE_DIRS} ${BOOST_INCLUDE_DIR} ${TBB_INCLUDE_DIR} + ${PYTHON_INCLUDE_DIR} ) set(SRC @@ -122,6 +123,7 @@ set(LIB list(APPEND LIB ${BOOST_LIBRARIES} + ${PYTHON_LIBRARIES} ) if(WITH_OPENVDB) diff --git a/source/blender/io/usd/intern/usd_capi_export.cc b/source/blender/io/usd/intern/usd_capi_export.cc index 3977daaca4a..6731412e158 100644 --- a/source/blender/io/usd/intern/usd_capi_export.cc +++ b/source/blender/io/usd/intern/usd_capi_export.cc @@ -174,8 +174,6 @@ bool USD_export(bContext *C, ViewLayer *view_layer = CTX_data_view_layer(C); Scene *scene = CTX_data_scene(C); - blender::io::usd::ensure_usd_plugin_path_registered(); - blender::io::usd::ExportJobData *job = static_cast<blender::io::usd::ExportJobData *>( MEM_mallocN(sizeof(blender::io::usd::ExportJobData), "ExportJobData")); diff --git a/source/blender/io/usd/intern/usd_capi_import.cc b/source/blender/io/usd/intern/usd_capi_import.cc index 5808c6bc77a..cd50f41b9fb 100644 --- a/source/blender/io/usd/intern/usd_capi_import.cc +++ b/source/blender/io/usd/intern/usd_capi_import.cc @@ -385,13 +385,16 @@ static void import_freejob(void *user_data) using namespace blender::io::usd; +void USD_ensure_plugin_path_registered() +{ + blender::io::usd::ensure_usd_plugin_path_registered(); +} + bool USD_import(struct bContext *C, const char *filepath, const USDImportParams *params, bool as_background_job) { - blender::io::usd::ensure_usd_plugin_path_registered(); - /* Using new here since `MEM_*` functions do not call constructor to properly initialize data. */ ImportJobData *job = new ImportJobData(); job->bmain = CTX_data_main(C); @@ -545,9 +548,6 @@ CacheArchiveHandle *USD_create_handle(struct Main * /*bmain*/, const char *filepath, ListBase *object_paths) { - /* Must call this so that USD file format plugins are loaded. */ - ensure_usd_plugin_path_registered(); - pxr::UsdStageRefPtr stage = pxr::UsdStage::Open(filepath); if (!stage) { diff --git a/source/blender/io/usd/intern/usd_common.cc b/source/blender/io/usd/intern/usd_common.cc index 2b6b6f4ed43..e5a83442140 100644 --- a/source/blender/io/usd/intern/usd_common.cc +++ b/source/blender/io/usd/intern/usd_common.cc @@ -11,6 +11,10 @@ namespace blender::io::usd { void ensure_usd_plugin_path_registered() { + /* if PXR_PYTHON_SUPPORT_ENABLED is defined, we *must* be dynamic and + the plugins are placed relative to the USD shared library hence no + hinting is required. */ +#ifndef PXR_PYTHON_SUPPORT_ENABLED static bool plugin_path_registered = false; if (plugin_path_registered) { return; @@ -22,6 +26,7 @@ void ensure_usd_plugin_path_registered() const std::string blender_usd_datafiles = BKE_appdir_folder_id(BLENDER_DATAFILES, "usd"); /* The trailing slash indicates to the USD library that the path is a directory. */ pxr::PlugRegistry::GetInstance().RegisterPlugins(blender_usd_datafiles + "/"); +#endif } } // namespace blender::io::usd diff --git a/source/blender/io/usd/tests/usd_tests_common.cc b/source/blender/io/usd/tests/usd_tests_common.cc index 9f18a289433..d9285b3f3db 100644 --- a/source/blender/io/usd/tests/usd_tests_common.cc +++ b/source/blender/io/usd/tests/usd_tests_common.cc @@ -36,9 +36,12 @@ std::string register_usd_plugins_for_tests() BLI_assert(path_len + 1 < FILE_MAX); usd_datafiles_dir[path_len] = '/'; usd_datafiles_dir[path_len + 1] = '\0'; - + /* if PXR_PYTHON_SUPPORT_ENABLED is defined, we *must* be dynamic and + the plugins are placed relative to the USD shared library hence no + hinting is required. */ +#ifndef PXR_PYTHON_SUPPORT_ENABLED pxr::PlugRegistry::GetInstance().RegisterPlugins(usd_datafiles_dir); - +#endif return usd_datafiles_dir; } diff --git a/source/blender/io/usd/usd.h b/source/blender/io/usd/usd.h index 3494d8ffdc3..98d544df251 100644 --- a/source/blender/io/usd/usd.h +++ b/source/blender/io/usd/usd.h @@ -119,7 +119,7 @@ struct CacheReader *CacheReader_open_usd_object(struct CacheArchiveHandle *handl void USD_CacheReader_incref(struct CacheReader *reader); void USD_CacheReader_free(struct CacheReader *reader); - +void USD_ensure_plugin_path_registered(void); #ifdef __cplusplus } #endif diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index 13a311cb55c..ed3e1f3b122 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -11,6 +11,7 @@ set(INC ../blender/editors/include ../blender/gpu ../blender/imbuf + ../blender/io/usd ../blender/makesdna ../blender/makesrna ../blender/render @@ -371,7 +372,6 @@ elseif(APPLE) set(TARGETDIR_LIB Blender.app/Contents/Resources/lib) set(TARGETDIR_TEXT Blender.app/Contents/Resources/text) endif() - # Skip re-linking on CPACK / install. set_target_properties(blender PROPERTIES BUILD_WITH_INSTALL_RPATH true) endif() @@ -416,7 +416,12 @@ if(WITH_PYTHON) PATTERN "${ADDON_EXCLUDE_CONDITIONAL}" EXCLUDE PATTERN "${FREESTYLE_EXCLUDE_CONDITIONAL}" EXCLUDE ) - + if(WIN32) + install( + FILES ${CMAKE_SOURCE_DIR}/release/windows/python/usercustomize.py + DESTINATION ${TARGETDIR_VER}/python/lib/site-packages + ) + endif() unset(ADDON_EXCLUDE_CONDITIONAL) unset(FREESTYLE_EXCLUDE_CONDITIONAL) endif() @@ -488,6 +493,33 @@ if("${CMAKE_GENERATOR}" MATCHES ".*Makefiles.*") ) endif() +# macro to help install files without dragging in unnecessary data. +macro(install_dir from to) + install( + DIRECTORY ${from} + DESTINATION ${to} + # Irrelevant files and caches. + PATTERN ".git" EXCLUDE + PATTERN ".svn" EXCLUDE + PATTERN "*.pyc" EXCLUDE + PATTERN "*.pyo" EXCLUDE + PATTERN "*.orig" EXCLUDE + PATTERN "*.rej" EXCLUDE + PATTERN "__pycache__" EXCLUDE + PATTERN "__MACOSX" EXCLUDE + PATTERN ".DS_Store" EXCLUDE + # Unneeded Python files. + PATTERN "config-${PYTHON_VERSION}/*.a" EXCLUDE # static lib + PATTERN "lib2to3" EXCLUDE # ./lib2to3 + PATTERN "tkinter" EXCLUDE # ./tkinter + PATTERN "lib-dynload/_tkinter.*" EXCLUDE # ./lib-dynload/_tkinter.co + PATTERN "idlelib" EXCLUDE # ./idlelib + PATTERN "test" EXCLUDE # ./test + PATTERN "turtledemo" EXCLUDE # ./turtledemo + PATTERN "turtle.py" EXCLUDE # ./turtle.py + PATTERN "wininst*.exe" EXCLUDE # from distutils, avoid malware false positive + ) +endmacro() # ----------------------------------------------------------------------------- # Install Targets (Platform Specific) @@ -527,6 +559,7 @@ if(UNIX AND NOT APPLE) LIBRARY DESTINATION ${TARGETDIR_BPY} ) endif() + # none of the other files are needed currently elseif(WITH_INSTALL_PORTABLE) install( @@ -615,9 +648,21 @@ if(UNIX AND NOT APPLE) endif() endif() - if(WITH_PYTHON) - if(WITH_PYTHON_INSTALL) + if(WITH_PYTHON AND WITH_PYTHON_INSTALL) + # Install executable + install( + PROGRAMS ${PYTHON_EXECUTABLE} + DESTINATION ${TARGETDIR_VER}/python/bin + ) + if(EXISTS ${LIBDIR}) + # Precompiled libraries, copy over complete lib directory. + install_dir( + ${PYTHON_LIBPATH} + ${TARGETDIR_VER}/python + ) + else() + # System libraries. install( PROGRAMS ${PYTHON_EXECUTABLE} DESTINATION ${TARGETDIR_VER}/python/bin @@ -698,6 +743,24 @@ if(UNIX AND NOT APPLE) unset(_suffix) endif() + if(WITH_USD) + # Install to the same directory as the source, so debian-like + # distros are happy with their policy. + set(_suffix "site-packages") + if(${PYTHON_USD_PATH} MATCHES "dist-packages") + set(_suffix "dist-packages") + endif() + install( + DIRECTORY ${USD_LIBRARY_DIR}/python/ + DESTINATION ${TARGETDIR_VER}/python/${_target_LIB}/python${PYTHON_VERSION}/${_suffix} + PATTERN ".svn" EXCLUDE + PATTERN "__pycache__" EXCLUDE # * any cache * + PATTERN "*.pyc" EXCLUDE # * any cache * + PATTERN "*.pyo" EXCLUDE # * any cache * + ) + unset(_suffix) + endif() + if(WITH_PYTHON_INSTALL_ZSTANDARD) # Install to the same directory as the source, so debian-like # distributions are happy with their policy. @@ -758,7 +821,6 @@ if(UNIX AND NOT APPLE) unset(_suffix) endif() unset(_target_LIB) - endif() endif() @@ -769,22 +831,22 @@ if(UNIX AND NOT APPLE) ) endif() elseif(WIN32) - install( + windows_install_shared_manifest( FILES ${LIBDIR}/epoxy/bin/epoxy-0.dll - DESTINATION ${TARGETDIR_LIB} + ALL ) if(WITH_OPENMP AND MSVC_CLANG) - install( + windows_install_shared_manifest( FILES ${CLANG_OPENMP_DLL} - DESTINATION ${TARGETDIR_LIB} + ALL ) endif() if(WITH_FFTW3) - install( + windows_install_shared_manifest( FILES ${LIBDIR}/fftw3/lib/libfftw3-3.dll - DESTINATION ${TARGETDIR_LIB} + ALL ) endif() if(MSVC_ASAN) @@ -799,34 +861,69 @@ elseif(WIN32) "this is an optional component during the MSVC install, please install it" ) endif() - install( + windows_install_shared_manifest( FILES ${ASAN_DLL} - DESTINATION ${TARGETDIR_LIB} - CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel + RELEASE ) - install( + windows_install_shared_manifest( FILES ${ASAN_DEBUG_DLL} - DESTINATION ${TARGETDIR_LIB} - CONFIGURATIONS Debug + DEBUG ) unset(ASAN_DLL) unset(ASAN_DEBUG_DLL) endif() - + if(WITH_IMAGE_OPENEXR OR WITH_OPENIMAGEIO) + if(EXISTS ${LIBDIR}/openexr/bin/Iex.dll) + windows_install_shared_manifest( + FILES + ${LIBDIR}/openexr/bin/Iex.dll + ${LIBDIR}/openexr/bin/IlmThread.dll + ${LIBDIR}/openexr/bin/OpenEXRCore.dll + ${LIBDIR}/openexr/bin/OpenEXRUtil.dll + ${LIBDIR}/openexr/bin/OpenEXR.dll + ${LIBDIR}/imath/bin/imath.dll + RELEASE + ) + windows_install_shared_manifest( + FILES + ${LIBDIR}/openexr/bin/Iex_d.dll + ${LIBDIR}/openexr/bin/IlmThread_d.dll + ${LIBDIR}/openexr/bin/OpenEXRCore_d.dll + ${LIBDIR}/openexr/bin/OpenEXRUtil_d.dll + ${LIBDIR}/openexr/bin/OpenEXR_d.dll + ${LIBDIR}/imath/bin/imath_d.dll + DEBUG + ) + endif() + endif() + if(WITH_OPENIMAGEIO) + if(EXISTS ${LIBDIR}/openimageio/bin/openimageio.dll) + windows_install_shared_manifest( + FILES + ${LIBDIR}/openimageio/bin/openimageio.dll + ${LIBDIR}/openimageio/bin/openimageio_util.dll + RELEASE + ) + windows_install_shared_manifest( + FILES + ${LIBDIR}/openimageio/bin/openimageio_d.dll + ${LIBDIR}/openimageio/bin/openimageio_util_d.dll + DEBUG + ) + endif() + endif() if(WITH_GMP) - install( + windows_install_shared_manifest( FILES ${LIBDIR}/gmp/lib/libgmp-10.dll - DESTINATION ${TARGETDIR_LIB} + ALL ) - install( + windows_install_shared_manifest( FILES ${LIBDIR}/gmp/lib/libgmpxx.dll - DESTINATION ${TARGETDIR_LIB} - CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel + RELEASE ) - install( + windows_install_shared_manifest( FILES ${LIBDIR}/gmp/lib/libgmpxx_d.dll - DESTINATION ${TARGETDIR_LIB} - CONFIGURATIONS Debug + DEBUG ) endif() @@ -846,16 +943,30 @@ elseif(WIN32) endif() if(WITH_OPENVDB) - install( - FILES ${LIBDIR}/openvdb/bin/openvdb.dll - DESTINATION ${TARGETDIR_LIB} - CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel - ) - install( - FILES ${LIBDIR}/openvdb/bin/openvdb_d.dll - DESTINATION ${TARGETDIR_LIB} - CONFIGURATIONS Debug - ) + windows_install_shared_manifest( + FILES ${LIBDIR}/openvdb/bin/openvdb.dll + RELEASE + ) + windows_install_shared_manifest( + FILES ${LIBDIR}/openvdb/bin/openvdb_d.dll + DEBUG + ) + + # This will not exist for 3.3 and earlier lib folders + # to ease the transition, support both 3.3 and 3.4 lib + # folders. + if(EXISTS ${LIBDIR}/openvdb/python/pyopenvdb_d.pyd) + install( + FILES ${LIBDIR}/openvdb/python/pyopenvdb_d.pyd + DESTINATION ${TARGETDIR_VER}/python/lib/site-packages + CONFIGURATIONS Debug + ) + install( + FILES ${LIBDIR}/openvdb/python/pyopenvdb.pyd + DESTINATION ${TARGETDIR_VER}/python/lib/site-packages + CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel + ) + endif() endif() if(WITH_PYTHON) @@ -906,7 +1017,7 @@ elseif(WIN32) PATTERN ".svn" EXCLUDE PATTERN "__pycache__" EXCLUDE # * any cache * PATTERN "*.pyc" EXCLUDE # * any cache * - PATTERN "*.pyo" EXCLUDE # * any cache *) + PATTERN "*.pyo" EXCLUDE # * any cache * ) install( @@ -938,31 +1049,58 @@ elseif(WIN32) CONFIGURATIONS Debug ) + if(WITH_USD) + # This will not exist for 3.3 and earlier lib folders + # to ease the transition, support both 3.3 and 3.4 lib + # folders. + if(EXISTS ${USD_LIBRARY_DIR}/python/) + install( + DIRECTORY ${USD_LIBRARY_DIR}/python/ + DESTINATION ${TARGETDIR_VER}/python/lib/site-packages + CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel + PATTERN ".svn" EXCLUDE + PATTERN "__pycache__" EXCLUDE # * any cache * + PATTERN "*.pyc" EXCLUDE # * any cache * + PATTERN "*.pyo" EXCLUDE # * any cache * + ) + endif() + if(EXISTS ${USD_LIBRARY_DIR}/debug/python/) + install( + DIRECTORY ${USD_LIBRARY_DIR}/debug/python/ + DESTINATION ${TARGETDIR_VER}/python/lib/site-packages + CONFIGURATIONS Debug + PATTERN ".svn" EXCLUDE + PATTERN "__pycache__" EXCLUDE # * any cache * + PATTERN "*.pyc" EXCLUDE # * any cache * + PATTERN "*.pyo" EXCLUDE # * any cache * + ) + endif() + endif() + if(WINDOWS_PYTHON_DEBUG) install( FILES ${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/libs/python${_PYTHON_VERSION_NO_DOTS}.pdb - DESTINATION ${TARGETDIR_LIB} + DESTINATION "." CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel ) install( FILES ${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/libs/python${_PYTHON_VERSION_NO_DOTS}_d.pdb - DESTINATION ${TARGETDIR_LIB} + DESTINATION "." CONFIGURATIONS Debug ) endif() endif() - unset(_PYTHON_VERSION_NO_DOTS) endif() if(WITH_CODEC_FFMPEG) # Filenames change slightly between FFMPEG versions check both 5.0 and fallback to 4.4 # to ease the transition between versions. if(EXISTS "${LIBDIR}/ffmpeg/lib/avcodec-59.dll") - install( + windows_install_shared_manifest( FILES ${LIBDIR}/ffmpeg/lib/avcodec-59.dll ${LIBDIR}/ffmpeg/lib/avformat-59.dll @@ -970,10 +1108,10 @@ elseif(WIN32) ${LIBDIR}/ffmpeg/lib/avutil-57.dll ${LIBDIR}/ffmpeg/lib/swscale-6.dll ${LIBDIR}/ffmpeg/lib/swresample-4.dll - DESTINATION ${TARGETDIR_LIB} + ALL ) else() - install( + windows_install_shared_manifest( FILES ${LIBDIR}/ffmpeg/lib/avcodec-58.dll ${LIBDIR}/ffmpeg/lib/avformat-58.dll @@ -981,61 +1119,57 @@ elseif(WIN32) ${LIBDIR}/ffmpeg/lib/avutil-56.dll ${LIBDIR}/ffmpeg/lib/swscale-5.dll ${LIBDIR}/ffmpeg/lib/swresample-3.dll - DESTINATION ${TARGETDIR_LIB} + ALL ) endif() endif() if(WITH_TBB) - install( + windows_install_shared_manifest( FILES ${LIBDIR}/tbb/bin/tbb.dll - DESTINATION ${TARGETDIR_LIB} - CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel + RELEASE ) - install( + windows_install_shared_manifest( FILES ${LIBDIR}/tbb/bin/tbb_debug.dll - DESTINATION ${TARGETDIR_LIB} - CONFIGURATIONS Debug + DEBUG ) endif() if(WITH_TBB_MALLOC_PROXY) - install( + windows_install_shared_manifest( FILES ${LIBDIR}/tbb/bin/tbbmalloc.dll ${LIBDIR}/tbb/bin/tbbmalloc_proxy.dll - DESTINATION ${TARGETDIR_LIB} - CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel + RELEASE ) - install( + windows_install_shared_manifest( FILES ${LIBDIR}/tbb/bin/tbbmalloc_debug.dll ${LIBDIR}/tbb/bin/tbbmalloc_proxy_debug.dll - DESTINATION ${TARGETDIR_LIB} - CONFIGURATIONS Debug + DEBUG ) list(APPEND LIB ${TBB_MALLOC_LIBRARIES}) endif() if(WITH_CODEC_SNDFILE) - install( + windows_install_shared_manifest( FILES ${LIBDIR}/sndfile/lib/libsndfile-1.dll - DESTINATION ${TARGETDIR_LIB} + ALL ) endif() if(WITH_OPENAL) - install( + windows_install_shared_manifest( FILES ${LIBDIR}/openal/lib/OpenAL32.dll - DESTINATION ${TARGETDIR_LIB} + ALL ) endif() if(WITH_SDL) - install( + windows_install_shared_manifest( FILES ${LIBDIR}/sdl/lib/SDL2.dll - DESTINATION ${TARGETDIR_LIB} + ALL ) endif() @@ -1045,7 +1179,7 @@ elseif(WIN32) ${LIBDIR}/audaspace/lib/audaspace.dll ${LIBDIR}/audaspace/lib/audaspace-c.dll ${LIBDIR}/audaspace/lib/audaspace-py.dll - DESTINATION ${TARGETDIR_LIB} + DESTINATION "." ) endif() @@ -1294,12 +1428,61 @@ blender_target_include_dirs(blender ${INC}) # These files are required at runtime. if(WITH_USD) add_definitions(-DWITH_USD) - install( - DIRECTORY ${USD_LIBRARY_DIR}/usd - DESTINATION "${TARGETDIR_VER}/datafiles" - ) + blender_include_dirs(../blender/io/usd) + # On windows the usd library site in ./blender.shared copy the files + # relative to the location of the USD dll, if the dll does not exist + # assume we are linking against the static 3.4 lib. + if(WIN32 AND EXISTS ${LIBDIR}/usd/lib/usd_usd_ms.dll) + install(DIRECTORY + ${USD_LIBRARY_DIR}/usd + DESTINATION "./blender.shared" + ) + elseif(USD_PYTHON_SUPPORT) + install(DIRECTORY + ${USD_LIBRARY_DIR}/usd + DESTINATION ${TARGETDIR_LIB} + ) + else() + install(DIRECTORY + ${USD_LIBRARY_DIR}/usd + DESTINATION "${TARGETDIR_VER}/datafiles" + ) + endif() + if(WIN32) + # If this file exists we are building against a 3.4 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() + endif() endif() +if(WIN32 AND WITH_BOOST) + set(BOOST_COMPONENTS atomic chrono date_time filesystem + iostreams locale program_options regex + serialization system thread wave wserialization + python${_PYTHON_VERSION_NO_DOTS} numpy${_PYTHON_VERSION_NO_DOTS} + ) + foreach(component ${BOOST_COMPONENTS}) + if(EXISTS ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_${component}-${BOOST_POSTFIX}.dll) + windows_install_shared_manifest( + FILES ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_${component}-${BOOST_POSTFIX}.dll + RELEASE + ) + windows_install_shared_manifest( + FILES ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_${component}-${BOOST_DEBUG_POSTFIX}.dll + DEBUG + ) + endif() + endforeach() +endif() # `vcpkg` substitutes our libraries with theirs, which will cause issues when you you run # these builds on other systems due to missing DLL's. So we opt out the use of `vcpkg`. @@ -1345,6 +1528,12 @@ if(WIN32 AND NOT WITH_PYTHON_MODULE) endif() # ----------------------------------------------------------------------------- +# Windows shared library manifest +if(WIN32) + windows_generate_shared_manifest() +endif() + +# ----------------------------------------------------------------------------- # Post-install script if(POSTINSTALL_SCRIPT) diff --git a/source/creator/creator.c b/source/creator/creator.c index 2cd54deeab5..7f5ebb9e8a6 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -94,6 +94,10 @@ # include "sdlew.h" #endif +#ifdef WITH_USD +# include "usd.h" +#endif + #include "creator_intern.h" /* Own include. */ /* -------------------------------------------------------------------- */ @@ -469,6 +473,10 @@ int main(int argc, /* Initialize sub-systems that use `BKE_appdir.h`. */ IMB_init(); +#ifdef WITH_USD + USD_ensure_plugin_path_registered(); +#endif + #ifndef WITH_PYTHON_MODULE /* First test for background-mode (#Global.background) */ BLI_args_parse(ba, ARG_PASS_SETTINGS, NULL, NULL); diff --git a/source/creator/symbols_apple.map b/source/creator/symbols_apple.map index 5619f151bd2..7514921f839 100644 --- a/source/creator/symbols_apple.map +++ b/source/creator/symbols_apple.map @@ -59,7 +59,6 @@ png_* *textFileFormatYy* *TIFF* *tinyformat* -*usdBlender* vorbis* vp8* vp9* diff --git a/tests/python/CMakeLists.txt b/tests/python/CMakeLists.txt index fe00cce2572..80bde164612 100644 --- a/tests/python/CMakeLists.txt +++ b/tests/python/CMakeLists.txt @@ -31,6 +31,9 @@ function(add_blender_test testname) set_tests_properties(${testname} PROPERTIES ENVIRONMENT LSAN_OPTIONS=exitcode=0:$ENV{LSAN_OPTIONS} ) + if(PLATFORM_ENV_INSTALL) + set_tests_properties(${testname} PROPERTIES ENVIRONMENT "${PLATFORM_ENV_INSTALL}") + endif() endfunction() # Run Python script outside Blender. @@ -42,10 +45,14 @@ function(add_python_test testname testscript) add_test( NAME ${testname} COMMAND ${TEST_PYTHON_EXE} ${testscript} ${ARGN} + WORKING_DIRECTORY $<TARGET_FILE_DIR:blender> ) set_tests_properties(${testname} PROPERTIES ENVIRONMENT LSAN_OPTIONS=exitcode=0:$ENV{LSAN_OPTIONS} ) + if(PLATFORM_ENV_INSTALL) + set_tests_properties(${testname} PROPERTIES ENVIRONMENT "${PLATFORM_ENV_INSTALL}") + endif() endfunction() # ------------------------------------------------------------------------------ |