[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