Gentoo Archives: gentoo-dev

From: Marek Szuba <marecki@g.o>
To: gentoo-dev@l.g.o
Subject: [gentoo-dev] [PATCH] x11-drivers/nvidia-drivers: migrate to >=virtual-opencl-3
Date: Sun, 19 Apr 2020 20:42:18
Message-Id: 20200419204050.947191-2-marecki@gentoo.org
In Reply to: [gentoo-dev] [PATCH] Have x11-drivers/nvidia-drivers use an ICD loader by Marek Szuba
1 Revbump each driver branch, with the following changes:
2 * drop keywords to ~arch where applicable
3 * do not depend on app-eselect/eselect-opencl
4 * if USE='kernel_linux uvm' [1,2], depend on >=virtual/opencl-3
5 * do not call 'eselect opencl nvidia'
6
7 [1] only USE=kernel_linux for 340.108 due to lack of IUSE=uvm
8 [2] check for kernel_linux because virtual/opencl is not, and now
9 likely never will be, keyworded for FreeBSD
10
11 Closes: https://bugs.gentoo.org/717042
12 Signed-off-by: Marek Szuba <marecki@g.o>
13 ---
14 .../nvidia-drivers-340.108-r1.ebuild | 497 +++++++++++++++
15 .../nvidia-drivers-390.132-r3.ebuild | 582 ++++++++++++++++++
16 .../nvidia-drivers-430.64-r2.ebuild | 553 +++++++++++++++++
17 .../nvidia-drivers-435.21-r2.ebuild | 571 +++++++++++++++++
18 .../nvidia-drivers-440.64-r1.ebuild | 577 +++++++++++++++++
19 .../nvidia-drivers-440.82-r1.ebuild | 577 +++++++++++++++++
20 6 files changed, 3357 insertions(+)
21 create mode 100644 x11-drivers/nvidia-drivers/nvidia-drivers-340.108-r1.ebuild
22 create mode 100644 x11-drivers/nvidia-drivers/nvidia-drivers-390.132-r3.ebuild
23 create mode 100644 x11-drivers/nvidia-drivers/nvidia-drivers-430.64-r2.ebuild
24 create mode 100644 x11-drivers/nvidia-drivers/nvidia-drivers-435.21-r2.ebuild
25 create mode 100644 x11-drivers/nvidia-drivers/nvidia-drivers-440.64-r1.ebuild
26 create mode 100644 x11-drivers/nvidia-drivers/nvidia-drivers-440.82-r1.ebuild
27
28 diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-340.108-r1.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-340.108-r1.ebuild
29 new file mode 100644
30 index 00000000000..63c4692b345
31 --- /dev/null
32 +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-340.108-r1.ebuild
33 @@ -0,0 +1,497 @@
34 +# Copyright 1999-2020 Gentoo Authors
35 +# Distributed under the terms of the GNU General Public License v2
36 +
37 +EAPI=7
38 +inherit desktop flag-o-matic linux-info linux-mod multilib-minimal \
39 + nvidia-driver portability toolchain-funcs unpacker udev
40 +
41 +NV_URI="https://us.download.nvidia.com/XFree86/"
42 +X86_NV_PACKAGE="NVIDIA-Linux-x86-${PV}"
43 +AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
44 +X86_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86-${PV}"
45 +AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
46 +
47 +DESCRIPTION="NVIDIA Accelerated Graphics Driver"
48 +HOMEPAGE="https://www.nvidia.com/"
49 +SRC_URI="
50 + amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
51 + amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
52 + x86-fbsd? ( ${NV_URI}FreeBSD-x86/${PV}/${X86_FBSD_NV_PACKAGE}.tar.gz )
53 + x86? ( ${NV_URI}Linux-x86/${PV}/${X86_NV_PACKAGE}.run )
54 + tools? (
55 + https://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-${PV}.tar.bz2
56 + )
57 +"
58 +
59 +EMULTILIB_PKG="true"
60 +IUSE="acpi multilib kernel_FreeBSD kernel_linux static-libs +tools +X"
61 +KEYWORDS="-* ~amd64 ~x86"
62 +LICENSE="GPL-2 NVIDIA-r2"
63 +SLOT="0/${PV%.*}"
64 +
65 +COMMON="
66 + kernel_linux? (
67 + >=virtual/opencl-3
68 + >=sys-libs/glibc-2.6.1
69 + acct-group/video
70 + )
71 + tools? (
72 + >=x11-libs/gtk+-2.4:2
73 + dev-libs/atk
74 + dev-libs/glib:2
75 + dev-libs/jansson
76 + x11-libs/gdk-pixbuf[X]
77 + x11-libs/libX11
78 + x11-libs/libXext
79 + x11-libs/libXv
80 + x11-libs/pango[X]
81 + )
82 + X? (
83 + >=app-eselect/eselect-opengl-1.0.9
84 + )
85 +"
86 +DEPEND="
87 + ${COMMON}
88 + app-arch/xz-utils
89 + kernel_linux? ( virtual/linux-sources )
90 +"
91 +RDEPEND="
92 + ${COMMON}
93 + acpi? ( sys-power/acpid )
94 + tools? ( !media-video/nvidia-settings )
95 + X? (
96 + <x11-base/xorg-server-1.20.99:=
97 + >=x11-libs/libvdpau-0.3-r1
98 + sys-libs/zlib[${MULTILIB_USEDEP}]
99 + multilib? (
100 + >=x11-libs/libX11-1.6.2[${MULTILIB_USEDEP}]
101 + >=x11-libs/libXext-1.3.2[${MULTILIB_USEDEP}]
102 + )
103 + )
104 +"
105 +REQUIRED_USE="tools? ( X )"
106 +QA_PREBUILT="opt/* usr/lib*"
107 +S=${WORKDIR}/
108 +NV_KV_MAX_PLUS="5.5"
109 +CONFIG_CHECK="!DEBUG_MUTEXES ~!LOCKDEP ~MTRR ~SYSVIPC ~ZONE_DMA"
110 +
111 +pkg_pretend() {
112 + use x86 && CONFIG_CHECK+=" ~HIGHMEM"
113 + nvidia-driver_check
114 +}
115 +
116 +pkg_setup() {
117 + use x86 && CONFIG_CHECK+=" ~HIGHMEM"
118 + nvidia-driver_check
119 +
120 + # try to turn off distcc and ccache for people that have a problem with it
121 + export DISTCC_DISABLE=1
122 + export CCACHE_DISABLE=1
123 +
124 + if use kernel_linux; then
125 + MODULE_NAMES="nvidia(video:${S}/kernel)"
126 +
127 + # This needs to run after MODULE_NAMES (so that the eclass checks
128 + # whether the kernel supports loadable modules) but before BUILD_PARAMS
129 + # is set (so that KV_DIR is populated).
130 + linux-mod_pkg_setup
131 +
132 + BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
133 + SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC)"
134 +
135 + # linux-mod_src_compile calls set_arch_to_kernel, which
136 + # sets the ARCH to x86 but NVIDIA's wrapping Makefile
137 + # expects x86_64 or i386 and then converts it to x86
138 + # later on in the build process
139 + BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
140 + fi
141 +
142 + # set variables to where files are in the package structure
143 + if use kernel_FreeBSD; then
144 + use x86-fbsd && S="${WORKDIR}/${X86_FBSD_NV_PACKAGE}"
145 + use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
146 + NV_DOC="${S}/doc"
147 + NV_OBJ="${S}/obj"
148 + NV_SRC="${S}/src"
149 + NV_MAN="${S}/x11/man"
150 + NV_X11="${S}/obj"
151 + NV_SOVER=1
152 + elif use kernel_linux; then
153 + NV_DOC="${S}"
154 + NV_OBJ="${S}"
155 + NV_SRC="${S}/kernel"
156 + NV_MAN="${S}"
157 + NV_X11="${S}"
158 + NV_SOVER=${PV}
159 + else
160 + die "Could not determine proper NVIDIA package"
161 + fi
162 +}
163 +
164 +src_prepare() {
165 + # Please add a brief description for every added patch
166 +
167 + if use kernel_linux; then
168 + if kernel_is lt 2 6 9 ; then
169 + eerror "You must build this against 2.6.9 or higher kernels."
170 + fi
171 +
172 + # If greater than 2.6.5 use M= instead of SUBDIR=
173 +# convert_to_m "${NV_SRC}"/Makefile.kbuild
174 + fi
175 +
176 + local man_file
177 + for man_file in "${NV_MAN}"/*1.gz; do
178 + gunzip $man_file || die
179 + done
180 +
181 + if use tools; then
182 + cp "${FILESDIR}"/nvidia-settings-fno-common.patch "${WORKDIR}" || die
183 + sed -i \
184 + -e "s:@PV@:${PV}:g" \
185 + "${WORKDIR}"/nvidia-settings-fno-common.patch \
186 + || die
187 + eapply "${WORKDIR}"/nvidia-settings-fno-common.patch
188 + fi
189 +
190 + # Allow user patches so they can support RC kernels and whatever else
191 + eapply_user
192 +}
193 +
194 +src_compile() {
195 + # This is already the default on Linux, as there's no toplevel Makefile, but
196 + # on FreeBSD there's one and triggers the kernel module build, as we install
197 + # it by itself, pass this.
198 +
199 + cd "${NV_SRC}"
200 + if use kernel_FreeBSD; then
201 + MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
202 + LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
203 + elif use kernel_linux; then
204 + BUILD_TARGETS=module linux-mod_src_compile
205 + fi
206 +
207 + if use tools; then
208 + emake -C "${S}"/nvidia-settings-${PV}/src/libXNVCtrl clean
209 + emake -C "${S}"/nvidia-settings-${PV}/src/libXNVCtrl \
210 + AR="$(tc-getAR)" \
211 + CC="$(tc-getCC)" \
212 + RANLIB="$(tc-getRANLIB)" \
213 + libXNVCtrl.a
214 + emake -C "${S}"/nvidia-settings-${PV}/src \
215 + AR="$(tc-getAR)" \
216 + CC="$(tc-getCC)" \
217 + LD="$(tc-getCC)" \
218 + LIBDIR="$(get_libdir)" \
219 + NVML_ENABLED=0 \
220 + NV_USE_BUNDLED_LIBJANSSON=0 \
221 + NV_VERBOSE=1 \
222 + RANLIB="$(tc-getRANLIB)" \
223 + STRIP_CMD=true
224 + fi
225 +}
226 +
227 +# Install nvidia library:
228 +# the first parameter is the library to install
229 +# the second parameter is the provided soversion
230 +# the third parameter is the target directory if its not /usr/lib
231 +donvidia() {
232 + # Full path to library minus SOVER
233 + MY_LIB="$1"
234 +
235 + # SOVER to use
236 + MY_SOVER="$2"
237 +
238 + # Where to install
239 + MY_DEST="$3"
240 +
241 + if [[ -z "${MY_DEST}" ]]; then
242 + MY_DEST="/usr/$(get_libdir)"
243 + action="dolib.so"
244 + else
245 + exeinto ${MY_DEST}
246 + action="doexe"
247 + fi
248 +
249 + # Get just the library name
250 + libname=$(basename $1)
251 +
252 + # Install the library with the correct SOVER
253 + ${action} ${MY_LIB}.${MY_SOVER} || \
254 + die "failed to install ${libname}"
255 +
256 + # If SOVER wasn't 1, then we need to create a .1 symlink
257 + if [[ "${MY_SOVER}" != "1" ]]; then
258 + dosym ${libname}.${MY_SOVER} \
259 + ${MY_DEST}/${libname}.1 || \
260 + die "failed to create ${libname} symlink"
261 + fi
262 +
263 + # Always create the symlink from the raw lib to the .1
264 + dosym ${libname}.1 \
265 + ${MY_DEST}/${libname} || \
266 + die "failed to create ${libname} symlink"
267 +}
268 +
269 +src_install() {
270 + if use kernel_linux; then
271 + linux-mod_src_install
272 +
273 + # Add the aliases
274 + # This file is tweaked with the appropriate video group in
275 + # pkg_preinst, see bug #491414
276 + insinto /etc/modprobe.d
277 + newins "${FILESDIR}"/nvidia-169.07 nvidia.conf
278 +
279 + # Ensures that our device nodes are created when not using X
280 + exeinto "$(get_udevdir)"
281 + newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
282 + udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
283 + elif use kernel_FreeBSD; then
284 + if use x86-fbsd; then
285 + insinto /boot/modules
286 + doins "${S}/src/nvidia.kld"
287 + fi
288 +
289 + exeinto /boot/modules
290 + doexe "${S}/src/nvidia.ko"
291 + fi
292 +
293 + # NVIDIA kernel <-> userspace driver config lib
294 + donvidia "${NV_OBJ}"/libnvidia-cfg.so ${NV_SOVER}
295 +
296 + # NVIDIA framebuffer capture library
297 + donvidia "${NV_OBJ}"/libnvidia-fbc.so ${NV_SOVER}
298 +
299 + # NVIDIA video encode/decode <-> CUDA
300 + if use kernel_linux; then
301 + donvidia "${NV_OBJ}"/libnvcuvid.so ${NV_SOVER}
302 + donvidia "${NV_OBJ}"/libnvidia-encode.so ${NV_SOVER}
303 + fi
304 +
305 + if use X; then
306 + # Xorg DDX driver
307 + insinto /usr/$(get_libdir)/xorg/modules/drivers
308 + doins "${NV_X11}"/nvidia_drv.so
309 +
310 + # Xorg GLX driver
311 + donvidia "${NV_X11}"/libglx.so ${NV_SOVER} \
312 + /usr/$(get_libdir)/opengl/nvidia/extensions
313 + fi
314 +
315 + # OpenCL ICD for NVIDIA
316 + if use kernel_linux; then
317 + insinto /etc/OpenCL/vendors
318 + doins "${NV_OBJ}"/nvidia.icd
319 + fi
320 +
321 + # Helper Apps
322 + exeinto /opt/bin/
323 +
324 + if use X; then
325 + doexe "${NV_OBJ}"/nvidia-xconfig
326 + fi
327 +
328 + if use kernel_linux ; then
329 + doexe "${NV_OBJ}"/nvidia-cuda-mps-control
330 + doexe "${NV_OBJ}"/nvidia-cuda-mps-server
331 + doexe "${NV_OBJ}"/nvidia-debugdump
332 + doexe "${NV_OBJ}"/nvidia-persistenced
333 + doexe "${NV_OBJ}"/nvidia-smi
334 +
335 + # install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
336 + doexe "${NV_OBJ}"/nvidia-modprobe
337 + fowners root:video /opt/bin/nvidia-modprobe
338 + fperms 4710 /opt/bin/nvidia-modprobe
339 + dosym /{opt,usr}/bin/nvidia-modprobe
340 +
341 + doman nvidia-cuda-mps-control.1
342 + doman nvidia-modprobe.1
343 + doman nvidia-persistenced.1
344 + newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
345 + newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
346 + newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
347 + fi
348 +
349 + if use tools; then
350 + emake -C "${S}"/nvidia-settings-${PV}/src/ \
351 + DESTDIR="${D}" \
352 + LIBDIR="${D}/usr/$(get_libdir)" \
353 + PREFIX=/usr \
354 + NV_USE_BUNDLED_LIBJANSSON=0 \
355 + install
356 +
357 + if use static-libs; then
358 + dolib.a "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/libXNVCtrl.a
359 +
360 + insinto /usr/include/NVCtrl
361 + doins "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/*.h
362 + fi
363 +
364 + insinto /usr/share/nvidia/
365 + doins nvidia-application-profiles-${PV}-key-documentation
366 +
367 + insinto /etc/nvidia
368 + newins \
369 + nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
370 +
371 + # There is no icon in the FreeBSD tarball.
372 + use kernel_FreeBSD || \
373 + doicon "${NV_OBJ}"/nvidia-settings.png
374 +
375 + domenu "${FILESDIR}"/nvidia-settings.desktop
376 +
377 + exeinto /etc/X11/xinit/xinitrc.d
378 + newexe "${FILESDIR}"/95-nvidia-settings-r1 95-nvidia-settings
379 +
380 + fi
381 +
382 + dobin "${NV_OBJ}"/nvidia-bug-report.sh
383 +
384 + #doenvd "${FILESDIR}"/50nvidia-prelink-blacklist
385 +
386 + if has_multilib_profile && use multilib ; then
387 + local OABI=${ABI}
388 + for ABI in $(get_install_abis) ; do
389 + src_install-libs
390 + done
391 + ABI=${OABI}
392 + unset OABI
393 + else
394 + src_install-libs
395 + fi
396 +
397 + is_final_abi || die "failed to iterate through all ABIs"
398 +
399 + # Documentation
400 + if use kernel_FreeBSD; then
401 + dodoc "${NV_DOC}"/README
402 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
403 + use tools && doman "${NV_MAN}"/nvidia-settings.1
404 + else
405 + # Docs
406 + newdoc "${NV_DOC}"/README.txt README
407 + dodoc "${NV_DOC}"/NVIDIA_Changelog
408 + doman "${NV_MAN}"/nvidia-smi.1
409 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
410 + use tools && doman "${NV_MAN}"/nvidia-settings.1
411 + doman "${NV_MAN}"/nvidia-cuda-mps-control.1
412 + fi
413 +
414 + readme.gentoo_create_doc
415 +
416 + docinto html
417 + dodoc -r "${NV_DOC}"/html/*
418 +}
419 +
420 +src_install-libs() {
421 + local inslibdir=$(get_libdir)
422 + local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
423 + local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
424 + local nv_libdir="${NV_OBJ}"
425 +
426 + if use kernel_linux && has_multilib_profile && \
427 + [[ ${ABI} == "x86" ]] ; then
428 + nv_libdir="${NV_OBJ}"/32
429 + fi
430 +
431 + if use X; then
432 + # The GLX libraries
433 + donvidia "${nv_libdir}"/libEGL.so ${NV_SOVER} ${GL_ROOT}
434 + donvidia "${nv_libdir}"/libGL.so ${NV_SOVER} ${GL_ROOT}
435 + donvidia "${nv_libdir}"/libGLESv1_CM.so ${NV_SOVER} ${GL_ROOT}
436 + donvidia "${nv_libdir}"/libnvidia-eglcore.so ${NV_SOVER}
437 + donvidia "${nv_libdir}"/libnvidia-glcore.so ${NV_SOVER}
438 + donvidia "${nv_libdir}"/libnvidia-glsi.so ${NV_SOVER}
439 + donvidia "${nv_libdir}"/libnvidia-ifr.so ${NV_SOVER}
440 + if use kernel_FreeBSD; then
441 + donvidia "${nv_libdir}"/libnvidia-tls.so ${NV_SOVER}
442 + else
443 + donvidia "${nv_libdir}"/tls/libnvidia-tls.so ${NV_SOVER}
444 + fi
445 +
446 + # VDPAU
447 + donvidia "${nv_libdir}"/libvdpau_nvidia.so ${NV_SOVER}
448 +
449 + # GLES v2 libraries
450 + insinto ${GL_ROOT}
451 + doexe "${nv_libdir}"/libGLESv2.so.${PV}
452 + dosym libGLESv2.so.${PV} ${GL_ROOT}/libGLESv2.so.2
453 + dosym libGLESv2.so.2 ${GL_ROOT}/libGLESv2.so
454 + fi
455 +
456 + # NVIDIA monitoring library
457 + if use kernel_linux ; then
458 + donvidia "${nv_libdir}"/libnvidia-ml.so ${NV_SOVER}
459 + fi
460 +
461 + # CUDA & OpenCL
462 + if use kernel_linux; then
463 + donvidia "${nv_libdir}"/libcuda.so ${NV_SOVER}
464 + donvidia "${nv_libdir}"/libnvidia-compiler.so ${NV_SOVER}
465 + donvidia "${nv_libdir}"/libOpenCL.so 1.0.0 ${CL_ROOT}
466 + donvidia "${nv_libdir}"/libnvidia-opencl.so ${NV_SOVER}
467 + fi
468 +}
469 +
470 +pkg_preinst() {
471 + if use kernel_linux; then
472 + linux-mod_pkg_preinst
473 +
474 + local videogroup="$(getent group video | cut -d ':' -f 3)"
475 + if [ -z "${videogroup}" ]; then
476 + eerror "Failed to determine the video group gid"
477 + die "Failed to determine the video group gid"
478 + else
479 + sed -i \
480 + -e "s:PACKAGE:${PF}:g" \
481 + -e "s:VIDEOGID:${videogroup}:" \
482 + "${D}"/etc/modprobe.d/nvidia.conf || die
483 + fi
484 + fi
485 +
486 + # Clean the dynamic libGL stuff's home to ensure
487 + # we dont have stale libs floating around
488 + if [ -d "${ROOT}"/usr/lib/opengl/nvidia ] ; then
489 + rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
490 + fi
491 + # Make sure we nuke the old nvidia-glx's env.d file
492 + if [ -e "${ROOT}"/etc/env.d/09nvidia ] ; then
493 + rm -f "${ROOT}"/etc/env.d/09nvidia
494 + fi
495 +}
496 +
497 +pkg_postinst() {
498 + use kernel_linux && linux-mod_pkg_postinst
499 +
500 + # Switch to the nvidia implementation
501 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
502 +
503 + readme.gentoo_print_elog
504 +
505 + if ! use X; then
506 + elog "You have elected to not install the X.org driver. Along with"
507 + elog "this the OpenGL libraries and VDPAU libraries were not"
508 + elog "installed. Additionally, once the driver is loaded your card"
509 + elog "and fan will run at max speed which may not be desirable."
510 + elog "Use the 'nvidia-smi' init script to have your card and fan"
511 + elog "speed scale appropriately."
512 + elog
513 + fi
514 + if ! use tools; then
515 + elog "USE=tools controls whether the nvidia-settings application"
516 + elog "is installed. If you would like to use it, enable that"
517 + elog "flag and re-emerge this ebuild. Optionally you can install"
518 + elog "media-video/nvidia-settings"
519 + elog
520 + fi
521 +}
522 +
523 +pkg_prerm() {
524 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
525 +}
526 +
527 +pkg_postrm() {
528 + use kernel_linux && linux-mod_pkg_postrm
529 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
530 +}
531 diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-390.132-r3.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-390.132-r3.ebuild
532 new file mode 100644
533 index 00000000000..3d333d1db77
534 --- /dev/null
535 +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-390.132-r3.ebuild
536 @@ -0,0 +1,582 @@
537 +# Copyright 1999-2020 Gentoo Authors
538 +# Distributed under the terms of the GNU General Public License v2
539 +
540 +EAPI=7
541 +inherit desktop flag-o-matic linux-info linux-mod multilib-minimal \
542 + nvidia-driver portability toolchain-funcs unpacker udev
543 +
544 +DESCRIPTION="NVIDIA Accelerated Graphics Driver"
545 +HOMEPAGE="https://www.nvidia.com/"
546 +
547 +AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
548 +AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
549 +ARM_NV_PACKAGE="NVIDIA-Linux-armv7l-gnueabihf-${PV}"
550 +X86_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86-${PV}"
551 +X86_NV_PACKAGE="NVIDIA-Linux-x86-${PV}"
552 +
553 +NV_URI="https://us.download.nvidia.com/XFree86/"
554 +SRC_URI="
555 + amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
556 + amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
557 + arm? ( ${NV_URI}Linux-x86-ARM/${PV}/${ARM_NV_PACKAGE}.run )
558 + x86-fbsd? ( ${NV_URI}FreeBSD-x86/${PV}/${X86_FBSD_NV_PACKAGE}.tar.gz )
559 + x86? ( ${NV_URI}Linux-x86/${PV}/${X86_NV_PACKAGE}.run )
560 + tools? (
561 + https://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-${PV}.tar.bz2
562 + )
563 +"
564 +
565 +EMULTILIB_PKG="true"
566 +KEYWORDS="-* ~amd64 ~x86"
567 +LICENSE="GPL-2 NVIDIA-r2"
568 +SLOT="0/${PV%.*}"
569 +
570 +IUSE="acpi compat +driver gtk3 kernel_FreeBSD kernel_linux +kms +libglvnd multilib static-libs +tools uvm wayland +X"
571 +REQUIRED_USE="
572 + tools? ( X )
573 + static-libs? ( tools )
574 +"
575 +
576 +COMMON="
577 + uvm? ( kernel_linux? ( >=virtual/opencl-3 ) )
578 + driver? ( kernel_linux? ( acct-group/video ) )
579 + kernel_linux? ( >=sys-libs/glibc-2.6.1 )
580 + tools? (
581 + dev-libs/atk
582 + dev-libs/glib:2
583 + dev-libs/jansson
584 + gtk3? (
585 + x11-libs/gtk+:3
586 + )
587 + x11-libs/cairo
588 + x11-libs/gdk-pixbuf[X]
589 + x11-libs/gtk+:2
590 + x11-libs/libX11
591 + x11-libs/libXext
592 + x11-libs/libXrandr
593 + x11-libs/libXv
594 + x11-libs/libXxf86vm
595 + x11-libs/pango[X]
596 + )
597 + X? (
598 + !libglvnd? ( >=app-eselect/eselect-opengl-1.0.9 )
599 + libglvnd? (
600 + media-libs/libglvnd[${MULTILIB_USEDEP}]
601 + !app-eselect/eselect-opengl
602 + )
603 + app-misc/pax-utils
604 + )
605 +"
606 +DEPEND="
607 + ${COMMON}
608 + kernel_linux? ( virtual/linux-sources )
609 + tools? ( sys-apps/dbus )
610 +"
611 +RDEPEND="
612 + ${COMMON}
613 + acpi? ( sys-power/acpid )
614 + tools? ( !media-video/nvidia-settings )
615 + wayland? ( dev-libs/wayland[${MULTILIB_USEDEP}] )
616 + X? (
617 + <x11-base/xorg-server-1.20.99:=
618 + >=x11-libs/libX11-1.6.2[${MULTILIB_USEDEP}]
619 + >=x11-libs/libXext-1.3.2[${MULTILIB_USEDEP}]
620 + >=x11-libs/libvdpau-1.0[${MULTILIB_USEDEP}]
621 + sys-libs/zlib[${MULTILIB_USEDEP}]
622 + )
623 +"
624 +QA_PREBUILT="opt/* usr/lib*"
625 +S=${WORKDIR}/
626 +NV_KV_MAX_PLUS="5.5"
627 +CONFIG_CHECK="!DEBUG_MUTEXES ~!LOCKDEP ~MTRR ~SYSVIPC ~ZONE_DMA"
628 +
629 +pkg_pretend() {
630 + use x86 && CONFIG_CHECK+=" ~HIGHMEM"
631 + nvidia-driver_check
632 +}
633 +
634 +pkg_setup() {
635 + use x86 && CONFIG_CHECK+=" ~HIGHMEM"
636 + nvidia-driver_check
637 +
638 + # try to turn off distcc and ccache for people that have a problem with it
639 + export DISTCC_DISABLE=1
640 + export CCACHE_DISABLE=1
641 +
642 + if use driver && use kernel_linux; then
643 + MODULE_NAMES="nvidia(video:${S}/kernel)"
644 + use uvm && MODULE_NAMES+=" nvidia-uvm(video:${S}/kernel)"
645 + use kms && MODULE_NAMES+=" nvidia-modeset(video:${S}/kernel) nvidia-drm(video:${S}/kernel)"
646 +
647 + # This needs to run after MODULE_NAMES (so that the eclass checks
648 + # whether the kernel supports loadable modules) but before BUILD_PARAMS
649 + # is set (so that KV_DIR is populated).
650 + linux-mod_pkg_setup
651 +
652 + BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
653 + SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC) NV_VERBOSE=1"
654 +
655 + # linux-mod_src_compile calls set_arch_to_kernel, which
656 + # sets the ARCH to x86 but NVIDIA's wrapping Makefile
657 + # expects x86_64 or i386 and then converts it to x86
658 + # later on in the build process
659 + BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
660 + fi
661 +
662 + if use kernel_linux && kernel_is lt 2 6 9; then
663 + eerror "You must build this against 2.6.9 or higher kernels."
664 + fi
665 +
666 + # set variables to where files are in the package structure
667 + if use kernel_FreeBSD; then
668 + use x86-fbsd && S="${WORKDIR}/${X86_FBSD_NV_PACKAGE}"
669 + use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
670 + NV_DOC="${S}/doc"
671 + NV_OBJ="${S}/obj"
672 + NV_SRC="${S}/src"
673 + NV_MAN="${S}/x11/man"
674 + NV_X11="${S}/obj"
675 + NV_SOVER=1
676 + elif use kernel_linux; then
677 + NV_DOC="${S}"
678 + NV_OBJ="${S}"
679 + NV_SRC="${S}/kernel"
680 + NV_MAN="${S}"
681 + NV_X11="${S}"
682 + NV_SOVER=${PV}
683 + else
684 + die "Could not determine proper NVIDIA package"
685 + fi
686 +}
687 +
688 +src_prepare() {
689 + local man_file
690 + for man_file in "${NV_MAN}"/*1.gz; do
691 + gunzip $man_file || die
692 + done
693 +
694 + if use tools; then
695 + cp "${FILESDIR}"/nvidia-settings-fno-common.patch "${WORKDIR}" || die
696 + cp "${FILESDIR}"/nvidia-settings-linker.patch "${WORKDIR}" || die
697 + sed -i \
698 + -e "s:@PV@:${PV}:g" \
699 + "${WORKDIR}"/nvidia-settings-fno-common.patch \
700 + "${WORKDIR}"/nvidia-settings-linker.patch \
701 + || die
702 + eapply "${WORKDIR}"/nvidia-settings-fno-common.patch
703 + eapply "${WORKDIR}"/nvidia-settings-linker.patch
704 + fi
705 +
706 + default
707 +
708 + if ! [ -f nvidia_icd.json ]; then
709 + cp nvidia_icd.json.template nvidia_icd.json || die
710 + sed -i -e 's:__NV_VK_ICD__:libGLX_nvidia.so.0:g' nvidia_icd.json || die
711 + fi
712 +}
713 +
714 +src_compile() {
715 + # This is already the default on Linux, as there's no toplevel Makefile, but
716 + # on FreeBSD there's one and triggers the kernel module build, as we install
717 + # it by itself, pass this.
718 +
719 + cd "${NV_SRC}"
720 + if use kernel_FreeBSD; then
721 + MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
722 + LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
723 + elif use driver && use kernel_linux; then
724 + BUILD_TARGETS=module linux-mod_src_compile \
725 + KERNELRELEASE="${KV_FULL}" \
726 + src="${KERNEL_DIR}"
727 + fi
728 +
729 + if use tools; then
730 + emake -C "${S}"/nvidia-settings-${PV}/src \
731 + AR="$(tc-getAR)" \
732 + CC="$(tc-getCC)" \
733 + DO_STRIP= \
734 + LD="$(tc-getCC)" \
735 + LIBDIR="$(get_libdir)" \
736 + NVLD="$(tc-getLD)" \
737 + NV_VERBOSE=1 \
738 + RANLIB="$(tc-getRANLIB)" \
739 + build-xnvctrl
740 +
741 + emake -C "${S}"/nvidia-settings-${PV}/src \
742 + CC="$(tc-getCC)" \
743 + DO_STRIP= \
744 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
745 + LD="$(tc-getCC)" \
746 + LIBDIR="$(get_libdir)" \
747 + NVLD="$(tc-getLD)" \
748 + NVML_ENABLED=0 \
749 + NV_USE_BUNDLED_LIBJANSSON=0 \
750 + NV_VERBOSE=1
751 + fi
752 +}
753 +
754 +# Install nvidia library:
755 +# the first parameter is the library to install
756 +# the second parameter is the provided soversion
757 +# the third parameter is the target directory if it is not /usr/lib
758 +donvidia() {
759 + # Full path to library
760 + nv_LIB="${1}"
761 +
762 + # SOVER to use
763 + nv_SOVER="$(scanelf -qF'%S#F' ${nv_LIB})"
764 +
765 + # Where to install
766 + nv_DEST="${2}"
767 +
768 + # Get just the library name
769 + nv_LIBNAME=$(basename "${nv_LIB}")
770 +
771 + if [[ "${nv_DEST}" ]]; then
772 + exeinto ${nv_DEST}
773 + action="doexe"
774 + else
775 + nv_DEST="/usr/$(get_libdir)"
776 + action="dolib.so"
777 + fi
778 +
779 + # Install the library
780 + ${action} ${nv_LIB} || die "failed to install ${nv_LIBNAME}"
781 +
782 + # If the library has a SONAME and SONAME does not match the library name,
783 + # then we need to create a symlink
784 + if [[ ${nv_SOVER} ]] && ! [[ "${nv_SOVER}" = "${nv_LIBNAME}" ]]; then
785 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_SOVER}
786 + fi
787 +
788 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_LIBNAME/.so*/.so}
789 +}
790 +
791 +src_install() {
792 + if use driver && use kernel_linux; then
793 + linux-mod_src_install
794 +
795 + # Add the aliases
796 + # This file is tweaked with the appropriate video group in
797 + # pkg_preinst, see bug #491414
798 + insinto /etc/modprobe.d
799 + newins "${FILESDIR}"/nvidia-169.07 nvidia.conf
800 + if use uvm; then
801 + doins "${FILESDIR}"/nvidia-rmmod.conf
802 + udev_newrules "${FILESDIR}"/nvidia-uvm.udev-rule 99-nvidia-uvm.rules
803 + else
804 + sed -e 's|nvidia-uvm ||g' "${FILESDIR}"/nvidia-rmmod.conf \
805 + > "${T}"/nvidia-rmmod.conf || die
806 + doins "${T}"/nvidia-rmmod.conf
807 + fi
808 +
809 + # Ensures that our device nodes are created when not using X
810 + exeinto "$(get_udevdir)"
811 + newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
812 + udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
813 + elif use kernel_FreeBSD; then
814 + if use x86-fbsd; then
815 + insinto /boot/modules
816 + doins "${S}/src/nvidia.kld"
817 + fi
818 +
819 + exeinto /boot/modules
820 + doexe "${S}/src/nvidia.ko"
821 + fi
822 +
823 + # NVIDIA kernel <-> userspace driver config lib
824 + donvidia ${NV_OBJ}/libnvidia-cfg.so.${NV_SOVER}
825 +
826 + # NVIDIA framebuffer capture library
827 + donvidia ${NV_OBJ}/libnvidia-fbc.so.${NV_SOVER}
828 +
829 + # NVIDIA video encode/decode <-> CUDA
830 + if use kernel_linux; then
831 + donvidia ${NV_OBJ}/libnvcuvid.so.${NV_SOVER}
832 + donvidia ${NV_OBJ}/libnvidia-encode.so.${NV_SOVER}
833 + fi
834 +
835 + if use X; then
836 + # Xorg DDX driver
837 + insinto /usr/$(get_libdir)/xorg/modules/drivers
838 + doins ${NV_X11}/nvidia_drv.so
839 +
840 + # Xorg GLX driver
841 + if use libglvnd; then
842 + local extensions_dir="/usr/$(get_libdir)/extensions/nvidia"
843 + else
844 + local extensions_dir="/usr/$(get_libdir)/opengl/nvidia/extensions/"
845 + fi
846 + donvidia ${NV_X11}/libglx.so.${NV_SOVER} \
847 + "${extensions_dir}"
848 +
849 + # Xorg nvidia.conf
850 + if has_version '>=x11-base/xorg-server-1.16'; then
851 + insinto /usr/share/X11/xorg.conf.d
852 + newins {,50-}nvidia-drm-outputclass.conf
853 + fi
854 +
855 + insinto /usr/share/glvnd/egl_vendor.d
856 + doins ${NV_X11}/10_nvidia.json
857 + fi
858 +
859 + if use wayland; then
860 + insinto /usr/share/egl/egl_external_platform.d
861 + doins ${NV_X11}/10_nvidia_wayland.json
862 + fi
863 +
864 + # OpenCL ICD for NVIDIA
865 + if use kernel_linux; then
866 + insinto /etc/OpenCL/vendors
867 + doins ${NV_OBJ}/nvidia.icd
868 + fi
869 +
870 + # Helper Apps
871 + exeinto /opt/bin/
872 +
873 + if use X; then
874 + doexe ${NV_OBJ}/nvidia-xconfig
875 +
876 + insinto /etc/vulkan/icd.d
877 + doins nvidia_icd.json
878 + fi
879 +
880 + if use kernel_linux; then
881 + doexe ${NV_OBJ}/nvidia-cuda-mps-control
882 + doexe ${NV_OBJ}/nvidia-cuda-mps-server
883 + doexe ${NV_OBJ}/nvidia-debugdump
884 + doexe ${NV_OBJ}/nvidia-persistenced
885 + doexe ${NV_OBJ}/nvidia-smi
886 +
887 + # install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
888 + doexe ${NV_OBJ}/nvidia-modprobe
889 + fowners root:video /opt/bin/nvidia-modprobe
890 + fperms 4710 /opt/bin/nvidia-modprobe
891 + dosym /{opt,usr}/bin/nvidia-modprobe
892 +
893 + doman nvidia-cuda-mps-control.1
894 + doman nvidia-modprobe.1
895 + doman nvidia-persistenced.1
896 + newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
897 + newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
898 + newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
899 + fi
900 +
901 + if use tools; then
902 + emake -C "${S}"/nvidia-settings-${PV}/src/ \
903 + DESTDIR="${D}" \
904 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
905 + LIBDIR="${D}/usr/$(get_libdir)" \
906 + NV_USE_BUNDLED_LIBJANSSON=0 \
907 + NV_VERBOSE=1 \
908 + PREFIX=/usr \
909 + DO_STRIP= \
910 + install
911 +
912 + if use static-libs; then
913 + dolib.a "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/libXNVCtrl.a
914 +
915 + insinto /usr/include/NVCtrl
916 + doins "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/*.h
917 + fi
918 +
919 + insinto /usr/share/nvidia/
920 + doins nvidia-application-profiles-${PV}-key-documentation
921 +
922 + insinto /etc/nvidia
923 + newins \
924 + nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
925 +
926 + # There is no icon in the FreeBSD tarball.
927 + use kernel_FreeBSD || \
928 + doicon ${NV_OBJ}/nvidia-settings.png
929 +
930 + domenu "${FILESDIR}"/nvidia-settings.desktop
931 +
932 + exeinto /etc/X11/xinit/xinitrc.d
933 + newexe "${FILESDIR}"/95-nvidia-settings-r1 95-nvidia-settings
934 + fi
935 +
936 + dobin ${NV_OBJ}/nvidia-bug-report.sh
937 +
938 + if has_multilib_profile && use multilib; then
939 + local OABI=${ABI}
940 + for ABI in $(get_install_abis); do
941 + src_install-libs
942 + done
943 + ABI=${OABI}
944 + unset OABI
945 + else
946 + src_install-libs
947 + fi
948 +
949 + is_final_abi || die "failed to iterate through all ABIs"
950 +
951 + # Documentation
952 + if use kernel_FreeBSD; then
953 + dodoc "${NV_DOC}/README"
954 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
955 + use tools && doman "${NV_MAN}"/nvidia-settings.1
956 + else
957 + # Docs
958 + newdoc "${NV_DOC}/README.txt" README
959 + dodoc "${NV_DOC}/NVIDIA_Changelog"
960 + doman "${NV_MAN}"/nvidia-smi.1
961 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
962 + use tools && doman "${NV_MAN}"/nvidia-settings.1
963 + doman "${NV_MAN}"/nvidia-cuda-mps-control.1
964 + fi
965 +
966 + readme.gentoo_create_doc
967 +
968 + docinto html
969 + dodoc -r ${NV_DOC}/html/*
970 +}
971 +
972 +src_install-libs() {
973 + local inslibdir=$(get_libdir)
974 + if use libglvnd; then
975 + local GL_ROOT="/usr/$(get_libdir)"
976 + else
977 + local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
978 + fi
979 + local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
980 + local nv_libdir="${NV_OBJ}"
981 +
982 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "x86" ]]; then
983 + nv_libdir="${NV_OBJ}"/32
984 + fi
985 +
986 + if use X; then
987 + NV_GLX_LIBRARIES=(
988 + "libEGL_nvidia.so.${NV_SOVER} ${GL_ROOT}"
989 + "libGLESv1_CM_nvidia.so.${NV_SOVER} ${GL_ROOT}"
990 + "libGLESv2_nvidia.so.${NV_SOVER} ${GL_ROOT}"
991 + "libGLX_nvidia.so.${NV_SOVER} ${GL_ROOT}"
992 + "libOpenCL.so.1.0.0 ${CL_ROOT}"
993 + "libcuda.so.${NV_SOVER}"
994 + "libnvcuvid.so.${NV_SOVER}"
995 + "libnvidia-compiler.so.${NV_SOVER}"
996 + "libnvidia-eglcore.so.${NV_SOVER}"
997 + "libnvidia-encode.so.${NV_SOVER}"
998 + "libnvidia-fatbinaryloader.so.${NV_SOVER}"
999 + "libnvidia-fbc.so.${NV_SOVER}"
1000 + "libnvidia-glcore.so.${NV_SOVER}"
1001 + "libnvidia-glsi.so.${NV_SOVER}"
1002 + "libnvidia-ifr.so.${NV_SOVER}"
1003 + "libnvidia-opencl.so.${NV_SOVER}"
1004 + "libnvidia-ptxjitcompiler.so.${NV_SOVER}"
1005 + "libvdpau_nvidia.so.${NV_SOVER}"
1006 + )
1007 + if ! use libglvnd; then
1008 + NV_GLX_LIBRARIES+=(
1009 + "libEGL.so.$(usex compat ${NV_SOVER} 1.1.0) ${GL_ROOT}"
1010 + "libGL.so.$(usex compat ${NV_SOVER} 1.7.0) ${GL_ROOT}"
1011 + "libGLESv1_CM.so.1.2.0 ${GL_ROOT}"
1012 + "libGLESv2.so.2.1.0 ${GL_ROOT}"
1013 + "libGLX.so.0 ${GL_ROOT}"
1014 + "libGLdispatch.so.0 ${GL_ROOT}"
1015 + "libOpenGL.so.0 ${GL_ROOT}"
1016 + )
1017 + fi
1018 +
1019 + if use wayland && has_multilib_profile && [[ ${ABI} == "amd64" ]];
1020 + then
1021 + NV_GLX_LIBRARIES+=(
1022 + "libnvidia-egl-wayland.so.1.0.2"
1023 + )
1024 + fi
1025 +
1026 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "amd64" ]];
1027 + then
1028 + NV_GLX_LIBRARIES+=(
1029 + "libnvidia-wfb.so.${NV_SOVER}"
1030 + )
1031 + fi
1032 +
1033 + if use kernel_FreeBSD; then
1034 + NV_GLX_LIBRARIES+=(
1035 + "libnvidia-tls.so.${NV_SOVER}"
1036 + )
1037 + fi
1038 +
1039 + if use kernel_linux; then
1040 + NV_GLX_LIBRARIES+=(
1041 + "libnvidia-ml.so.${NV_SOVER}"
1042 + "tls/libnvidia-tls.so.${NV_SOVER}"
1043 + )
1044 + fi
1045 +
1046 + for NV_LIB in "${NV_GLX_LIBRARIES[@]}"; do
1047 + donvidia "${nv_libdir}"/${NV_LIB}
1048 + done
1049 + fi
1050 +}
1051 +
1052 +pkg_preinst() {
1053 + if use driver && use kernel_linux; then
1054 + linux-mod_pkg_preinst
1055 +
1056 + local videogroup="$(getent group video | cut -d ':' -f 3)"
1057 + if [ -z "${videogroup}" ]; then
1058 + eerror "Failed to determine the video group gid"
1059 + die "Failed to determine the video group gid"
1060 + else
1061 + sed -i \
1062 + -e "s:PACKAGE:${PF}:g" \
1063 + -e "s:VIDEOGID:${videogroup}:" \
1064 + "${D}"/etc/modprobe.d/nvidia.conf || die
1065 + fi
1066 + fi
1067 +
1068 + # Clean the dynamic libGL stuff's home to ensure
1069 + # we dont have stale libs floating around
1070 + if [ -d "${ROOT}"/usr/lib/opengl/nvidia ]; then
1071 + rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
1072 + fi
1073 + # Make sure we nuke the old nvidia-glx's env.d file
1074 + if [ -e "${ROOT}"/etc/env.d/09nvidia ]; then
1075 + rm -f "${ROOT}"/etc/env.d/09nvidia
1076 + fi
1077 +}
1078 +
1079 +pkg_postinst() {
1080 + use driver && use kernel_linux && linux-mod_pkg_postinst
1081 +
1082 + # Switch to the nvidia implementation
1083 + if ! use libglvnd; then
1084 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
1085 + fi
1086 +
1087 + readme.gentoo_print_elog
1088 +
1089 + if ! use X; then
1090 + elog "You have elected to not install the X.org driver. Along with"
1091 + elog "this the OpenGL libraries and VDPAU libraries were not"
1092 + elog "installed. Additionally, once the driver is loaded your card"
1093 + elog "and fan will run at max speed which may not be desirable."
1094 + elog "Use the 'nvidia-smi' init script to have your card and fan"
1095 + elog "speed scale appropriately."
1096 + elog
1097 + fi
1098 + if ! use tools; then
1099 + elog "USE=tools controls whether the nvidia-settings application"
1100 + elog "is installed. If you would like to use it, enable that"
1101 + elog "flag and re-emerge this ebuild. Optionally you can install"
1102 + elog "media-video/nvidia-settings"
1103 + elog
1104 + fi
1105 +}
1106 +
1107 +pkg_prerm() {
1108 + if ! use libglvnd; then
1109 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
1110 + fi
1111 +}
1112 +
1113 +pkg_postrm() {
1114 + use driver && use kernel_linux && linux-mod_pkg_postrm
1115 + if ! use libglvnd; then
1116 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
1117 + fi
1118 +}
1119 diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-430.64-r2.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-430.64-r2.ebuild
1120 new file mode 100644
1121 index 00000000000..d6ad0ffbc94
1122 --- /dev/null
1123 +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-430.64-r2.ebuild
1124 @@ -0,0 +1,553 @@
1125 +# Copyright 1999-2020 Gentoo Authors
1126 +# Distributed under the terms of the GNU General Public License v2
1127 +
1128 +EAPI=7
1129 +inherit desktop flag-o-matic linux-info linux-mod multilib-minimal \
1130 + nvidia-driver portability toolchain-funcs unpacker udev
1131 +
1132 +DESCRIPTION="NVIDIA Accelerated Graphics Driver"
1133 +HOMEPAGE="https://www.nvidia.com/"
1134 +
1135 +AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
1136 +AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
1137 +ARM_NV_PACKAGE="NVIDIA-Linux-armv7l-gnueabihf-${PV}"
1138 +
1139 +NV_URI="https://us.download.nvidia.com/XFree86/"
1140 +SRC_URI="
1141 + amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
1142 + amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
1143 + tools? (
1144 + https://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-${PV}.tar.bz2
1145 + )
1146 +"
1147 +
1148 +EMULTILIB_PKG="true"
1149 +KEYWORDS="-* ~amd64"
1150 +LICENSE="GPL-2 NVIDIA-r2"
1151 +SLOT="0/${PV%.*}"
1152 +
1153 +IUSE="acpi compat +driver gtk3 kernel_FreeBSD kernel_linux +kms multilib static-libs +tools uvm wayland +X"
1154 +REQUIRED_USE="
1155 + tools? ( X )
1156 + static-libs? ( tools )
1157 +"
1158 +
1159 +COMMON="
1160 + uvm? ( kernel_linux? ( >=virtual/opencl-3 ) )
1161 + driver? ( kernel_linux? ( acct-group/video ) )
1162 + kernel_linux? ( >=sys-libs/glibc-2.6.1 )
1163 + tools? (
1164 + dev-libs/atk
1165 + dev-libs/glib:2
1166 + dev-libs/jansson
1167 + gtk3? (
1168 + x11-libs/gtk+:3
1169 + )
1170 + x11-libs/cairo
1171 + x11-libs/gdk-pixbuf[X]
1172 + x11-libs/gtk+:2
1173 + x11-libs/libX11
1174 + x11-libs/libXext
1175 + x11-libs/libXrandr
1176 + x11-libs/libXv
1177 + x11-libs/libXxf86vm
1178 + x11-libs/pango[X]
1179 + )
1180 + X? (
1181 + >=app-eselect/eselect-opengl-1.0.9
1182 + app-misc/pax-utils
1183 + )
1184 +"
1185 +DEPEND="
1186 + ${COMMON}
1187 + kernel_linux? ( virtual/linux-sources )
1188 + tools? ( sys-apps/dbus )
1189 +"
1190 +RDEPEND="
1191 + ${COMMON}
1192 + acpi? ( sys-power/acpid )
1193 + tools? ( !media-video/nvidia-settings )
1194 + wayland? ( dev-libs/wayland[${MULTILIB_USEDEP}] )
1195 + X? (
1196 + <x11-base/xorg-server-1.20.99:=
1197 + >=x11-libs/libX11-1.6.2[${MULTILIB_USEDEP}]
1198 + >=x11-libs/libXext-1.3.2[${MULTILIB_USEDEP}]
1199 + >=x11-libs/libvdpau-1.0[${MULTILIB_USEDEP}]
1200 + sys-libs/zlib[${MULTILIB_USEDEP}]
1201 + )
1202 +"
1203 +QA_PREBUILT="opt/* usr/lib*"
1204 +S=${WORKDIR}/
1205 +NV_KV_MAX_PLUS="5.5"
1206 +CONFIG_CHECK="!DEBUG_MUTEXES ~!I2C_NVIDIA_GPU ~!LOCKDEP ~MTRR ~SYSVIPC ~ZONE_DMA"
1207 +
1208 +pkg_pretend() {
1209 + nvidia-driver_check
1210 +}
1211 +
1212 +pkg_setup() {
1213 + nvidia-driver_check
1214 +
1215 + # try to turn off distcc and ccache for people that have a problem with it
1216 + export DISTCC_DISABLE=1
1217 + export CCACHE_DISABLE=1
1218 +
1219 + if use driver && use kernel_linux; then
1220 + MODULE_NAMES="nvidia(video:${S}/kernel)"
1221 + use uvm && MODULE_NAMES+=" nvidia-uvm(video:${S}/kernel)"
1222 + use kms && MODULE_NAMES+=" nvidia-modeset(video:${S}/kernel) nvidia-drm(video:${S}/kernel)"
1223 +
1224 + # This needs to run after MODULE_NAMES (so that the eclass checks
1225 + # whether the kernel supports loadable modules) but before BUILD_PARAMS
1226 + # is set (so that KV_DIR is populated).
1227 + linux-mod_pkg_setup
1228 +
1229 + BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
1230 + SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC) NV_VERBOSE=1"
1231 +
1232 + # linux-mod_src_compile calls set_arch_to_kernel, which
1233 + # sets the ARCH to x86 but NVIDIA's wrapping Makefile
1234 + # expects x86_64 or i386 and then converts it to x86
1235 + # later on in the build process
1236 + BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
1237 + fi
1238 +
1239 + if use kernel_linux && kernel_is lt 2 6 9; then
1240 + eerror "You must build this against 2.6.9 or higher kernels."
1241 + fi
1242 +
1243 + # set variables to where files are in the package structure
1244 + if use kernel_FreeBSD; then
1245 + use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
1246 + NV_DOC="${S}/doc"
1247 + NV_OBJ="${S}/obj"
1248 + NV_SRC="${S}/src"
1249 + NV_MAN="${S}/x11/man"
1250 + NV_X11="${S}/obj"
1251 + NV_SOVER=1
1252 + elif use kernel_linux; then
1253 + NV_DOC="${S}"
1254 + NV_OBJ="${S}"
1255 + NV_SRC="${S}/kernel"
1256 + NV_MAN="${S}"
1257 + NV_X11="${S}"
1258 + NV_SOVER=${PV}
1259 + else
1260 + die "Could not determine proper NVIDIA package"
1261 + fi
1262 +}
1263 +
1264 +src_configure() {
1265 + tc-export AR CC LD
1266 +
1267 + default
1268 +}
1269 +
1270 +src_prepare() {
1271 + local man_file
1272 + for man_file in "${NV_MAN}"/*1.gz; do
1273 + gunzip $man_file || die
1274 + done
1275 +
1276 + if use tools; then
1277 + cp "${FILESDIR}"/nvidia-settings-fno-common.patch "${WORKDIR}" || die
1278 + cp "${FILESDIR}"/nvidia-settings-linker.patch "${WORKDIR}" || die
1279 + sed -i \
1280 + -e "s:@PV@:${PV}:g" \
1281 + "${WORKDIR}"/nvidia-settings-fno-common.patch \
1282 + "${WORKDIR}"/nvidia-settings-linker.patch \
1283 + || die
1284 + eapply "${WORKDIR}"/nvidia-settings-fno-common.patch
1285 + eapply "${WORKDIR}"/nvidia-settings-linker.patch
1286 + fi
1287 +
1288 + default
1289 +
1290 + if ! [ -f nvidia_icd.json ]; then
1291 + cp nvidia_icd.json.template nvidia_icd.json || die
1292 + sed -i -e 's:__NV_VK_ICD__:libGLX_nvidia.so.0:g' nvidia_icd.json || die
1293 + fi
1294 +}
1295 +
1296 +src_compile() {
1297 + cd "${NV_SRC}"
1298 + if use kernel_FreeBSD; then
1299 + MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
1300 + LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
1301 + elif use driver && use kernel_linux; then
1302 + BUILD_TARGETS=module linux-mod_src_compile \
1303 + KERNELRELEASE="${KV_FULL}" \
1304 + src="${KERNEL_DIR}"
1305 + fi
1306 +
1307 + if use tools; then
1308 + emake -C "${S}"/nvidia-settings-${PV}/src/libXNVCtrl \
1309 + DO_STRIP= \
1310 + LIBDIR="$(get_libdir)" \
1311 + NVLD="$(tc-getLD)" \
1312 + NV_VERBOSE=1 \
1313 + OUTPUTDIR=. \
1314 + RANLIB="$(tc-getRANLIB)"
1315 +
1316 + emake -C "${S}"/nvidia-settings-${PV}/src \
1317 + DO_STRIP= \
1318 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
1319 + LIBDIR="$(get_libdir)" \
1320 + NVLD="$(tc-getLD)" \
1321 + NVML_ENABLED=0 \
1322 + NV_USE_BUNDLED_LIBJANSSON=0 \
1323 + NV_VERBOSE=1 \
1324 + OUTPUTDIR=.
1325 + fi
1326 +}
1327 +
1328 +# Install nvidia library:
1329 +# the first parameter is the library to install
1330 +# the second parameter is the provided soversion
1331 +# the third parameter is the target directory if it is not /usr/lib
1332 +donvidia() {
1333 + # Full path to library
1334 + nv_LIB="${1}"
1335 +
1336 + # SOVER to use
1337 + nv_SOVER="$(scanelf -qF'%S#F' ${nv_LIB})"
1338 +
1339 + # Where to install
1340 + nv_DEST="${2}"
1341 +
1342 + # Get just the library name
1343 + nv_LIBNAME=$(basename "${nv_LIB}")
1344 +
1345 + if [[ "${nv_DEST}" ]]; then
1346 + exeinto ${nv_DEST}
1347 + action="doexe"
1348 + else
1349 + nv_DEST="/usr/$(get_libdir)"
1350 + action="dolib.so"
1351 + fi
1352 +
1353 + # Install the library
1354 + ${action} ${nv_LIB} || die "failed to install ${nv_LIBNAME}"
1355 +
1356 + # If the library has a SONAME and SONAME does not match the library name,
1357 + # then we need to create a symlink
1358 + if [[ ${nv_SOVER} ]] && ! [[ "${nv_SOVER}" = "${nv_LIBNAME}" ]]; then
1359 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_SOVER}
1360 + fi
1361 +
1362 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_LIBNAME/.so*/.so}
1363 +}
1364 +
1365 +src_install() {
1366 + if use driver && use kernel_linux; then
1367 + linux-mod_src_install
1368 +
1369 + # Add the aliases
1370 + # This file is tweaked with the appropriate video group in
1371 + # pkg_preinst, see bug #491414
1372 + insinto /etc/modprobe.d
1373 + newins "${FILESDIR}"/nvidia-169.07 nvidia.conf
1374 + if use uvm; then
1375 + doins "${FILESDIR}"/nvidia-rmmod.conf
1376 + udev_newrules "${FILESDIR}"/nvidia-uvm.udev-rule 99-nvidia-uvm.rules
1377 + else
1378 + sed -e 's|nvidia-uvm ||g' "${FILESDIR}"/nvidia-rmmod.conf \
1379 + > "${T}"/nvidia-rmmod.conf || die
1380 + doins "${T}"/nvidia-rmmod.conf
1381 + fi
1382 +
1383 + # Ensures that our device nodes are created when not using X
1384 + exeinto "$(get_udevdir)"
1385 + newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
1386 + udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
1387 + elif use kernel_FreeBSD; then
1388 + if use x86-fbsd; then
1389 + insinto /boot/modules
1390 + doins "${S}/src/nvidia.kld"
1391 + fi
1392 +
1393 + exeinto /boot/modules
1394 + doexe "${S}/src/nvidia.ko"
1395 + fi
1396 +
1397 + # NVIDIA kernel <-> userspace driver config lib
1398 + donvidia ${NV_OBJ}/libnvidia-cfg.so.${NV_SOVER}
1399 +
1400 + # NVIDIA framebuffer capture library
1401 + donvidia ${NV_OBJ}/libnvidia-fbc.so.${NV_SOVER}
1402 +
1403 + # NVIDIA video encode/decode <-> CUDA
1404 + if use kernel_linux; then
1405 + donvidia ${NV_OBJ}/libnvcuvid.so.${NV_SOVER}
1406 + donvidia ${NV_OBJ}/libnvidia-encode.so.${NV_SOVER}
1407 + fi
1408 +
1409 + if use X; then
1410 + # Xorg DDX driver
1411 + insinto /usr/$(get_libdir)/xorg/modules/drivers
1412 + doins ${NV_X11}/nvidia_drv.so
1413 +
1414 + # Xorg GLX driver
1415 + donvidia ${NV_X11}/libglxserver_nvidia.so.${NV_SOVER} \
1416 + /usr/$(get_libdir)/xorg/modules/extensions
1417 +
1418 + # Xorg nvidia.conf
1419 + if has_version '>=x11-base/xorg-server-1.16'; then
1420 + insinto /usr/share/X11/xorg.conf.d
1421 + newins {,50-}nvidia-drm-outputclass.conf
1422 + fi
1423 +
1424 + insinto /usr/share/glvnd/egl_vendor.d
1425 + doins ${NV_X11}/10_nvidia.json
1426 + fi
1427 +
1428 + if use wayland; then
1429 + insinto /usr/share/egl/egl_external_platform.d
1430 + doins ${NV_X11}/10_nvidia_wayland.json
1431 + fi
1432 +
1433 + # OpenCL ICD for NVIDIA
1434 + if use kernel_linux; then
1435 + insinto /etc/OpenCL/vendors
1436 + doins ${NV_OBJ}/nvidia.icd
1437 + fi
1438 +
1439 + # Helper Apps
1440 + exeinto /opt/bin/
1441 +
1442 + if use X; then
1443 + doexe ${NV_OBJ}/nvidia-xconfig
1444 +
1445 + insinto /etc/vulkan/icd.d
1446 + doins nvidia_icd.json
1447 + fi
1448 +
1449 + if use kernel_linux; then
1450 + doexe ${NV_OBJ}/nvidia-cuda-mps-control
1451 + doexe ${NV_OBJ}/nvidia-cuda-mps-server
1452 + doexe ${NV_OBJ}/nvidia-debugdump
1453 + doexe ${NV_OBJ}/nvidia-persistenced
1454 + doexe ${NV_OBJ}/nvidia-smi
1455 +
1456 + # install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
1457 + doexe ${NV_OBJ}/nvidia-modprobe
1458 + fowners root:video /opt/bin/nvidia-modprobe
1459 + fperms 4710 /opt/bin/nvidia-modprobe
1460 + dosym /{opt,usr}/bin/nvidia-modprobe
1461 +
1462 + doman nvidia-cuda-mps-control.1
1463 + doman nvidia-modprobe.1
1464 + doman nvidia-persistenced.1
1465 + newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
1466 + newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
1467 + newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
1468 + fi
1469 +
1470 + if use tools; then
1471 + emake -C "${S}"/nvidia-settings-${PV}/src/ \
1472 + DESTDIR="${D}" \
1473 + DO_STRIP= \
1474 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
1475 + LIBDIR="${D}/usr/$(get_libdir)" \
1476 + NV_USE_BUNDLED_LIBJANSSON=0 \
1477 + NV_VERBOSE=1 \
1478 + OUTPUTDIR=. \
1479 + PREFIX=/usr \
1480 + install
1481 +
1482 + if use static-libs; then
1483 + dolib.a "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/libXNVCtrl.a
1484 +
1485 + insinto /usr/include/NVCtrl
1486 + doins "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/*.h
1487 + fi
1488 +
1489 + insinto /usr/share/nvidia/
1490 + doins nvidia-application-profiles-${PV}-key-documentation
1491 +
1492 + insinto /etc/nvidia
1493 + newins \
1494 + nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
1495 +
1496 + # There is no icon in the FreeBSD tarball.
1497 + use kernel_FreeBSD || \
1498 + doicon ${NV_OBJ}/nvidia-settings.png
1499 +
1500 + domenu "${FILESDIR}"/nvidia-settings.desktop
1501 +
1502 + exeinto /etc/X11/xinit/xinitrc.d
1503 + newexe "${FILESDIR}"/95-nvidia-settings-r1 95-nvidia-settings
1504 + fi
1505 +
1506 + dobin ${NV_OBJ}/nvidia-bug-report.sh
1507 +
1508 + if has_multilib_profile && use multilib; then
1509 + local OABI=${ABI}
1510 + for ABI in $(get_install_abis); do
1511 + src_install-libs
1512 + done
1513 + ABI=${OABI}
1514 + unset OABI
1515 + else
1516 + src_install-libs
1517 + fi
1518 +
1519 + is_final_abi || die "failed to iterate through all ABIs"
1520 +
1521 + # Documentation
1522 + if use kernel_FreeBSD; then
1523 + dodoc "${NV_DOC}/README"
1524 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
1525 + use tools && doman "${NV_MAN}"/nvidia-settings.1
1526 + else
1527 + # Docs
1528 + newdoc "${NV_DOC}/README.txt" README
1529 + dodoc "${NV_DOC}/NVIDIA_Changelog"
1530 + doman "${NV_MAN}"/nvidia-smi.1
1531 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
1532 + use tools && doman "${NV_MAN}"/nvidia-settings.1
1533 + doman "${NV_MAN}"/nvidia-cuda-mps-control.1
1534 + fi
1535 +
1536 + readme.gentoo_create_doc
1537 +
1538 + docinto html
1539 + dodoc -r ${NV_DOC}/html/*
1540 +}
1541 +
1542 +src_install-libs() {
1543 + local inslibdir=$(get_libdir)
1544 + local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
1545 + local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
1546 + local nv_libdir="${NV_OBJ}"
1547 +
1548 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "x86" ]]; then
1549 + nv_libdir="${NV_OBJ}"/32
1550 + fi
1551 +
1552 + if use X; then
1553 + NV_GLX_LIBRARIES=(
1554 + "libEGL.so.$(usex compat ${NV_SOVER} 1.1.0) ${GL_ROOT}"
1555 + "libEGL_nvidia.so.${NV_SOVER} ${GL_ROOT}"
1556 + "libGL.so.$(usex compat ${NV_SOVER} 1.7.0) ${GL_ROOT}"
1557 + "libGLESv1_CM.so.1.2.0 ${GL_ROOT}"
1558 + "libGLESv1_CM_nvidia.so.${NV_SOVER} ${GL_ROOT}"
1559 + "libGLESv2.so.2.1.0 ${GL_ROOT}"
1560 + "libGLESv2_nvidia.so.${NV_SOVER} ${GL_ROOT}"
1561 + "libGLX.so.0 ${GL_ROOT}"
1562 + "libGLX_nvidia.so.${NV_SOVER} ${GL_ROOT}"
1563 + "libGLdispatch.so.0 ${GL_ROOT}"
1564 + "libOpenCL.so.1.0.0 ${CL_ROOT}"
1565 + "libOpenGL.so.0 ${GL_ROOT}"
1566 + "libcuda.so.${NV_SOVER}"
1567 + "libnvcuvid.so.${NV_SOVER}"
1568 + "libnvidia-compiler.so.${NV_SOVER}"
1569 + "libnvidia-eglcore.so.${NV_SOVER}"
1570 + "libnvidia-encode.so.${NV_SOVER}"
1571 + "libnvidia-fatbinaryloader.so.${NV_SOVER}"
1572 + "libnvidia-fbc.so.${NV_SOVER}"
1573 + "libnvidia-glcore.so.${NV_SOVER}"
1574 + "libnvidia-glsi.so.${NV_SOVER}"
1575 + "libnvidia-glvkspirv.so.${NV_SOVER}"
1576 + "libnvidia-ifr.so.${NV_SOVER}"
1577 + "libnvidia-opencl.so.${NV_SOVER}"
1578 + "libnvidia-ptxjitcompiler.so.${NV_SOVER}"
1579 + "libvdpau_nvidia.so.${NV_SOVER}"
1580 + )
1581 +
1582 + if use wayland && has_multilib_profile && [[ ${ABI} == "amd64" ]];
1583 + then
1584 + NV_GLX_LIBRARIES+=(
1585 + "libnvidia-egl-wayland.so.1.1.2"
1586 + )
1587 + fi
1588 +
1589 + if use kernel_FreeBSD; then
1590 + NV_GLX_LIBRARIES+=(
1591 + "libnvidia-tls.so.${NV_SOVER}"
1592 + )
1593 + fi
1594 +
1595 + if use kernel_linux; then
1596 + NV_GLX_LIBRARIES+=(
1597 + "libnvidia-ml.so.${NV_SOVER}"
1598 + "libnvidia-tls.so.${NV_SOVER}"
1599 + )
1600 + fi
1601 +
1602 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "amd64" ]];
1603 + then
1604 + NV_GLX_LIBRARIES+=(
1605 + "libnvidia-cbl.so.${NV_SOVER}"
1606 + "libnvidia-rtcore.so.${NV_SOVER}"
1607 + "libnvoptix.so.${NV_SOVER}"
1608 + )
1609 + fi
1610 +
1611 + for NV_LIB in "${NV_GLX_LIBRARIES[@]}"; do
1612 + donvidia "${nv_libdir}"/${NV_LIB}
1613 + done
1614 + fi
1615 +}
1616 +
1617 +pkg_preinst() {
1618 + if use driver && use kernel_linux; then
1619 + linux-mod_pkg_preinst
1620 +
1621 + local videogroup="$(getent group video | cut -d ':' -f 3)"
1622 + if [ -z "${videogroup}" ]; then
1623 + eerror "Failed to determine the video group gid"
1624 + die "Failed to determine the video group gid"
1625 + else
1626 + sed -i \
1627 + -e "s:PACKAGE:${PF}:g" \
1628 + -e "s:VIDEOGID:${videogroup}:" \
1629 + "${D}"/etc/modprobe.d/nvidia.conf || die
1630 + fi
1631 + fi
1632 +
1633 + # Clean the dynamic libGL stuff's home to ensure
1634 + # we dont have stale libs floating around
1635 + if [ -d "${ROOT}"/usr/lib/opengl/nvidia ]; then
1636 + rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
1637 + fi
1638 + # Make sure we nuke the old nvidia-glx's env.d file
1639 + if [ -e "${ROOT}"/etc/env.d/09nvidia ]; then
1640 + rm -f "${ROOT}"/etc/env.d/09nvidia
1641 + fi
1642 +}
1643 +
1644 +pkg_postinst() {
1645 + use driver && use kernel_linux && linux-mod_pkg_postinst
1646 +
1647 + # Switch to the nvidia implementation
1648 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
1649 +
1650 + readme.gentoo_print_elog
1651 +
1652 + if ! use X; then
1653 + elog "You have elected to not install the X.org driver. Along with"
1654 + elog "this the OpenGL libraries and VDPAU libraries were not"
1655 + elog "installed. Additionally, once the driver is loaded your card"
1656 + elog "and fan will run at max speed which may not be desirable."
1657 + elog "Use the 'nvidia-smi' init script to have your card and fan"
1658 + elog "speed scale appropriately."
1659 + elog
1660 + fi
1661 + if ! use tools; then
1662 + elog "USE=tools controls whether the nvidia-settings application"
1663 + elog "is installed. If you would like to use it, enable that"
1664 + elog "flag and re-emerge this ebuild. Optionally you can install"
1665 + elog "media-video/nvidia-settings"
1666 + elog
1667 + fi
1668 +}
1669 +
1670 +pkg_prerm() {
1671 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
1672 +}
1673 +
1674 +pkg_postrm() {
1675 + use driver && use kernel_linux && linux-mod_pkg_postrm
1676 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
1677 +}
1678 diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-435.21-r2.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-435.21-r2.ebuild
1679 new file mode 100644
1680 index 00000000000..399a1cb30e5
1681 --- /dev/null
1682 +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-435.21-r2.ebuild
1683 @@ -0,0 +1,571 @@
1684 +# Copyright 1999-2020 Gentoo Authors
1685 +# Distributed under the terms of the GNU General Public License v2
1686 +
1687 +EAPI=7
1688 +inherit desktop flag-o-matic linux-info linux-mod multilib-minimal \
1689 + nvidia-driver portability toolchain-funcs unpacker udev
1690 +
1691 +DESCRIPTION="NVIDIA Accelerated Graphics Driver"
1692 +HOMEPAGE="https://www.nvidia.com/"
1693 +
1694 +AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
1695 +AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
1696 +ARM_NV_PACKAGE="NVIDIA-Linux-armv7l-gnueabihf-${PV}"
1697 +
1698 +NV_URI="https://us.download.nvidia.com/XFree86/"
1699 +SRC_URI="
1700 + amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
1701 + amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
1702 + tools? (
1703 + https://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-${PV}.tar.bz2
1704 + )
1705 +"
1706 +
1707 +EMULTILIB_PKG="true"
1708 +KEYWORDS="-* ~amd64"
1709 +LICENSE="GPL-2 NVIDIA-r2"
1710 +SLOT="0/${PV%.*}"
1711 +
1712 +IUSE="acpi compat +driver gtk3 kernel_FreeBSD kernel_linux +kms +libglvnd multilib static-libs +tools uvm wayland +X"
1713 +REQUIRED_USE="
1714 + tools? ( X )
1715 + static-libs? ( tools )
1716 +"
1717 +
1718 +COMMON="
1719 + uvm? ( kernel_linux? ( >=virtual/opencl-3 ) )
1720 + driver? ( kernel_linux? ( acct-group/video ) )
1721 + kernel_linux? ( >=sys-libs/glibc-2.6.1 )
1722 + tools? (
1723 + dev-libs/atk
1724 + dev-libs/glib:2
1725 + dev-libs/jansson
1726 + gtk3? (
1727 + x11-libs/gtk+:3
1728 + )
1729 + x11-libs/cairo
1730 + x11-libs/gdk-pixbuf[X]
1731 + x11-libs/gtk+:2
1732 + x11-libs/libX11
1733 + x11-libs/libXext
1734 + x11-libs/libXrandr
1735 + x11-libs/libXv
1736 + x11-libs/libXxf86vm
1737 + x11-libs/pango[X]
1738 + )
1739 + X? (
1740 + !libglvnd? ( >=app-eselect/eselect-opengl-1.0.9 )
1741 + libglvnd? (
1742 + media-libs/libglvnd[${MULTILIB_USEDEP}]
1743 + !app-eselect/eselect-opengl
1744 + )
1745 + app-misc/pax-utils
1746 + )
1747 +"
1748 +DEPEND="
1749 + ${COMMON}
1750 + kernel_linux? ( virtual/linux-sources )
1751 + tools? ( sys-apps/dbus )
1752 +"
1753 +RDEPEND="
1754 + ${COMMON}
1755 + acpi? ( sys-power/acpid )
1756 + tools? ( !media-video/nvidia-settings )
1757 + wayland? ( dev-libs/wayland[${MULTILIB_USEDEP}] )
1758 + X? (
1759 + <x11-base/xorg-server-1.20.99:=
1760 + >=x11-libs/libX11-1.6.2[${MULTILIB_USEDEP}]
1761 + >=x11-libs/libXext-1.3.2[${MULTILIB_USEDEP}]
1762 + >=x11-libs/libvdpau-1.0[${MULTILIB_USEDEP}]
1763 + sys-libs/zlib[${MULTILIB_USEDEP}]
1764 + )
1765 +"
1766 +QA_PREBUILT="opt/* usr/lib*"
1767 +S=${WORKDIR}/
1768 +NV_KV_MAX_PLUS="5.4"
1769 +CONFIG_CHECK="!DEBUG_MUTEXES ~!I2C_NVIDIA_GPU ~!LOCKDEP ~MTRR ~SYSVIPC ~ZONE_DMA"
1770 +
1771 +pkg_pretend() {
1772 + nvidia-driver_check
1773 +}
1774 +
1775 +pkg_setup() {
1776 + nvidia-driver_check
1777 +
1778 + # try to turn off distcc and ccache for people that have a problem with it
1779 + export DISTCC_DISABLE=1
1780 + export CCACHE_DISABLE=1
1781 +
1782 + if use driver && use kernel_linux; then
1783 + MODULE_NAMES="nvidia(video:${S}/kernel)"
1784 + use uvm && MODULE_NAMES+=" nvidia-uvm(video:${S}/kernel)"
1785 + use kms && MODULE_NAMES+=" nvidia-modeset(video:${S}/kernel) nvidia-drm(video:${S}/kernel)"
1786 +
1787 + # This needs to run after MODULE_NAMES (so that the eclass checks
1788 + # whether the kernel supports loadable modules) but before BUILD_PARAMS
1789 + # is set (so that KV_DIR is populated).
1790 + linux-mod_pkg_setup
1791 +
1792 + BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
1793 + SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC) NV_VERBOSE=1"
1794 +
1795 + # linux-mod_src_compile calls set_arch_to_kernel, which
1796 + # sets the ARCH to x86 but NVIDIA's wrapping Makefile
1797 + # expects x86_64 or i386 and then converts it to x86
1798 + # later on in the build process
1799 + BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
1800 + fi
1801 +
1802 + if use kernel_linux && kernel_is lt 2 6 9; then
1803 + eerror "You must build this against 2.6.9 or higher kernels."
1804 + fi
1805 +
1806 + # set variables to where files are in the package structure
1807 + if use kernel_FreeBSD; then
1808 + use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
1809 + NV_DOC="${S}/doc"
1810 + NV_OBJ="${S}/obj"
1811 + NV_SRC="${S}/src"
1812 + NV_MAN="${S}/x11/man"
1813 + NV_X11="${S}/obj"
1814 + NV_SOVER=1
1815 + elif use kernel_linux; then
1816 + NV_DOC="${S}"
1817 + NV_OBJ="${S}"
1818 + NV_SRC="${S}/kernel"
1819 + NV_MAN="${S}"
1820 + NV_X11="${S}"
1821 + NV_SOVER=${PV}
1822 + else
1823 + die "Could not determine proper NVIDIA package"
1824 + fi
1825 +}
1826 +
1827 +src_configure() {
1828 + tc-export AR CC LD
1829 +
1830 + default
1831 +}
1832 +
1833 +src_prepare() {
1834 + local man_file
1835 + for man_file in "${NV_MAN}"/*1.gz; do
1836 + gunzip $man_file || die
1837 + done
1838 +
1839 + if use tools; then
1840 + cp "${FILESDIR}"/nvidia-settings-fno-common.patch "${WORKDIR}" || die
1841 + cp "${FILESDIR}"/nvidia-settings-linker.patch "${WORKDIR}" || die
1842 + sed -i \
1843 + -e "s:@PV@:${PV}:g" \
1844 + "${WORKDIR}"/nvidia-settings-fno-common.patch \
1845 + "${WORKDIR}"/nvidia-settings-linker.patch \
1846 + || die
1847 + eapply "${WORKDIR}"/nvidia-settings-fno-common.patch
1848 + eapply "${WORKDIR}"/nvidia-settings-linker.patch
1849 + fi
1850 +
1851 + default
1852 +
1853 + if ! [ -f nvidia_icd.json ]; then
1854 + cp nvidia_icd.json.template nvidia_icd.json || die
1855 + sed -i -e 's:__NV_VK_ICD__:libGLX_nvidia.so.0:g' nvidia_icd.json || die
1856 + fi
1857 +}
1858 +
1859 +src_compile() {
1860 + cd "${NV_SRC}"
1861 + if use kernel_FreeBSD; then
1862 + MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
1863 + LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
1864 + elif use driver && use kernel_linux; then
1865 + BUILD_TARGETS=module linux-mod_src_compile \
1866 + KERNELRELEASE="${KV_FULL}" \
1867 + src="${KERNEL_DIR}"
1868 + fi
1869 +
1870 + if use tools; then
1871 + emake -C "${S}"/nvidia-settings-${PV}/src/libXNVCtrl \
1872 + DO_STRIP= \
1873 + LIBDIR="$(get_libdir)" \
1874 + NVLD="$(tc-getLD)" \
1875 + NV_VERBOSE=1 \
1876 + OUTPUTDIR=. \
1877 + RANLIB="$(tc-getRANLIB)"
1878 +
1879 + emake -C "${S}"/nvidia-settings-${PV}/src \
1880 + DO_STRIP= \
1881 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
1882 + LIBDIR="$(get_libdir)" \
1883 + NVLD="$(tc-getLD)" \
1884 + NVML_ENABLED=0 \
1885 + NV_USE_BUNDLED_LIBJANSSON=0 \
1886 + NV_VERBOSE=1 \
1887 + OUTPUTDIR=.
1888 + fi
1889 +}
1890 +
1891 +# Install nvidia library:
1892 +# the first parameter is the library to install
1893 +# the second parameter is the provided soversion
1894 +# the third parameter is the target directory if it is not /usr/lib
1895 +donvidia() {
1896 + # Full path to library
1897 + nv_LIB="${1}"
1898 +
1899 + # SOVER to use
1900 + nv_SOVER="$(scanelf -qF'%S#F' ${nv_LIB})"
1901 +
1902 + # Where to install
1903 + nv_DEST="${2}"
1904 +
1905 + # Get just the library name
1906 + nv_LIBNAME=$(basename "${nv_LIB}")
1907 +
1908 + if [[ "${nv_DEST}" ]]; then
1909 + exeinto ${nv_DEST}
1910 + action="doexe"
1911 + else
1912 + nv_DEST="/usr/$(get_libdir)"
1913 + action="dolib.so"
1914 + fi
1915 +
1916 + # Install the library
1917 + ${action} ${nv_LIB} || die "failed to install ${nv_LIBNAME}"
1918 +
1919 + # If the library has a SONAME and SONAME does not match the library name,
1920 + # then we need to create a symlink
1921 + if [[ ${nv_SOVER} ]] && ! [[ "${nv_SOVER}" = "${nv_LIBNAME}" ]]; then
1922 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_SOVER}
1923 + fi
1924 +
1925 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_LIBNAME/.so*/.so}
1926 +}
1927 +
1928 +src_install() {
1929 + if use driver && use kernel_linux; then
1930 + linux-mod_src_install
1931 +
1932 + # Add the aliases
1933 + # This file is tweaked with the appropriate video group in
1934 + # pkg_preinst, see bug #491414
1935 + insinto /etc/modprobe.d
1936 + newins "${FILESDIR}"/nvidia-169.07 nvidia.conf
1937 + if use uvm; then
1938 + doins "${FILESDIR}"/nvidia-rmmod.conf
1939 + udev_newrules "${FILESDIR}"/nvidia-uvm.udev-rule 99-nvidia-uvm.rules
1940 + else
1941 + sed -e 's|nvidia-uvm ||g' "${FILESDIR}"/nvidia-rmmod.conf \
1942 + > "${T}"/nvidia-rmmod.conf || die
1943 + doins "${T}"/nvidia-rmmod.conf
1944 + fi
1945 +
1946 + # Ensures that our device nodes are created when not using X
1947 + exeinto "$(get_udevdir)"
1948 + newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
1949 + udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
1950 + elif use kernel_FreeBSD; then
1951 + if use x86-fbsd; then
1952 + insinto /boot/modules
1953 + doins "${S}/src/nvidia.kld"
1954 + fi
1955 +
1956 + exeinto /boot/modules
1957 + doexe "${S}/src/nvidia.ko"
1958 + fi
1959 +
1960 + # NVIDIA kernel <-> userspace driver config lib
1961 + donvidia ${NV_OBJ}/libnvidia-cfg.so.${NV_SOVER}
1962 +
1963 + # NVIDIA framebuffer capture library
1964 + donvidia ${NV_OBJ}/libnvidia-fbc.so.${NV_SOVER}
1965 +
1966 + # NVIDIA video encode/decode <-> CUDA
1967 + if use kernel_linux; then
1968 + donvidia ${NV_OBJ}/libnvcuvid.so.${NV_SOVER}
1969 + donvidia ${NV_OBJ}/libnvidia-encode.so.${NV_SOVER}
1970 + fi
1971 +
1972 + if use X; then
1973 + # Xorg DDX driver
1974 + insinto /usr/$(get_libdir)/xorg/modules/drivers
1975 + doins ${NV_X11}/nvidia_drv.so
1976 +
1977 + # Xorg GLX driver
1978 + donvidia ${NV_X11}/libglxserver_nvidia.so.${NV_SOVER} \
1979 + /usr/$(get_libdir)/xorg/modules/extensions
1980 +
1981 + # Xorg nvidia.conf
1982 + if has_version '>=x11-base/xorg-server-1.16'; then
1983 + insinto /usr/share/X11/xorg.conf.d
1984 + newins {,50-}nvidia-drm-outputclass.conf
1985 + fi
1986 +
1987 + insinto /usr/share/glvnd/egl_vendor.d
1988 + doins ${NV_X11}/10_nvidia.json
1989 + fi
1990 +
1991 + if use wayland; then
1992 + insinto /usr/share/egl/egl_external_platform.d
1993 + doins ${NV_X11}/10_nvidia_wayland.json
1994 + fi
1995 +
1996 + # OpenCL ICD for NVIDIA
1997 + if use kernel_linux; then
1998 + insinto /etc/OpenCL/vendors
1999 + doins ${NV_OBJ}/nvidia.icd
2000 + fi
2001 +
2002 + # Helper Apps
2003 + exeinto /opt/bin/
2004 +
2005 + if use X; then
2006 + doexe ${NV_OBJ}/nvidia-xconfig
2007 +
2008 + insinto /etc/vulkan/icd.d
2009 + doins nvidia_icd.json
2010 + fi
2011 +
2012 + if use kernel_linux; then
2013 + doexe ${NV_OBJ}/nvidia-cuda-mps-control
2014 + doexe ${NV_OBJ}/nvidia-cuda-mps-server
2015 + doexe ${NV_OBJ}/nvidia-debugdump
2016 + doexe ${NV_OBJ}/nvidia-persistenced
2017 + doexe ${NV_OBJ}/nvidia-smi
2018 +
2019 + # install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
2020 + doexe ${NV_OBJ}/nvidia-modprobe
2021 + fowners root:video /opt/bin/nvidia-modprobe
2022 + fperms 4710 /opt/bin/nvidia-modprobe
2023 + dosym /{opt,usr}/bin/nvidia-modprobe
2024 +
2025 + doman nvidia-cuda-mps-control.1
2026 + doman nvidia-modprobe.1
2027 + doman nvidia-persistenced.1
2028 + newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
2029 + newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
2030 + newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
2031 + fi
2032 +
2033 + if use tools; then
2034 + emake -C "${S}"/nvidia-settings-${PV}/src/ \
2035 + DESTDIR="${D}" \
2036 + DO_STRIP= \
2037 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
2038 + LIBDIR="${D}/usr/$(get_libdir)" \
2039 + NV_USE_BUNDLED_LIBJANSSON=0 \
2040 + NV_VERBOSE=1 \
2041 + OUTPUTDIR=. \
2042 + PREFIX=/usr \
2043 + install
2044 +
2045 + if use static-libs; then
2046 + dolib.a "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/libXNVCtrl.a
2047 +
2048 + insinto /usr/include/NVCtrl
2049 + doins "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/*.h
2050 + fi
2051 +
2052 + insinto /usr/share/nvidia/
2053 + doins nvidia-application-profiles-${PV}-key-documentation
2054 +
2055 + insinto /etc/nvidia
2056 + newins \
2057 + nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
2058 +
2059 + # There is no icon in the FreeBSD tarball.
2060 + use kernel_FreeBSD || \
2061 + doicon ${NV_OBJ}/nvidia-settings.png
2062 +
2063 + domenu "${FILESDIR}"/nvidia-settings.desktop
2064 +
2065 + exeinto /etc/X11/xinit/xinitrc.d
2066 + newexe "${FILESDIR}"/95-nvidia-settings-r1 95-nvidia-settings
2067 + fi
2068 +
2069 + dobin ${NV_OBJ}/nvidia-bug-report.sh
2070 +
2071 + if has_multilib_profile && use multilib; then
2072 + local OABI=${ABI}
2073 + for ABI in $(get_install_abis); do
2074 + src_install-libs
2075 + done
2076 + ABI=${OABI}
2077 + unset OABI
2078 + else
2079 + src_install-libs
2080 + fi
2081 +
2082 + is_final_abi || die "failed to iterate through all ABIs"
2083 +
2084 + # Documentation
2085 + if use kernel_FreeBSD; then
2086 + dodoc "${NV_DOC}/README"
2087 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
2088 + use tools && doman "${NV_MAN}"/nvidia-settings.1
2089 + else
2090 + # Docs
2091 + newdoc "${NV_DOC}/README.txt" README
2092 + dodoc "${NV_DOC}/NVIDIA_Changelog"
2093 + doman "${NV_MAN}"/nvidia-smi.1
2094 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
2095 + use tools && doman "${NV_MAN}"/nvidia-settings.1
2096 + doman "${NV_MAN}"/nvidia-cuda-mps-control.1
2097 + fi
2098 +
2099 + readme.gentoo_create_doc
2100 +
2101 + docinto html
2102 + dodoc -r ${NV_DOC}/html/*
2103 +}
2104 +
2105 +src_install-libs() {
2106 + local inslibdir=$(get_libdir)
2107 + if use libglvnd; then
2108 + local GL_ROOT="/usr/$(get_libdir)"
2109 + else
2110 + local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
2111 + fi
2112 + local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
2113 + local nv_libdir="${NV_OBJ}"
2114 +
2115 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "x86" ]]; then
2116 + nv_libdir="${NV_OBJ}"/32
2117 + fi
2118 +
2119 + if use X; then
2120 + NV_GLX_LIBRARIES=(
2121 + "libEGL_nvidia.so.${NV_SOVER} ${GL_ROOT}"
2122 + "libGLESv1_CM_nvidia.so.${NV_SOVER} ${GL_ROOT}"
2123 + "libGLESv2_nvidia.so.${NV_SOVER} ${GL_ROOT}"
2124 + "libGLX_nvidia.so.${NV_SOVER} ${GL_ROOT}"
2125 + "libOpenCL.so.1.0.0 ${CL_ROOT}"
2126 + "libcuda.so.${NV_SOVER}"
2127 + "libnvcuvid.so.${NV_SOVER}"
2128 + "libnvidia-compiler.so.${NV_SOVER}"
2129 + "libnvidia-eglcore.so.${NV_SOVER}"
2130 + "libnvidia-encode.so.${NV_SOVER}"
2131 + "libnvidia-fatbinaryloader.so.${NV_SOVER}"
2132 + "libnvidia-fbc.so.${NV_SOVER}"
2133 + "libnvidia-glcore.so.${NV_SOVER}"
2134 + "libnvidia-glsi.so.${NV_SOVER}"
2135 + "libnvidia-glvkspirv.so.${NV_SOVER}"
2136 + "libnvidia-ifr.so.${NV_SOVER}"
2137 + "libnvidia-opencl.so.${NV_SOVER}"
2138 + "libnvidia-ptxjitcompiler.so.${NV_SOVER}"
2139 + "libvdpau_nvidia.so.${NV_SOVER}"
2140 + )
2141 + if ! use libglvnd; then
2142 + NV_GLX_LIBRARIES+=(
2143 + "libEGL.so.$( [[ ${ABI} == "amd64" ]] && usex compat ${NV_SOVER} 1.1.0 || echo 1.1.0) ${GL_ROOT}"
2144 + "libGL.so.1.7.0 ${GL_ROOT}"
2145 + "libGLESv1_CM.so.1.2.0 ${GL_ROOT}"
2146 + "libGLESv2.so.2.1.0 ${GL_ROOT}"
2147 + "libGLX.so.0 ${GL_ROOT}"
2148 + "libGLdispatch.so.0 ${GL_ROOT}"
2149 + "libOpenGL.so.0 ${GL_ROOT}"
2150 + )
2151 + fi
2152 +
2153 + if use wayland && has_multilib_profile && [[ ${ABI} == "amd64" ]];
2154 + then
2155 + NV_GLX_LIBRARIES+=(
2156 + "libnvidia-egl-wayland.so.1.1.3"
2157 + )
2158 + fi
2159 +
2160 + if use kernel_FreeBSD; then
2161 + NV_GLX_LIBRARIES+=(
2162 + "libnvidia-tls.so.${NV_SOVER}"
2163 + )
2164 + fi
2165 +
2166 + if use kernel_linux; then
2167 + NV_GLX_LIBRARIES+=(
2168 + "libnvidia-ml.so.${NV_SOVER}"
2169 + "libnvidia-tls.so.${NV_SOVER}"
2170 + )
2171 + fi
2172 +
2173 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "amd64" ]];
2174 + then
2175 + NV_GLX_LIBRARIES+=(
2176 + "libnvidia-cbl.so.${NV_SOVER}"
2177 + "libnvidia-rtcore.so.${NV_SOVER}"
2178 + "libnvoptix.so.${NV_SOVER}"
2179 + )
2180 + fi
2181 +
2182 + for NV_LIB in "${NV_GLX_LIBRARIES[@]}"; do
2183 + donvidia "${nv_libdir}"/${NV_LIB}
2184 + done
2185 + fi
2186 +}
2187 +
2188 +pkg_preinst() {
2189 + if use driver && use kernel_linux; then
2190 + linux-mod_pkg_preinst
2191 +
2192 + local videogroup="$(getent group video | cut -d ':' -f 3)"
2193 + if [ -z "${videogroup}" ]; then
2194 + eerror "Failed to determine the video group gid"
2195 + die "Failed to determine the video group gid"
2196 + else
2197 + sed -i \
2198 + -e "s:PACKAGE:${PF}:g" \
2199 + -e "s:VIDEOGID:${videogroup}:" \
2200 + "${D}"/etc/modprobe.d/nvidia.conf || die
2201 + fi
2202 + fi
2203 +
2204 + # Clean the dynamic libGL stuff's home to ensure
2205 + # we dont have stale libs floating around
2206 + if [ -d "${ROOT}"/usr/lib/opengl/nvidia ]; then
2207 + rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
2208 + fi
2209 + # Make sure we nuke the old nvidia-glx's env.d file
2210 + if [ -e "${ROOT}"/etc/env.d/09nvidia ]; then
2211 + rm -f "${ROOT}"/etc/env.d/09nvidia
2212 + fi
2213 +}
2214 +
2215 +pkg_postinst() {
2216 + use driver && use kernel_linux && linux-mod_pkg_postinst
2217 +
2218 + # Switch to the nvidia implementation
2219 + if ! use libglvnd; then
2220 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
2221 + fi
2222 +
2223 + readme.gentoo_print_elog
2224 +
2225 + if ! use X; then
2226 + elog "You have elected to not install the X.org driver. Along with"
2227 + elog "this the OpenGL libraries and VDPAU libraries were not"
2228 + elog "installed. Additionally, once the driver is loaded your card"
2229 + elog "and fan will run at max speed which may not be desirable."
2230 + elog "Use the 'nvidia-smi' init script to have your card and fan"
2231 + elog "speed scale appropriately."
2232 + elog
2233 + fi
2234 + if ! use tools; then
2235 + elog "USE=tools controls whether the nvidia-settings application"
2236 + elog "is installed. If you would like to use it, enable that"
2237 + elog "flag and re-emerge this ebuild. Optionally you can install"
2238 + elog "media-video/nvidia-settings"
2239 + elog
2240 + fi
2241 +}
2242 +
2243 +pkg_prerm() {
2244 + if ! use libglvnd; then
2245 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
2246 + fi
2247 +}
2248 +
2249 +pkg_postrm() {
2250 + use driver && use kernel_linux && linux-mod_pkg_postrm
2251 + if ! use libglvnd; then
2252 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
2253 + fi
2254 +}
2255 diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-440.64-r1.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-440.64-r1.ebuild
2256 new file mode 100644
2257 index 00000000000..87e066d11b5
2258 --- /dev/null
2259 +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-440.64-r1.ebuild
2260 @@ -0,0 +1,577 @@
2261 +# Copyright 1999-2020 Gentoo Authors
2262 +# Distributed under the terms of the GNU General Public License v2
2263 +
2264 +EAPI=7
2265 +inherit desktop flag-o-matic linux-info linux-mod multilib-minimal \
2266 + nvidia-driver portability toolchain-funcs unpacker udev
2267 +
2268 +DESCRIPTION="NVIDIA Accelerated Graphics Driver"
2269 +HOMEPAGE="https://www.nvidia.com/"
2270 +
2271 +AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
2272 +AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
2273 +ARM_NV_PACKAGE="NVIDIA-Linux-armv7l-gnueabihf-${PV}"
2274 +
2275 +NV_URI="https://us.download.nvidia.com/XFree86/"
2276 +SRC_URI="
2277 + amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
2278 + amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
2279 + tools? (
2280 + https://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-${PV}.tar.bz2
2281 + )
2282 +"
2283 +
2284 +EMULTILIB_PKG="true"
2285 +KEYWORDS="-* ~amd64"
2286 +LICENSE="GPL-2 NVIDIA-r2"
2287 +SLOT="0/${PV%.*}"
2288 +
2289 +IUSE="acpi compat +driver gtk3 kernel_FreeBSD kernel_linux +kms +libglvnd multilib static-libs +tools uvm wayland +X"
2290 +REQUIRED_USE="
2291 + tools? ( X )
2292 + static-libs? ( tools )
2293 +"
2294 +
2295 +COMMON="
2296 + uvm? ( kernel_linux? ( >=virtual/opencl-3 ) )
2297 + driver? ( kernel_linux? ( acct-group/video ) )
2298 + kernel_linux? ( >=sys-libs/glibc-2.6.1 )
2299 + tools? (
2300 + dev-libs/atk
2301 + dev-libs/glib:2
2302 + dev-libs/jansson
2303 + gtk3? (
2304 + x11-libs/gtk+:3
2305 + )
2306 + x11-libs/cairo
2307 + x11-libs/gdk-pixbuf[X]
2308 + x11-libs/gtk+:2
2309 + x11-libs/libX11
2310 + x11-libs/libXext
2311 + x11-libs/libXrandr
2312 + x11-libs/libXv
2313 + x11-libs/libXxf86vm
2314 + x11-libs/pango[X]
2315 + )
2316 + X? (
2317 + !libglvnd? ( >=app-eselect/eselect-opengl-1.0.9 )
2318 + libglvnd? (
2319 + media-libs/libglvnd[${MULTILIB_USEDEP}]
2320 + !app-eselect/eselect-opengl
2321 + )
2322 + app-misc/pax-utils
2323 + )
2324 +"
2325 +DEPEND="
2326 + ${COMMON}
2327 + kernel_linux? ( virtual/linux-sources )
2328 + tools? ( sys-apps/dbus )
2329 +"
2330 +RDEPEND="
2331 + ${COMMON}
2332 + acpi? ( sys-power/acpid )
2333 + tools? ( !media-video/nvidia-settings )
2334 + wayland? ( dev-libs/wayland[${MULTILIB_USEDEP}] )
2335 + X? (
2336 + <x11-base/xorg-server-1.20.99:=
2337 + >=x11-libs/libX11-1.6.2[${MULTILIB_USEDEP}]
2338 + >=x11-libs/libXext-1.3.2[${MULTILIB_USEDEP}]
2339 + >=x11-libs/libvdpau-1.0[${MULTILIB_USEDEP}]
2340 + sys-libs/zlib[${MULTILIB_USEDEP}]
2341 + )
2342 +"
2343 +QA_PREBUILT="opt/* usr/lib*"
2344 +S=${WORKDIR}/
2345 +PATCHES=(
2346 + "${FILESDIR}"/${PN}-440.26-locale.patch
2347 +)
2348 +NV_KV_MAX_PLUS="5.7"
2349 +CONFIG_CHECK="!DEBUG_MUTEXES ~!I2C_NVIDIA_GPU ~!LOCKDEP ~MTRR ~SYSVIPC ~ZONE_DMA"
2350 +
2351 +pkg_pretend() {
2352 + nvidia-driver_check
2353 +}
2354 +
2355 +pkg_setup() {
2356 + nvidia-driver_check
2357 +
2358 + # try to turn off distcc and ccache for people that have a problem with it
2359 + export DISTCC_DISABLE=1
2360 + export CCACHE_DISABLE=1
2361 +
2362 + if use driver && use kernel_linux; then
2363 + MODULE_NAMES="nvidia(video:${S}/kernel)"
2364 + use uvm && MODULE_NAMES+=" nvidia-uvm(video:${S}/kernel)"
2365 + use kms && MODULE_NAMES+=" nvidia-modeset(video:${S}/kernel) nvidia-drm(video:${S}/kernel)"
2366 +
2367 + # This needs to run after MODULE_NAMES (so that the eclass checks
2368 + # whether the kernel supports loadable modules) but before BUILD_PARAMS
2369 + # is set (so that KV_DIR is populated).
2370 + linux-mod_pkg_setup
2371 +
2372 + BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
2373 + SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC) NV_VERBOSE=1"
2374 +
2375 + # linux-mod_src_compile calls set_arch_to_kernel, which
2376 + # sets the ARCH to x86 but NVIDIA's wrapping Makefile
2377 + # expects x86_64 or i386 and then converts it to x86
2378 + # later on in the build process
2379 + BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
2380 + fi
2381 +
2382 + if use kernel_linux && kernel_is lt 2 6 9; then
2383 + eerror "You must build this against 2.6.9 or higher kernels."
2384 + fi
2385 +
2386 + # set variables to where files are in the package structure
2387 + if use kernel_FreeBSD; then
2388 + use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
2389 + NV_DOC="${S}/doc"
2390 + NV_OBJ="${S}/obj"
2391 + NV_SRC="${S}/src"
2392 + NV_MAN="${S}/x11/man"
2393 + NV_X11="${S}/obj"
2394 + NV_SOVER=1
2395 + elif use kernel_linux; then
2396 + NV_DOC="${S}"
2397 + NV_OBJ="${S}"
2398 + NV_SRC="${S}/kernel"
2399 + NV_MAN="${S}"
2400 + NV_X11="${S}"
2401 + NV_SOVER=${PV}
2402 + else
2403 + die "Could not determine proper NVIDIA package"
2404 + fi
2405 +}
2406 +
2407 +src_configure() {
2408 + tc-export AR CC LD
2409 +
2410 + default
2411 +}
2412 +
2413 +src_prepare() {
2414 + local man_file
2415 + for man_file in "${NV_MAN}"/*1.gz; do
2416 + gunzip $man_file || die
2417 + done
2418 +
2419 + if use tools; then
2420 + cp "${FILESDIR}"/nvidia-settings-fno-common.patch "${WORKDIR}" || die
2421 + cp "${FILESDIR}"/nvidia-settings-linker.patch "${WORKDIR}" || die
2422 + sed -i \
2423 + -e "s:@PV@:${PV}:g" \
2424 + "${WORKDIR}"/nvidia-settings-fno-common.patch \
2425 + "${WORKDIR}"/nvidia-settings-linker.patch \
2426 + || die
2427 + eapply "${WORKDIR}"/nvidia-settings-fno-common.patch
2428 + eapply "${WORKDIR}"/nvidia-settings-linker.patch
2429 + fi
2430 +
2431 + default
2432 +
2433 + if ! [ -f nvidia_icd.json ]; then
2434 + cp nvidia_icd.json.template nvidia_icd.json || die
2435 + sed -i -e 's:__NV_VK_ICD__:libGLX_nvidia.so.0:g' nvidia_icd.json || die
2436 + fi
2437 +}
2438 +
2439 +src_compile() {
2440 + cd "${NV_SRC}"
2441 + if use kernel_FreeBSD; then
2442 + MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
2443 + LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
2444 + elif use driver && use kernel_linux; then
2445 + BUILD_TARGETS=module linux-mod_src_compile \
2446 + KERNELRELEASE="${KV_FULL}" \
2447 + src="${KERNEL_DIR}"
2448 + fi
2449 +
2450 + if use tools; then
2451 + emake -C "${S}"/nvidia-settings-${PV}/src/libXNVCtrl \
2452 + DO_STRIP= \
2453 + LIBDIR="$(get_libdir)" \
2454 + NVLD="$(tc-getLD)" \
2455 + NV_VERBOSE=1 \
2456 + OUTPUTDIR=. \
2457 + RANLIB="$(tc-getRANLIB)"
2458 +
2459 + emake -C "${S}"/nvidia-settings-${PV}/src \
2460 + DO_STRIP= \
2461 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
2462 + LIBDIR="$(get_libdir)" \
2463 + NVLD="$(tc-getLD)" \
2464 + NVML_ENABLED=0 \
2465 + NV_USE_BUNDLED_LIBJANSSON=0 \
2466 + NV_VERBOSE=1 \
2467 + OUTPUTDIR=.
2468 + fi
2469 +}
2470 +
2471 +# Install nvidia library:
2472 +# the first parameter is the library to install
2473 +# the second parameter is the provided soversion
2474 +# the third parameter is the target directory if it is not /usr/lib
2475 +donvidia() {
2476 + # Full path to library
2477 + nv_LIB="${1}"
2478 +
2479 + # SOVER to use
2480 + nv_SOVER="$(scanelf -qF'%S#F' ${nv_LIB})"
2481 +
2482 + # Where to install
2483 + nv_DEST="${2}"
2484 +
2485 + # Get just the library name
2486 + nv_LIBNAME=$(basename "${nv_LIB}")
2487 +
2488 + if [[ "${nv_DEST}" ]]; then
2489 + exeinto ${nv_DEST}
2490 + action="doexe"
2491 + else
2492 + nv_DEST="/usr/$(get_libdir)"
2493 + action="dolib.so"
2494 + fi
2495 +
2496 + # Install the library
2497 + ${action} ${nv_LIB} || die "failed to install ${nv_LIBNAME}"
2498 +
2499 + # If the library has a SONAME and SONAME does not match the library name,
2500 + # then we need to create a symlink
2501 + if [[ ${nv_SOVER} ]] && ! [[ "${nv_SOVER}" = "${nv_LIBNAME}" ]]; then
2502 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_SOVER}
2503 + fi
2504 +
2505 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_LIBNAME/.so*/.so}
2506 +}
2507 +
2508 +src_install() {
2509 + if use driver && use kernel_linux; then
2510 + linux-mod_src_install
2511 +
2512 + # Add the aliases
2513 + # This file is tweaked with the appropriate video group in
2514 + # pkg_preinst, see bug #491414
2515 + insinto /etc/modprobe.d
2516 + newins "${FILESDIR}"/nvidia-169.07 nvidia.conf
2517 + if use uvm; then
2518 + doins "${FILESDIR}"/nvidia-rmmod.conf
2519 + udev_newrules "${FILESDIR}"/nvidia-uvm.udev-rule 99-nvidia-uvm.rules
2520 + else
2521 + sed -e 's|nvidia-uvm ||g' "${FILESDIR}"/nvidia-rmmod.conf \
2522 + > "${T}"/nvidia-rmmod.conf || die
2523 + doins "${T}"/nvidia-rmmod.conf
2524 + fi
2525 +
2526 + # Ensures that our device nodes are created when not using X
2527 + exeinto "$(get_udevdir)"
2528 + newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
2529 + udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
2530 + elif use kernel_FreeBSD; then
2531 + if use x86-fbsd; then
2532 + insinto /boot/modules
2533 + doins "${S}/src/nvidia.kld"
2534 + fi
2535 +
2536 + exeinto /boot/modules
2537 + doexe "${S}/src/nvidia.ko"
2538 + fi
2539 +
2540 + # NVIDIA kernel <-> userspace driver config lib
2541 + donvidia ${NV_OBJ}/libnvidia-cfg.so.${NV_SOVER}
2542 +
2543 + # NVIDIA framebuffer capture library
2544 + donvidia ${NV_OBJ}/libnvidia-fbc.so.${NV_SOVER}
2545 +
2546 + # NVIDIA video encode/decode <-> CUDA
2547 + if use kernel_linux; then
2548 + donvidia ${NV_OBJ}/libnvcuvid.so.${NV_SOVER}
2549 + donvidia ${NV_OBJ}/libnvidia-encode.so.${NV_SOVER}
2550 + fi
2551 +
2552 + if use X; then
2553 + # Xorg DDX driver
2554 + insinto /usr/$(get_libdir)/xorg/modules/drivers
2555 + doins ${NV_X11}/nvidia_drv.so
2556 +
2557 + # Xorg GLX driver
2558 + donvidia ${NV_X11}/libglxserver_nvidia.so.${NV_SOVER} \
2559 + /usr/$(get_libdir)/xorg/modules/extensions
2560 +
2561 + # Xorg nvidia.conf
2562 + if has_version '>=x11-base/xorg-server-1.16'; then
2563 + insinto /usr/share/X11/xorg.conf.d
2564 + newins {,50-}nvidia-drm-outputclass.conf
2565 + fi
2566 +
2567 + insinto /usr/share/glvnd/egl_vendor.d
2568 + doins ${NV_X11}/10_nvidia.json
2569 + fi
2570 +
2571 + if use wayland; then
2572 + insinto /usr/share/egl/egl_external_platform.d
2573 + doins ${NV_X11}/10_nvidia_wayland.json
2574 + fi
2575 +
2576 + # OpenCL ICD for NVIDIA
2577 + if use kernel_linux; then
2578 + insinto /etc/OpenCL/vendors
2579 + doins ${NV_OBJ}/nvidia.icd
2580 + fi
2581 +
2582 + # Helper Apps
2583 + exeinto /opt/bin/
2584 +
2585 + if use X; then
2586 + doexe ${NV_OBJ}/nvidia-xconfig
2587 +
2588 + insinto /etc/vulkan/icd.d
2589 + doins nvidia_icd.json
2590 +
2591 + insinto /etc/vulkan/implicit_layer.d
2592 + doins nvidia_layers.json
2593 + fi
2594 +
2595 + if use kernel_linux; then
2596 + doexe ${NV_OBJ}/nvidia-cuda-mps-control
2597 + doexe ${NV_OBJ}/nvidia-cuda-mps-server
2598 + doexe ${NV_OBJ}/nvidia-debugdump
2599 + doexe ${NV_OBJ}/nvidia-persistenced
2600 + doexe ${NV_OBJ}/nvidia-smi
2601 +
2602 + # install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
2603 + doexe ${NV_OBJ}/nvidia-modprobe
2604 + fowners root:video /opt/bin/nvidia-modprobe
2605 + fperms 4710 /opt/bin/nvidia-modprobe
2606 + dosym /{opt,usr}/bin/nvidia-modprobe
2607 +
2608 + doman nvidia-cuda-mps-control.1
2609 + doman nvidia-modprobe.1
2610 + doman nvidia-persistenced.1
2611 + newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
2612 + newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
2613 + newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
2614 + fi
2615 +
2616 + if use tools; then
2617 + emake -C "${S}"/nvidia-settings-${PV}/src/ \
2618 + DESTDIR="${D}" \
2619 + DO_STRIP= \
2620 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
2621 + LIBDIR="${D}/usr/$(get_libdir)" \
2622 + NV_USE_BUNDLED_LIBJANSSON=0 \
2623 + NV_VERBOSE=1 \
2624 + OUTPUTDIR=. \
2625 + PREFIX=/usr \
2626 + install
2627 +
2628 + if use static-libs; then
2629 + dolib.a "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/libXNVCtrl.a
2630 +
2631 + insinto /usr/include/NVCtrl
2632 + doins "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/*.h
2633 + fi
2634 +
2635 + insinto /usr/share/nvidia/
2636 + doins nvidia-application-profiles-${PV}-key-documentation
2637 +
2638 + insinto /etc/nvidia
2639 + newins \
2640 + nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
2641 +
2642 + # There is no icon in the FreeBSD tarball.
2643 + use kernel_FreeBSD || \
2644 + doicon ${NV_OBJ}/nvidia-settings.png
2645 +
2646 + domenu "${FILESDIR}"/nvidia-settings.desktop
2647 +
2648 + exeinto /etc/X11/xinit/xinitrc.d
2649 + newexe "${FILESDIR}"/95-nvidia-settings-r1 95-nvidia-settings
2650 + fi
2651 +
2652 + dobin ${NV_OBJ}/nvidia-bug-report.sh
2653 +
2654 + if has_multilib_profile && use multilib; then
2655 + local OABI=${ABI}
2656 + for ABI in $(get_install_abis); do
2657 + src_install-libs
2658 + done
2659 + ABI=${OABI}
2660 + unset OABI
2661 + else
2662 + src_install-libs
2663 + fi
2664 +
2665 + is_final_abi || die "failed to iterate through all ABIs"
2666 +
2667 + # Documentation
2668 + if use kernel_FreeBSD; then
2669 + dodoc "${NV_DOC}/README"
2670 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
2671 + use tools && doman "${NV_MAN}"/nvidia-settings.1
2672 + else
2673 + # Docs
2674 + newdoc "${NV_DOC}/README.txt" README
2675 + dodoc "${NV_DOC}/NVIDIA_Changelog"
2676 + doman "${NV_MAN}"/nvidia-smi.1
2677 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
2678 + use tools && doman "${NV_MAN}"/nvidia-settings.1
2679 + doman "${NV_MAN}"/nvidia-cuda-mps-control.1
2680 + fi
2681 +
2682 + readme.gentoo_create_doc
2683 +
2684 + docinto html
2685 + dodoc -r ${NV_DOC}/html/*
2686 +}
2687 +
2688 +src_install-libs() {
2689 + local inslibdir=$(get_libdir)
2690 + if use libglvnd; then
2691 + local GL_ROOT="/usr/$(get_libdir)"
2692 + else
2693 + local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
2694 + fi
2695 + local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
2696 + local nv_libdir="${NV_OBJ}"
2697 +
2698 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "x86" ]]; then
2699 + nv_libdir="${NV_OBJ}"/32
2700 + fi
2701 +
2702 + if use X; then
2703 + NV_GLX_LIBRARIES=(
2704 + "libEGL_nvidia.so.${NV_SOVER} ${GL_ROOT}"
2705 + "libGLESv1_CM_nvidia.so.${NV_SOVER} ${GL_ROOT}"
2706 + "libGLESv2_nvidia.so.${NV_SOVER} ${GL_ROOT}"
2707 + "libGLX_nvidia.so.${NV_SOVER} ${GL_ROOT}"
2708 + "libOpenCL.so.1.0.0 ${CL_ROOT}"
2709 + "libcuda.so.${NV_SOVER}"
2710 + "libnvcuvid.so.${NV_SOVER}"
2711 + "libnvidia-compiler.so.${NV_SOVER}"
2712 + "libnvidia-eglcore.so.${NV_SOVER}"
2713 + "libnvidia-encode.so.${NV_SOVER}"
2714 + "libnvidia-fatbinaryloader.so.${NV_SOVER}"
2715 + "libnvidia-fbc.so.${NV_SOVER}"
2716 + "libnvidia-glcore.so.${NV_SOVER}"
2717 + "libnvidia-glsi.so.${NV_SOVER}"
2718 + "libnvidia-glvkspirv.so.${NV_SOVER}"
2719 + "libnvidia-ifr.so.${NV_SOVER}"
2720 + "libnvidia-opencl.so.${NV_SOVER}"
2721 + "libnvidia-ptxjitcompiler.so.${NV_SOVER}"
2722 + "libvdpau_nvidia.so.${NV_SOVER}"
2723 + )
2724 + if ! use libglvnd; then
2725 + NV_GLX_LIBRARIES+=(
2726 + "libEGL.so.$( [[ ${ABI} == "amd64" ]] && usex compat ${NV_SOVER} 1.1.0 || echo 1.1.0) ${GL_ROOT}"
2727 + "libGL.so.1.7.0 ${GL_ROOT}"
2728 + "libGLESv1_CM.so.1.2.0 ${GL_ROOT}"
2729 + "libGLESv2.so.2.1.0 ${GL_ROOT}"
2730 + "libGLX.so.0 ${GL_ROOT}"
2731 + "libGLdispatch.so.0 ${GL_ROOT}"
2732 + "libOpenGL.so.0 ${GL_ROOT}"
2733 + )
2734 + fi
2735 +
2736 + if use wayland && has_multilib_profile && [[ ${ABI} == "amd64" ]];
2737 + then
2738 + NV_GLX_LIBRARIES+=(
2739 + "libnvidia-egl-wayland.so.1.1.4"
2740 + )
2741 + fi
2742 +
2743 + if use kernel_FreeBSD; then
2744 + NV_GLX_LIBRARIES+=(
2745 + "libnvidia-tls.so.${NV_SOVER}"
2746 + )
2747 + fi
2748 +
2749 + if use kernel_linux; then
2750 + NV_GLX_LIBRARIES+=(
2751 + "libnvidia-ml.so.${NV_SOVER}"
2752 + "libnvidia-tls.so.${NV_SOVER}"
2753 + )
2754 + fi
2755 +
2756 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "amd64" ]];
2757 + then
2758 + NV_GLX_LIBRARIES+=(
2759 + "libnvidia-cbl.so.${NV_SOVER}"
2760 + "libnvidia-rtcore.so.${NV_SOVER}"
2761 + "libnvoptix.so.${NV_SOVER}"
2762 + )
2763 + fi
2764 +
2765 + for NV_LIB in "${NV_GLX_LIBRARIES[@]}"; do
2766 + donvidia "${nv_libdir}"/${NV_LIB}
2767 + done
2768 + fi
2769 +}
2770 +
2771 +pkg_preinst() {
2772 + if use driver && use kernel_linux; then
2773 + linux-mod_pkg_preinst
2774 +
2775 + local videogroup="$(getent group video | cut -d ':' -f 3)"
2776 + if [ -z "${videogroup}" ]; then
2777 + eerror "Failed to determine the video group gid"
2778 + die "Failed to determine the video group gid"
2779 + else
2780 + sed -i \
2781 + -e "s:PACKAGE:${PF}:g" \
2782 + -e "s:VIDEOGID:${videogroup}:" \
2783 + "${D}"/etc/modprobe.d/nvidia.conf || die
2784 + fi
2785 + fi
2786 +
2787 + # Clean the dynamic libGL stuff's home to ensure
2788 + # we dont have stale libs floating around
2789 + if [ -d "${ROOT}"/usr/lib/opengl/nvidia ]; then
2790 + rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
2791 + fi
2792 + # Make sure we nuke the old nvidia-glx's env.d file
2793 + if [ -e "${ROOT}"/etc/env.d/09nvidia ]; then
2794 + rm -f "${ROOT}"/etc/env.d/09nvidia
2795 + fi
2796 +}
2797 +
2798 +pkg_postinst() {
2799 + use driver && use kernel_linux && linux-mod_pkg_postinst
2800 +
2801 + # Switch to the nvidia implementation
2802 + if ! use libglvnd; then
2803 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
2804 + fi
2805 +
2806 + readme.gentoo_print_elog
2807 +
2808 + if ! use X; then
2809 + elog "You have elected to not install the X.org driver. Along with"
2810 + elog "this the OpenGL libraries and VDPAU libraries were not"
2811 + elog "installed. Additionally, once the driver is loaded your card"
2812 + elog "and fan will run at max speed which may not be desirable."
2813 + elog "Use the 'nvidia-smi' init script to have your card and fan"
2814 + elog "speed scale appropriately."
2815 + elog
2816 + fi
2817 + if ! use tools; then
2818 + elog "USE=tools controls whether the nvidia-settings application"
2819 + elog "is installed. If you would like to use it, enable that"
2820 + elog "flag and re-emerge this ebuild. Optionally you can install"
2821 + elog "media-video/nvidia-settings"
2822 + elog
2823 + fi
2824 +}
2825 +
2826 +pkg_prerm() {
2827 + if ! use libglvnd; then
2828 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
2829 + fi
2830 +}
2831 +
2832 +pkg_postrm() {
2833 + use driver && use kernel_linux && linux-mod_pkg_postrm
2834 + if ! use libglvnd; then
2835 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
2836 + fi
2837 +}
2838 diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-440.82-r1.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-440.82-r1.ebuild
2839 new file mode 100644
2840 index 00000000000..87e066d11b5
2841 --- /dev/null
2842 +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-440.82-r1.ebuild
2843 @@ -0,0 +1,577 @@
2844 +# Copyright 1999-2020 Gentoo Authors
2845 +# Distributed under the terms of the GNU General Public License v2
2846 +
2847 +EAPI=7
2848 +inherit desktop flag-o-matic linux-info linux-mod multilib-minimal \
2849 + nvidia-driver portability toolchain-funcs unpacker udev
2850 +
2851 +DESCRIPTION="NVIDIA Accelerated Graphics Driver"
2852 +HOMEPAGE="https://www.nvidia.com/"
2853 +
2854 +AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
2855 +AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
2856 +ARM_NV_PACKAGE="NVIDIA-Linux-armv7l-gnueabihf-${PV}"
2857 +
2858 +NV_URI="https://us.download.nvidia.com/XFree86/"
2859 +SRC_URI="
2860 + amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
2861 + amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
2862 + tools? (
2863 + https://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-${PV}.tar.bz2
2864 + )
2865 +"
2866 +
2867 +EMULTILIB_PKG="true"
2868 +KEYWORDS="-* ~amd64"
2869 +LICENSE="GPL-2 NVIDIA-r2"
2870 +SLOT="0/${PV%.*}"
2871 +
2872 +IUSE="acpi compat +driver gtk3 kernel_FreeBSD kernel_linux +kms +libglvnd multilib static-libs +tools uvm wayland +X"
2873 +REQUIRED_USE="
2874 + tools? ( X )
2875 + static-libs? ( tools )
2876 +"
2877 +
2878 +COMMON="
2879 + uvm? ( kernel_linux? ( >=virtual/opencl-3 ) )
2880 + driver? ( kernel_linux? ( acct-group/video ) )
2881 + kernel_linux? ( >=sys-libs/glibc-2.6.1 )
2882 + tools? (
2883 + dev-libs/atk
2884 + dev-libs/glib:2
2885 + dev-libs/jansson
2886 + gtk3? (
2887 + x11-libs/gtk+:3
2888 + )
2889 + x11-libs/cairo
2890 + x11-libs/gdk-pixbuf[X]
2891 + x11-libs/gtk+:2
2892 + x11-libs/libX11
2893 + x11-libs/libXext
2894 + x11-libs/libXrandr
2895 + x11-libs/libXv
2896 + x11-libs/libXxf86vm
2897 + x11-libs/pango[X]
2898 + )
2899 + X? (
2900 + !libglvnd? ( >=app-eselect/eselect-opengl-1.0.9 )
2901 + libglvnd? (
2902 + media-libs/libglvnd[${MULTILIB_USEDEP}]
2903 + !app-eselect/eselect-opengl
2904 + )
2905 + app-misc/pax-utils
2906 + )
2907 +"
2908 +DEPEND="
2909 + ${COMMON}
2910 + kernel_linux? ( virtual/linux-sources )
2911 + tools? ( sys-apps/dbus )
2912 +"
2913 +RDEPEND="
2914 + ${COMMON}
2915 + acpi? ( sys-power/acpid )
2916 + tools? ( !media-video/nvidia-settings )
2917 + wayland? ( dev-libs/wayland[${MULTILIB_USEDEP}] )
2918 + X? (
2919 + <x11-base/xorg-server-1.20.99:=
2920 + >=x11-libs/libX11-1.6.2[${MULTILIB_USEDEP}]
2921 + >=x11-libs/libXext-1.3.2[${MULTILIB_USEDEP}]
2922 + >=x11-libs/libvdpau-1.0[${MULTILIB_USEDEP}]
2923 + sys-libs/zlib[${MULTILIB_USEDEP}]
2924 + )
2925 +"
2926 +QA_PREBUILT="opt/* usr/lib*"
2927 +S=${WORKDIR}/
2928 +PATCHES=(
2929 + "${FILESDIR}"/${PN}-440.26-locale.patch
2930 +)
2931 +NV_KV_MAX_PLUS="5.7"
2932 +CONFIG_CHECK="!DEBUG_MUTEXES ~!I2C_NVIDIA_GPU ~!LOCKDEP ~MTRR ~SYSVIPC ~ZONE_DMA"
2933 +
2934 +pkg_pretend() {
2935 + nvidia-driver_check
2936 +}
2937 +
2938 +pkg_setup() {
2939 + nvidia-driver_check
2940 +
2941 + # try to turn off distcc and ccache for people that have a problem with it
2942 + export DISTCC_DISABLE=1
2943 + export CCACHE_DISABLE=1
2944 +
2945 + if use driver && use kernel_linux; then
2946 + MODULE_NAMES="nvidia(video:${S}/kernel)"
2947 + use uvm && MODULE_NAMES+=" nvidia-uvm(video:${S}/kernel)"
2948 + use kms && MODULE_NAMES+=" nvidia-modeset(video:${S}/kernel) nvidia-drm(video:${S}/kernel)"
2949 +
2950 + # This needs to run after MODULE_NAMES (so that the eclass checks
2951 + # whether the kernel supports loadable modules) but before BUILD_PARAMS
2952 + # is set (so that KV_DIR is populated).
2953 + linux-mod_pkg_setup
2954 +
2955 + BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
2956 + SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC) NV_VERBOSE=1"
2957 +
2958 + # linux-mod_src_compile calls set_arch_to_kernel, which
2959 + # sets the ARCH to x86 but NVIDIA's wrapping Makefile
2960 + # expects x86_64 or i386 and then converts it to x86
2961 + # later on in the build process
2962 + BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
2963 + fi
2964 +
2965 + if use kernel_linux && kernel_is lt 2 6 9; then
2966 + eerror "You must build this against 2.6.9 or higher kernels."
2967 + fi
2968 +
2969 + # set variables to where files are in the package structure
2970 + if use kernel_FreeBSD; then
2971 + use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
2972 + NV_DOC="${S}/doc"
2973 + NV_OBJ="${S}/obj"
2974 + NV_SRC="${S}/src"
2975 + NV_MAN="${S}/x11/man"
2976 + NV_X11="${S}/obj"
2977 + NV_SOVER=1
2978 + elif use kernel_linux; then
2979 + NV_DOC="${S}"
2980 + NV_OBJ="${S}"
2981 + NV_SRC="${S}/kernel"
2982 + NV_MAN="${S}"
2983 + NV_X11="${S}"
2984 + NV_SOVER=${PV}
2985 + else
2986 + die "Could not determine proper NVIDIA package"
2987 + fi
2988 +}
2989 +
2990 +src_configure() {
2991 + tc-export AR CC LD
2992 +
2993 + default
2994 +}
2995 +
2996 +src_prepare() {
2997 + local man_file
2998 + for man_file in "${NV_MAN}"/*1.gz; do
2999 + gunzip $man_file || die
3000 + done
3001 +
3002 + if use tools; then
3003 + cp "${FILESDIR}"/nvidia-settings-fno-common.patch "${WORKDIR}" || die
3004 + cp "${FILESDIR}"/nvidia-settings-linker.patch "${WORKDIR}" || die
3005 + sed -i \
3006 + -e "s:@PV@:${PV}:g" \
3007 + "${WORKDIR}"/nvidia-settings-fno-common.patch \
3008 + "${WORKDIR}"/nvidia-settings-linker.patch \
3009 + || die
3010 + eapply "${WORKDIR}"/nvidia-settings-fno-common.patch
3011 + eapply "${WORKDIR}"/nvidia-settings-linker.patch
3012 + fi
3013 +
3014 + default
3015 +
3016 + if ! [ -f nvidia_icd.json ]; then
3017 + cp nvidia_icd.json.template nvidia_icd.json || die
3018 + sed -i -e 's:__NV_VK_ICD__:libGLX_nvidia.so.0:g' nvidia_icd.json || die
3019 + fi
3020 +}
3021 +
3022 +src_compile() {
3023 + cd "${NV_SRC}"
3024 + if use kernel_FreeBSD; then
3025 + MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
3026 + LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
3027 + elif use driver && use kernel_linux; then
3028 + BUILD_TARGETS=module linux-mod_src_compile \
3029 + KERNELRELEASE="${KV_FULL}" \
3030 + src="${KERNEL_DIR}"
3031 + fi
3032 +
3033 + if use tools; then
3034 + emake -C "${S}"/nvidia-settings-${PV}/src/libXNVCtrl \
3035 + DO_STRIP= \
3036 + LIBDIR="$(get_libdir)" \
3037 + NVLD="$(tc-getLD)" \
3038 + NV_VERBOSE=1 \
3039 + OUTPUTDIR=. \
3040 + RANLIB="$(tc-getRANLIB)"
3041 +
3042 + emake -C "${S}"/nvidia-settings-${PV}/src \
3043 + DO_STRIP= \
3044 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
3045 + LIBDIR="$(get_libdir)" \
3046 + NVLD="$(tc-getLD)" \
3047 + NVML_ENABLED=0 \
3048 + NV_USE_BUNDLED_LIBJANSSON=0 \
3049 + NV_VERBOSE=1 \
3050 + OUTPUTDIR=.
3051 + fi
3052 +}
3053 +
3054 +# Install nvidia library:
3055 +# the first parameter is the library to install
3056 +# the second parameter is the provided soversion
3057 +# the third parameter is the target directory if it is not /usr/lib
3058 +donvidia() {
3059 + # Full path to library
3060 + nv_LIB="${1}"
3061 +
3062 + # SOVER to use
3063 + nv_SOVER="$(scanelf -qF'%S#F' ${nv_LIB})"
3064 +
3065 + # Where to install
3066 + nv_DEST="${2}"
3067 +
3068 + # Get just the library name
3069 + nv_LIBNAME=$(basename "${nv_LIB}")
3070 +
3071 + if [[ "${nv_DEST}" ]]; then
3072 + exeinto ${nv_DEST}
3073 + action="doexe"
3074 + else
3075 + nv_DEST="/usr/$(get_libdir)"
3076 + action="dolib.so"
3077 + fi
3078 +
3079 + # Install the library
3080 + ${action} ${nv_LIB} || die "failed to install ${nv_LIBNAME}"
3081 +
3082 + # If the library has a SONAME and SONAME does not match the library name,
3083 + # then we need to create a symlink
3084 + if [[ ${nv_SOVER} ]] && ! [[ "${nv_SOVER}" = "${nv_LIBNAME}" ]]; then
3085 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_SOVER}
3086 + fi
3087 +
3088 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_LIBNAME/.so*/.so}
3089 +}
3090 +
3091 +src_install() {
3092 + if use driver && use kernel_linux; then
3093 + linux-mod_src_install
3094 +
3095 + # Add the aliases
3096 + # This file is tweaked with the appropriate video group in
3097 + # pkg_preinst, see bug #491414
3098 + insinto /etc/modprobe.d
3099 + newins "${FILESDIR}"/nvidia-169.07 nvidia.conf
3100 + if use uvm; then
3101 + doins "${FILESDIR}"/nvidia-rmmod.conf
3102 + udev_newrules "${FILESDIR}"/nvidia-uvm.udev-rule 99-nvidia-uvm.rules
3103 + else
3104 + sed -e 's|nvidia-uvm ||g' "${FILESDIR}"/nvidia-rmmod.conf \
3105 + > "${T}"/nvidia-rmmod.conf || die
3106 + doins "${T}"/nvidia-rmmod.conf
3107 + fi
3108 +
3109 + # Ensures that our device nodes are created when not using X
3110 + exeinto "$(get_udevdir)"
3111 + newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
3112 + udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
3113 + elif use kernel_FreeBSD; then
3114 + if use x86-fbsd; then
3115 + insinto /boot/modules
3116 + doins "${S}/src/nvidia.kld"
3117 + fi
3118 +
3119 + exeinto /boot/modules
3120 + doexe "${S}/src/nvidia.ko"
3121 + fi
3122 +
3123 + # NVIDIA kernel <-> userspace driver config lib
3124 + donvidia ${NV_OBJ}/libnvidia-cfg.so.${NV_SOVER}
3125 +
3126 + # NVIDIA framebuffer capture library
3127 + donvidia ${NV_OBJ}/libnvidia-fbc.so.${NV_SOVER}
3128 +
3129 + # NVIDIA video encode/decode <-> CUDA
3130 + if use kernel_linux; then
3131 + donvidia ${NV_OBJ}/libnvcuvid.so.${NV_SOVER}
3132 + donvidia ${NV_OBJ}/libnvidia-encode.so.${NV_SOVER}
3133 + fi
3134 +
3135 + if use X; then
3136 + # Xorg DDX driver
3137 + insinto /usr/$(get_libdir)/xorg/modules/drivers
3138 + doins ${NV_X11}/nvidia_drv.so
3139 +
3140 + # Xorg GLX driver
3141 + donvidia ${NV_X11}/libglxserver_nvidia.so.${NV_SOVER} \
3142 + /usr/$(get_libdir)/xorg/modules/extensions
3143 +
3144 + # Xorg nvidia.conf
3145 + if has_version '>=x11-base/xorg-server-1.16'; then
3146 + insinto /usr/share/X11/xorg.conf.d
3147 + newins {,50-}nvidia-drm-outputclass.conf
3148 + fi
3149 +
3150 + insinto /usr/share/glvnd/egl_vendor.d
3151 + doins ${NV_X11}/10_nvidia.json
3152 + fi
3153 +
3154 + if use wayland; then
3155 + insinto /usr/share/egl/egl_external_platform.d
3156 + doins ${NV_X11}/10_nvidia_wayland.json
3157 + fi
3158 +
3159 + # OpenCL ICD for NVIDIA
3160 + if use kernel_linux; then
3161 + insinto /etc/OpenCL/vendors
3162 + doins ${NV_OBJ}/nvidia.icd
3163 + fi
3164 +
3165 + # Helper Apps
3166 + exeinto /opt/bin/
3167 +
3168 + if use X; then
3169 + doexe ${NV_OBJ}/nvidia-xconfig
3170 +
3171 + insinto /etc/vulkan/icd.d
3172 + doins nvidia_icd.json
3173 +
3174 + insinto /etc/vulkan/implicit_layer.d
3175 + doins nvidia_layers.json
3176 + fi
3177 +
3178 + if use kernel_linux; then
3179 + doexe ${NV_OBJ}/nvidia-cuda-mps-control
3180 + doexe ${NV_OBJ}/nvidia-cuda-mps-server
3181 + doexe ${NV_OBJ}/nvidia-debugdump
3182 + doexe ${NV_OBJ}/nvidia-persistenced
3183 + doexe ${NV_OBJ}/nvidia-smi
3184 +
3185 + # install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
3186 + doexe ${NV_OBJ}/nvidia-modprobe
3187 + fowners root:video /opt/bin/nvidia-modprobe
3188 + fperms 4710 /opt/bin/nvidia-modprobe
3189 + dosym /{opt,usr}/bin/nvidia-modprobe
3190 +
3191 + doman nvidia-cuda-mps-control.1
3192 + doman nvidia-modprobe.1
3193 + doman nvidia-persistenced.1
3194 + newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
3195 + newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
3196 + newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
3197 + fi
3198 +
3199 + if use tools; then
3200 + emake -C "${S}"/nvidia-settings-${PV}/src/ \
3201 + DESTDIR="${D}" \
3202 + DO_STRIP= \
3203 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
3204 + LIBDIR="${D}/usr/$(get_libdir)" \
3205 + NV_USE_BUNDLED_LIBJANSSON=0 \
3206 + NV_VERBOSE=1 \
3207 + OUTPUTDIR=. \
3208 + PREFIX=/usr \
3209 + install
3210 +
3211 + if use static-libs; then
3212 + dolib.a "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/libXNVCtrl.a
3213 +
3214 + insinto /usr/include/NVCtrl
3215 + doins "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/*.h
3216 + fi
3217 +
3218 + insinto /usr/share/nvidia/
3219 + doins nvidia-application-profiles-${PV}-key-documentation
3220 +
3221 + insinto /etc/nvidia
3222 + newins \
3223 + nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
3224 +
3225 + # There is no icon in the FreeBSD tarball.
3226 + use kernel_FreeBSD || \
3227 + doicon ${NV_OBJ}/nvidia-settings.png
3228 +
3229 + domenu "${FILESDIR}"/nvidia-settings.desktop
3230 +
3231 + exeinto /etc/X11/xinit/xinitrc.d
3232 + newexe "${FILESDIR}"/95-nvidia-settings-r1 95-nvidia-settings
3233 + fi
3234 +
3235 + dobin ${NV_OBJ}/nvidia-bug-report.sh
3236 +
3237 + if has_multilib_profile && use multilib; then
3238 + local OABI=${ABI}
3239 + for ABI in $(get_install_abis); do
3240 + src_install-libs
3241 + done
3242 + ABI=${OABI}
3243 + unset OABI
3244 + else
3245 + src_install-libs
3246 + fi
3247 +
3248 + is_final_abi || die "failed to iterate through all ABIs"
3249 +
3250 + # Documentation
3251 + if use kernel_FreeBSD; then
3252 + dodoc "${NV_DOC}/README"
3253 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
3254 + use tools && doman "${NV_MAN}"/nvidia-settings.1
3255 + else
3256 + # Docs
3257 + newdoc "${NV_DOC}/README.txt" README
3258 + dodoc "${NV_DOC}/NVIDIA_Changelog"
3259 + doman "${NV_MAN}"/nvidia-smi.1
3260 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
3261 + use tools && doman "${NV_MAN}"/nvidia-settings.1
3262 + doman "${NV_MAN}"/nvidia-cuda-mps-control.1
3263 + fi
3264 +
3265 + readme.gentoo_create_doc
3266 +
3267 + docinto html
3268 + dodoc -r ${NV_DOC}/html/*
3269 +}
3270 +
3271 +src_install-libs() {
3272 + local inslibdir=$(get_libdir)
3273 + if use libglvnd; then
3274 + local GL_ROOT="/usr/$(get_libdir)"
3275 + else
3276 + local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
3277 + fi
3278 + local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
3279 + local nv_libdir="${NV_OBJ}"
3280 +
3281 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "x86" ]]; then
3282 + nv_libdir="${NV_OBJ}"/32
3283 + fi
3284 +
3285 + if use X; then
3286 + NV_GLX_LIBRARIES=(
3287 + "libEGL_nvidia.so.${NV_SOVER} ${GL_ROOT}"
3288 + "libGLESv1_CM_nvidia.so.${NV_SOVER} ${GL_ROOT}"
3289 + "libGLESv2_nvidia.so.${NV_SOVER} ${GL_ROOT}"
3290 + "libGLX_nvidia.so.${NV_SOVER} ${GL_ROOT}"
3291 + "libOpenCL.so.1.0.0 ${CL_ROOT}"
3292 + "libcuda.so.${NV_SOVER}"
3293 + "libnvcuvid.so.${NV_SOVER}"
3294 + "libnvidia-compiler.so.${NV_SOVER}"
3295 + "libnvidia-eglcore.so.${NV_SOVER}"
3296 + "libnvidia-encode.so.${NV_SOVER}"
3297 + "libnvidia-fatbinaryloader.so.${NV_SOVER}"
3298 + "libnvidia-fbc.so.${NV_SOVER}"
3299 + "libnvidia-glcore.so.${NV_SOVER}"
3300 + "libnvidia-glsi.so.${NV_SOVER}"
3301 + "libnvidia-glvkspirv.so.${NV_SOVER}"
3302 + "libnvidia-ifr.so.${NV_SOVER}"
3303 + "libnvidia-opencl.so.${NV_SOVER}"
3304 + "libnvidia-ptxjitcompiler.so.${NV_SOVER}"
3305 + "libvdpau_nvidia.so.${NV_SOVER}"
3306 + )
3307 + if ! use libglvnd; then
3308 + NV_GLX_LIBRARIES+=(
3309 + "libEGL.so.$( [[ ${ABI} == "amd64" ]] && usex compat ${NV_SOVER} 1.1.0 || echo 1.1.0) ${GL_ROOT}"
3310 + "libGL.so.1.7.0 ${GL_ROOT}"
3311 + "libGLESv1_CM.so.1.2.0 ${GL_ROOT}"
3312 + "libGLESv2.so.2.1.0 ${GL_ROOT}"
3313 + "libGLX.so.0 ${GL_ROOT}"
3314 + "libGLdispatch.so.0 ${GL_ROOT}"
3315 + "libOpenGL.so.0 ${GL_ROOT}"
3316 + )
3317 + fi
3318 +
3319 + if use wayland && has_multilib_profile && [[ ${ABI} == "amd64" ]];
3320 + then
3321 + NV_GLX_LIBRARIES+=(
3322 + "libnvidia-egl-wayland.so.1.1.4"
3323 + )
3324 + fi
3325 +
3326 + if use kernel_FreeBSD; then
3327 + NV_GLX_LIBRARIES+=(
3328 + "libnvidia-tls.so.${NV_SOVER}"
3329 + )
3330 + fi
3331 +
3332 + if use kernel_linux; then
3333 + NV_GLX_LIBRARIES+=(
3334 + "libnvidia-ml.so.${NV_SOVER}"
3335 + "libnvidia-tls.so.${NV_SOVER}"
3336 + )
3337 + fi
3338 +
3339 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "amd64" ]];
3340 + then
3341 + NV_GLX_LIBRARIES+=(
3342 + "libnvidia-cbl.so.${NV_SOVER}"
3343 + "libnvidia-rtcore.so.${NV_SOVER}"
3344 + "libnvoptix.so.${NV_SOVER}"
3345 + )
3346 + fi
3347 +
3348 + for NV_LIB in "${NV_GLX_LIBRARIES[@]}"; do
3349 + donvidia "${nv_libdir}"/${NV_LIB}
3350 + done
3351 + fi
3352 +}
3353 +
3354 +pkg_preinst() {
3355 + if use driver && use kernel_linux; then
3356 + linux-mod_pkg_preinst
3357 +
3358 + local videogroup="$(getent group video | cut -d ':' -f 3)"
3359 + if [ -z "${videogroup}" ]; then
3360 + eerror "Failed to determine the video group gid"
3361 + die "Failed to determine the video group gid"
3362 + else
3363 + sed -i \
3364 + -e "s:PACKAGE:${PF}:g" \
3365 + -e "s:VIDEOGID:${videogroup}:" \
3366 + "${D}"/etc/modprobe.d/nvidia.conf || die
3367 + fi
3368 + fi
3369 +
3370 + # Clean the dynamic libGL stuff's home to ensure
3371 + # we dont have stale libs floating around
3372 + if [ -d "${ROOT}"/usr/lib/opengl/nvidia ]; then
3373 + rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
3374 + fi
3375 + # Make sure we nuke the old nvidia-glx's env.d file
3376 + if [ -e "${ROOT}"/etc/env.d/09nvidia ]; then
3377 + rm -f "${ROOT}"/etc/env.d/09nvidia
3378 + fi
3379 +}
3380 +
3381 +pkg_postinst() {
3382 + use driver && use kernel_linux && linux-mod_pkg_postinst
3383 +
3384 + # Switch to the nvidia implementation
3385 + if ! use libglvnd; then
3386 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
3387 + fi
3388 +
3389 + readme.gentoo_print_elog
3390 +
3391 + if ! use X; then
3392 + elog "You have elected to not install the X.org driver. Along with"
3393 + elog "this the OpenGL libraries and VDPAU libraries were not"
3394 + elog "installed. Additionally, once the driver is loaded your card"
3395 + elog "and fan will run at max speed which may not be desirable."
3396 + elog "Use the 'nvidia-smi' init script to have your card and fan"
3397 + elog "speed scale appropriately."
3398 + elog
3399 + fi
3400 + if ! use tools; then
3401 + elog "USE=tools controls whether the nvidia-settings application"
3402 + elog "is installed. If you would like to use it, enable that"
3403 + elog "flag and re-emerge this ebuild. Optionally you can install"
3404 + elog "media-video/nvidia-settings"
3405 + elog
3406 + fi
3407 +}
3408 +
3409 +pkg_prerm() {
3410 + if ! use libglvnd; then
3411 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
3412 + fi
3413 +}
3414 +
3415 +pkg_postrm() {
3416 + use driver && use kernel_linux && linux-mod_pkg_postrm
3417 + if ! use libglvnd; then
3418 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
3419 + fi
3420 +}
3421 --
3422 2.25.3