summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--media-libs/opensubdiv/Manifest1
-rw-r--r--media-libs/opensubdiv/opensubdiv-3.6.1.ebuild254
2 files changed, 255 insertions, 0 deletions
diff --git a/media-libs/opensubdiv/Manifest b/media-libs/opensubdiv/Manifest
index 83a6e3544845..8554674e2594 100644
--- a/media-libs/opensubdiv/Manifest
+++ b/media-libs/opensubdiv/Manifest
@@ -1 +1,2 @@
DIST opensubdiv-3.6.0.tar.gz 40746688 BLAKE2B 23f92fa028ae32b430350998299dab3fbb87b8530755abd435ce059223998a8f3d48de17c746028362fd1d2eee33e8a4c7a55b8cf4083202cfd0b6d27de008c7 SHA512 a976733a26e2c0f6510f59d4372b1b33f5404a9d536bcbd6ae3a1a0ffd1bba5495df7108bebc854d5c069575772c97c0d00f0f16f79e87611376ba84e9ae7a4b
+DIST opensubdiv-3.6.1.tar.gz 40745394 BLAKE2B 1dfb24b22ddc3874e4aaf03feb1944cf91008b52bfcf44f039831f2945f58f9a777903d073748ecc477a2fda0cb46b2f79045489fc0aee77acbcfceb011e1c06 SHA512 afc30951642d978c7fd82549f0b03eae7dbf4f28642cf7e42e4a09ac550e111555c391f21dee239d5ee5522b758038d2cc7553fe2db818dad6dcf2ab5fd22358
diff --git a/media-libs/opensubdiv/opensubdiv-3.6.1.ebuild b/media-libs/opensubdiv/opensubdiv-3.6.1.ebuild
new file mode 100644
index 000000000000..0a6ded0eefc3
--- /dev/null
+++ b/media-libs/opensubdiv/opensubdiv-3.6.1.ebuild
@@ -0,0 +1,254 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{11..13} )
+
+inherit cmake cuda flag-o-matic python-any-r1 toolchain-funcs virtualx xdg
+
+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"
+# MATCHES SONAME
+SLOT="0/${PV}"
+KEYWORDS="~amd64 ~arm ~arm64 ~x86"
+IUSE="X cuda doc examples 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 )
+ ptex? ( glfw )
+"
+
+BDEPEND="
+ doc? (
+ app-text/doxygen
+ dev-python/docutils
+ )
+ python? ( ${PYTHON_DEPS} )
+"
+
+# opengl requires GLX, libglvnd[X]
+RDEPEND="
+ examples? (
+ opengl? (
+ glfw? (
+ >=media-libs/glfw-3.4[X?]
+ )
+ )
+ )
+ opengl? ( media-libs/libglvnd[X] )
+ opencl? ( virtual/opencl )
+ openmp? ( || (
+ sys-devel/gcc:*[openmp]
+ llvm-runtimes/openmp
+ ) )
+ ptex? ( media-libs/ptex )
+ tbb? ( dev-cpp/tbb:= )
+ test? ( >=media-libs/glfw-3.4[X] )
+"
+
+# CUDA_RUNTIME is statically linked
+DEPEND="
+ ${RDEPEND}
+ test? (
+ glfw? (
+ >=media-libs/glfw-3.4[X?]
+ )
+ )
+ 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
+
+ if use cuda; then
+ # do this little headstand to filter out lto from NVCCFLAGS
+ local CFLAGS_orig="${CFLAGS}" CXXFLAGS_orig="${CXXFLAGS}"
+ filter-lto
+
+ cuda_src_prepare
+
+ CFLAGS="${CFLAGS_orig}"
+ CXXFLAGS="${CXXFLAGS_orig}"
+ fi
+}
+
+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_PROPAGATE_HOST_FLAGS="no"
+ -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)"
+ # GLEW support is unmaintained in favour of their own GL handler code.
+ # Turning this on will lead to crashes when using their GPU backend.
+ -DNO_GLEW="yes"
+ -DNO_GLFW="$(usex !glfw)"
+ )
+ 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() {
+ xdg_environment_reset
+
+ CMAKE_SKIP_TESTS=(
+ # Fails due to CL & CUDA kernels, works outside
+ "glImaging"
+ )
+
+ if ! test -w /dev/dri/card0; then
+ CMAKE_SKIP_TESTS+=(
+ "osd_regression"
+ )
+ fi
+
+ # "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" )
+
+ if use cuda; then
+ cuda_add_sandbox -w
+ addpredict /dev/char/
+ addwrite /dev/dri/card0
+ addwrite /dev/dri/renderD128
+ addwrite /dev/udmabuf
+ fi
+
+ virtx cmake_src_test
+
+ if use examples && use opengl && use glfw; then
+
+ 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 )
+
+ #Bug https://bugs.gentoo.org/924516
+ virtx "${BUILD_DIR}/bin/glImaging" -w test -l 3 -s 256 256 -a -k "$(IFS=","; echo "${KERNELS[*]}")"
+ fi
+}