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-libs/opensubdiv/opensubdiv-3.6.0-r1.ebuild

230 lines
4.7 KiB

# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
PYTHON_COMPAT=( python3_{10..12} )
inherit cmake cuda flag-o-matic python-any-r1 toolchain-funcs virtualx
MY_PV="$(ver_rs "1-3" '_')"
DESCRIPTION="An Open-Source subdivision surface library"
HOMEPAGE="https://graphics.pixar.com/opensubdiv/docs/intro.html"
SRC_URI="https://github.com/PixarAnimationStudios/OpenSubdiv/archive/v${MY_PV}.tar.gz -> ${P}.tar.gz"
S="${WORKDIR}/OpenSubdiv-${MY_PV}"
# Modfied Apache-2.0 license, where section 6 has been replaced.
# See for example CMakeLists.txt for details.
LICENSE="Apache-2.0"
SLOT="0"
KEYWORDS="amd64 ~arm ~arm64 ~x86"
IUSE="X cuda doc examples +glew +glfw opencl +opengl openmp ptex python tbb test tutorials"
RESTRICT="!test? ( test )"
# TODO needed for stringify due to unwrapped KERNEL_FILES in opensubdiv/{far,osd}/CMakeLists.txt
REQUIRED_USE="
|| ( opencl opengl )
"
BDEPEND="
doc? (
app-text/doxygen
dev-python/docutils
)
python? ( ${PYTHON_DEPS} )
"
RDEPEND="
opengl? (
media-libs/libglvnd
glew? (
media-libs/glew:=
)
glfw? (
media-libs/glfw:=
X? (
x11-libs/libX11
x11-libs/libXcursor
x11-libs/libXi
x11-libs/libXinerama
x11-libs/libXrandr
x11-libs/libXxf86vm
)
)
)
opencl? ( virtual/opencl )
openmp? ( || (
sys-devel/gcc:*[openmp]
sys-libs/libomp
) )
ptex? ( media-libs/ptex )
tbb? ( dev-cpp/tbb:= )
"
# CUDA_RUNTIME is statically linked
DEPEND="
${RDEPEND}
cuda? ( dev-util/nvidia-cuda-toolkit:= )
"
PATCHES=(
"${FILESDIR}/${PN}-3.6.0-use-gnuinstalldirs.patch"
"${FILESDIR}/${PN}-3.6.0-cudaflags.patch"
)
pkg_pretend() {
[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
}
pkg_setup() {
[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
if use cuda; then
# When building binary packages we build all major targets unless specified otherwise
if [[ -z "${CUDAARCHS+x}" ]]; then
case ${MERGE_TYPE} in
source) CUDAARCHS="native" ;;
# buildonly) CUDAARCHS="all" ;;
buildonly) CUDAARCHS="all-major" ;;
esac
fi
# check if user provided --gpu-architecture/-arch flag instead of CUDAARCHS
for f in ${NVCCFLAGS}; do
if [[ ${f} == -arch* || ${f} == --gpu-architecture* ]]; then
CUDAARCHS="NVCC"
break
fi
done
if [[ "${CUDAARCHS}" == "NVCC" ]]; then
unset CUDAARCHS
else
export CUDAARCHS
fi
fi
}
src_prepare() {
cmake_src_prepare
sed \
-e "/install(/s/^/#DONOTINSTALL /g" \
-i \
regression/*/CMakeLists.txt \
tools/stringify/CMakeLists.txt \
|| die
sed \
-e "/install( TARGETS osd_static_[cg]pu/s/^/#DONOTINSTALL /g" \
-i \
opensubdiv/CMakeLists.txt \
|| die
use cuda && cuda_src_prepare
}
src_configure() {
local mycmakeargs=(
-DCMAKE_INSTALL_BINDIR="share/${PN}/bin"
# DirectX
-DNO_DX="yes"
# MacOS
-DNO_MACOS_FRAMEWORK="yes"
-DNO_METAL="yes"
-DNO_DOC="$(usex !doc)"
-DNO_EXAMPLES="$(usex !examples)"
-DNO_TUTORIALS="$(usex !tutorials)"
-DNO_REGRESSION="$(usex !test)"
-DNO_TESTS="$(usex !test)"
-DNO_PTEX="$(usex !ptex)"
# GUI
-DNO_OPENGL="$(usex !opengl)"
# Backends
-DNO_CUDA="$(usex !cuda)"
-DNO_OMP="$(usex !openmp)"
-DNO_TBB="$(usex !tbb)"
-DNO_OPENCL="$(usex !opencl)"
)
if use cuda; then
# The old cmake CUDA module doesn't use environment variable to initialize flags
mycmakeargs+=(
-DCUDA_NVCC_FLAGS="-forward-unknown-opts ${NVCCFLAGS}"
)
fi
if use opencl; then
mycmakeargs+=(
# not packaged https://github.com/martijnberger/clew
-DNO_CLEW="yes"
)
fi
if use opengl; then
mycmakeargs+=(
-DNO_GLTESTS="$(usex !test)"
-DNO_GLEW="$(usex !glew)"
-DNO_GLFW="$(usex !glfw)"
)
if use glew; then
mycmakeargs+=(
-DGLEW_LOCATION="${ESYSROOT}/usr/$(get_libdir)"
)
fi
if use glfw; then
mycmakeargs+=(
-DGLFW_LOCATION="${ESYSROOT}/usr/$(get_libdir)"
-DNO_GLFW_X11="$(usex !X)"
)
fi
fi
if use ptex; then
mycmakeargs+=(
-DPTEX_LOCATION="${ESYSROOT}/usr/$(get_libdir)"
)
fi
if ! use python; then
mycmakeargs+=(
-DCMAKE_DISABLE_FIND_PACKAGE_Python="yes"
)
fi
cmake_src_configure
}
src_test() {
CMAKE_SKIP_TESTS=(
# Fails due to for CL & CUDA kernels, works outside
"glImaging"
)
# "far_tutorial_1_2 breaks with gcc and > -O1"
tc-is-gcc && is-flagq '-O@(2|3|fast)' && CMAKE_SKIP_TESTS+=( "far_tutorial_1_2" )
use cuda && cuda_add_sandbox -w
virtx cmake_src_test
local KERNELS=( CPU )
use openmp && KERNELS+=( OPENMP )
use tbb && KERNELS+=( TBB )
# use cuda && KERNELS+=( CUDA )
# use opencl && KERNELS+=( CL )
use opengl && use X && KERNELS+=( XFB )
use opengl && KERNELS+=( GLSL )
virtx "${BUILD_DIR}/bin/glImaging" -w test -l 3 -s 256 256 -a -k "$(IFS=","; echo "${KERNELS[*]}")"
}