diff options
| -rw-r--r-- | media-libs/opensubdiv/Manifest | 1 | ||||
| -rw-r--r-- | media-libs/opensubdiv/opensubdiv-3.6.1.ebuild | 254 |
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 +} |
