Gentoo Archives: gentoo-commits

From: Jeroen Roovers <jer@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: x11-drivers/nvidia-drivers/files/, x11-drivers/nvidia-drivers/
Date: Wed, 29 Apr 2020 08:08:27
Message-Id: 1588147699.613c3dc0e336ee65e262d082084d9a05da84a849.jer@gentoo
1 commit: 613c3dc0e336ee65e262d082084d9a05da84a849
2 Author: Jeroen Roovers <jer <AT> gentoo <DOT> org>
3 AuthorDate: Wed Apr 29 08:07:49 2020 +0000
4 Commit: Jeroen Roovers <jer <AT> gentoo <DOT> org>
5 CommitDate: Wed Apr 29 08:08:19 2020 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=613c3dc0
7
8 x11-drivers/nvidia-drivers: Install systemd service files
9
10 Package-Manager: Portage-2.3.99, Repoman-2.3.22
11 Bug: https://bugs.gentoo.org/689588
12 Signed-off-by: Jeroen Roovers <jer <AT> gentoo.org>
13
14 x11-drivers/nvidia-drivers/files/nvidia-430.conf | 20 +
15 .../nvidia-drivers/nvidia-drivers-430.64-r3.ebuild | 566 ++++++++++++++++++++
16 .../nvidia-drivers/nvidia-drivers-435.21-r3.ebuild | 584 ++++++++++++++++++++
17 .../nvidia-drivers/nvidia-drivers-440.82-r2.ebuild | 590 +++++++++++++++++++++
18 4 files changed, 1760 insertions(+)
19
20 diff --git a/x11-drivers/nvidia-drivers/files/nvidia-430.conf b/x11-drivers/nvidia-drivers/files/nvidia-430.conf
21 new file mode 100644
22 index 00000000000..173513777aa
23 --- /dev/null
24 +++ b/x11-drivers/nvidia-drivers/files/nvidia-430.conf
25 @@ -0,0 +1,20 @@
26 +# Nvidia drivers support
27 +alias char-major-195 nvidia
28 +alias /dev/nvidiactl char-major-195
29 +
30 +# To tweak the driver the following options can be used, note that
31 +# you should be careful, as it could cause instability!! For more
32 +# options see /usr/share/doc/PACKAGE/README
33 +#
34 +# !!! SECURITY WARNING !!!
35 +# DO NOT MODIFY OR REMOVE THE DEVICE FILE RELATED OPTIONS UNLESS YOU KNOW
36 +# WHAT YOU ARE DOING.
37 +# ONLY ADD TRUSTED USERS TO THE VIDEO GROUP, THESE USERS MAY BE ABLE TO CRASH,
38 +# COMPROMISE, OR IRREPARABLY DAMAGE THE MACHINE.
39 +options nvidia \
40 + NVreg_DeviceFileGID=VIDEOGID \
41 + NVreg_DeviceFileMode=432 \
42 + NVreg_DeviceFileUID=0 \
43 + NVreg_ModifyDeviceFiles=1 \
44 + NVreg_PreserveVideoMemoryAllocations=1 \
45 + NVreg_TemporaryFilePath=/tmp
46
47 diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-430.64-r3.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-430.64-r3.ebuild
48 new file mode 100644
49 index 00000000000..1be19616885
50 --- /dev/null
51 +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-430.64-r3.ebuild
52 @@ -0,0 +1,566 @@
53 +# Copyright 1999-2020 Gentoo Authors
54 +# Distributed under the terms of the GNU General Public License v2
55 +
56 +EAPI=7
57 +inherit desktop flag-o-matic linux-info linux-mod multilib-minimal \
58 + nvidia-driver portability systemd toolchain-funcs unpacker udev
59 +
60 +DESCRIPTION="NVIDIA Accelerated Graphics Driver"
61 +HOMEPAGE="https://www.nvidia.com/"
62 +
63 +AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
64 +AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
65 +ARM_NV_PACKAGE="NVIDIA-Linux-armv7l-gnueabihf-${PV}"
66 +
67 +NV_URI="https://us.download.nvidia.com/XFree86/"
68 +SRC_URI="
69 + amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
70 + amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
71 + tools? (
72 + https://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-${PV}.tar.bz2
73 + )
74 +"
75 +
76 +EMULTILIB_PKG="true"
77 +KEYWORDS="-* ~amd64"
78 +LICENSE="GPL-2 NVIDIA-r2"
79 +SLOT="0/${PV%.*}"
80 +
81 +IUSE="acpi compat +driver gtk3 kernel_FreeBSD kernel_linux +kms multilib static-libs +tools uvm wayland +X"
82 +REQUIRED_USE="
83 + tools? ( X )
84 + static-libs? ( tools )
85 +"
86 +
87 +COMMON="
88 + driver? ( kernel_linux? ( acct-group/video ) )
89 + kernel_linux? ( >=sys-libs/glibc-2.6.1 )
90 + tools? (
91 + dev-libs/atk
92 + dev-libs/glib:2
93 + dev-libs/jansson
94 + gtk3? (
95 + x11-libs/gtk+:3
96 + )
97 + x11-libs/cairo
98 + x11-libs/gdk-pixbuf[X]
99 + x11-libs/gtk+:2
100 + x11-libs/libX11
101 + x11-libs/libXext
102 + x11-libs/libXrandr
103 + x11-libs/libXv
104 + x11-libs/libXxf86vm
105 + x11-libs/pango[X]
106 + )
107 + X? (
108 + >=app-eselect/eselect-opengl-1.0.9
109 + app-misc/pax-utils
110 + )
111 +"
112 +DEPEND="
113 + ${COMMON}
114 + kernel_linux? ( virtual/linux-sources )
115 + tools? ( sys-apps/dbus )
116 +"
117 +RDEPEND="
118 + ${COMMON}
119 + acpi? ( sys-power/acpid )
120 + tools? ( !media-video/nvidia-settings )
121 + uvm? ( >=virtual/opencl-3 )
122 + wayland? ( dev-libs/wayland[${MULTILIB_USEDEP}] )
123 + X? (
124 + <x11-base/xorg-server-1.20.99:=
125 + >=x11-libs/libX11-1.6.2[${MULTILIB_USEDEP}]
126 + >=x11-libs/libXext-1.3.2[${MULTILIB_USEDEP}]
127 + >=x11-libs/libvdpau-1.0[${MULTILIB_USEDEP}]
128 + sys-libs/zlib[${MULTILIB_USEDEP}]
129 + )
130 +"
131 +QA_PREBUILT="opt/* usr/lib*"
132 +S=${WORKDIR}/
133 +NV_KV_MAX_PLUS="5.5"
134 +CONFIG_CHECK="!DEBUG_MUTEXES ~!I2C_NVIDIA_GPU ~!LOCKDEP ~MTRR ~SYSVIPC ~ZONE_DMA"
135 +
136 +pkg_pretend() {
137 + nvidia-driver_check
138 +}
139 +
140 +pkg_setup() {
141 + nvidia-driver_check
142 +
143 + # try to turn off distcc and ccache for people that have a problem with it
144 + export DISTCC_DISABLE=1
145 + export CCACHE_DISABLE=1
146 +
147 + if use driver && use kernel_linux; then
148 + MODULE_NAMES="nvidia(video:${S}/kernel)"
149 + use uvm && MODULE_NAMES+=" nvidia-uvm(video:${S}/kernel)"
150 + use kms && MODULE_NAMES+=" nvidia-modeset(video:${S}/kernel) nvidia-drm(video:${S}/kernel)"
151 +
152 + # This needs to run after MODULE_NAMES (so that the eclass checks
153 + # whether the kernel supports loadable modules) but before BUILD_PARAMS
154 + # is set (so that KV_DIR is populated).
155 + linux-mod_pkg_setup
156 +
157 + BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
158 + SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC) NV_VERBOSE=1"
159 +
160 + # linux-mod_src_compile calls set_arch_to_kernel, which
161 + # sets the ARCH to x86 but NVIDIA's wrapping Makefile
162 + # expects x86_64 or i386 and then converts it to x86
163 + # later on in the build process
164 + BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
165 + fi
166 +
167 + if use kernel_linux && kernel_is lt 2 6 9; then
168 + eerror "You must build this against 2.6.9 or higher kernels."
169 + fi
170 +
171 + # set variables to where files are in the package structure
172 + if use kernel_FreeBSD; then
173 + use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
174 + NV_DOC="${S}/doc"
175 + NV_OBJ="${S}/obj"
176 + NV_SRC="${S}/src"
177 + NV_MAN="${S}/x11/man"
178 + NV_X11="${S}/obj"
179 + NV_SOVER=1
180 + elif use kernel_linux; then
181 + NV_DOC="${S}"
182 + NV_OBJ="${S}"
183 + NV_SRC="${S}/kernel"
184 + NV_MAN="${S}"
185 + NV_X11="${S}"
186 + NV_SOVER=${PV}
187 + else
188 + die "Could not determine proper NVIDIA package"
189 + fi
190 +}
191 +
192 +src_configure() {
193 + tc-export AR CC LD
194 +
195 + default
196 +}
197 +
198 +src_prepare() {
199 + local man_file
200 + for man_file in "${NV_MAN}"/*1.gz; do
201 + gunzip $man_file || die
202 + done
203 +
204 + if use tools; then
205 + cp "${FILESDIR}"/nvidia-settings-fno-common.patch "${WORKDIR}" || die
206 + cp "${FILESDIR}"/nvidia-settings-linker.patch "${WORKDIR}" || die
207 + sed -i \
208 + -e "s:@PV@:${PV}:g" \
209 + "${WORKDIR}"/nvidia-settings-fno-common.patch \
210 + "${WORKDIR}"/nvidia-settings-linker.patch \
211 + || die
212 + eapply "${WORKDIR}"/nvidia-settings-fno-common.patch
213 + eapply "${WORKDIR}"/nvidia-settings-linker.patch
214 + fi
215 +
216 + default
217 +
218 + if ! [ -f nvidia_icd.json ]; then
219 + cp nvidia_icd.json.template nvidia_icd.json || die
220 + sed -i -e 's:__NV_VK_ICD__:libGLX_nvidia.so.0:g' nvidia_icd.json || die
221 + fi
222 +}
223 +
224 +src_compile() {
225 + cd "${NV_SRC}"
226 + if use kernel_FreeBSD; then
227 + MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
228 + LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
229 + elif use driver && use kernel_linux; then
230 + BUILD_TARGETS=module linux-mod_src_compile \
231 + KERNELRELEASE="${KV_FULL}" \
232 + src="${KERNEL_DIR}"
233 + fi
234 +
235 + if use tools; then
236 + emake -C "${S}"/nvidia-settings-${PV}/src/libXNVCtrl \
237 + DO_STRIP= \
238 + LIBDIR="$(get_libdir)" \
239 + NVLD="$(tc-getLD)" \
240 + NV_VERBOSE=1 \
241 + OUTPUTDIR=. \
242 + RANLIB="$(tc-getRANLIB)"
243 +
244 + emake -C "${S}"/nvidia-settings-${PV}/src \
245 + DO_STRIP= \
246 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
247 + LIBDIR="$(get_libdir)" \
248 + NVLD="$(tc-getLD)" \
249 + NVML_ENABLED=0 \
250 + NV_USE_BUNDLED_LIBJANSSON=0 \
251 + NV_VERBOSE=1 \
252 + OUTPUTDIR=.
253 + fi
254 +}
255 +
256 +# Install nvidia library:
257 +# the first parameter is the library to install
258 +# the second parameter is the provided soversion
259 +# the third parameter is the target directory if it is not /usr/lib
260 +donvidia() {
261 + # Full path to library
262 + nv_LIB="${1}"
263 +
264 + # SOVER to use
265 + nv_SOVER="$(scanelf -qF'%S#F' ${nv_LIB})"
266 +
267 + # Where to install
268 + nv_DEST="${2}"
269 +
270 + # Get just the library name
271 + nv_LIBNAME=$(basename "${nv_LIB}")
272 +
273 + if [[ "${nv_DEST}" ]]; then
274 + exeinto ${nv_DEST}
275 + action="doexe"
276 + else
277 + nv_DEST="/usr/$(get_libdir)"
278 + action="dolib.so"
279 + fi
280 +
281 + # Install the library
282 + ${action} ${nv_LIB} || die "failed to install ${nv_LIBNAME}"
283 +
284 + # If the library has a SONAME and SONAME does not match the library name,
285 + # then we need to create a symlink
286 + if [[ ${nv_SOVER} ]] && ! [[ "${nv_SOVER}" = "${nv_LIBNAME}" ]]; then
287 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_SOVER}
288 + fi
289 +
290 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_LIBNAME/.so*/.so}
291 +}
292 +
293 +src_install() {
294 + if use driver && use kernel_linux; then
295 + linux-mod_src_install
296 +
297 + # Add the aliases
298 + # This file is tweaked with the appropriate video group in
299 + # pkg_preinst, see bug #491414
300 + insinto /etc/modprobe.d
301 + newins "${FILESDIR}"/nvidia-430.conf nvidia.conf
302 +
303 + if use uvm; then
304 + doins "${FILESDIR}"/nvidia-rmmod.conf
305 + udev_newrules "${FILESDIR}"/nvidia-uvm.udev-rule 99-nvidia-uvm.rules
306 + else
307 + sed -e 's|nvidia-uvm ||g' "${FILESDIR}"/nvidia-rmmod.conf \
308 + > "${T}"/nvidia-rmmod.conf || die
309 + doins "${T}"/nvidia-rmmod.conf
310 + fi
311 +
312 + # Ensures that our device nodes are created when not using X
313 + exeinto "$(get_udevdir)"
314 + newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
315 + udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
316 + elif use kernel_FreeBSD; then
317 + if use x86-fbsd; then
318 + insinto /boot/modules
319 + doins "${S}/src/nvidia.kld"
320 + fi
321 +
322 + exeinto /boot/modules
323 + doexe "${S}/src/nvidia.ko"
324 + fi
325 +
326 + # NVIDIA kernel <-> userspace driver config lib
327 + donvidia ${NV_OBJ}/libnvidia-cfg.so.${NV_SOVER}
328 +
329 + # NVIDIA framebuffer capture library
330 + donvidia ${NV_OBJ}/libnvidia-fbc.so.${NV_SOVER}
331 +
332 + # NVIDIA video encode/decode <-> CUDA
333 + if use kernel_linux; then
334 + donvidia ${NV_OBJ}/libnvcuvid.so.${NV_SOVER}
335 + donvidia ${NV_OBJ}/libnvidia-encode.so.${NV_SOVER}
336 + fi
337 +
338 + if use X; then
339 + # Xorg DDX driver
340 + insinto /usr/$(get_libdir)/xorg/modules/drivers
341 + doins ${NV_X11}/nvidia_drv.so
342 +
343 + # Xorg GLX driver
344 + donvidia ${NV_X11}/libglxserver_nvidia.so.${NV_SOVER} \
345 + /usr/$(get_libdir)/xorg/modules/extensions
346 +
347 + # Xorg nvidia.conf
348 + if has_version '>=x11-base/xorg-server-1.16'; then
349 + insinto /usr/share/X11/xorg.conf.d
350 + newins {,50-}nvidia-drm-outputclass.conf
351 + fi
352 +
353 + insinto /usr/share/glvnd/egl_vendor.d
354 + doins ${NV_X11}/10_nvidia.json
355 + fi
356 +
357 + if use wayland; then
358 + insinto /usr/share/egl/egl_external_platform.d
359 + doins ${NV_X11}/10_nvidia_wayland.json
360 + fi
361 +
362 + # OpenCL ICD for NVIDIA
363 + if use kernel_linux; then
364 + insinto /etc/OpenCL/vendors
365 + doins ${NV_OBJ}/nvidia.icd
366 + fi
367 +
368 + # Helper Apps
369 + exeinto /opt/bin/
370 +
371 + if use X; then
372 + doexe ${NV_OBJ}/nvidia-xconfig
373 +
374 + insinto /etc/vulkan/icd.d
375 + doins nvidia_icd.json
376 + fi
377 +
378 + if use kernel_linux; then
379 + doexe ${NV_OBJ}/nvidia-cuda-mps-control
380 + doexe ${NV_OBJ}/nvidia-cuda-mps-server
381 + doexe ${NV_OBJ}/nvidia-debugdump
382 + doexe ${NV_OBJ}/nvidia-persistenced
383 + doexe ${NV_OBJ}/nvidia-smi
384 +
385 + # install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
386 + doexe ${NV_OBJ}/nvidia-modprobe
387 + fowners root:video /opt/bin/nvidia-modprobe
388 + fperms 4710 /opt/bin/nvidia-modprobe
389 + dosym /{opt,usr}/bin/nvidia-modprobe
390 +
391 + doman nvidia-cuda-mps-control.1
392 + doman nvidia-modprobe.1
393 + doman nvidia-persistenced.1
394 + newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
395 + newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
396 + newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
397 + fi
398 +
399 + if use tools; then
400 + emake -C "${S}"/nvidia-settings-${PV}/src/ \
401 + DESTDIR="${D}" \
402 + DO_STRIP= \
403 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
404 + LIBDIR="${D}/usr/$(get_libdir)" \
405 + NV_USE_BUNDLED_LIBJANSSON=0 \
406 + NV_VERBOSE=1 \
407 + OUTPUTDIR=. \
408 + PREFIX=/usr \
409 + install
410 +
411 + if use static-libs; then
412 + dolib.a "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/libXNVCtrl.a
413 +
414 + insinto /usr/include/NVCtrl
415 + doins "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/*.h
416 + fi
417 +
418 + insinto /usr/share/nvidia/
419 + doins nvidia-application-profiles-${PV}-key-documentation
420 +
421 + insinto /etc/nvidia
422 + newins \
423 + nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
424 +
425 + # There is no icon in the FreeBSD tarball.
426 + use kernel_FreeBSD || \
427 + doicon ${NV_OBJ}/nvidia-settings.png
428 +
429 + domenu "${FILESDIR}"/nvidia-settings.desktop
430 +
431 + exeinto /etc/X11/xinit/xinitrc.d
432 + newexe "${FILESDIR}"/95-nvidia-settings-r1 95-nvidia-settings
433 + fi
434 +
435 + dobin ${NV_OBJ}/nvidia-bug-report.sh
436 +
437 + systemd_dounit *.service
438 + dobin nvidia-sleep.sh
439 +
440 + if has_multilib_profile && use multilib; then
441 + local OABI=${ABI}
442 + for ABI in $(get_install_abis); do
443 + src_install-libs
444 + done
445 + ABI=${OABI}
446 + unset OABI
447 + else
448 + src_install-libs
449 + fi
450 +
451 + is_final_abi || die "failed to iterate through all ABIs"
452 +
453 + # Documentation
454 + if use kernel_FreeBSD; then
455 + dodoc "${NV_DOC}/README"
456 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
457 + use tools && doman "${NV_MAN}"/nvidia-settings.1
458 + else
459 + # Docs
460 + newdoc "${NV_DOC}/README.txt" README
461 + dodoc "${NV_DOC}/NVIDIA_Changelog"
462 + doman "${NV_MAN}"/nvidia-smi.1
463 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
464 + use tools && doman "${NV_MAN}"/nvidia-settings.1
465 + doman "${NV_MAN}"/nvidia-cuda-mps-control.1
466 + fi
467 +
468 + readme.gentoo_create_doc
469 +
470 + docinto html
471 + dodoc -r ${NV_DOC}/html/*
472 +}
473 +
474 +src_install-libs() {
475 + local inslibdir=$(get_libdir)
476 + local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
477 + local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
478 + local nv_libdir="${NV_OBJ}"
479 +
480 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "x86" ]]; then
481 + nv_libdir="${NV_OBJ}"/32
482 + fi
483 +
484 + if use X; then
485 + NV_GLX_LIBRARIES=(
486 + "libEGL.so.$(usex compat ${NV_SOVER} 1.1.0) ${GL_ROOT}"
487 + "libEGL_nvidia.so.${NV_SOVER} ${GL_ROOT}"
488 + "libGL.so.$(usex compat ${NV_SOVER} 1.7.0) ${GL_ROOT}"
489 + "libGLESv1_CM.so.1.2.0 ${GL_ROOT}"
490 + "libGLESv1_CM_nvidia.so.${NV_SOVER} ${GL_ROOT}"
491 + "libGLESv2.so.2.1.0 ${GL_ROOT}"
492 + "libGLESv2_nvidia.so.${NV_SOVER} ${GL_ROOT}"
493 + "libGLX.so.0 ${GL_ROOT}"
494 + "libGLX_nvidia.so.${NV_SOVER} ${GL_ROOT}"
495 + "libGLdispatch.so.0 ${GL_ROOT}"
496 + "libOpenCL.so.1.0.0 ${CL_ROOT}"
497 + "libOpenGL.so.0 ${GL_ROOT}"
498 + "libcuda.so.${NV_SOVER}"
499 + "libnvcuvid.so.${NV_SOVER}"
500 + "libnvidia-compiler.so.${NV_SOVER}"
501 + "libnvidia-eglcore.so.${NV_SOVER}"
502 + "libnvidia-encode.so.${NV_SOVER}"
503 + "libnvidia-fatbinaryloader.so.${NV_SOVER}"
504 + "libnvidia-fbc.so.${NV_SOVER}"
505 + "libnvidia-glcore.so.${NV_SOVER}"
506 + "libnvidia-glsi.so.${NV_SOVER}"
507 + "libnvidia-glvkspirv.so.${NV_SOVER}"
508 + "libnvidia-ifr.so.${NV_SOVER}"
509 + "libnvidia-opencl.so.${NV_SOVER}"
510 + "libnvidia-ptxjitcompiler.so.${NV_SOVER}"
511 + "libvdpau_nvidia.so.${NV_SOVER}"
512 + )
513 +
514 + if use wayland && has_multilib_profile && [[ ${ABI} == "amd64" ]];
515 + then
516 + NV_GLX_LIBRARIES+=(
517 + "libnvidia-egl-wayland.so.1.1.2"
518 + )
519 + fi
520 +
521 + if use kernel_FreeBSD; then
522 + NV_GLX_LIBRARIES+=(
523 + "libnvidia-tls.so.${NV_SOVER}"
524 + )
525 + fi
526 +
527 + if use kernel_linux; then
528 + NV_GLX_LIBRARIES+=(
529 + "libnvidia-ml.so.${NV_SOVER}"
530 + "libnvidia-tls.so.${NV_SOVER}"
531 + )
532 + fi
533 +
534 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "amd64" ]];
535 + then
536 + NV_GLX_LIBRARIES+=(
537 + "libnvidia-cbl.so.${NV_SOVER}"
538 + "libnvidia-rtcore.so.${NV_SOVER}"
539 + "libnvoptix.so.${NV_SOVER}"
540 + )
541 + fi
542 +
543 + for NV_LIB in "${NV_GLX_LIBRARIES[@]}"; do
544 + donvidia "${nv_libdir}"/${NV_LIB}
545 + done
546 + fi
547 +}
548 +
549 +pkg_preinst() {
550 + if use driver && use kernel_linux; then
551 + linux-mod_pkg_preinst
552 +
553 + local videogroup="$(getent group video | cut -d ':' -f 3)"
554 + if [ -z "${videogroup}" ]; then
555 + eerror "Failed to determine the video group gid"
556 + die "Failed to determine the video group gid"
557 + else
558 + sed -i \
559 + -e "s:PACKAGE:${PF}:g" \
560 + -e "s:VIDEOGID:${videogroup}:" \
561 + "${D}"/etc/modprobe.d/nvidia.conf || die
562 + fi
563 + fi
564 +
565 + # Clean the dynamic libGL stuff's home to ensure
566 + # we dont have stale libs floating around
567 + if [ -d "${ROOT}"/usr/lib/opengl/nvidia ]; then
568 + rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
569 + fi
570 + # Make sure we nuke the old nvidia-glx's env.d file
571 + if [ -e "${ROOT}"/etc/env.d/09nvidia ]; then
572 + rm -f "${ROOT}"/etc/env.d/09nvidia
573 + fi
574 +}
575 +
576 +pkg_postinst() {
577 + use driver && use kernel_linux && linux-mod_pkg_postinst
578 +
579 + # Switch to the nvidia implementation
580 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
581 +
582 + readme.gentoo_print_elog
583 +
584 + if ! use X; then
585 + elog "You have elected to not install the X.org driver. Along with"
586 + elog "this the OpenGL libraries and VDPAU libraries were not"
587 + elog "installed. Additionally, once the driver is loaded your card"
588 + elog "and fan will run at max speed which may not be desirable."
589 + elog "Use the 'nvidia-smi' init script to have your card and fan"
590 + elog "speed scale appropriately."
591 + elog
592 + fi
593 + if ! use tools; then
594 + elog "USE=tools controls whether the nvidia-settings application"
595 + elog "is installed. If you would like to use it, enable that"
596 + elog "flag and re-emerge this ebuild. Optionally you can install"
597 + elog "media-video/nvidia-settings"
598 + elog
599 + fi
600 +
601 + elog "To enable nvidia sleep services under systemd, run these commands:"
602 + elog " systemctl enable nvidia-suspend.service"
603 + elog " systemctl enable nvidia-hibernate.service"
604 + elog " systemctl enable nvidia-resume.service"
605 + elog "Set the NVreg_TemporaryFilePath kernel module parameter to a"
606 + elog "suitable path in case the default of /tmp does not work for you"
607 + elog "For more information see:"
608 + elog "${ROOT}/usr/share/doc/${PF}/html/powermanagement.html"
609 +}
610 +
611 +pkg_prerm() {
612 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
613 +}
614 +
615 +pkg_postrm() {
616 + use driver && use kernel_linux && linux-mod_pkg_postrm
617 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
618 +}
619
620 diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-435.21-r3.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-435.21-r3.ebuild
621 new file mode 100644
622 index 00000000000..6f6ad537deb
623 --- /dev/null
624 +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-435.21-r3.ebuild
625 @@ -0,0 +1,584 @@
626 +# Copyright 1999-2020 Gentoo Authors
627 +# Distributed under the terms of the GNU General Public License v2
628 +
629 +EAPI=7
630 +inherit desktop flag-o-matic linux-info linux-mod multilib-minimal \
631 + nvidia-driver portability systemd toolchain-funcs unpacker udev
632 +
633 +DESCRIPTION="NVIDIA Accelerated Graphics Driver"
634 +HOMEPAGE="https://www.nvidia.com/"
635 +
636 +AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
637 +AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
638 +ARM_NV_PACKAGE="NVIDIA-Linux-armv7l-gnueabihf-${PV}"
639 +
640 +NV_URI="https://us.download.nvidia.com/XFree86/"
641 +SRC_URI="
642 + amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
643 + amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
644 + tools? (
645 + https://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-${PV}.tar.bz2
646 + )
647 +"
648 +
649 +EMULTILIB_PKG="true"
650 +KEYWORDS="-* ~amd64"
651 +LICENSE="GPL-2 NVIDIA-r2"
652 +SLOT="0/${PV%.*}"
653 +
654 +IUSE="acpi compat +driver gtk3 kernel_FreeBSD kernel_linux +kms +libglvnd multilib static-libs +tools uvm wayland +X"
655 +REQUIRED_USE="
656 + tools? ( X )
657 + static-libs? ( tools )
658 +"
659 +
660 +COMMON="
661 + driver? ( kernel_linux? ( acct-group/video ) )
662 + kernel_linux? ( >=sys-libs/glibc-2.6.1 )
663 + tools? (
664 + dev-libs/atk
665 + dev-libs/glib:2
666 + dev-libs/jansson
667 + gtk3? (
668 + x11-libs/gtk+:3
669 + )
670 + x11-libs/cairo
671 + x11-libs/gdk-pixbuf[X]
672 + x11-libs/gtk+:2
673 + x11-libs/libX11
674 + x11-libs/libXext
675 + x11-libs/libXrandr
676 + x11-libs/libXv
677 + x11-libs/libXxf86vm
678 + x11-libs/pango[X]
679 + )
680 + X? (
681 + !libglvnd? ( >=app-eselect/eselect-opengl-1.0.9 )
682 + libglvnd? (
683 + media-libs/libglvnd[${MULTILIB_USEDEP}]
684 + !app-eselect/eselect-opengl
685 + )
686 + app-misc/pax-utils
687 + )
688 +"
689 +DEPEND="
690 + ${COMMON}
691 + kernel_linux? ( virtual/linux-sources )
692 + tools? ( sys-apps/dbus )
693 +"
694 +RDEPEND="
695 + ${COMMON}
696 + acpi? ( sys-power/acpid )
697 + tools? ( !media-video/nvidia-settings )
698 + uvm? ( >=virtual/opencl-3 )
699 + wayland? ( dev-libs/wayland[${MULTILIB_USEDEP}] )
700 + X? (
701 + <x11-base/xorg-server-1.20.99:=
702 + >=x11-libs/libX11-1.6.2[${MULTILIB_USEDEP}]
703 + >=x11-libs/libXext-1.3.2[${MULTILIB_USEDEP}]
704 + >=x11-libs/libvdpau-1.0[${MULTILIB_USEDEP}]
705 + sys-libs/zlib[${MULTILIB_USEDEP}]
706 + )
707 +"
708 +QA_PREBUILT="opt/* usr/lib*"
709 +S=${WORKDIR}/
710 +NV_KV_MAX_PLUS="5.4"
711 +CONFIG_CHECK="!DEBUG_MUTEXES ~!I2C_NVIDIA_GPU ~!LOCKDEP ~MTRR ~SYSVIPC ~ZONE_DMA"
712 +
713 +pkg_pretend() {
714 + nvidia-driver_check
715 +}
716 +
717 +pkg_setup() {
718 + nvidia-driver_check
719 +
720 + # try to turn off distcc and ccache for people that have a problem with it
721 + export DISTCC_DISABLE=1
722 + export CCACHE_DISABLE=1
723 +
724 + if use driver && use kernel_linux; then
725 + MODULE_NAMES="nvidia(video:${S}/kernel)"
726 + use uvm && MODULE_NAMES+=" nvidia-uvm(video:${S}/kernel)"
727 + use kms && MODULE_NAMES+=" nvidia-modeset(video:${S}/kernel) nvidia-drm(video:${S}/kernel)"
728 +
729 + # This needs to run after MODULE_NAMES (so that the eclass checks
730 + # whether the kernel supports loadable modules) but before BUILD_PARAMS
731 + # is set (so that KV_DIR is populated).
732 + linux-mod_pkg_setup
733 +
734 + BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
735 + SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC) NV_VERBOSE=1"
736 +
737 + # linux-mod_src_compile calls set_arch_to_kernel, which
738 + # sets the ARCH to x86 but NVIDIA's wrapping Makefile
739 + # expects x86_64 or i386 and then converts it to x86
740 + # later on in the build process
741 + BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
742 + fi
743 +
744 + if use kernel_linux && kernel_is lt 2 6 9; then
745 + eerror "You must build this against 2.6.9 or higher kernels."
746 + fi
747 +
748 + # set variables to where files are in the package structure
749 + if use kernel_FreeBSD; then
750 + use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
751 + NV_DOC="${S}/doc"
752 + NV_OBJ="${S}/obj"
753 + NV_SRC="${S}/src"
754 + NV_MAN="${S}/x11/man"
755 + NV_X11="${S}/obj"
756 + NV_SOVER=1
757 + elif use kernel_linux; then
758 + NV_DOC="${S}"
759 + NV_OBJ="${S}"
760 + NV_SRC="${S}/kernel"
761 + NV_MAN="${S}"
762 + NV_X11="${S}"
763 + NV_SOVER=${PV}
764 + else
765 + die "Could not determine proper NVIDIA package"
766 + fi
767 +}
768 +
769 +src_configure() {
770 + tc-export AR CC LD
771 +
772 + default
773 +}
774 +
775 +src_prepare() {
776 + local man_file
777 + for man_file in "${NV_MAN}"/*1.gz; do
778 + gunzip $man_file || die
779 + done
780 +
781 + if use tools; then
782 + cp "${FILESDIR}"/nvidia-settings-fno-common.patch "${WORKDIR}" || die
783 + cp "${FILESDIR}"/nvidia-settings-linker.patch "${WORKDIR}" || die
784 + sed -i \
785 + -e "s:@PV@:${PV}:g" \
786 + "${WORKDIR}"/nvidia-settings-fno-common.patch \
787 + "${WORKDIR}"/nvidia-settings-linker.patch \
788 + || die
789 + eapply "${WORKDIR}"/nvidia-settings-fno-common.patch
790 + eapply "${WORKDIR}"/nvidia-settings-linker.patch
791 + fi
792 +
793 + default
794 +
795 + if ! [ -f nvidia_icd.json ]; then
796 + cp nvidia_icd.json.template nvidia_icd.json || die
797 + sed -i -e 's:__NV_VK_ICD__:libGLX_nvidia.so.0:g' nvidia_icd.json || die
798 + fi
799 +}
800 +
801 +src_compile() {
802 + cd "${NV_SRC}"
803 + if use kernel_FreeBSD; then
804 + MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
805 + LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
806 + elif use driver && use kernel_linux; then
807 + BUILD_TARGETS=module linux-mod_src_compile \
808 + KERNELRELEASE="${KV_FULL}" \
809 + src="${KERNEL_DIR}"
810 + fi
811 +
812 + if use tools; then
813 + emake -C "${S}"/nvidia-settings-${PV}/src/libXNVCtrl \
814 + DO_STRIP= \
815 + LIBDIR="$(get_libdir)" \
816 + NVLD="$(tc-getLD)" \
817 + NV_VERBOSE=1 \
818 + OUTPUTDIR=. \
819 + RANLIB="$(tc-getRANLIB)"
820 +
821 + emake -C "${S}"/nvidia-settings-${PV}/src \
822 + DO_STRIP= \
823 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
824 + LIBDIR="$(get_libdir)" \
825 + NVLD="$(tc-getLD)" \
826 + NVML_ENABLED=0 \
827 + NV_USE_BUNDLED_LIBJANSSON=0 \
828 + NV_VERBOSE=1 \
829 + OUTPUTDIR=.
830 + fi
831 +}
832 +
833 +# Install nvidia library:
834 +# the first parameter is the library to install
835 +# the second parameter is the provided soversion
836 +# the third parameter is the target directory if it is not /usr/lib
837 +donvidia() {
838 + # Full path to library
839 + nv_LIB="${1}"
840 +
841 + # SOVER to use
842 + nv_SOVER="$(scanelf -qF'%S#F' ${nv_LIB})"
843 +
844 + # Where to install
845 + nv_DEST="${2}"
846 +
847 + # Get just the library name
848 + nv_LIBNAME=$(basename "${nv_LIB}")
849 +
850 + if [[ "${nv_DEST}" ]]; then
851 + exeinto ${nv_DEST}
852 + action="doexe"
853 + else
854 + nv_DEST="/usr/$(get_libdir)"
855 + action="dolib.so"
856 + fi
857 +
858 + # Install the library
859 + ${action} ${nv_LIB} || die "failed to install ${nv_LIBNAME}"
860 +
861 + # If the library has a SONAME and SONAME does not match the library name,
862 + # then we need to create a symlink
863 + if [[ ${nv_SOVER} ]] && ! [[ "${nv_SOVER}" = "${nv_LIBNAME}" ]]; then
864 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_SOVER}
865 + fi
866 +
867 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_LIBNAME/.so*/.so}
868 +}
869 +
870 +src_install() {
871 + if use driver && use kernel_linux; then
872 + linux-mod_src_install
873 +
874 + # Add the aliases
875 + # This file is tweaked with the appropriate video group in
876 + # pkg_preinst, see bug #491414
877 + insinto /etc/modprobe.d
878 + newins "${FILESDIR}"/nvidia-430.conf nvidia.conf
879 +
880 + if use uvm; then
881 + doins "${FILESDIR}"/nvidia-rmmod.conf
882 + udev_newrules "${FILESDIR}"/nvidia-uvm.udev-rule 99-nvidia-uvm.rules
883 + else
884 + sed -e 's|nvidia-uvm ||g' "${FILESDIR}"/nvidia-rmmod.conf \
885 + > "${T}"/nvidia-rmmod.conf || die
886 + doins "${T}"/nvidia-rmmod.conf
887 + fi
888 +
889 + # Ensures that our device nodes are created when not using X
890 + exeinto "$(get_udevdir)"
891 + newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
892 + udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
893 + elif use kernel_FreeBSD; then
894 + if use x86-fbsd; then
895 + insinto /boot/modules
896 + doins "${S}/src/nvidia.kld"
897 + fi
898 +
899 + exeinto /boot/modules
900 + doexe "${S}/src/nvidia.ko"
901 + fi
902 +
903 + # NVIDIA kernel <-> userspace driver config lib
904 + donvidia ${NV_OBJ}/libnvidia-cfg.so.${NV_SOVER}
905 +
906 + # NVIDIA framebuffer capture library
907 + donvidia ${NV_OBJ}/libnvidia-fbc.so.${NV_SOVER}
908 +
909 + # NVIDIA video encode/decode <-> CUDA
910 + if use kernel_linux; then
911 + donvidia ${NV_OBJ}/libnvcuvid.so.${NV_SOVER}
912 + donvidia ${NV_OBJ}/libnvidia-encode.so.${NV_SOVER}
913 + fi
914 +
915 + if use X; then
916 + # Xorg DDX driver
917 + insinto /usr/$(get_libdir)/xorg/modules/drivers
918 + doins ${NV_X11}/nvidia_drv.so
919 +
920 + # Xorg GLX driver
921 + donvidia ${NV_X11}/libglxserver_nvidia.so.${NV_SOVER} \
922 + /usr/$(get_libdir)/xorg/modules/extensions
923 +
924 + # Xorg nvidia.conf
925 + if has_version '>=x11-base/xorg-server-1.16'; then
926 + insinto /usr/share/X11/xorg.conf.d
927 + newins {,50-}nvidia-drm-outputclass.conf
928 + fi
929 +
930 + insinto /usr/share/glvnd/egl_vendor.d
931 + doins ${NV_X11}/10_nvidia.json
932 + fi
933 +
934 + if use wayland; then
935 + insinto /usr/share/egl/egl_external_platform.d
936 + doins ${NV_X11}/10_nvidia_wayland.json
937 + fi
938 +
939 + # OpenCL ICD for NVIDIA
940 + if use kernel_linux; then
941 + insinto /etc/OpenCL/vendors
942 + doins ${NV_OBJ}/nvidia.icd
943 + fi
944 +
945 + # Helper Apps
946 + exeinto /opt/bin/
947 +
948 + if use X; then
949 + doexe ${NV_OBJ}/nvidia-xconfig
950 +
951 + insinto /etc/vulkan/icd.d
952 + doins nvidia_icd.json
953 + fi
954 +
955 + if use kernel_linux; then
956 + doexe ${NV_OBJ}/nvidia-cuda-mps-control
957 + doexe ${NV_OBJ}/nvidia-cuda-mps-server
958 + doexe ${NV_OBJ}/nvidia-debugdump
959 + doexe ${NV_OBJ}/nvidia-persistenced
960 + doexe ${NV_OBJ}/nvidia-smi
961 +
962 + # install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
963 + doexe ${NV_OBJ}/nvidia-modprobe
964 + fowners root:video /opt/bin/nvidia-modprobe
965 + fperms 4710 /opt/bin/nvidia-modprobe
966 + dosym /{opt,usr}/bin/nvidia-modprobe
967 +
968 + doman nvidia-cuda-mps-control.1
969 + doman nvidia-modprobe.1
970 + doman nvidia-persistenced.1
971 + newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
972 + newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
973 + newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
974 + fi
975 +
976 + if use tools; then
977 + emake -C "${S}"/nvidia-settings-${PV}/src/ \
978 + DESTDIR="${D}" \
979 + DO_STRIP= \
980 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
981 + LIBDIR="${D}/usr/$(get_libdir)" \
982 + NV_USE_BUNDLED_LIBJANSSON=0 \
983 + NV_VERBOSE=1 \
984 + OUTPUTDIR=. \
985 + PREFIX=/usr \
986 + install
987 +
988 + if use static-libs; then
989 + dolib.a "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/libXNVCtrl.a
990 +
991 + insinto /usr/include/NVCtrl
992 + doins "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/*.h
993 + fi
994 +
995 + insinto /usr/share/nvidia/
996 + doins nvidia-application-profiles-${PV}-key-documentation
997 +
998 + insinto /etc/nvidia
999 + newins \
1000 + nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
1001 +
1002 + # There is no icon in the FreeBSD tarball.
1003 + use kernel_FreeBSD || \
1004 + doicon ${NV_OBJ}/nvidia-settings.png
1005 +
1006 + domenu "${FILESDIR}"/nvidia-settings.desktop
1007 +
1008 + exeinto /etc/X11/xinit/xinitrc.d
1009 + newexe "${FILESDIR}"/95-nvidia-settings-r1 95-nvidia-settings
1010 + fi
1011 +
1012 + dobin ${NV_OBJ}/nvidia-bug-report.sh
1013 +
1014 + systemd_dounit *.service
1015 + dobin nvidia-sleep.sh
1016 +
1017 + if has_multilib_profile && use multilib; then
1018 + local OABI=${ABI}
1019 + for ABI in $(get_install_abis); do
1020 + src_install-libs
1021 + done
1022 + ABI=${OABI}
1023 + unset OABI
1024 + else
1025 + src_install-libs
1026 + fi
1027 +
1028 + is_final_abi || die "failed to iterate through all ABIs"
1029 +
1030 + # Documentation
1031 + if use kernel_FreeBSD; then
1032 + dodoc "${NV_DOC}/README"
1033 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
1034 + use tools && doman "${NV_MAN}"/nvidia-settings.1
1035 + else
1036 + # Docs
1037 + newdoc "${NV_DOC}/README.txt" README
1038 + dodoc "${NV_DOC}/NVIDIA_Changelog"
1039 + doman "${NV_MAN}"/nvidia-smi.1
1040 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
1041 + use tools && doman "${NV_MAN}"/nvidia-settings.1
1042 + doman "${NV_MAN}"/nvidia-cuda-mps-control.1
1043 + fi
1044 +
1045 + readme.gentoo_create_doc
1046 +
1047 + docinto html
1048 + dodoc -r ${NV_DOC}/html/*
1049 +}
1050 +
1051 +src_install-libs() {
1052 + local inslibdir=$(get_libdir)
1053 + if use libglvnd; then
1054 + local GL_ROOT="/usr/$(get_libdir)"
1055 + else
1056 + local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
1057 + fi
1058 + local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
1059 + local nv_libdir="${NV_OBJ}"
1060 +
1061 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "x86" ]]; then
1062 + nv_libdir="${NV_OBJ}"/32
1063 + fi
1064 +
1065 + if use X; then
1066 + NV_GLX_LIBRARIES=(
1067 + "libEGL_nvidia.so.${NV_SOVER} ${GL_ROOT}"
1068 + "libGLESv1_CM_nvidia.so.${NV_SOVER} ${GL_ROOT}"
1069 + "libGLESv2_nvidia.so.${NV_SOVER} ${GL_ROOT}"
1070 + "libGLX_nvidia.so.${NV_SOVER} ${GL_ROOT}"
1071 + "libOpenCL.so.1.0.0 ${CL_ROOT}"
1072 + "libcuda.so.${NV_SOVER}"
1073 + "libnvcuvid.so.${NV_SOVER}"
1074 + "libnvidia-compiler.so.${NV_SOVER}"
1075 + "libnvidia-eglcore.so.${NV_SOVER}"
1076 + "libnvidia-encode.so.${NV_SOVER}"
1077 + "libnvidia-fatbinaryloader.so.${NV_SOVER}"
1078 + "libnvidia-fbc.so.${NV_SOVER}"
1079 + "libnvidia-glcore.so.${NV_SOVER}"
1080 + "libnvidia-glsi.so.${NV_SOVER}"
1081 + "libnvidia-glvkspirv.so.${NV_SOVER}"
1082 + "libnvidia-ifr.so.${NV_SOVER}"
1083 + "libnvidia-opencl.so.${NV_SOVER}"
1084 + "libnvidia-ptxjitcompiler.so.${NV_SOVER}"
1085 + "libvdpau_nvidia.so.${NV_SOVER}"
1086 + )
1087 + if ! use libglvnd; then
1088 + NV_GLX_LIBRARIES+=(
1089 + "libEGL.so.$( [[ ${ABI} == "amd64" ]] && usex compat ${NV_SOVER} 1.1.0 || echo 1.1.0) ${GL_ROOT}"
1090 + "libGL.so.1.7.0 ${GL_ROOT}"
1091 + "libGLESv1_CM.so.1.2.0 ${GL_ROOT}"
1092 + "libGLESv2.so.2.1.0 ${GL_ROOT}"
1093 + "libGLX.so.0 ${GL_ROOT}"
1094 + "libGLdispatch.so.0 ${GL_ROOT}"
1095 + "libOpenGL.so.0 ${GL_ROOT}"
1096 + )
1097 + fi
1098 +
1099 + if use wayland && has_multilib_profile && [[ ${ABI} == "amd64" ]];
1100 + then
1101 + NV_GLX_LIBRARIES+=(
1102 + "libnvidia-egl-wayland.so.1.1.3"
1103 + )
1104 + fi
1105 +
1106 + if use kernel_FreeBSD; then
1107 + NV_GLX_LIBRARIES+=(
1108 + "libnvidia-tls.so.${NV_SOVER}"
1109 + )
1110 + fi
1111 +
1112 + if use kernel_linux; then
1113 + NV_GLX_LIBRARIES+=(
1114 + "libnvidia-ml.so.${NV_SOVER}"
1115 + "libnvidia-tls.so.${NV_SOVER}"
1116 + )
1117 + fi
1118 +
1119 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "amd64" ]];
1120 + then
1121 + NV_GLX_LIBRARIES+=(
1122 + "libnvidia-cbl.so.${NV_SOVER}"
1123 + "libnvidia-rtcore.so.${NV_SOVER}"
1124 + "libnvoptix.so.${NV_SOVER}"
1125 + )
1126 + fi
1127 +
1128 + for NV_LIB in "${NV_GLX_LIBRARIES[@]}"; do
1129 + donvidia "${nv_libdir}"/${NV_LIB}
1130 + done
1131 + fi
1132 +}
1133 +
1134 +pkg_preinst() {
1135 + if use driver && use kernel_linux; then
1136 + linux-mod_pkg_preinst
1137 +
1138 + local videogroup="$(getent group video | cut -d ':' -f 3)"
1139 + if [ -z "${videogroup}" ]; then
1140 + eerror "Failed to determine the video group gid"
1141 + die "Failed to determine the video group gid"
1142 + else
1143 + sed -i \
1144 + -e "s:PACKAGE:${PF}:g" \
1145 + -e "s:VIDEOGID:${videogroup}:" \
1146 + "${D}"/etc/modprobe.d/nvidia.conf || die
1147 + fi
1148 + fi
1149 +
1150 + # Clean the dynamic libGL stuff's home to ensure
1151 + # we dont have stale libs floating around
1152 + if [ -d "${ROOT}"/usr/lib/opengl/nvidia ]; then
1153 + rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
1154 + fi
1155 + # Make sure we nuke the old nvidia-glx's env.d file
1156 + if [ -e "${ROOT}"/etc/env.d/09nvidia ]; then
1157 + rm -f "${ROOT}"/etc/env.d/09nvidia
1158 + fi
1159 +}
1160 +
1161 +pkg_postinst() {
1162 + use driver && use kernel_linux && linux-mod_pkg_postinst
1163 +
1164 + # Switch to the nvidia implementation
1165 + if ! use libglvnd; then
1166 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
1167 + fi
1168 +
1169 + readme.gentoo_print_elog
1170 +
1171 + if ! use X; then
1172 + elog "You have elected to not install the X.org driver. Along with"
1173 + elog "this the OpenGL libraries and VDPAU libraries were not"
1174 + elog "installed. Additionally, once the driver is loaded your card"
1175 + elog "and fan will run at max speed which may not be desirable."
1176 + elog "Use the 'nvidia-smi' init script to have your card and fan"
1177 + elog "speed scale appropriately."
1178 + elog
1179 + fi
1180 + if ! use tools; then
1181 + elog "USE=tools controls whether the nvidia-settings application"
1182 + elog "is installed. If you would like to use it, enable that"
1183 + elog "flag and re-emerge this ebuild. Optionally you can install"
1184 + elog "media-video/nvidia-settings"
1185 + elog
1186 + fi
1187 +
1188 + elog "To enable nvidia sleep services under systemd, run these commands:"
1189 + elog " systemctl enable nvidia-suspend.service"
1190 + elog " systemctl enable nvidia-hibernate.service"
1191 + elog " systemctl enable nvidia-resume.service"
1192 + elog "Set the NVreg_TemporaryFilePath kernel module parameter to a"
1193 + elog "suitable path in case the default of /tmp does not work for you"
1194 + elog "For more information see:"
1195 + elog "${ROOT}/usr/share/doc/${PF}/html/powermanagement.html"
1196 +}
1197 +
1198 +pkg_prerm() {
1199 + if ! use libglvnd; then
1200 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
1201 + fi
1202 +}
1203 +
1204 +pkg_postrm() {
1205 + use driver && use kernel_linux && linux-mod_pkg_postrm
1206 + if ! use libglvnd; then
1207 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
1208 + fi
1209 +}
1210
1211 diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-440.82-r2.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-440.82-r2.ebuild
1212 new file mode 100644
1213 index 00000000000..f1290ed207f
1214 --- /dev/null
1215 +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-440.82-r2.ebuild
1216 @@ -0,0 +1,590 @@
1217 +# Copyright 1999-2020 Gentoo Authors
1218 +# Distributed under the terms of the GNU General Public License v2
1219 +
1220 +EAPI=7
1221 +inherit desktop flag-o-matic linux-info linux-mod multilib-minimal \
1222 + nvidia-driver portability systemd toolchain-funcs unpacker udev
1223 +
1224 +DESCRIPTION="NVIDIA Accelerated Graphics Driver"
1225 +HOMEPAGE="https://www.nvidia.com/"
1226 +
1227 +AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
1228 +AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
1229 +ARM_NV_PACKAGE="NVIDIA-Linux-armv7l-gnueabihf-${PV}"
1230 +
1231 +NV_URI="https://us.download.nvidia.com/XFree86/"
1232 +SRC_URI="
1233 + amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
1234 + amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
1235 + tools? (
1236 + https://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-${PV}.tar.bz2
1237 + )
1238 +"
1239 +
1240 +EMULTILIB_PKG="true"
1241 +KEYWORDS="-* ~amd64"
1242 +LICENSE="GPL-2 NVIDIA-r2"
1243 +SLOT="0/${PV%.*}"
1244 +
1245 +IUSE="acpi compat +driver gtk3 kernel_FreeBSD kernel_linux +kms +libglvnd multilib static-libs +tools uvm wayland +X"
1246 +REQUIRED_USE="
1247 + tools? ( X )
1248 + static-libs? ( tools )
1249 +"
1250 +
1251 +COMMON="
1252 + driver? ( kernel_linux? ( acct-group/video ) )
1253 + kernel_linux? ( >=sys-libs/glibc-2.6.1 )
1254 + tools? (
1255 + dev-libs/atk
1256 + dev-libs/glib:2
1257 + dev-libs/jansson
1258 + gtk3? (
1259 + x11-libs/gtk+:3
1260 + )
1261 + x11-libs/cairo
1262 + x11-libs/gdk-pixbuf[X]
1263 + x11-libs/gtk+:2
1264 + x11-libs/libX11
1265 + x11-libs/libXext
1266 + x11-libs/libXrandr
1267 + x11-libs/libXv
1268 + x11-libs/libXxf86vm
1269 + x11-libs/pango[X]
1270 + )
1271 + X? (
1272 + !libglvnd? ( >=app-eselect/eselect-opengl-1.0.9 )
1273 + libglvnd? (
1274 + media-libs/libglvnd[${MULTILIB_USEDEP}]
1275 + !app-eselect/eselect-opengl
1276 + )
1277 + app-misc/pax-utils
1278 + )
1279 +"
1280 +DEPEND="
1281 + ${COMMON}
1282 + kernel_linux? ( virtual/linux-sources )
1283 + tools? ( sys-apps/dbus )
1284 +"
1285 +RDEPEND="
1286 + ${COMMON}
1287 + acpi? ( sys-power/acpid )
1288 + tools? ( !media-video/nvidia-settings )
1289 + uvm? ( >=virtual/opencl-3 )
1290 + wayland? ( dev-libs/wayland[${MULTILIB_USEDEP}] )
1291 + X? (
1292 + <x11-base/xorg-server-1.20.99:=
1293 + >=x11-libs/libX11-1.6.2[${MULTILIB_USEDEP}]
1294 + >=x11-libs/libXext-1.3.2[${MULTILIB_USEDEP}]
1295 + >=x11-libs/libvdpau-1.0[${MULTILIB_USEDEP}]
1296 + sys-libs/zlib[${MULTILIB_USEDEP}]
1297 + )
1298 +"
1299 +QA_PREBUILT="opt/* usr/lib*"
1300 +S=${WORKDIR}/
1301 +PATCHES=(
1302 + "${FILESDIR}"/${PN}-440.26-locale.patch
1303 +)
1304 +NV_KV_MAX_PLUS="5.7"
1305 +CONFIG_CHECK="!DEBUG_MUTEXES ~!I2C_NVIDIA_GPU ~!LOCKDEP ~MTRR ~SYSVIPC ~ZONE_DMA"
1306 +
1307 +pkg_pretend() {
1308 + nvidia-driver_check
1309 +}
1310 +
1311 +pkg_setup() {
1312 + nvidia-driver_check
1313 +
1314 + # try to turn off distcc and ccache for people that have a problem with it
1315 + export DISTCC_DISABLE=1
1316 + export CCACHE_DISABLE=1
1317 +
1318 + if use driver && use kernel_linux; then
1319 + MODULE_NAMES="nvidia(video:${S}/kernel)"
1320 + use uvm && MODULE_NAMES+=" nvidia-uvm(video:${S}/kernel)"
1321 + use kms && MODULE_NAMES+=" nvidia-modeset(video:${S}/kernel) nvidia-drm(video:${S}/kernel)"
1322 +
1323 + # This needs to run after MODULE_NAMES (so that the eclass checks
1324 + # whether the kernel supports loadable modules) but before BUILD_PARAMS
1325 + # is set (so that KV_DIR is populated).
1326 + linux-mod_pkg_setup
1327 +
1328 + BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
1329 + SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC) NV_VERBOSE=1"
1330 +
1331 + # linux-mod_src_compile calls set_arch_to_kernel, which
1332 + # sets the ARCH to x86 but NVIDIA's wrapping Makefile
1333 + # expects x86_64 or i386 and then converts it to x86
1334 + # later on in the build process
1335 + BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
1336 + fi
1337 +
1338 + if use kernel_linux && kernel_is lt 2 6 9; then
1339 + eerror "You must build this against 2.6.9 or higher kernels."
1340 + fi
1341 +
1342 + # set variables to where files are in the package structure
1343 + if use kernel_FreeBSD; then
1344 + use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
1345 + NV_DOC="${S}/doc"
1346 + NV_OBJ="${S}/obj"
1347 + NV_SRC="${S}/src"
1348 + NV_MAN="${S}/x11/man"
1349 + NV_X11="${S}/obj"
1350 + NV_SOVER=1
1351 + elif use kernel_linux; then
1352 + NV_DOC="${S}"
1353 + NV_OBJ="${S}"
1354 + NV_SRC="${S}/kernel"
1355 + NV_MAN="${S}"
1356 + NV_X11="${S}"
1357 + NV_SOVER=${PV}
1358 + else
1359 + die "Could not determine proper NVIDIA package"
1360 + fi
1361 +}
1362 +
1363 +src_configure() {
1364 + tc-export AR CC LD
1365 +
1366 + default
1367 +}
1368 +
1369 +src_prepare() {
1370 + local man_file
1371 + for man_file in "${NV_MAN}"/*1.gz; do
1372 + gunzip $man_file || die
1373 + done
1374 +
1375 + if use tools; then
1376 + cp "${FILESDIR}"/nvidia-settings-fno-common.patch "${WORKDIR}" || die
1377 + cp "${FILESDIR}"/nvidia-settings-linker.patch "${WORKDIR}" || die
1378 + sed -i \
1379 + -e "s:@PV@:${PV}:g" \
1380 + "${WORKDIR}"/nvidia-settings-fno-common.patch \
1381 + "${WORKDIR}"/nvidia-settings-linker.patch \
1382 + || die
1383 + eapply "${WORKDIR}"/nvidia-settings-fno-common.patch
1384 + eapply "${WORKDIR}"/nvidia-settings-linker.patch
1385 + fi
1386 +
1387 + default
1388 +
1389 + if ! [ -f nvidia_icd.json ]; then
1390 + cp nvidia_icd.json.template nvidia_icd.json || die
1391 + sed -i -e 's:__NV_VK_ICD__:libGLX_nvidia.so.0:g' nvidia_icd.json || die
1392 + fi
1393 +}
1394 +
1395 +src_compile() {
1396 + cd "${NV_SRC}"
1397 + if use kernel_FreeBSD; then
1398 + MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
1399 + LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
1400 + elif use driver && use kernel_linux; then
1401 + BUILD_TARGETS=module linux-mod_src_compile \
1402 + KERNELRELEASE="${KV_FULL}" \
1403 + src="${KERNEL_DIR}"
1404 + fi
1405 +
1406 + if use tools; then
1407 + emake -C "${S}"/nvidia-settings-${PV}/src/libXNVCtrl \
1408 + DO_STRIP= \
1409 + LIBDIR="$(get_libdir)" \
1410 + NVLD="$(tc-getLD)" \
1411 + NV_VERBOSE=1 \
1412 + OUTPUTDIR=. \
1413 + RANLIB="$(tc-getRANLIB)"
1414 +
1415 + emake -C "${S}"/nvidia-settings-${PV}/src \
1416 + DO_STRIP= \
1417 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
1418 + LIBDIR="$(get_libdir)" \
1419 + NVLD="$(tc-getLD)" \
1420 + NVML_ENABLED=0 \
1421 + NV_USE_BUNDLED_LIBJANSSON=0 \
1422 + NV_VERBOSE=1 \
1423 + OUTPUTDIR=.
1424 + fi
1425 +}
1426 +
1427 +# Install nvidia library:
1428 +# the first parameter is the library to install
1429 +# the second parameter is the provided soversion
1430 +# the third parameter is the target directory if it is not /usr/lib
1431 +donvidia() {
1432 + # Full path to library
1433 + nv_LIB="${1}"
1434 +
1435 + # SOVER to use
1436 + nv_SOVER="$(scanelf -qF'%S#F' ${nv_LIB})"
1437 +
1438 + # Where to install
1439 + nv_DEST="${2}"
1440 +
1441 + # Get just the library name
1442 + nv_LIBNAME=$(basename "${nv_LIB}")
1443 +
1444 + if [[ "${nv_DEST}" ]]; then
1445 + exeinto ${nv_DEST}
1446 + action="doexe"
1447 + else
1448 + nv_DEST="/usr/$(get_libdir)"
1449 + action="dolib.so"
1450 + fi
1451 +
1452 + # Install the library
1453 + ${action} ${nv_LIB} || die "failed to install ${nv_LIBNAME}"
1454 +
1455 + # If the library has a SONAME and SONAME does not match the library name,
1456 + # then we need to create a symlink
1457 + if [[ ${nv_SOVER} ]] && ! [[ "${nv_SOVER}" = "${nv_LIBNAME}" ]]; then
1458 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_SOVER}
1459 + fi
1460 +
1461 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_LIBNAME/.so*/.so}
1462 +}
1463 +
1464 +src_install() {
1465 + if use driver && use kernel_linux; then
1466 + linux-mod_src_install
1467 +
1468 + # Add the aliases
1469 + # This file is tweaked with the appropriate video group in
1470 + # pkg_preinst, see bug #491414
1471 + insinto /etc/modprobe.d
1472 + newins "${FILESDIR}"/nvidia-430.conf nvidia.conf
1473 +
1474 + if use uvm; then
1475 + doins "${FILESDIR}"/nvidia-rmmod.conf
1476 + udev_newrules "${FILESDIR}"/nvidia-uvm.udev-rule 99-nvidia-uvm.rules
1477 + else
1478 + sed -e 's|nvidia-uvm ||g' "${FILESDIR}"/nvidia-rmmod.conf \
1479 + > "${T}"/nvidia-rmmod.conf || die
1480 + doins "${T}"/nvidia-rmmod.conf
1481 + fi
1482 +
1483 + # Ensures that our device nodes are created when not using X
1484 + exeinto "$(get_udevdir)"
1485 + newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
1486 + udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
1487 + elif use kernel_FreeBSD; then
1488 + if use x86-fbsd; then
1489 + insinto /boot/modules
1490 + doins "${S}/src/nvidia.kld"
1491 + fi
1492 +
1493 + exeinto /boot/modules
1494 + doexe "${S}/src/nvidia.ko"
1495 + fi
1496 +
1497 + # NVIDIA kernel <-> userspace driver config lib
1498 + donvidia ${NV_OBJ}/libnvidia-cfg.so.${NV_SOVER}
1499 +
1500 + # NVIDIA framebuffer capture library
1501 + donvidia ${NV_OBJ}/libnvidia-fbc.so.${NV_SOVER}
1502 +
1503 + # NVIDIA video encode/decode <-> CUDA
1504 + if use kernel_linux; then
1505 + donvidia ${NV_OBJ}/libnvcuvid.so.${NV_SOVER}
1506 + donvidia ${NV_OBJ}/libnvidia-encode.so.${NV_SOVER}
1507 + fi
1508 +
1509 + if use X; then
1510 + # Xorg DDX driver
1511 + insinto /usr/$(get_libdir)/xorg/modules/drivers
1512 + doins ${NV_X11}/nvidia_drv.so
1513 +
1514 + # Xorg GLX driver
1515 + donvidia ${NV_X11}/libglxserver_nvidia.so.${NV_SOVER} \
1516 + /usr/$(get_libdir)/xorg/modules/extensions
1517 +
1518 + # Xorg nvidia.conf
1519 + if has_version '>=x11-base/xorg-server-1.16'; then
1520 + insinto /usr/share/X11/xorg.conf.d
1521 + newins {,50-}nvidia-drm-outputclass.conf
1522 + fi
1523 +
1524 + insinto /usr/share/glvnd/egl_vendor.d
1525 + doins ${NV_X11}/10_nvidia.json
1526 + fi
1527 +
1528 + if use wayland; then
1529 + insinto /usr/share/egl/egl_external_platform.d
1530 + doins ${NV_X11}/10_nvidia_wayland.json
1531 + fi
1532 +
1533 + # OpenCL ICD for NVIDIA
1534 + if use kernel_linux; then
1535 + insinto /etc/OpenCL/vendors
1536 + doins ${NV_OBJ}/nvidia.icd
1537 + fi
1538 +
1539 + # Helper Apps
1540 + exeinto /opt/bin/
1541 +
1542 + if use X; then
1543 + doexe ${NV_OBJ}/nvidia-xconfig
1544 +
1545 + insinto /etc/vulkan/icd.d
1546 + doins nvidia_icd.json
1547 +
1548 + insinto /etc/vulkan/implicit_layer.d
1549 + doins nvidia_layers.json
1550 + fi
1551 +
1552 + if use kernel_linux; then
1553 + doexe ${NV_OBJ}/nvidia-cuda-mps-control
1554 + doexe ${NV_OBJ}/nvidia-cuda-mps-server
1555 + doexe ${NV_OBJ}/nvidia-debugdump
1556 + doexe ${NV_OBJ}/nvidia-persistenced
1557 + doexe ${NV_OBJ}/nvidia-smi
1558 +
1559 + # install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
1560 + doexe ${NV_OBJ}/nvidia-modprobe
1561 + fowners root:video /opt/bin/nvidia-modprobe
1562 + fperms 4710 /opt/bin/nvidia-modprobe
1563 + dosym /{opt,usr}/bin/nvidia-modprobe
1564 +
1565 + doman nvidia-cuda-mps-control.1
1566 + doman nvidia-modprobe.1
1567 + doman nvidia-persistenced.1
1568 + newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
1569 + newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
1570 + newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
1571 + fi
1572 +
1573 + if use tools; then
1574 + emake -C "${S}"/nvidia-settings-${PV}/src/ \
1575 + DESTDIR="${D}" \
1576 + DO_STRIP= \
1577 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
1578 + LIBDIR="${D}/usr/$(get_libdir)" \
1579 + NV_USE_BUNDLED_LIBJANSSON=0 \
1580 + NV_VERBOSE=1 \
1581 + OUTPUTDIR=. \
1582 + PREFIX=/usr \
1583 + install
1584 +
1585 + if use static-libs; then
1586 + dolib.a "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/libXNVCtrl.a
1587 +
1588 + insinto /usr/include/NVCtrl
1589 + doins "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/*.h
1590 + fi
1591 +
1592 + insinto /usr/share/nvidia/
1593 + doins nvidia-application-profiles-${PV}-key-documentation
1594 +
1595 + insinto /etc/nvidia
1596 + newins \
1597 + nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
1598 +
1599 + # There is no icon in the FreeBSD tarball.
1600 + use kernel_FreeBSD || \
1601 + doicon ${NV_OBJ}/nvidia-settings.png
1602 +
1603 + domenu "${FILESDIR}"/nvidia-settings.desktop
1604 +
1605 + exeinto /etc/X11/xinit/xinitrc.d
1606 + newexe "${FILESDIR}"/95-nvidia-settings-r1 95-nvidia-settings
1607 + fi
1608 +
1609 + dobin ${NV_OBJ}/nvidia-bug-report.sh
1610 +
1611 + systemd_dounit *.service
1612 + dobin nvidia-sleep.sh
1613 +
1614 + if has_multilib_profile && use multilib; then
1615 + local OABI=${ABI}
1616 + for ABI in $(get_install_abis); do
1617 + src_install-libs
1618 + done
1619 + ABI=${OABI}
1620 + unset OABI
1621 + else
1622 + src_install-libs
1623 + fi
1624 +
1625 + is_final_abi || die "failed to iterate through all ABIs"
1626 +
1627 + # Documentation
1628 + if use kernel_FreeBSD; then
1629 + dodoc "${NV_DOC}/README"
1630 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
1631 + use tools && doman "${NV_MAN}"/nvidia-settings.1
1632 + else
1633 + # Docs
1634 + newdoc "${NV_DOC}/README.txt" README
1635 + dodoc "${NV_DOC}/NVIDIA_Changelog"
1636 + doman "${NV_MAN}"/nvidia-smi.1
1637 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
1638 + use tools && doman "${NV_MAN}"/nvidia-settings.1
1639 + doman "${NV_MAN}"/nvidia-cuda-mps-control.1
1640 + fi
1641 +
1642 + readme.gentoo_create_doc
1643 +
1644 + docinto html
1645 + dodoc -r ${NV_DOC}/html/*
1646 +}
1647 +
1648 +src_install-libs() {
1649 + local inslibdir=$(get_libdir)
1650 + if use libglvnd; then
1651 + local GL_ROOT="/usr/$(get_libdir)"
1652 + else
1653 + local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
1654 + fi
1655 + local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
1656 + local nv_libdir="${NV_OBJ}"
1657 +
1658 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "x86" ]]; then
1659 + nv_libdir="${NV_OBJ}"/32
1660 + fi
1661 +
1662 + if use X; then
1663 + NV_GLX_LIBRARIES=(
1664 + "libEGL_nvidia.so.${NV_SOVER} ${GL_ROOT}"
1665 + "libGLESv1_CM_nvidia.so.${NV_SOVER} ${GL_ROOT}"
1666 + "libGLESv2_nvidia.so.${NV_SOVER} ${GL_ROOT}"
1667 + "libGLX_nvidia.so.${NV_SOVER} ${GL_ROOT}"
1668 + "libOpenCL.so.1.0.0 ${CL_ROOT}"
1669 + "libcuda.so.${NV_SOVER}"
1670 + "libnvcuvid.so.${NV_SOVER}"
1671 + "libnvidia-compiler.so.${NV_SOVER}"
1672 + "libnvidia-eglcore.so.${NV_SOVER}"
1673 + "libnvidia-encode.so.${NV_SOVER}"
1674 + "libnvidia-fatbinaryloader.so.${NV_SOVER}"
1675 + "libnvidia-fbc.so.${NV_SOVER}"
1676 + "libnvidia-glcore.so.${NV_SOVER}"
1677 + "libnvidia-glsi.so.${NV_SOVER}"
1678 + "libnvidia-glvkspirv.so.${NV_SOVER}"
1679 + "libnvidia-ifr.so.${NV_SOVER}"
1680 + "libnvidia-opencl.so.${NV_SOVER}"
1681 + "libnvidia-ptxjitcompiler.so.${NV_SOVER}"
1682 + "libvdpau_nvidia.so.${NV_SOVER}"
1683 + )
1684 + if ! use libglvnd; then
1685 + NV_GLX_LIBRARIES+=(
1686 + "libEGL.so.$( [[ ${ABI} == "amd64" ]] && usex compat ${NV_SOVER} 1.1.0 || echo 1.1.0) ${GL_ROOT}"
1687 + "libGL.so.1.7.0 ${GL_ROOT}"
1688 + "libGLESv1_CM.so.1.2.0 ${GL_ROOT}"
1689 + "libGLESv2.so.2.1.0 ${GL_ROOT}"
1690 + "libGLX.so.0 ${GL_ROOT}"
1691 + "libGLdispatch.so.0 ${GL_ROOT}"
1692 + "libOpenGL.so.0 ${GL_ROOT}"
1693 + )
1694 + fi
1695 +
1696 + if use wayland && has_multilib_profile && [[ ${ABI} == "amd64" ]];
1697 + then
1698 + NV_GLX_LIBRARIES+=(
1699 + "libnvidia-egl-wayland.so.1.1.4"
1700 + )
1701 + fi
1702 +
1703 + if use kernel_FreeBSD; then
1704 + NV_GLX_LIBRARIES+=(
1705 + "libnvidia-tls.so.${NV_SOVER}"
1706 + )
1707 + fi
1708 +
1709 + if use kernel_linux; then
1710 + NV_GLX_LIBRARIES+=(
1711 + "libnvidia-ml.so.${NV_SOVER}"
1712 + "libnvidia-tls.so.${NV_SOVER}"
1713 + )
1714 + fi
1715 +
1716 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "amd64" ]];
1717 + then
1718 + NV_GLX_LIBRARIES+=(
1719 + "libnvidia-cbl.so.${NV_SOVER}"
1720 + "libnvidia-rtcore.so.${NV_SOVER}"
1721 + "libnvoptix.so.${NV_SOVER}"
1722 + )
1723 + fi
1724 +
1725 + for NV_LIB in "${NV_GLX_LIBRARIES[@]}"; do
1726 + donvidia "${nv_libdir}"/${NV_LIB}
1727 + done
1728 + fi
1729 +}
1730 +
1731 +pkg_preinst() {
1732 + if use driver && use kernel_linux; then
1733 + linux-mod_pkg_preinst
1734 +
1735 + local videogroup="$(getent group video | cut -d ':' -f 3)"
1736 + if [ -z "${videogroup}" ]; then
1737 + eerror "Failed to determine the video group gid"
1738 + die "Failed to determine the video group gid"
1739 + else
1740 + sed -i \
1741 + -e "s:PACKAGE:${PF}:g" \
1742 + -e "s:VIDEOGID:${videogroup}:" \
1743 + "${D}"/etc/modprobe.d/nvidia.conf || die
1744 + fi
1745 + fi
1746 +
1747 + # Clean the dynamic libGL stuff's home to ensure
1748 + # we dont have stale libs floating around
1749 + if [ -d "${ROOT}"/usr/lib/opengl/nvidia ]; then
1750 + rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
1751 + fi
1752 + # Make sure we nuke the old nvidia-glx's env.d file
1753 + if [ -e "${ROOT}"/etc/env.d/09nvidia ]; then
1754 + rm -f "${ROOT}"/etc/env.d/09nvidia
1755 + fi
1756 +}
1757 +
1758 +pkg_postinst() {
1759 + use driver && use kernel_linux && linux-mod_pkg_postinst
1760 +
1761 + # Switch to the nvidia implementation
1762 + if ! use libglvnd; then
1763 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
1764 + fi
1765 +
1766 + readme.gentoo_print_elog
1767 +
1768 + if ! use X; then
1769 + elog "You have elected to not install the X.org driver. Along with"
1770 + elog "this the OpenGL libraries and VDPAU libraries were not"
1771 + elog "installed. Additionally, once the driver is loaded your card"
1772 + elog "and fan will run at max speed which may not be desirable."
1773 + elog "Use the 'nvidia-smi' init script to have your card and fan"
1774 + elog "speed scale appropriately."
1775 + elog
1776 + fi
1777 + if ! use tools; then
1778 + elog "USE=tools controls whether the nvidia-settings application"
1779 + elog "is installed. If you would like to use it, enable that"
1780 + elog "flag and re-emerge this ebuild. Optionally you can install"
1781 + elog "media-video/nvidia-settings"
1782 + elog
1783 + fi
1784 +
1785 + elog "To enable nvidia sleep services under systemd, run these commands:"
1786 + elog " systemctl enable nvidia-suspend.service"
1787 + elog " systemctl enable nvidia-hibernate.service"
1788 + elog " systemctl enable nvidia-resume.service"
1789 + elog "Set the NVreg_TemporaryFilePath kernel module parameter to a"
1790 + elog "suitable path in case the default of /tmp does not work for you"
1791 + elog "For more information see:"
1792 + elog "${ROOT}/usr/share/doc/${PF}/html/powermanagement.html"
1793 +}
1794 +
1795 +pkg_prerm() {
1796 + if ! use libglvnd; then
1797 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
1798 + fi
1799 +}
1800 +
1801 +pkg_postrm() {
1802 + use driver && use kernel_linux && linux-mod_pkg_postrm
1803 + if ! use libglvnd; then
1804 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
1805 + fi
1806 +}