public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] repo/gentoo:master commit in: profiles/base/, media-gfx/blender/, media-gfx/openvdb/, profiles/arch/riscv/, ...
@ 2024-02-20 13:13 Joonas Niilola
  0 siblings, 0 replies; only message in thread
From: Joonas Niilola @ 2024-02-20 13:13 UTC (permalink / raw
  To: gentoo-commits

commit:     9ec9ce46d4e4a91169d9985976f683d5106de67d
Author:     Paul Zander <negril.nx+gentoo <AT> gmail <DOT> com>
AuthorDate: Fri Dec  8 14:36:04 2023 +0000
Commit:     Joonas Niilola <juippis <AT> gentoo <DOT> org>
CommitDate: Tue Feb 20 13:12:10 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=9ec9ce46

media-gfx/openvdb: add 11.0.0

Automatically detects working host compiler for CUDA.
Automatically detects host CUDA arch, can be overridden by setting CUDAARCHS env var.

Re-enabled ax requiring <=llvm-15.

Modified NanoVDB.h so Blender can decern the NanoVDB version and include the correct header.

Closes: https://bugs.gentoo.org/664796
Closes: https://bugs.gentoo.org/686824
Closes: https://bugs.gentoo.org/831043
Closes: https://bugs.gentoo.org/833168
Closes: https://bugs.gentoo.org/921246
Signed-off-by: Paul Zander <negril.nx+gentoo <AT> gmail.com>
Closes: https://github.com/gentoo/gentoo/pull/34564
Signed-off-by: Joonas Niilola <juippis <AT> gentoo.org>

 media-gfx/blender/blender-4.0.1.ebuild             |   1 +
 media-gfx/blender/blender-9999.ebuild              |   4 +
 .../blender/files/blender-4.0.1-openvdb-11.patch   |  73 ++++
 media-gfx/openvdb/Manifest                         |   1 +
 .../openvdb/files/openvdb-11.0.0-cmake_fixes.patch |  84 +++++
 .../files/openvdb-11.0.0-constexpr-version.patch   |  55 +++
 media-gfx/openvdb/metadata.xml                     |  10 +
 media-gfx/openvdb/openvdb-11.0.0.ebuild            | 368 +++++++++++++++++++++
 profiles/arch/riscv/package.use.mask               |   4 +
 profiles/base/package.use.mask                     |   2 +-
 10 files changed, 601 insertions(+), 1 deletion(-)

diff --git a/media-gfx/blender/blender-4.0.1.ebuild b/media-gfx/blender/blender-4.0.1.ebuild
index 853b1444f8d1..a943d6078e8c 100644
--- a/media-gfx/blender/blender-4.0.1.ebuild
+++ b/media-gfx/blender/blender-4.0.1.ebuild
@@ -143,6 +143,7 @@ BDEPEND="
 
 PATCHES=(
 	"${FILESDIR}/${PN}-4.0.1-fix-cflags-cleaner.patch"  # to be dropped for releases after Dec 8, 2023
+	"${FILESDIR}/${PN}-4.0.1-openvdb-11.patch"
 )
 
 blender_check_requirements() {

diff --git a/media-gfx/blender/blender-9999.ebuild b/media-gfx/blender/blender-9999.ebuild
index d1c33bb35bd4..bc907241e946 100644
--- a/media-gfx/blender/blender-9999.ebuild
+++ b/media-gfx/blender/blender-9999.ebuild
@@ -143,6 +143,10 @@ BDEPEND="
 	)
 "
 
+PATCHES=(
+	"${FILESDIR}/${PN}-4.0.1-openvdb-11.patch"
+)
+
 blender_check_requirements() {
 	[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
 

diff --git a/media-gfx/blender/files/blender-4.0.1-openvdb-11.patch b/media-gfx/blender/files/blender-4.0.1-openvdb-11.patch
new file mode 100644
index 000000000000..d9455222c6a7
--- /dev/null
+++ b/media-gfx/blender/files/blender-4.0.1-openvdb-11.patch
@@ -0,0 +1,73 @@
+--- a/intern/cycles/scene/image_vdb.cpp	2023-11-23 14:42:38.772685628 +0100
++++ b/intern/cycles/scene/image_vdb.cpp	2023-11-23 15:19:55.475804922 +0100
+@@ -11,7 +11,14 @@
+ #  include <openvdb/tools/Dense.h>
+ #endif
+ #ifdef WITH_NANOVDB
+-#  include <nanovdb/util/OpenToNanoVDB.h>
++#  include <nanovdb/NanoVDB.h>
++#  define NANOVDB_VERSION(major, minor, patch) (major << 21 | minor << 10 | patch)
++#  if NANOVDB_VERSION(NANOVDB_MAJOR_VERSION_NUMBER, NANOVDB_MINOR_VERSION_NUMBER, NANOVDB_PATCH_VERSION_NUMBER) >= NANOVDB_VERSION(32, 6, 0)
++#    include <nanovdb/util/CreateNanoGrid.h>
++#  else
++#    include <nanovdb/util/OpenToNanoVDB.h>
++#  endif
++#  undef NANOVDB_VERSION
+ #endif
+ 
+ CCL_NAMESPACE_BEGIN
+@@ -55,20 +62,35 @@
+         FloatGridType floatgrid(*openvdb::gridConstPtrCast<GridType>(grid));
+         if constexpr (std::is_same_v<FloatGridType, openvdb::FloatGrid>) {
+           if (precision == 0) {
+-            nanogrid = nanovdb::openToNanoVDB<nanovdb::HostBuffer,
+-                                              typename FloatGridType::TreeType,
+-                                              nanovdb::FpN>(floatgrid);
++            if constexpr (nanovdb::Version() >= nanovdb::Version(32,6,0)) {
++              nanogrid = nanovdb::createNanoGrid(floatgrid);
++            }
++            else {
++              nanogrid = nanovdb::openToNanoVDB<nanovdb::HostBuffer,
++                                                typename FloatGridType::TreeType,
++                                                nanovdb::FpN>(floatgrid);
++            }
+             return true;
+           }
+-          else if (precision == 16) {
+-            nanogrid = nanovdb::openToNanoVDB<nanovdb::HostBuffer,
+-                                              typename FloatGridType::TreeType,
+-                                              nanovdb::Fp16>(floatgrid);
++          if (precision == 16) {
++            if constexpr (nanovdb::Version() > nanovdb::Version(32,4,0)) {
++              nanogrid = nanovdb::createNanoGrid(floatgrid);
++            }
++            else {
++              nanogrid = nanovdb::openToNanoVDB<nanovdb::HostBuffer,
++                                                typename FloatGridType::TreeType,
++                                                nanovdb::Fp16>(floatgrid);
++            }
+             return true;
+           }
+         }
+ 
+-        nanogrid = nanovdb::openToNanoVDB(floatgrid);
++        if constexpr (nanovdb::Version() > nanovdb::Version(32,4,0)) {
++          nanogrid = nanovdb::createNanoGrid(floatgrid);
++        }
++        else {
++          nanogrid = nanovdb::openToNanoVDB(floatgrid);
++        }
+       }
+       catch (const std::exception &e) {
+         VLOG_WARNING << "Error converting OpenVDB to NanoVDB grid: " << e.what();
+--- a/CMakeLists.txt	2023-11-23 15:59:58.715805024 +0100
++++ b/CMakeLists.txt	2023-11-23 16:06:42.352711508 +0100
+@@ -1461,7 +1461,7 @@
+ endif()
+ 
+ if(WITH_OPENVDB)
+-  list(APPEND OPENVDB_DEFINITIONS -DWITH_OPENVDB)
++  list(APPEND OPENVDB_DEFINITIONS -DWITH_OPENVDB -DNANOVDB_USE_OPENVDB)
+ 
+   if(WITH_OPENVDB_3_ABI_COMPATIBLE)
+     list(APPEND OPENVDB_DEFINITIONS -DOPENVDB_3_ABI_COMPATIBLE)

diff --git a/media-gfx/openvdb/Manifest b/media-gfx/openvdb/Manifest
index 4ddf7d7dbf21..ffa937062858 100644
--- a/media-gfx/openvdb/Manifest
+++ b/media-gfx/openvdb/Manifest
@@ -1 +1,2 @@
 DIST openvdb-10.0.1.tar.gz 3461352 BLAKE2B 506168a4bb29bab2a3a3cb37002858517000dc1682f04d95387fd1e250b61c61d92d2ffdf9b679d83ef1ce270909693ebd46224b732ce264685004d1e47b3027 SHA512 361cef8932b69b19ee94c47fe78f665a1acabfabc3f45ff9f490e830f73ff092c42f56ce698677476a8ccf062c89e3e4dc6d4c550aa6842438cbd4d404ee83bb
+DIST openvdb-11.0.0.tar.gz 4620858 BLAKE2B b970167fffa10f28f89c0a3497c7a6076462702c7ede6aacc098239a81f5f09f408b56c37f84ea68e301cedff24920f02a6d08c1f00a2b9ca48925ef7cdc85c7 SHA512 f2c90ca8435ecbacefda429341000ecb555385c746a3e0233220cd78540cee2a26cc17df7b560fdfe2dc03f2b2e960a2fa226a85980189c3e018164ccc037bd4

diff --git a/media-gfx/openvdb/files/openvdb-11.0.0-cmake_fixes.patch b/media-gfx/openvdb/files/openvdb-11.0.0-cmake_fixes.patch
new file mode 100644
index 000000000000..491a3781ba7c
--- /dev/null
+++ b/media-gfx/openvdb/files/openvdb-11.0.0-cmake_fixes.patch
@@ -0,0 +1,84 @@
+From: Paul Zander <negril.nx+gentoo@gmail.com>
+
+remove redundant Find*.cmake files
+use CMake 3.20 GTest targets for nanovdb
+change vdb_ax_test WORKING_DIRECTORY so testfiles can be found
+fix syntax for OpenVDBCXX.cmake
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 9ecdaef..9dd416e 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -287,9 +287,7 @@ if(OPENVDB_INSTALL_CMAKE_MODULES)
+     cmake/FindBlosc.cmake
+     cmake/FindJemalloc.cmake
+     cmake/FindLog4cplus.cmake
+-    cmake/FindOpenEXR.cmake
+     cmake/FindOpenVDB.cmake
+-    cmake/FindTBB.cmake
+     cmake/OpenVDBGLFW3Setup.cmake
+     cmake/OpenVDBHoudiniSetup.cmake
+     cmake/OpenVDBMayaSetup.cmake
+diff --git a/nanovdb/nanovdb/unittest/CMakeLists.txt b/nanovdb/nanovdb/unittest/CMakeLists.txt
+index b0a32be..4d294f4 100644
+--- a/nanovdb/nanovdb/unittest/CMakeLists.txt
++++ b/nanovdb/nanovdb/unittest/CMakeLists.txt
+@@ -20,7 +20,7 @@ message(STATUS "----------------------------------------------------")
+
+ ###############################################################################
+ # TODO: Benchmark should probably not require gtest.
+-if(NOT TARGET GTest::GTest)
++if(NOT TARGET GTest::gtest_main)
+   message(WARNING " - GTest required to build unittests. Skipping.")
+   return()
+ endif()
+@@ -36,14 +36,14 @@ file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/data")
+ # -----------------------------------------------------------------------------
+
+ add_executable(nanovdb_test_nanovdb "TestNanoVDB.cc")
+-target_link_libraries(nanovdb_test_nanovdb PRIVATE nanovdb GTest::GTest GTest::Main)
++target_link_libraries(nanovdb_test_nanovdb PRIVATE nanovdb GTest::gtest GTest::gtest_main)
+ add_test(nanovdb_unit_test nanovdb_test_nanovdb)
+
+ # -----------------------------------------------------------------------------
+
+ if(NANOVDB_USE_CUDA)
+   add_executable(nanovdb_test_cuda "TestNanoVDB.cu")
+-  target_link_libraries(nanovdb_test_cuda PRIVATE nanovdb GTest::GTest GTest::Main)
++  target_link_libraries(nanovdb_test_cuda PRIVATE nanovdb GTest::gtest GTest::gtest_main)
+   add_test(nanovdb_cuda_unit_test nanovdb_test_cuda)
+ endif()
+
+@@ -55,5 +55,5 @@ if(NOT (NANOVDB_USE_TBB AND NANOVDB_USE_OPENVDB))
+ endif()
+
+ add_executable(nanovdb_test_openvdb "TestOpenVDB.cc")
+-target_link_libraries(nanovdb_test_openvdb PRIVATE nanovdb GTest::GTest GTest::Main)
++target_link_libraries(nanovdb_test_openvdb PRIVATE nanovdb GTest::gtest GTest::gtest_main)
+ add_test(nanovdb_openvdb_unit_test nanovdb_test_openvdb)
+diff --git a/openvdb_ax/openvdb_ax/test/CMakeLists.txt b/openvdb_ax/openvdb_ax/test/CMakeLists.txt
+index e403f71..91774f8 100644
+--- a/openvdb_ax/openvdb_ax/test/CMakeLists.txt
++++ b/openvdb_ax/openvdb_ax/test/CMakeLists.txt
+@@ -131,7 +131,7 @@ if(OPENVDB_AX_TEST_PROFILE)
+   target_compile_definitions(vdb_ax_test PRIVATE "-DPROFILE")
+ endif()
+
+-add_test(NAME vdb_ax_unit_test COMMAND vdb_ax_test -v WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/../)
++add_test(NAME vdb_ax_unit_test COMMAND vdb_ax_test -v WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
+
+ # For the undefined behaviour sanitizer, add the suppression file and
+ # additional options
+diff --git a/cmake/config/OpenVDBCXX.cmake b/cmake/config/OpenVDBCXX.cmake
+index 5ad5d18..a6c4ebe 100644
+--- a/cmake/config/OpenVDBCXX.cmake
++++ b/cmake/config/OpenVDBCXX.cmake
+@@ -252,7 +252,7 @@ set(EXTRA_BUILD_TYPES coverage tsan asan lsan msan ubsan)
+ # DebugNoInfo - An internal build type only used by the OpenVDB CI. no optimizations, no symbols, asserts enabled
+ set(CMAKE_CXX_FLAGS_DebugNoInfo "" CACHE STRING "Flags used by the C++ compiler during DebugNoInfo builds.")
+
+-foreach(TYPE ${EXTRA_BUILD_TYPES})
++foreach(TYPE IN LISTS EXTRA_BUILD_TYPES)
+   set(CMAKE_CXX_FLAGS_${U_TYPE} "" CACHE STRING "Flags used by the C++ compiler during ${TYPE} builds.")
+   set(CMAKE_SHARED_LINKER_FLAGS_${U_TYPE} "" CACHE STRING "Flags used by the linker during ${TYPE} builds.")
+   set(CMAKE_EXE_LINKER_FLAGS_${U_TYPE} "" CACHE STRING "Flags used by the linker during ${TYPE} builds.")

diff --git a/media-gfx/openvdb/files/openvdb-11.0.0-constexpr-version.patch b/media-gfx/openvdb/files/openvdb-11.0.0-constexpr-version.patch
new file mode 100644
index 000000000000..17377a411d2c
--- /dev/null
+++ b/media-gfx/openvdb/files/openvdb-11.0.0-constexpr-version.patch
@@ -0,0 +1,55 @@
+From: Paul Zander <negril.nx+gentoo@gmail.com>
+
+make Version constexpr so it can be used to decern the API at runtime (see Blender)
+
+--- a/nanovdb/nanovdb/NanoVDB.h	2023-11-23 15:03:52.227292525 +0100
++++ b/nanovdb/nanovdb/NanoVDB.h	2023-11-23 15:05:10.508818683 +0100
+@@ -948,34 +948,34 @@
+ {
+     uint32_t mData; // 11 + 11 + 10 bit packing of major + minor + patch
+ public:
+-    __hostdev__ Version()
++    __hostdev__ constexpr Version()
+         : mData(uint32_t(NANOVDB_MAJOR_VERSION_NUMBER) << 21 |
+                 uint32_t(NANOVDB_MINOR_VERSION_NUMBER) << 10 |
+                 uint32_t(NANOVDB_PATCH_VERSION_NUMBER))
+     {
+     }
+-    __hostdev__ Version(uint32_t data) : mData(data) {}
+-    __hostdev__ Version(uint32_t major, uint32_t minor, uint32_t patch)
++    __hostdev__ constexpr Version(uint32_t data) : mData(data) {}
++    __hostdev__ constexpr Version(uint32_t major, uint32_t minor, uint32_t patch)
+         : mData(major << 21 | minor << 10 | patch)
+     {
+         NANOVDB_ASSERT(major < (1u << 11)); // max value of major is 2047
+         NANOVDB_ASSERT(minor < (1u << 11)); // max value of minor is 2047
+         NANOVDB_ASSERT(patch < (1u << 10)); // max value of patch is 1023
+     }
+-    __hostdev__ bool     operator==(const Version& rhs) const { return mData == rhs.mData; }
+-    __hostdev__ bool     operator<( const Version& rhs) const { return mData < rhs.mData; }
+-    __hostdev__ bool     operator<=(const Version& rhs) const { return mData <= rhs.mData; }
+-    __hostdev__ bool     operator>( const Version& rhs) const { return mData > rhs.mData; }
+-    __hostdev__ bool     operator>=(const Version& rhs) const { return mData >= rhs.mData; }
+-    __hostdev__ uint32_t id() const { return mData; }
+-    __hostdev__ uint32_t getMajor() const { return (mData >> 21) & ((1u << 11) - 1); }
+-    __hostdev__ uint32_t getMinor() const { return (mData >> 10) & ((1u << 11) - 1); }
+-    __hostdev__ uint32_t getPatch() const { return mData & ((1u << 10) - 1); }
+-    __hostdev__ bool isCompatible() const { return this->getMajor() == uint32_t(NANOVDB_MAJOR_VERSION_NUMBER);}
++    __hostdev__ constexpr bool     operator==(const Version& rhs) const { return mData == rhs.mData; }
++    __hostdev__ constexpr bool     operator<( const Version& rhs) const { return mData < rhs.mData; }
++    __hostdev__ constexpr bool     operator<=(const Version& rhs) const { return mData <= rhs.mData; }
++    __hostdev__ constexpr bool     operator>( const Version& rhs) const { return mData > rhs.mData; }
++    __hostdev__ constexpr bool     operator>=(const Version& rhs) const { return mData >= rhs.mData; }
++    __hostdev__ constexpr uint32_t id() const { return mData; }
++    __hostdev__ constexpr uint32_t getMajor() const { return (mData >> 21) & ((1u << 11) - 1); }
++    __hostdev__ constexpr uint32_t getMinor() const { return (mData >> 10) & ((1u << 11) - 1); }
++    __hostdev__ constexpr uint32_t getPatch() const { return mData & ((1u << 10) - 1); }
++    __hostdev__ constexpr bool isCompatible() const { return this->getMajor() == uint32_t(NANOVDB_MAJOR_VERSION_NUMBER);}
+     /// @brief Check the major version of this instance relative to NANOVDB_MAJOR_VERSION_NUMBER
+     /// @return return 0 if the major version equals NANOVDB_MAJOR_VERSION_NUMBER, else a negative age if it is
+     ///         older, i.e. smaller, and a positive age if it's newer, i.e.e larger.
+-    __hostdev__ int age() const {return int(this->getMajor()) - int(NANOVDB_MAJOR_VERSION_NUMBER);}
++    __hostdev__ constexpr int age() const {return int(this->getMajor()) - int(NANOVDB_MAJOR_VERSION_NUMBER);}
+ 
+ #ifndef __CUDACC_RTC__
+     const char* c_str() const

diff --git a/media-gfx/openvdb/metadata.xml b/media-gfx/openvdb/metadata.xml
index 888390378264..c0e6c1dda969 100644
--- a/media-gfx/openvdb/metadata.xml
+++ b/media-gfx/openvdb/metadata.xml
@@ -15,6 +15,12 @@
 		Chance of Meatballs2' and 'How to Train Your Dragon 2'. 
 	</longdescription>
 	<use>
+		<flag name="abi12-compat">
+			Disables newer features to maintain compatibility with ABI12
+		</flag>
+		<flag name="abi11-compat">
+			Disables newer features to maintain compatibility with ABI11
+		</flag>
 		<flag name="abi10-compat">
 			Disables newer features to maintain compatibility with ABI10
 		</flag>
@@ -24,6 +30,10 @@
 		<flag name="abi9-compat">
 			Disables newer features to maintain compatibility with ABI9
 		</flag>
+		<flag name="alembic">
+			Add support for Alembic through
+			<pkg>media-gfx/alembic</pkg>.
+		</flag>
 		<flag name="ax">
 			Build the OpenVDB AX module to perform custom manipulation of
 			OpenVDB data via an expression language: AX

diff --git a/media-gfx/openvdb/openvdb-11.0.0.ebuild b/media-gfx/openvdb/openvdb-11.0.0.ebuild
new file mode 100644
index 000000000000..23252c26a1f2
--- /dev/null
+++ b/media-gfx/openvdb/openvdb-11.0.0.ebuild
@@ -0,0 +1,368 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..12} )
+
+LLVM_MAX_SLOT=15
+
+inherit cmake cuda flag-o-matic llvm multibuild python-single-r1 toolchain-funcs
+
+DESCRIPTION="Library for the efficient manipulation of volumetric data"
+HOMEPAGE="https://www.openvdb.org"
+SRC_URI="https://github.com/AcademySoftwareFoundation/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="MPL-2.0"
+OPENVDB_ABI=$(ver_cut 1)
+SLOT="0/$PV"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~riscv ~x86"
+IUSE="abi$((OPENVDB_ABI + 1))-compat +abi${OPENVDB_ABI}-compat abi$((OPENVDB_ABI - 1))-compat abi$((OPENVDB_ABI - 2))-compat alembic ax +blosc cpu_flags_x86_avx cpu_flags_x86_sse4_2
+	cuda doc examples jpeg +nanovdb numpy openexr png python static-libs test utils zlib"
+RESTRICT="!test? ( test )"
+
+REQUIRED_USE="
+	?? (
+		abi$((OPENVDB_ABI + 1))-compat
+		abi${OPENVDB_ABI}-compat
+		abi$((OPENVDB_ABI - 1))-compat
+		abi$((OPENVDB_ABI - 2))-compat
+	)
+	cpu_flags_x86_avx? ( cpu_flags_x86_sse4_2 )
+	python? ( ${PYTHON_REQUIRED_USE} )
+	blosc? ( zlib )
+"
+
+# OPTDEPEND=(
+# 	dev-util/gcovr
+# )
+
+RDEPEND="
+	>=dev-cpp/tbb-2020.3:=
+	dev-libs/boost:=
+	dev-libs/jemalloc:=
+	dev-libs/imath:=
+	ax? (
+		<sys-devel/llvm-$(( LLVM_MAX_SLOT + 1 )):=
+	)
+	blosc? (
+		dev-libs/c-blosc:=
+		sys-libs/zlib:=
+	)
+	nanovdb? (
+		zlib? (
+			sys-libs/zlib:=
+		)
+		cuda? (
+			>=dev-util/nvidia-cuda-toolkit-11
+		)
+	)
+	python? (
+		${PYTHON_DEPS}
+		$(python_gen_cond_dep '
+			dev-libs/boost:=[numpy?,${PYTHON_USEDEP}]
+			dev-python/pybind11[${PYTHON_USEDEP}]
+			numpy? ( dev-python/numpy[${PYTHON_USEDEP}] )
+		')
+	)
+	utils? (
+		x11-libs/libXcursor
+		x11-libs/libXi
+		x11-libs/libXinerama
+		x11-libs/libXrandr
+		media-libs/glfw
+		media-libs/glu
+		alembic? ( media-gfx/alembic )
+		jpeg? ( media-libs/libjpeg-turbo:= )
+		png? ( media-libs/libpng:= )
+		openexr? ( >=media-libs/openexr-3:= )
+		media-libs/libglvnd
+	)
+	!ax? (
+		dev-libs/log4cplus:=
+	)
+"
+
+DEPEND="${RDEPEND}"
+BDEPEND="
+	virtual/pkgconfig
+	doc? (
+		app-text/doxygen
+		dev-texlive/texlive-bibtexextra
+		dev-texlive/texlive-fontsextra
+		dev-texlive/texlive-fontutils
+		dev-texlive/texlive-latex
+		dev-texlive/texlive-latexextra
+	)
+	test? (
+		dev-cpp/gtest
+		dev-util/cppunit
+	)
+"
+
+PATCHES=(
+	"${FILESDIR}/${PN}-8.1.0-glfw-libdir.patch"
+
+	"${FILESDIR}/${PN}-9.0.0-fix-atomic.patch"
+
+	"${FILESDIR}/${PN}-10.0.1-fix-linking-of-vdb_tool-with-OpenEXR.patch"
+	"${FILESDIR}/${PN}-10.0.1-log4cplus-version.patch"
+
+	"${FILESDIR}/${PN}-11.0.0-constexpr-version.patch"
+	"${FILESDIR}/${PN}-11.0.0-cmake_fixes.patch"
+)
+
+cuda_set_CUDAHOSTCXX() {
+	local compiler
+	tc-is-gcc && compiler="gcc"
+	tc-is-clang && compiler="clang"
+	[[ -z "$compiler" ]] && die "no compiler specified"
+
+	local package="sys-devel/${compiler}"
+	local version="${package}"
+	local CUDAHOSTCXX_test
+	while
+		CUDAHOSTCXX="${CUDAHOSTCXX_test}"
+		version=$(best_version "${version}")
+		if [[ -z "${version}" ]]; then
+			if [[ -z "${CUDAHOSTCXX}" ]]; then
+				die "could not find supported version of ${package}"
+			fi
+			break
+		fi
+		CUDAHOSTCXX_test="$(
+			dirname "$(
+				realpath "$(
+					which "${compiler}-$(echo "${version}" | grep -oP "(?<=${package}-)[0-9]*")"
+				)"
+			)"
+		)"
+		version="<${version}"
+	do ! echo "int main(){}" | nvcc "-ccbin ${CUDAHOSTCXX_test}" - -x cu &>/dev/null; done
+
+	export CUDAHOSTCXX
+}
+
+cuda_get_host_arch() {
+	[[ -z "${CUDAARCHS}" ]] && einfo "trying to determine host CUDAARCHS"
+	: "${CUDAARCHS:=$(__nvcc_device_query)}"
+	einfo "building for CUDAARCHS = ${CUDAARCHS}"
+
+	export CUDAARCHS
+}
+
+pkg_setup() {
+	use ax && llvm_pkg_setup
+	use python && python-single-r1_pkg_setup
+}
+
+src_prepare() {
+	MULTIBUILD_VARIANTS=( install )
+	use test && MULTIBUILD_VARIANTS+=( test )
+
+	rm "cmake/Find"{OpenEXR,TBB}".cmake" || die
+
+	if use nanovdb; then
+		sed \
+			-e 's#message(WARNING " - OpenVDB required to build#message(VERBOSE " - OpenVDB required to build#g' \
+			-i "nanovdb/nanovdb/"*"/CMakeLists.txt" || die
+	fi
+
+	cmake_src_prepare
+
+	sed -e 's|/usr/local/bin/python|/usr/bin/python|' \
+		-i "${S}"/openvdb/openvdb/python/test/TestOpenVDB.py || die
+}
+
+my_src_configure() {
+	local version
+	version=$(ver_cut 1)
+	if use "abi$(( version + 1 ))-compat"; then
+		version=$(( version + 1 ))
+	elif use "abi$(( version - 1 ))-compat"; then
+		version=$(( version - 1 ))
+	elif use "abi$(( version - 2 ))-compat"; then
+		version=$(( version - 2 ))
+	fi
+
+	local mycmakeargs=(
+		-DCMAKE_FIND_PACKAGE_PREFER_CONFIG="yes"
+		-DCMAKE_INSTALL_DOCDIR="share/doc/${PF}/"
+
+		-DOPENVDB_ABI_VERSION_NUMBER="${version}"
+		-DOPENVDB_BUILD_DOCS="$(usex doc)"
+		-DOPENVDB_BUILD_UNITTESTS="$(usex test)"
+		-DOPENVDB_BUILD_VDB_LOD="$(usex utils)"
+		-DOPENVDB_BUILD_VDB_RENDER="$(usex utils)"
+		-DOPENVDB_BUILD_VDB_TOOL="$(usex utils)"
+		-DOPENVDB_BUILD_VDB_VIEW="$(usex utils)"
+		-DOPENVDB_CORE_SHARED="yes"
+		-DOPENVDB_CORE_STATIC="$(usex static-libs)"
+		# -DOPENVDB_CXX_STRICT="yes"
+		-DOPENVDB_ENABLE_UNINSTALL="no"
+
+		-DUSE_AX="$(usex ax)"
+
+		-DOPENVDB_BUILD_HOUDINI_PLUGIN="no"
+		# -DOPENVDB_DOXYGEN_HOUDINI="no"
+
+		-DUSE_BLOSC="$(usex blosc)"
+		# -DUSE_CCACHE="no"
+		-DUSE_COLORED_OUTPUT="yes"
+		# OpenEXR is only needed by the vdb_render tool and defaults to OFF
+		-DUSE_EXR="$(usex openexr "$(usex utils)")"
+		# not packaged
+		-DUSE_HOUDINI="no"
+		 # replaces openexr half
+		-DUSE_IMATH_HALF="yes"
+		-DUSE_LOG4CPLUS="$(usex !ax)"
+		-DUSE_PKGCONFIG="yes"
+		# PNG is only needed by the vdb_render tool and defaults to OFF
+		-DUSE_PNG="$(usex png "$(usex utils)")"
+		-DUSE_TBB="yes"
+		-DUSE_ZLIB="$(usex zlib)"
+
+		"-DOPENVDB_USE_FUTURE_ABI_$(( version + 1 ))=$(usex "abi$(( version + 1 ))-compat")"
+		"-DOPENVDB_USE_DEPRECATED_ABI_$(( version - 1 ))=$(usex "abi$(( version - 1 ))-compat")"
+		"-DOPENVDB_USE_DEPRECATED_ABI_$(( version - 2 ))=$(usex "abi$(( version - 2 ))-compat")"
+	)
+
+	if use ax; then
+		mycmakeargs+=(
+			-DOPENVDB_AX_STATIC="$(usex static-libs)"
+			-DOPENVDB_DOXYGEN_AX="$(usex doc)"
+			# due to multibuild
+			# -DOPENVDB_AX_TEST_CMD="$(usex test)"
+			# -DOPENVDB_AX_TEST_CMD_DOWNLOADS="$(usex test)"
+			-DOPENVDB_BUILD_AX_UNITTESTS="$(usex test)" # FIXME: log4cplus init and other errors
+			-DOPENVDB_BUILD_VDB_AX="$(usex utils)"
+		)
+	fi
+
+	if use nanovdb; then
+		mycmakeargs+=(
+			-DUSE_NANOVDB="yes"
+			# NOTE intentional so it breaks in sandbox if files are missing
+			-DNANOVDB_ALLOW_FETCHCONTENT="yes"
+			-DNANOVDB_BUILD_EXAMPLES="$(usex examples)"
+			-DNANOVDB_BUILD_TOOLS="$(usex utils)"
+			-DNANOVDB_BUILD_UNITTESTS="$(usex test)"
+			-DNANOVDB_USE_BLOSC="$(usex blosc)"
+			-DNANOVDB_USE_CUDA="$(usex cuda)"
+			-DNANOVDB_USE_ZLIB="$(usex zlib)"
+
+			# TODO add openvdb use flag or split nanovdb as they can be build independent of each other
+			-DNANOVDB_USE_OPENVDB="yes"
+		)
+		if use cpu_flags_x86_avx || use cpu_flags_x86_sse4_2; then
+			mycmakeargs+=(
+				-DNANOVDB_USE_INTRINSICS="yes"
+			)
+		fi
+
+		if use cuda; then
+			cuda_add_sandbox -w
+			cuda_set_CUDAHOSTCXX
+			cuda_get_host_arch
+
+			# NOTE tbb includes immintrin.h, which breaks nvcc so we pretend they are already included
+			export CUDAFLAGS="-D_AVX512BF16VLINTRIN_H_INCLUDED -D_AVX512BF16INTRIN_H_INCLUDED"
+		fi
+
+		if use utils; then
+			mycmakeargs+=(
+				-DOPENVDB_TOOL_USE_NANO="yes"
+				-DOPENVDB_TOOL_NANO_USE_BLOSC="$(usex blosc)"
+				-DOPENVDB_TOOL_NANO_USE_ZIP="$(usex zlib)"
+			)
+		fi
+	fi
+
+	if use python; then
+		mycmakeargs+=(
+			-DOPENVDB_BUILD_PYTHON_MODULE="yes"
+			-DUSE_NUMPY="$(usex numpy)"
+			-DPYOPENVDB_INSTALL_DIRECTORY="$(python_get_sitedir)"
+			-DPython_INCLUDE_DIR="$(python_get_includedir)"
+		)
+		use test && mycmakeargs+=(
+			-DPython_EXECUTABLE="${PYTHON}"
+			-DOPENVDB_BUILD_PYTHON_UNITTESTS="yes"
+		)
+	fi
+
+	# options for the new vdb_tool binary
+	if use utils; then
+		mycmakeargs+=(
+			-DBUILD_TEST="$(usex test)"
+			-DOPENVDB_BUILD_VDB_AX="$(usex ax)"
+
+			-DOPENVDB_TOOL_USE_ABC="$(usex alembic)" # Alembic
+			-DOPENVDB_TOOL_USE_EXR="$(usex openexr)" # OpenEXR
+			-DOPENVDB_TOOL_USE_JPG="$(usex jpeg)" # libjpeg-turbo
+			-DOPENVDB_TOOL_USE_PNG="$(usex png)" # libpng
+		)
+	fi
+
+	if use cpu_flags_x86_avx; then
+		mycmakeargs+=( -DOPENVDB_SIMD="AVX" )
+	elif use cpu_flags_x86_sse4_2; then
+		mycmakeargs+=( -DOPENVDB_SIMD="SSE42" )
+	fi
+
+	if [[ "${MULTIBUILD_VARIANT}" == "test" ]]; then
+		# NOTE Certain tests expect bit equality and don't set tolerance violating the C standard
+		# 6.5 8)
+		# A floating expression may be contracted, that is, evaluated as though it were an atomic operation,
+		# thereby omitting rounding errors implied by the source code and the expression evaluation method.
+		# The FP_CONTRACT pragma in <math.h> provides a way to disallow contracted expressions.
+		# Otherwise, whether and how expressions are contracted is implementation-defined.
+		#
+		# To reproduce the upstream tests the testsuite is compiled separate with FP_CONTRACT=OFF
+		append-cflags   "-ffp-contract=off"
+		append-cxxflags "-ffp-contract=off"
+		if use ax; then
+			mycmakeargs+=(
+				-DOPENVDB_AX_TEST_CMD="yes"
+				-DOPENVDB_AX_TEST_CMD_DOWNLOADS="yes"
+			)
+		fi
+	fi
+
+	cmake_src_configure
+}
+
+my_src_test() {
+	[[ "${MULTIBUILD_VARIANT}" != "test" ]] && return
+
+	if use ax; then
+		ln -sr "${CMAKE_USE_DIR}/openvdb_ax/openvdb_ax/test" "${BUILD_DIR}/test"
+	fi
+
+	if use cuda; then
+		cuda_add_sandbox -w
+	fi
+
+	cmake_src_test
+}
+
+my_src_install() {
+	[[ "${MULTIBUILD_VARIANT}" == "test" ]] && return
+	cmake_src_install
+}
+
+src_configure() {
+	multibuild_foreach_variant my_src_configure
+}
+
+src_compile() {
+	multibuild_foreach_variant cmake_src_compile
+}
+
+src_test() {
+	multibuild_foreach_variant my_src_test
+}
+
+src_install() {
+	multibuild_foreach_variant my_src_install
+}

diff --git a/profiles/arch/riscv/package.use.mask b/profiles/arch/riscv/package.use.mask
index 5f3674f57d60..ac83a3b8d238 100644
--- a/profiles/arch/riscv/package.use.mask
+++ b/profiles/arch/riscv/package.use.mask
@@ -1,6 +1,10 @@
 # Copyright 2019-2024 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
+# Paul Zander <negril.nx+gentoo@gmail.com> (2024-02-18)
+# alembic not stable yet
+media-gfx/openvdb alembic
+
 # Michal Privoznik <michal.privoznik@gmail.com> (2024-01-18)
 # No sys-block/nbdkit on riscv, yet
 app-emulation/libvirt nbd

diff --git a/profiles/base/package.use.mask b/profiles/base/package.use.mask
index 6490341d8691..777555152136 100644
--- a/profiles/base/package.use.mask
+++ b/profiles/base/package.use.mask
@@ -38,7 +38,7 @@ net-analyzer/nagios-plugin-check_raid hpa
 # Michał Górny <mgorny@gentoo.org> (2023-12-22)
 # Requires LLVM 14 that is being removed.
 <dev-lang/ghc-9.4 llvm
-media-gfx/openvdb ax
+<media-gfx/openvdb-11 ax
 sys-devel/sparse llvm
 
 # Takuya Wakazono <pastalian46@gmail.com> (2023-11-21)


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2024-02-20 13:13 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-20 13:13 [gentoo-commits] repo/gentoo:master commit in: profiles/base/, media-gfx/blender/, media-gfx/openvdb/, profiles/arch/riscv/, Joonas Niilola

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox