diff options
Diffstat (limited to 'build_files/build_environment')
-rw-r--r-- | build_files/build_environment/CMakeLists.txt | 1 | ||||
-rw-r--r-- | build_files/build_environment/cmake/harvest.cmake | 3 | ||||
-rw-r--r-- | build_files/build_environment/cmake/usd.cmake | 101 | ||||
-rw-r--r-- | build_files/build_environment/cmake/versions.cmake | 4 | ||||
-rw-r--r-- | build_files/build_environment/patches/usd.diff | 111 |
5 files changed, 220 insertions, 0 deletions
diff --git a/build_files/build_environment/CMakeLists.txt b/build_files/build_environment/CMakeLists.txt index cdfa18ff4ff..fb32d2218b8 100644 --- a/build_files/build_environment/CMakeLists.txt +++ b/build_files/build_environment/CMakeLists.txt @@ -92,6 +92,7 @@ include(cmake/python.cmake) include(cmake/python_site_packages.cmake) include(cmake/package_python.cmake) include(cmake/numpy.cmake) +include(cmake/usd.cmake) if(UNIX AND NOT APPLE) # Rely on PugiXML compiled with OpenImageIO else() diff --git a/build_files/build_environment/cmake/harvest.cmake b/build_files/build_environment/cmake/harvest.cmake index 89eec7cf72f..cc93db7de64 100644 --- a/build_files/build_environment/cmake/harvest.cmake +++ b/build_files/build_environment/cmake/harvest.cmake @@ -197,6 +197,9 @@ harvest(x264/lib ffmpeg/lib "*.a") harvest(xvidcore/lib ffmpeg/lib "*.a") harvest(embree/include embree/include "*.h") harvest(embree/lib embree/lib "*.a") +harvest(usd/include usd/include "*.h") +harvest(usd/lib/usd usd/lib/usd "*") +harvest(usd/plugin usd/plugin "*") if(UNIX AND NOT APPLE) harvest(libglu/lib mesa/lib "*.so*") diff --git a/build_files/build_environment/cmake/usd.cmake b/build_files/build_environment/cmake/usd.cmake new file mode 100644 index 00000000000..c3594390f80 --- /dev/null +++ b/build_files/build_environment/cmake/usd.cmake @@ -0,0 +1,101 @@ +# ***** BEGIN GPL LICENSE BLOCK ***** +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ***** END GPL LICENSE BLOCK ***** + +set(USD_EXTRA_ARGS + -DBoost_COMPILER:STRING=${BOOST_COMPILER_STRING} + -DBoost_USE_MULTITHREADED=ON + -DBoost_USE_STATIC_LIBS=ON + -DBoost_USE_STATIC_RUNTIME=OFF + -DBOOST_ROOT=${LIBDIR}/boost + -DTBB_INCLUDE_DIRS=${LIBDIR}/tbb/include + -DTBB_LIBRARIES=${LIBDIR}/tbb/lib/${LIBPREFIX}tbb_static${LIBEXT} + -DTbb_TBB_LIBRARY=${LIBDIR}/tbb/lib/${LIBPREFIX}tbb_static${LIBEXT} + + # 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 + + -DPXR_ENABLE_PYTHON_SUPPORT=OFF + -DPXR_BUILD_IMAGING=OFF + -DPXR_BUILD_TESTS=OFF + -DBUILD_SHARED_LIBS=OFF + -DPYTHON_EXECUTABLE=${PYTHON_BINARY} + -DPXR_BUILD_MONOLITHIC=ON + + # The PXR_BUILD_USD_TOOLS argument is patched-in by usd.diff. An upstream pull request + # can be found at https://github.com/PixarAnimationStudios/USD/pull/1048. + -DPXR_BUILD_USD_TOOLS=OFF + + -DCMAKE_DEBUG_POSTFIX=_d + # 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 +) + +ExternalProject_Add(external_usd + URL ${USD_URI} + DOWNLOAD_DIR ${DOWNLOAD_DIR} + URL_HASH MD5=${USD_HASH} + PREFIX ${BUILD_DIR}/usd + 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 +) + +add_dependencies( + external_usd + external_tbb + external_boost +) + +if(WIN32) + # USD currently demands python be available at build time + # and then proceeds not to use it, but still checks that the + # version of the interpreter it is not going to use is atleast 2.7 + # so we need this dep currently since there is no system python + # on windows. + add_dependencies( + external_usd + external_python + ) + 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/libusd_m.lib ${HARVEST_TARGET}/usd/lib/libusd_m.lib + 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/libusd_m_d.lib ${HARVEST_TARGET}/usd/lib/libusd_m_d.lib + DEPENDEES install + ) + endif() +else() + # USD has two build options. The default build creates lots of small libraries, + # whereas the 'monolithic' build produces only a single library. The latter + # makes linking simpler, so that's what we use in Blender. However, running + # 'make install' in the USD sources doesn't install the static library in that + # case (only the shared library). As a result, we need to grab the `libusd_m.a` + # file from the build directory instead of from the install directory. + ExternalProject_Add_Step(external_usd after_install + COMMAND ${CMAKE_COMMAND} -E copy ${BUILD_DIR}/usd/src/external_usd-build/pxr/libusd_m.a ${HARVEST_TARGET}/usd/lib/libusd_m.a + DEPENDEES install + ) +endif() diff --git a/build_files/build_environment/cmake/versions.cmake b/build_files/build_environment/cmake/versions.cmake index 9cbf104e842..2b08a74c1aa 100644 --- a/build_files/build_environment/cmake/versions.cmake +++ b/build_files/build_environment/cmake/versions.cmake @@ -307,6 +307,10 @@ set(EMBREE_VERSION 3.2.4) set(EMBREE_URI https://github.com/embree/embree/archive/v${EMBREE_VERSION}.zip) set(EMBREE_HASH 3d4a1147002ff43939d45140aa9d6fb8) +set(USD_VERSION 19.11) +set(USD_URI https://github.com/PixarAnimationStudios/USD/archive/v${USD_VERSION}.tar.gz) +set(USD_HASH 79ff176167b3fe85f4953abd6cc5e0cc) + set(OIDN_VERSION 1.0.0) set(OIDN_URI https://github.com/OpenImageDenoise/oidn/releases/download/v${OIDN_VERSION}/oidn-${OIDN_VERSION}.src.zip) set(OIDN_HASH 19fe67b0164e8f020ac8a4f520defe60) diff --git a/build_files/build_environment/patches/usd.diff b/build_files/build_environment/patches/usd.diff new file mode 100644 index 00000000000..8afd9700e59 --- /dev/null +++ b/build_files/build_environment/patches/usd.diff @@ -0,0 +1,111 @@ +diff -x .git -ur usd.orig/cmake/defaults/Options.cmake external_usd/cmake/defaults/Options.cmake +--- usd.orig/cmake/defaults/Options.cmake 2019-10-24 22:39:53.000000000 +0200 ++++ external_usd/cmake/defaults/Options.cmake 2019-11-28 13:00:33.197957712 +0100 +@@ -25,6 +25,7 @@ + option(PXR_VALIDATE_GENERATED_CODE "Validate script generated code" OFF) + option(PXR_HEADLESS_TEST_MODE "Disallow GUI based tests, useful for running under headless CI systems." OFF) + option(PXR_BUILD_TESTS "Build tests" ON) ++option(PXR_BUILD_USD_TOOLS "Build commandline tools" ON) + option(PXR_BUILD_IMAGING "Build imaging components" ON) + option(PXR_BUILD_EMBREE_PLUGIN "Build embree imaging plugin" OFF) + option(PXR_BUILD_OPENIMAGEIO_PLUGIN "Build OpenImageIO plugin" OFF) +diff -x .git -ur usd.orig/cmake/defaults/Packages.cmake external_usd/cmake/defaults/Packages.cmake +--- usd.orig/cmake/defaults/Packages.cmake 2019-10-24 22:39:53.000000000 +0200 ++++ external_usd/cmake/defaults/Packages.cmake 2019-11-28 13:00:33.185957483 +0100 +@@ -64,7 +64,7 @@ + endif() + + # --TBB +-find_package(TBB REQUIRED COMPONENTS tbb) ++find_package(TBB) + add_definitions(${TBB_DEFINITIONS}) + + # --math +diff -x .git -ur usd.orig/pxr/base/lib/plug/initConfig.cpp external_usd/pxr/base/lib/plug/initConfig.cpp +--- usd.orig/pxr/base/lib/plug/initConfig.cpp 2019-10-24 22:39:53.000000000 +0200 ++++ external_usd/pxr/base/lib/plug/initConfig.cpp 2019-12-11 11:00:37.643323127 +0100 +@@ -69,8 +69,38 @@ + + ARCH_CONSTRUCTOR(Plug_InitConfig, 2, void) + { ++ /* The contents of this constructor have been moved to usd_initialise_plugin_path(...) */ ++} ++ ++}; // end of anonymous namespace ++ ++/** ++ * The contents of this function used to be in the static constructor Plug_InitConfig. ++ * This static constructor made it impossible for Blender to pass a path to the USD ++ * library at runtime, as the constructor would run before Blender's main() function. ++ * ++ * This function is wrapped in a C function of the same name (defined below), ++ * so that it can be called from Blender's main() function. ++ * ++ * The datafiles_usd_path path is used to point to the USD plugin path when Blender ++ * has been installed. The fallback_usd_path path should point to the build-time ++ * location of the USD plugin files so that Blender can be run on a development machine ++ * without requiring an installation step. ++ */ ++void ++usd_initialise_plugin_path(const char *datafiles_usd_path) ++{ + std::vector<std::string> result; + ++ // Add Blender-specific paths. They MUST end in a slash, or symlinks will not be treated as directory. ++ if (datafiles_usd_path != NULL && datafiles_usd_path[0] != '\0') { ++ std::string datafiles_usd_path_str(datafiles_usd_path); ++ if (datafiles_usd_path_str.back() != '/') { ++ datafiles_usd_path_str += "/"; ++ } ++ result.push_back(datafiles_usd_path_str); ++ } ++ + // Determine the absolute path to the Plug shared library. + // Any relative paths specified in the plugin search path will be + // anchored to this directory, to allow for relocatability. +@@ -94,9 +124,24 @@ + _AppendPathList(&result, installLocation, sharedLibPath); + #endif // PXR_INSTALL_LOCATION + +- Plug_SetPaths(result); +-} ++ if (!TfGetenv("PXR_PATH_DEBUG").empty()) { ++ printf("USD Plugin paths: (%zu in total):\n", result.size()); ++ for(const std::string &path : result) { ++ printf(" %s\n", path.c_str()); ++ } ++ } + ++ Plug_SetPaths(result); + } + + PXR_NAMESPACE_CLOSE_SCOPE ++ ++/* Workaround to make it possible to pass a path at runtime to USD. */ ++extern "C" { ++void ++usd_initialise_plugin_path( ++ const char *datafiles_usd_path) ++{ ++ PXR_NS::usd_initialise_plugin_path(datafiles_usd_path); ++} ++} +diff -x .git -ur usd.orig/pxr/usd/CMakeLists.txt external_usd/pxr/usd/CMakeLists.txt +--- usd.orig/pxr/usd/CMakeLists.txt 2019-10-24 22:39:53.000000000 +0200 ++++ external_usd/pxr/usd/CMakeLists.txt 2019-11-28 13:00:33.197957712 +0100 +@@ -1,6 +1,5 @@ + set(DIRS + lib +- bin + plugin + ) + +@@ -8,3 +7,8 @@ + add_subdirectory(${d}) + endforeach() + ++if (PXR_BUILD_USD_TOOLS) ++ add_subdirectory(bin) ++else() ++ message(STATUS "Skipping commandline tools because PXR_BUILD_USD_TOOLS=OFF") ++endif() |