torchvision-cuda-0.27.0zGentoo
download
# Copyright 2024-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# CUDA implementation of torchvision
EAPI=8
PYTHON_COMPAT=( python3_{11..14} )
DISTUTILS_SINGLE_IMPL=1
DISTUTILS_USE_PEP517=setuptools
DISTUTILS_EXT=1
inherit cuda distutils-r1 multiprocessing
MY_PN=torchvision
MYPN=vision
MYP=${MYPN}-${PV}
DESCRIPTION="Datasets, transforms and models for computer vision (CUDA backend)"
HOMEPAGE="https://github.com/pytorch/vision"
SRC_URI="https://github.com/pytorch/${MYPN}/archive/refs/tags/v${PV}.tar.gz
-> torchvision-${PV}.tar.gz"
S="${WORKDIR}"/${MYP}
LICENSE="BSD"
SLOT="0"
KEYWORDS="~amd64"
IUSE="+ffmpeg +jpeg +png +webp"
RESTRICT="test"
REQUIRED_USE="${PYTHON_REQUIRED_USE}"
CAFFE2_PREFIX="/usr/lib/caffe2/cuda"
PYTORCH_PREFIX="/usr/lib/pytorch/cuda"
TORCHVISION_PREFIX="/usr/lib/torchvision/cuda"
RDEPEND="
${PYTHON_DEPS}
$(python_gen_cond_dep '
dev-python/numpy[${PYTHON_USEDEP}]
dev-python/pillow[${PYTHON_USEDEP}]
')
jpeg? ( media-libs/libjpeg-turbo:= )
png? ( media-libs/libpng:= )
webp? ( media-libs/libwebp )
ffmpeg? ( media-video/ffmpeg )
~sci-ml/caffe2-cuda-2.12.0[${PYTHON_SINGLE_USEDEP}]
~sci-ml/pytorch-cuda-2.12.0[${PYTHON_SINGLE_USEDEP}]
app-eselect/eselect-torchvision
"
DEPEND="${RDEPEND}"
src_prepare() {
cuda_src_prepare
distutils-r1_src_prepare
}
python_compile() {
addpredict /dev/kfd
addpredict /dev/random
# Point torch imports to CUDA backend
export PYTHONPATH="${PYTORCH_PREFIX}:${PYTHONPATH}"
export LD_LIBRARY_PATH="${CAFFE2_PREFIX}/lib64:${LD_LIBRARY_PATH}"
export FORCE_CUDA=1
export TORCHVISION_USE_PNG=$(usex png 1 0)
export TORCHVISION_USE_JPEG=$(usex jpeg 1 0)
export TORCHVISION_USE_WEBP=$(usex webp 1 0)
export TORCHVISION_USE_FFMPEG=$(usex ffmpeg 1 0)
export TORCHVISION_USE_NVJPEG=1
export TORCHVISION_USE_VIDEO_CODEC=1
export TORCH_CUDA_ARCH_LIST="${TORCH_CUDA_ARCH_LIST:-6.1 7.5}"
cuda_add_sandbox
addpredict "/dev/char/"
# CUDA 12.9 requires GCC < 15 — torch cpp_extension.py checks CXX directly
local gcc14="/usr/x86_64-pc-linux-gnu/gcc-bin/14"
export CC="${gcc14}/x86_64-pc-linux-gnu-gcc"
export CXX="${gcc14}/x86_64-pc-linux-gnu-g++"
export CUDAHOSTCXX="${CXX}"
export NVCC_FLAGS="${NVCCFLAGS} -ccbin ${gcc14}"
# CUDA caffe2 headers must be found before eselect ROCm symlinks in /usr/include
export CPLUS_INCLUDE_PATH="${CAFFE2_PREFIX}/include:${CPLUS_INCLUDE_PATH}"
export C_INCLUDE_PATH="${CAFFE2_PREFIX}/include:${C_INCLUDE_PATH}"
MAX_JOBS="$(get_makeopts_jobs)" \
distutils-r1_python_compile -j1
}
python_install() {
local dest="${ED}${TORCHVISION_PREFIX}"
mkdir -p "${dest}" || die
# Need PYTHONPATH for install step too (imports torch)
export PYTHONPATH="${PYTORCH_PREFIX}:${PYTHONPATH}"
export LD_LIBRARY_PATH="${CAFFE2_PREFIX}/lib64:${LD_LIBRARY_PATH}"
distutils-r1_python_install
# Move from site-packages to our prefix
local sitedir="$(python_get_sitedir)"
if [[ -d "${ED}${sitedir}/torchvision" ]]; then
mv "${ED}${sitedir}/torchvision" "${dest}/torchvision" || die
fi
# Move dist-info
local distinfo
for distinfo in "${ED}${sitedir}"/torchvision-*.dist-info; do
[[ -d "${distinfo}" ]] && mv "${distinfo}" "${dest}/" || true
done
# Fix RPATH on _C.so to find CUDA caffe2 libs
local cso="${dest}/torchvision/_C.so"
if [[ -f "${cso}" ]]; then
patchelf --set-rpath "${CAFFE2_PREFIX}/lib64:\$ORIGIN" "${cso}" || \
ewarn "patchelf failed on _C.so — RPATH may need manual fix"
fi
}
pkg_postinst() {
local active
active=$(eselect torchvision show 2>/dev/null)
if [[ "${active}" == "(unset)" || -z "${active}" ]]; then
eselect torchvision set cuda
elog "torchvision backend set to: cuda"
fi
}