[Bf-blender-cvs] [d4d9943b6c9] tmp_libupdate_34: Various deps builder fixes for Linux/macOS

Brecht Van Lommel noreply at git.blender.org
Tue Aug 16 20:47:26 CEST 2022


Commit: d4d9943b6c9ae718ac2f66e7ea5a80aa73aabdd3
Author: Brecht Van Lommel
Date:   Mon Aug 15 23:32:39 2022 +0200
Branches: tmp_libupdate_34
https://developer.blender.org/rBd4d9943b6c9ae718ac2f66e7ea5a80aa73aabdd3

Various deps builder fixes for Linux/macOS

* Enable C++17. Silences warning in OpenVDB, and doing this right may be more
  important now that USD becomes a public C++ API.
* Various fixes for OpenVDB
* Ensure libraries have relative @origin or $ORIGIN rpath without absolute
  paths. Default assumption in most libs seems to be a fixed install location.
* Don't link static Python lib with interpreter symbols into USD library.
* Harvest fribidi and harfbuzz
* Harvest OpenVDB and USD python modules into python site-packages
* Don't harvest meson in site-packages

===================================================================

M	build_files/build_environment/cmake/harvest.cmake
M	build_files/build_environment/cmake/opensubdiv.cmake
M	build_files/build_environment/cmake/openvdb.cmake
M	build_files/build_environment/cmake/options.cmake
M	build_files/build_environment/cmake/osl.cmake
M	build_files/build_environment/cmake/python.cmake
M	build_files/build_environment/cmake/usd.cmake
M	build_files/build_environment/patches/openvdb.diff
M	build_files/build_environment/patches/usd.diff

===================================================================

diff --git a/build_files/build_environment/cmake/harvest.cmake b/build_files/build_environment/cmake/harvest.cmake
index 54edb3754fe..3ec5b623a99 100644
--- a/build_files/build_environment/cmake/harvest.cmake
+++ b/build_files/build_environment/cmake/harvest.cmake
@@ -55,6 +55,7 @@ function(harvest from to)
       PATTERN "cmake" EXCLUDE
       PATTERN "__pycache__" EXCLUDE
       PATTERN "tests" EXCLUDE
+      PATTERN "meson*" EXCLUDE
     )
   endif()
 endfunction()
@@ -75,10 +76,14 @@ 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(glew/include glew/include "*.h")
 harvest(glew/lib glew/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")
@@ -146,7 +151,8 @@ harvest(opensubdiv/include opensubdiv/include "*.h")
 harvest(opensubdiv/lib opensubdiv/lib "*${SHAREDLIBEXT}*")
 harvest(openvdb/include/openvdb openvdb/include/openvdb "*.h")
 harvest(openvdb/include/nanovdb openvdb/include/nanovdb "*.h")
-harvest(openvdb/lib openvdb/lib "*.a")
+harvest(openvdb/lib openvdb/lib "*${SHAREDLIBEXT}*")
+harvest(openvdb/lib/python${PYTHON_SHORT_VERSION} python/lib/python${PYTHON_SHORT_VERSION} "*")
 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")
@@ -180,7 +186,9 @@ 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/lib "*")
+harvest(usd/lib/libusd_usd_ms${SHAREDLIBEXT} usd/lib/libusd_usd_ms${SHAREDLIBEXT})
+harvest(usd/lib/usd usd/lib/usd "*")
+harvest(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")
@@ -196,6 +204,20 @@ if(UNIX AND NOT APPLE)
   harvest(dpcpp dpcpp "*")
   harvest(igc dpcpp/lib/igc "*")
   harvest(ocloc dpcpp/lib/ocloc "*")
- endif()
+endif()
+
+# Set rpath so Python standalone executable can find shared libraries shipped
+# with Blender. This makes assumptions about the directory layout of Blender
+# installation and would ideally be done as part of the Blender build. However
+# it would add patchelf as a new dependency required to build.
+set(_python_executable_install_path ${HARVEST_TARGET}/python/bin/python${PYTHON_SHORT_VERSION})
+message(STATUS ${_python_executable_install_path})
+if(APPLE)
+  install(
+    CODE "execute_process(COMMAND install_name_tool -add_rpath @loader_path/../../lib ${_python_executable_install_path})")
+else()
+  install(
+    CODE "execute_process(COMMAND patchelf --set-rpath $ORIGIN/../../../lib ${_python_executable_install_path})")
+endif()
 
 endif()
diff --git a/build_files/build_environment/cmake/opensubdiv.cmake b/build_files/build_environment/cmake/opensubdiv.cmake
index 4f643868bfb..a42c7b4f4d4 100644
--- a/build_files/build_environment/cmake/opensubdiv.cmake
+++ b/build_files/build_environment/cmake/opensubdiv.cmake
@@ -34,6 +34,15 @@ else()
     -DTBB_INCLUDE_DIR=${LIBDIR}/tbb/include
     -DTBB_tbb_LIBRARY=${LIBDIR}/tbb/lib/${LIBPREFIX}tbb${SHAREDLIBEXT}
   )
+  if(APPLE)
+    set(OPENSUBDIV_EXTRA_ARGS
+      ${OPENSUBDIV_EXTRA_ARGS}
+      # Ensure opensubdiv library itself will be referenced with @rpath.
+      -DCMAKE_MACOSX_RPATH=ON
+      # Avoid adding absolute LC_RPATH.
+      -DCMAKE_SKIP_RPATH=ON
+    )
+  endif()
 endif()
 
 ExternalProject_Add(external_opensubdiv
diff --git a/build_files/build_environment/cmake/openvdb.cmake b/build_files/build_environment/cmake/openvdb.cmake
index 159e971172f..f9db82748c9 100644
--- a/build_files/build_environment/cmake/openvdb.cmake
+++ b/build_files/build_environment/cmake/openvdb.cmake
@@ -25,6 +25,8 @@ set(OPENVDB_EXTRA_ARGS
   -DNANOVDB_BUILD_TOOLS=OFF
   -DBlosc_ROOT=${LIBDIR}/blosc/
   -DTBB_ROOT=${LIBDIR}/tbb/
+  -DTbb_INCLUDE_DIR=${LIBDIR}/tbb/include
+  -DTbb_LEGACY_INCLUDE_DIR=${LIBDIR}/tbb/include
   -DOPENVDB_CORE_SHARED=${OPENVDB_SHARED}
   -DOPENVDB_CORE_STATIC=${OPENVDB_STATIC}
   -DOPENVDB_BUILD_BINARIES=OFF
@@ -35,6 +37,7 @@ set(OPENVDB_EXTRA_ARGS
   -DOPENVDB_PYTHON_WRAP_ALL_GRID_TYPES=ON
   -DUSE_NUMPY=ON
   -DPython_EXECUTABLE=${PYTHON_BINARY}
+  -DOPENVDB_ENABLE_RPATH=OFF
 
   # OPENVDB_AX Disabled for now as it adds ~25MB distribution wise
   # with no blender code depending on it, seems wasteful.
@@ -44,6 +47,15 @@ set(OPENVDB_EXTRA_ARGS
   # -DLLVM_DIR=${LIBDIR}/llvm/lib/cmake/llvm
 )
 
+if(UNIX AND NOT APPLE)
+  # OpenVDB sets absolute rpaths, so disable OPENVDB_ENABLE_RPATH and add our
+  # own relocatable rpath.
+  set(OPENVDB_EXTRA_ARGS
+    ${OPENVDB_EXTRA_ARGS}
+    -DCMAKE_INSTALL_RPATH=\$ORIGIN
+  )
+endif()
+
 ExternalProject_Add(openvdb
   URL file://${PACKAGE_DIR}/${OPENVDB_FILE}
   DOWNLOAD_DIR ${DOWNLOAD_DIR}
diff --git a/build_files/build_environment/cmake/options.cmake b/build_files/build_environment/cmake/options.cmake
index 6a2cd66d284..a69cfe922ee 100644
--- a/build_files/build_environment/cmake/options.cmake
+++ b/build_files/build_environment/cmake/options.cmake
@@ -144,7 +144,7 @@ if(APPLE)
     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
@@ -164,7 +164,7 @@ if(APPLE)
     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)
@@ -211,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}
 )
 
diff --git a/build_files/build_environment/cmake/osl.cmake b/build_files/build_environment/cmake/osl.cmake
index 964b58333f1..86df754638e 100644
--- a/build_files/build_environment/cmake/osl.cmake
+++ b/build_files/build_environment/cmake/osl.cmake
@@ -33,7 +33,6 @@ set(OSL_EXTRA_ARGS
   -DINSTALL_DOCS=OFF
   -Dpugixml_ROOT=${LIBDIR}/pugixml
   -DUSE_PYTHON=OFF
-  -DCMAKE_CXX_STANDARD=14
   -DImath_ROOT=${LIBDIR}/imath
 )
 
diff --git a/build_files/build_environment/cmake/python.cmake b/build_files/build_environment/cmake/python.cmake
index 00b1c78b943..ec54e0be4a8 100644
--- a/build_files/build_environment/cmake/python.cmake
+++ b/build_files/build_environment/cmake/python.cmake
@@ -57,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")
diff --git a/build_files/build_environment/cmake/usd.cmake b/build_files/build_environment/cmake/usd.cmake
index 6aff691bc27..8a98ac6b884 100644
--- a/build_files/build_environment/cmake/usd.cmake
+++ b/build_files/build_environment/cmake/usd.cmake
@@ -21,11 +21,26 @@ if(WIN32)
   if(BUILD_MODE STREQUAL Debug)
     list(APPEND USD_PLATFORM_FLAGS -DPXR_USE_DEBUG_PYTHON=ON)
   endif()
-endif()
-if(UNIX)
+elseif(APPLE)
+  # 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
+    ${USD_PLATFORM_FLAGS}
+    -DPYTHON_INCLUDE_DIR=${LIBDIR}/python/include/python${PYTHON_SHORT_VERSION}/
+    -DPYTHON_LIBRARY=${LIBDIR}/tbb/lib/${LIBPREFIX}${TBB_LIBRARY}${SHAREDLIBEXT}
+    -DCMAKE_SHARED_LINKER_FLAGS=${USD_SHARED_LINKER_FLAGS}
+    # Avoid adding absolute LC_RPATH, macOS adds relative by default.
+    -DCMAKE_SKIP_RPATH=ON
+   )
+else()
   set(USD_PLATFORM_FLAGS
     -DPYTHON_INCLUDE_DIR=${LIBDIR}/python/include/python${PYTHON_SHORT_VERSION}/
-    -DPYTHON_LIBRARY=${LIBDIR}/python/lib/libpython${PYTHON_SHORT_VERSION}${LIBEXT}
+    -DPYTHON_LIBRARY=${LIBDIR}/tbb/lib/${LIBPREFIX}${TBB_LIBRARY}${SHAREDLIBEXT}
+    # Set relocatable rpath.
+    -DCMAKE_INSTALL_RPATH=\$ORIGIN
+    -DCMAKE_SKIP_RPATH=OFF
   )
 endif()
 
diff --git a/build_files/build_environment/patches/openvdb.diff b/build_files/build_environment/patches/openvdb.diff
index 6f424ffbe37..9ad231e0c6d 100644
--- a/build_files/build_environment/patches/openvdb.diff
+++ b/build_files/build_environment/patches/openvdb.diff
@@ -1,16 +1,3 @@
-diff -ur openvdb-9.0.0/cmake/FindTBB.c

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list