You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/media-gfx/openvdb/openvdb-11.0.0.ebuild

376 lines
9.6 KiB

# 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 abi_version
version=$(ver_cut 1)
abi_version="${version}"
if use "abi$(( version + 1 ))-compat"; then
abi_version=$(( version + 1 ))
elif use "abi$(( version - 1 ))-compat"; then
abi_version=$(( version - 1 ))
elif use "abi$(( version - 2 ))-compat"; then
abi_version=$(( version - 2 ))
fi
local mycmakeargs=(
-DCMAKE_FIND_PACKAGE_PREFER_CONFIG="yes"
-DCMAKE_INSTALL_DOCDIR="share/doc/${PF}/"
-DOPENVDB_ABI_VERSION_NUMBER="${abi_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" || die
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() {
# -Werror=strict-aliasing
# https://bugs.gentoo.org/926820
# https://github.com/AcademySoftwareFoundation/openvdb/issues/1784
append-flags -fno-strict-aliasing
filter-lto
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
}