mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-11-09 06:37:10 -08:00
dev-util/nvidia-cuda-toolkit: add 12.6.3
Signed-off-by: Paul Zander <negril.nx+gentoo@gmail.com> Signed-off-by: Sam James <sam@gentoo.org>
This commit is contained in:
@@ -3,5 +3,7 @@ DIST cuda_12.3.2_545.23.08_linux.run 4368514070 BLAKE2B bfb6239b7669636e2ef42492
|
||||
DIST cuda_12.4.1_550.54.15_linux.run 4454730420 BLAKE2B 643513a673e72aeab2e0268c4f91b504132aee378e5e483c46803ed9b1b109274e23bce0cd1022de1220e81dbfb0442c9d84370ad9c6a17e14fe2aaff23ccf13 SHA512 340fab9aad2f3e03fb773c2ec1d4f2c3b1428b350c2072b02263f68f3c521b7ec42086ae7b5e66594a0b91862cc165d8519e4c92e428268bc1e98adcfe106d42
|
||||
DIST cuda_12.5.1_555.42.06_linux.run 4311634770 BLAKE2B 3546faeb24687dd11ad0a61a4f02cfbd97119d9e3cd3e24ea294b81ed488de7dfef03607c69d7b5a8087db10cf794205936add7cfa8ccda207e3aca315be48df SHA512 604843e09717c2af0873b2d5a2e242ff1b99122d515b6a7a29e70c55ab605524744359781f5b642059550b4def57877597111914965efe7d3a1a1387c9dbb1a0
|
||||
DIST cuda_12.6.1_560.35.03_linux.run 4345714567 BLAKE2B 147c7f03e0d9ade4c603d93920d0cd6bb1706efc268797ae870b5244feaa8159393015f96e920c6255e93d8040dd5b046075804cfa7c5da18a645800d65b8c3d SHA512 514ec89f847457c3ba78cd0dc22c25aebf2a19a6bbd5a8d071f31519d1007889cde6ba888a01596434216a8a88bfba21059cdc8e3fa9397133c93d2a9f0c015e
|
||||
DIST cuda_12.6.3_560.35.05_linux.run 4446722669 BLAKE2B 9ff67a3fca58af6fcb259a5b114b3babd842290d0ba5d7761ea30d8c7b33d293f86d32f19c252d12bb49e0ff10da9bf62f3c34cc87f0589bab0e134575852bba SHA512 a93d9d812d3a3f5823622e2274d1d6dbe17a298b33463fdf9f6d211d38766eab76608f9d545e312b2be2b86b3c59fcd92c37c54b38b0e8206191563d00546d62
|
||||
DIST cuda_12.6.3_560.35.05_linux_sbsa.run 3760696924 BLAKE2B 06d2ce57911fd73dd64db8bb864b85f0f52a1f21382ac79e681cf4e55302ae57b700cf7a0943fee9924ff6024f056021acec50e3d90c9ee853c0d61121686603 SHA512 ad20647c8dd72937ba74c31c6e04b75d717c16a851972ba2da78cfe11453586702b28a1383f589e4c67825588c29924f87abae9cde964c41a59cf5fe43e7c632
|
||||
DIST cuda_12.8.0_570.86.10_linux.run 5412604598 BLAKE2B 21ea184fd428ea638934788847e023213c38c1079d489d04bbd1ca277d1c285d57a7ac9c02020cbd73970e703daeec9e806831cf54a427cff90fc036c4da7705 SHA512 7939552d38c39b184946df455233eb9ffe91051656b3091b0414b2acc2939bc35dd92724b584e507976c3b4cd51f489abee2e2d0da27bfebaf8999c3f2c2bb2e
|
||||
DIST cuda_12.8.0_570.86.10_linux_sbsa.run 4636253689 BLAKE2B 53df0ee05a9563bf9db1b813a75d4a81c391cf67c24bc0b9fadf74809ebf1534cbf5762317e2f04e4e7482adf97612d8d3f16d78146abe715a9dc4b8654a1bbf SHA512 bcd91a914d09e72a2f2320d9912a3928a491c8d7062f65d027bc172630944bc0fc319ef2ded10e3c4ade564cf2a4f9a166698dca1d493632ee7ef7ff5d7f1ad5
|
||||
|
||||
@@ -0,0 +1,380 @@
|
||||
# Copyright 1999-2025 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
# shellcheck disable=SC2317
|
||||
|
||||
EAPI=8
|
||||
|
||||
PYTHON_COMPAT=( python3_{10..13} )
|
||||
inherit check-reqs toolchain-funcs
|
||||
inherit python-r1
|
||||
|
||||
DRIVER_PV="560.35.05"
|
||||
GCC_MAX_VER="13"
|
||||
CLANG_MAX_VER="18"
|
||||
|
||||
DESCRIPTION="NVIDIA CUDA Toolkit (compiler and friends)"
|
||||
HOMEPAGE="https://developer.nvidia.com/cuda-zone"
|
||||
SRC_URI="
|
||||
amd64? (
|
||||
https://developer.download.nvidia.com/compute/cuda/${PV}/local_installers/cuda_${PV}_${DRIVER_PV}_linux.run
|
||||
)
|
||||
arm64? (
|
||||
https://developer.download.nvidia.com/compute/cuda/${PV}/local_installers/cuda_${PV}_${DRIVER_PV}_linux_sbsa.run
|
||||
)
|
||||
"
|
||||
S="${WORKDIR}"
|
||||
|
||||
LICENSE="NVIDIA-CUDA"
|
||||
|
||||
SLOT="0/${PV}" # UNSLOTTED
|
||||
# SLOT="${PV}" # SLOTTED
|
||||
|
||||
KEYWORDS="-* ~amd64 ~arm64 ~amd64-linux ~arm64-linux"
|
||||
IUSE="debugger examples profiler rdma sanitizer"
|
||||
RESTRICT="bindist mirror strip test"
|
||||
|
||||
REQUIRED_USE="${PYTHON_REQUIRED_USE}"
|
||||
|
||||
# since CUDA 11, the bundled toolkit driver (== ${DRIVER_PV}) and the
|
||||
# actual required minimum driver version are different.
|
||||
RDEPEND="
|
||||
|| (
|
||||
<sys-devel/gcc-$(( GCC_MAX_VER + 1 ))_pre[cxx]
|
||||
<llvm-core/clang-$(( CLANG_MAX_VER + 1 ))_pre
|
||||
)
|
||||
sys-process/numactl
|
||||
debugger? (
|
||||
${PYTHON_DEPS}
|
||||
)
|
||||
examples? (
|
||||
media-libs/freeglut
|
||||
media-libs/glu
|
||||
)
|
||||
rdma? ( sys-cluster/rdma-core )
|
||||
"
|
||||
BDEPEND="
|
||||
$(python_gen_any_dep '
|
||||
dev-python/defusedxml[${PYTHON_USEDEP}]
|
||||
')
|
||||
"
|
||||
|
||||
# CUDA_PATH="/opt/cuda-${PV}" #950207
|
||||
CUDA_PATH="/opt/cuda"
|
||||
QA_PREBUILT="${CUDA_PATH#/}/*"
|
||||
|
||||
python_check_deps() {
|
||||
python_has_version "dev-python/defusedxml[${PYTHON_USEDEP}]"
|
||||
}
|
||||
|
||||
cuda-toolkit_check_reqs() {
|
||||
if use amd64; then
|
||||
export CHECKREQS_DISK_BUILD="4908M"
|
||||
elif use arm64; then
|
||||
export CHECKREQS_DISK_BUILD="4852M"
|
||||
fi
|
||||
|
||||
"check-reqs_pkg_${EBUILD_PHASE}"
|
||||
}
|
||||
|
||||
cuda_verify() {
|
||||
if has_version "sys-apps/grep[pcre]"; then
|
||||
local DRIVER_PV_info
|
||||
DRIVER_PV_info="$(bash "${DISTDIR}/${A}" --info | grep -oP "cuda_${PV}.*run" | cut -d '_' -f 3)"
|
||||
|
||||
if [[ "${DRIVER_PV}" != "${DRIVER_PV_info}" ]]; then
|
||||
die "check DRIVER_PV is ${DRIVER_PV} and should be ${DRIVER_PV_info}"
|
||||
fi
|
||||
fi
|
||||
|
||||
# rest only works in with unpacked sources
|
||||
[[ "${EBUILD_PHASE}" != prepare ]] && return
|
||||
|
||||
# run self checks
|
||||
local compiler_versions GCC_HAS_VER CLANG_HAS_VER
|
||||
compiler_versions="$(
|
||||
grep -oP "unsupported (GNU|clang) version.*(gcc versions later than|clang version must be less than) [0-9]*" \
|
||||
"${S}"/builds/cuda_nvcc/targets/*/include/crt/host_config.h
|
||||
)"
|
||||
|
||||
GCC_HAS_VER="$( echo "${compiler_versions}" | grep gcc | grep -oP "(?<=than )[0-9]*")"
|
||||
if [[ "${GCC_MAX_VER}" -ne "${GCC_HAS_VER}" ]]; then
|
||||
eqawarn "check GCC_MAX_VER is ${GCC_MAX_VER} and should be ${GCC_HAS_VER}"
|
||||
fi
|
||||
|
||||
CLANG_HAS_VER="$(( $(echo "${compiler_versions}" | grep clang | grep -oP "(?<=than )[0-9]*") - 1 ))"
|
||||
if [[ "${CLANG_MAX_VER}" -ne "${CLANG_HAS_VER}" ]]; then
|
||||
eqawarn "check CLANG_MAX_VER is ${CLANG_MAX_VER} and should be ${CLANG_HAS_VER}"
|
||||
fi
|
||||
}
|
||||
|
||||
pkg_pretend() {
|
||||
cuda-toolkit_check_reqs
|
||||
}
|
||||
|
||||
pkg_setup() {
|
||||
cuda-toolkit_check_reqs
|
||||
|
||||
if [[ "${MERGE_TYPE}" == binary ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
# we need python for manifest parsing and to determine the supported python versions for cuda-gdb
|
||||
python_setup
|
||||
|
||||
if use amd64; then
|
||||
narch=x86_64
|
||||
elif use arm64; then
|
||||
narch=sbsa
|
||||
else
|
||||
die "unknown arch ${ARCH}"
|
||||
fi
|
||||
|
||||
export narch
|
||||
}
|
||||
|
||||
src_unpack() {
|
||||
cuda_verify
|
||||
|
||||
local exclude=(
|
||||
"cuda-installer"
|
||||
"*-uninstaller"
|
||||
"NVIDIA-Linux-${narch}-${DRIVER_PV}.run"
|
||||
"builds/cuda_documentation"
|
||||
"builds/cuda_nsight"
|
||||
"builds/cuda_nvvp"
|
||||
"builds/nsight_compute"
|
||||
"builds/nsight_systems"
|
||||
"builds/nvidia_fs"
|
||||
)
|
||||
|
||||
bash "${DISTDIR}/${A}" --tar xf -X <(printf "%s\n" "${exclude[@]}") || die "failed to extract ${A}"
|
||||
}
|
||||
|
||||
src_prepare() {
|
||||
pushd "builds/cuda_nvcc/targets/${narch}-linux" >/dev/null || die
|
||||
eapply -p5 "${FILESDIR}/nvidia-cuda-toolkit-glibc-2.41-r1.patch"
|
||||
popd >/dev/null || die
|
||||
|
||||
default
|
||||
}
|
||||
|
||||
src_configure() {
|
||||
:
|
||||
}
|
||||
|
||||
src_compile() {
|
||||
:
|
||||
}
|
||||
|
||||
src_install() {
|
||||
local -x SKIP_COMPONENTS=(
|
||||
"Kernel_Objects"
|
||||
"Visual_Tools"
|
||||
"Documentation" # obsolete
|
||||
"cuda-gdb-src" # not used
|
||||
)
|
||||
|
||||
! use debugger && SKIP_COMPONENTS+=( "cuda-gdb" )
|
||||
! use examples && SKIP_COMPONENTS+=( "Demo_Suite" )
|
||||
! use profiler && SKIP_COMPONENTS+=( "cuda-cupti" "cuda-profiler-api" "nvprof" )
|
||||
! use sanitizer && SKIP_COMPONENTS+=( "compute-sanitizer" )
|
||||
|
||||
dodir "${CUDA_PATH}"
|
||||
into "${CUDA_PATH}"
|
||||
|
||||
dofile() {
|
||||
debug-print-function "${FUNCNAME[0]}" "$@"
|
||||
|
||||
if [[ $# -ne 1 ]] && [[ $# -ne 2 ]]; then
|
||||
die "${FUNCNAME[0]} must receive one or two arguments"
|
||||
fi
|
||||
|
||||
local _DESTDIR
|
||||
_DESTDIR="$(dirname "${CUDA_PATH}/${1%/}")${2:+/${2%/}}"
|
||||
mkdir -p "${ED}${_DESTDIR}" || die "mkdir ${_DESTDIR} failed"
|
||||
|
||||
local dir
|
||||
dir="$(dirname "${1}")"
|
||||
|
||||
if test -z "$(find "${dir}" -maxdepth 1 -name "$(basename "$1")" -print -quit)"; then
|
||||
if [[ -e "${ED}${_DESTDIR}/$(basename "${1}")" ]]; then
|
||||
return
|
||||
fi
|
||||
if [[ "$1" == "targets/x86_64-linux/lib/stubs/libcusolverMg*" ]] ||
|
||||
[[ "$1" == "targets/x86_64-linux/lib/libcusparse.so.*" ]]; then
|
||||
return
|
||||
fi
|
||||
return
|
||||
fi
|
||||
|
||||
if [[ -e "${ED}${_DESTDIR}/$(basename "${1}")" ]]; then
|
||||
# skip noisy warnings
|
||||
if [[ "$(basename "${1}")" == "include" ]] ||
|
||||
[[ "$(basename "${1}")" == "lib64" ]]; then
|
||||
return
|
||||
fi
|
||||
eqawarn "${ED}${_DESTDIR}/$(basename "${1}") exists"
|
||||
return
|
||||
fi
|
||||
|
||||
eval mv -i "${1}" "${ED}${_DESTDIR}" || die "mv failed ${PWD} / ${1} -> ${ED} ${_DESTDIR}"
|
||||
}
|
||||
|
||||
dopcfile() {
|
||||
[[ $# -eq 0 ]] && return
|
||||
|
||||
dodir "${CUDA_PATH}/pkgconfig"
|
||||
cat > "${ED}${CUDA_PATH}/pkgconfig/${1}-${2}.pc" <<-EOF || die "dopcfile"
|
||||
cudaroot=${EPREFIX}${CUDA_PATH}
|
||||
libdir=\${cudaroot}/targets/${narch}-linux/lib${4}
|
||||
includedir=\${cudaroot}/targets/${narch}-linux/include
|
||||
|
||||
Name: ${1}
|
||||
Description: ${3}
|
||||
Version: ${2}
|
||||
Libs: -L\${libdir} -l${1}
|
||||
Cflags: -I\${includedir}
|
||||
EOF
|
||||
}
|
||||
|
||||
pushd builds >/dev/null || die
|
||||
fix_executable_bit=(
|
||||
cuda_cupti/extras/CUPTI/samples/pc_sampling_utility/pc_sampling_utility_helper.h
|
||||
cuda_cupti/extras/CUPTI/samples/pc_sampling_continuous/libpc_sampling_continuous.pl
|
||||
|
||||
libcufile/gds/tools/run_gdsio.cfg
|
||||
)
|
||||
|
||||
if use amd64; then
|
||||
fix_executable_bit+=(
|
||||
cuda_opencl/targets/*/include/CL/cl.hpp
|
||||
|
||||
libcufile/targets/*/lib/libcufile_rdma_static.a
|
||||
libcufile/targets/*/lib/libcufile_static.a
|
||||
)
|
||||
fi
|
||||
chmod -x "${fix_executable_bit[@]}" || die "failed chmod"
|
||||
popd >/dev/null || die
|
||||
|
||||
ebegin "parsing manifest" "${S}/manifests/cuda_"*.xml # {{{
|
||||
|
||||
"${EPYTHON}" "${FILESDIR}/parse_manifest.py" "${S}/manifests/cuda_"*".xml" &> "${T}/install.sh" \
|
||||
|| die "failed to parse manifest"
|
||||
# shellcheck disable=SC1091
|
||||
source "${T}/install.sh" || die "failed to source install script"
|
||||
|
||||
eend $? # }}}
|
||||
|
||||
if use debugger; then
|
||||
if [[ -d "${ED}/${CUDA_PATH}/extras/Debugger/lib64" ]]; then
|
||||
rmdir "${ED}/${CUDA_PATH}/extras/Debugger/lib64" || die "remove debugger lib64"
|
||||
fi
|
||||
|
||||
find "${ED}/${CUDA_PATH}/bin" -maxdepth 1 -name "cuda-gdb-*-tui" -print0 | while read -rd $'\0' tui_name; do
|
||||
impl="$(basename "${tui_name}" | cut -d '-' -f 3 | tr '.' '_')"
|
||||
|
||||
if ! has "${impl}" "${PYTHON_COMPAT[@]}" || ! use "python_targets_${impl}"; then
|
||||
rm "${tui_name}" || die "tui-name rm ${tui_name}"
|
||||
sed -e "/$(basename "${tui_name}")\"/d" -i "${ED}/${CUDA_PATH}/bin/cuda-gdb" || die "tui_name sed"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
# remove rdma libs (unless USE=rdma)
|
||||
if ! use rdma; then
|
||||
rm "${ED}/${CUDA_PATH}/targets/${narch}-linux/lib/libcufile_rdma"* || die "failed to remove rdma files"
|
||||
fi
|
||||
|
||||
# Add include and lib symlinks
|
||||
dosym "targets/${narch}-linux/include" "${CUDA_PATH}/include"
|
||||
dosym "targets/${narch}-linux/lib" "${CUDA_PATH}/lib64"
|
||||
|
||||
find "${ED}/${CUDA_PATH}" -empty -delete || die
|
||||
|
||||
local ldpathextradirs pathextradirs
|
||||
|
||||
use debugger && ldpathextradirs+=":${EPREFIX}${CUDA_PATH}/extras/Debugger/lib64"
|
||||
use profiler && ldpathextradirs+=":${EPREFIX}${CUDA_PATH}/extras/CUPTI/lib64"
|
||||
|
||||
local revord=$(( 999999 - $(printf "%02d%02d%02d" "$(ver_cut 1)" "$(ver_cut 2)" "$(ver_cut 3)") ))
|
||||
newenvd - "99cuda${revord}" <<-EOF
|
||||
PATH=${EPREFIX}${CUDA_PATH}/bin${pathextradirs}
|
||||
PKG_CONFIG_PATH=${EPREFIX}${CUDA_PATH}/pkgconfig
|
||||
LDPATH=${EPREFIX}${CUDA_PATH}/lib64:${EPREFIX}${CUDA_PATH}/nvvm/lib64${ldpathextradirs}
|
||||
EOF
|
||||
|
||||
# CUDA prepackages libraries, don't revdep-build on them
|
||||
insinto /etc/revdep-rebuild
|
||||
newins - "80${PN}${revord}" <<-EOF
|
||||
SEARCH_DIRS_MASK="${EPREFIX}${CUDA_PATH}"
|
||||
EOF
|
||||
|
||||
# https://bugs.gentoo.org/926116
|
||||
insinto /etc/sandbox.d
|
||||
newins - "80${PN}" <<-EOF
|
||||
SANDBOX_PREDICT="/proc/self/task"
|
||||
EOF
|
||||
|
||||
# TODO drop and replace with runtime detection similar to what python does {{{
|
||||
# ATTENTION: change requires revbump, see link below for supported GCC # versions
|
||||
# https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#system-requirements
|
||||
local cuda_supported_gcc=( 8.5 9.5 10 11 12 13 "${GCC_MAX_VER}" )
|
||||
|
||||
sed \
|
||||
-e "s:CUDA_SUPPORTED_GCC:${cuda_supported_gcc[*]}:g" \
|
||||
"${FILESDIR}"/cuda-config.in > "${ED}/${CUDA_PATH}/bin/cuda-config" || die
|
||||
fperms +x "${CUDA_PATH}/bin/cuda-config"
|
||||
# }}}
|
||||
|
||||
# skip til cudnn has been changed #950207
|
||||
# if [[ "${SLOT}" != "${PV}" ]]; then
|
||||
# dosym "${CUDA_PATH}" "${CUDA_PATH%"-${PV}"}"
|
||||
# fi
|
||||
|
||||
fowners -R root:root "${CUDA_PATH}"
|
||||
}
|
||||
|
||||
pkg_postinst_check() {
|
||||
if tc-is-gcc &&
|
||||
ver_test "$(gcc-major-version)" -gt "${GCC_MAX_VER}"; then
|
||||
ewarn
|
||||
ewarn "gcc > ${GCC_MAX_VER} will not work with CUDA"
|
||||
ewarn
|
||||
ewarn "Append --ccbin= pointing to a gcc bindir to the nvcc compiler flags (NVCCFLAGS)"
|
||||
ewarn "or set NVCC_CCBIN to the same bindir."
|
||||
ewarn " NVCCFLAGS=\"--ccbin=$(eval echo "${EPREFIX}/usr/*-linux-gnu/gcc-bin/${GCC_MAX_VER}")\""
|
||||
ewarn " NVCC_CCBIN=$(eval echo "${EPREFIX}/usr/*-linux-gnu/gcc-bin/${GCC_MAX_VER}")"
|
||||
ewarn
|
||||
fi
|
||||
|
||||
if tc-is-clang &&
|
||||
ver_test "$(clang-major-version)" -gt "${CLANG_MAX_VER}"; then
|
||||
ewarn
|
||||
ewarn "clang > ${CLANG_MAX_VER} will not work with CUDA"
|
||||
ewarn
|
||||
ewarn "Append --ccbin= pointing to a clang bindir to the nvcc compiler flags (NVCCFLAGS)"
|
||||
ewarn "or set NVCC_CCBIN to the same bindir."
|
||||
ewarn " NVCCFLAGS=\"--ccbin=$(eval echo "${EPREFIX}/usr/lib/llvm/*/bin${CLANG_MAX_VER}")\""
|
||||
ewarn " NVCC_CCBIN=$(eval echo "${EPREFIX}/usr/lib/llvm/*/bin${CLANG_MAX_VER}")"
|
||||
ewarn
|
||||
fi
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
if [[ ${MERGE_TYPE} != binary ]]; then
|
||||
pkg_postinst_check
|
||||
fi
|
||||
|
||||
if use profiler; then
|
||||
einfo
|
||||
einfo "nvidia-drivers restricts access to performance counters."
|
||||
einfo "You'll need to run profiling tools (nvprof) "
|
||||
einfo "using sudo (needs cap SYS_ADMIN) or add the following line to "
|
||||
einfo "a modprobe configuration file "
|
||||
einfo "(e.g. /etc/modprobe.d/nvidia-prof.conf): "
|
||||
einfo
|
||||
einfo "options nvidia NVreg_RestrictProfilingToAdminUsers=0"
|
||||
einfo
|
||||
fi
|
||||
}
|
||||
Reference in New Issue
Block a user