Gentoo Archives: gentoo-commits

From: Jeroen Roovers <jer@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: x11-drivers/nvidia-drivers/, x11-drivers/nvidia-drivers/files/
Date: Sun, 03 Mar 2019 13:11:18
Message-Id: 1551618665.9fd6d358a4e831724c79f9369c3c86dea00cddd0.jer@gentoo
1 commit: 9fd6d358a4e831724c79f9369c3c86dea00cddd0
2 Author: Jeroen Roovers <jer <AT> gentoo <DOT> org>
3 AuthorDate: Sun Mar 3 13:09:53 2019 +0000
4 Commit: Jeroen Roovers <jer <AT> gentoo <DOT> org>
5 CommitDate: Sun Mar 3 13:11:05 2019 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=9fd6d358
7
8 x11-drivers/nvidia-drivers: USE=uvm: add udev rule, fix rmmod
9
10 Package-Manager: Portage-2.3.62, Repoman-2.3.12
11 Bug: https://bugs.gentoo.org/506696
12 Bug: https://bugs.gentoo.org/578126
13 Signed-off-by: Jeroen Roovers <jer <AT> gentoo.org>
14
15 .../nvidia-drivers/files/nvidia-uvm.udev-rule | 1 +
16 .../nvidia-drivers-390.116-r1.ebuild | 589 ++++++++++++++++++++
17 .../nvidia-drivers-410.104-r1.ebuild | 592 +++++++++++++++++++++
18 .../nvidia-drivers/nvidia-drivers-415.27-r1.ebuild | 592 +++++++++++++++++++++
19 .../nvidia-drivers/nvidia-drivers-418.43-r1.ebuild | 585 ++++++++++++++++++++
20 5 files changed, 2359 insertions(+)
21
22 diff --git a/x11-drivers/nvidia-drivers/files/nvidia-uvm.udev-rule b/x11-drivers/nvidia-drivers/files/nvidia-uvm.udev-rule
23 new file mode 100644
24 index 00000000000..3df8a3ab07f
25 --- /dev/null
26 +++ b/x11-drivers/nvidia-drivers/files/nvidia-uvm.udev-rule
27 @@ -0,0 +1 @@
28 +KERNEL=="nvidia_uvm", RUN+="/bin/bash -c '/bin/mknod -m 660 /dev/nvidia-uvm c $(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 0; /bin/chgrp video /dev/nvidia-uvm'"
29
30 diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-390.116-r1.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-390.116-r1.ebuild
31 new file mode 100644
32 index 00000000000..aa55b3cdd05
33 --- /dev/null
34 +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-390.116-r1.ebuild
35 @@ -0,0 +1,589 @@
36 +# Copyright 1999-2019 Gentoo Authors
37 +# Distributed under the terms of the GNU General Public License v2
38 +
39 +EAPI=6
40 +inherit eutils flag-o-matic linux-info linux-mod multilib-minimal nvidia-driver \
41 + portability toolchain-funcs unpacker user udev
42 +
43 +DESCRIPTION="NVIDIA Accelerated Graphics Driver"
44 +HOMEPAGE="http://www.nvidia.com/"
45 +
46 +AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
47 +AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
48 +ARM_NV_PACKAGE="NVIDIA-Linux-armv7l-gnueabihf-${PV}"
49 +X86_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86-${PV}"
50 +X86_NV_PACKAGE="NVIDIA-Linux-x86-${PV}"
51 +
52 +NV_URI="https://us.download.nvidia.com/XFree86/"
53 +SRC_URI="
54 + amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
55 + amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
56 + arm? ( ${NV_URI}Linux-x86-ARM/${PV}/${ARM_NV_PACKAGE}.run )
57 + x86-fbsd? ( ${NV_URI}FreeBSD-x86/${PV}/${X86_FBSD_NV_PACKAGE}.tar.gz )
58 + x86? ( ${NV_URI}Linux-x86/${PV}/${X86_NV_PACKAGE}.run )
59 + tools? (
60 + https://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-${PV}.tar.bz2
61 + )
62 +"
63 +
64 +LICENSE="GPL-2 NVIDIA-r2"
65 +SLOT="0/${PV%.*}"
66 +KEYWORDS="-* ~amd64 ~x86 ~amd64-fbsd ~x86-fbsd"
67 +RESTRICT="bindist mirror"
68 +EMULTILIB_PKG="true"
69 +
70 +IUSE="acpi compat +driver gtk3 kernel_FreeBSD kernel_linux +kms multilib static-libs +tools uvm wayland +X"
71 +REQUIRED_USE="
72 + tools? ( X )
73 + static-libs? ( tools )
74 +"
75 +
76 +COMMON="
77 + app-eselect/eselect-opencl
78 + kernel_linux? ( >=sys-libs/glibc-2.6.1 )
79 + tools? (
80 + dev-libs/atk
81 + dev-libs/glib:2
82 + dev-libs/jansson
83 + gtk3? (
84 + x11-libs/gtk+:3
85 + )
86 + x11-libs/cairo
87 + x11-libs/gdk-pixbuf[X]
88 + x11-libs/gtk+:2
89 + x11-libs/libX11
90 + x11-libs/libXext
91 + x11-libs/libXrandr
92 + x11-libs/libXv
93 + x11-libs/libXxf86vm
94 + x11-libs/pango[X]
95 + )
96 + X? (
97 + >=app-eselect/eselect-opengl-1.0.9
98 + app-misc/pax-utils
99 + )
100 +"
101 +DEPEND="
102 + ${COMMON}
103 + kernel_linux? ( virtual/linux-sources )
104 + tools? ( sys-apps/dbus )
105 +"
106 +RDEPEND="
107 + ${COMMON}
108 + acpi? ( sys-power/acpid )
109 + tools? ( !media-video/nvidia-settings )
110 + wayland? ( dev-libs/wayland[${MULTILIB_USEDEP}] )
111 + X? (
112 + <x11-base/xorg-server-1.20.99:=
113 + >=x11-libs/libX11-1.6.2[${MULTILIB_USEDEP}]
114 + >=x11-libs/libXext-1.3.2[${MULTILIB_USEDEP}]
115 + >=x11-libs/libvdpau-1.0[${MULTILIB_USEDEP}]
116 + sys-libs/zlib[${MULTILIB_USEDEP}]
117 + )
118 +"
119 +QA_PREBUILT="opt/* usr/lib*"
120 +S=${WORKDIR}/
121 +
122 +nvidia_drivers_versions_check() {
123 + if use amd64 && has_multilib_profile && \
124 + [ "${DEFAULT_ABI}" != "amd64" ]; then
125 + eerror "This ebuild doesn't currently support changing your default ABI"
126 + die "Unexpected \${DEFAULT_ABI} = ${DEFAULT_ABI}"
127 + fi
128 +
129 + if use kernel_linux && kernel_is ge 5 1; then
130 + ewarn "Gentoo supports kernels which are supported by NVIDIA"
131 + ewarn "which are limited to the following kernels:"
132 + ewarn "<sys-kernel/gentoo-sources-5.1"
133 + ewarn "<sys-kernel/vanilla-sources-5.1"
134 + ewarn ""
135 + ewarn "You are free to utilize epatch_user to provide whatever"
136 + ewarn "support you feel is appropriate, but will not receive"
137 + ewarn "support as a result of those changes."
138 + ewarn ""
139 + ewarn "Do not file a bug report about this."
140 + ewarn ""
141 + fi
142 +
143 + # Since Nvidia ships many different series of drivers, we need to give the user
144 + # some kind of guidance as to what version they should install. This tries
145 + # to point the user in the right direction but can't be perfect. check
146 + # nvidia-driver.eclass
147 + nvidia-driver-check-warning
148 +
149 + # Kernel features/options to check for
150 + CONFIG_CHECK="!DEBUG_MUTEXES ~!LOCKDEP ~MTRR ~SYSVIPC ~ZONE_DMA"
151 + use x86 && CONFIG_CHECK+=" ~HIGHMEM"
152 +
153 + # Now do the above checks
154 + use kernel_linux && check_extra_config
155 +}
156 +
157 +pkg_pretend() {
158 + nvidia_drivers_versions_check
159 +}
160 +
161 +pkg_setup() {
162 + nvidia_drivers_versions_check
163 +
164 + # try to turn off distcc and ccache for people that have a problem with it
165 + export DISTCC_DISABLE=1
166 + export CCACHE_DISABLE=1
167 +
168 + if use driver && use kernel_linux; then
169 + MODULE_NAMES="nvidia(video:${S}/kernel)"
170 + use uvm && MODULE_NAMES+=" nvidia-uvm(video:${S}/kernel)"
171 + use kms && MODULE_NAMES+=" nvidia-modeset(video:${S}/kernel) nvidia-drm(video:${S}/kernel)"
172 +
173 + # This needs to run after MODULE_NAMES (so that the eclass checks
174 + # whether the kernel supports loadable modules) but before BUILD_PARAMS
175 + # is set (so that KV_DIR is populated).
176 + linux-mod_pkg_setup
177 +
178 + BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
179 + SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC) NV_VERBOSE=1"
180 +
181 + # linux-mod_src_compile calls set_arch_to_kernel, which
182 + # sets the ARCH to x86 but NVIDIA's wrapping Makefile
183 + # expects x86_64 or i386 and then converts it to x86
184 + # later on in the build process
185 + BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
186 + fi
187 +
188 + if use kernel_linux && kernel_is lt 2 6 9; then
189 + eerror "You must build this against 2.6.9 or higher kernels."
190 + fi
191 +
192 + # set variables to where files are in the package structure
193 + if use kernel_FreeBSD; then
194 + use x86-fbsd && S="${WORKDIR}/${X86_FBSD_NV_PACKAGE}"
195 + use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
196 + NV_DOC="${S}/doc"
197 + NV_OBJ="${S}/obj"
198 + NV_SRC="${S}/src"
199 + NV_MAN="${S}/x11/man"
200 + NV_X11="${S}/obj"
201 + NV_SOVER=1
202 + elif use kernel_linux; then
203 + NV_DOC="${S}"
204 + NV_OBJ="${S}"
205 + NV_SRC="${S}/kernel"
206 + NV_MAN="${S}"
207 + NV_X11="${S}"
208 + NV_SOVER=${PV}
209 + else
210 + die "Could not determine proper NVIDIA package"
211 + fi
212 +}
213 +
214 +src_prepare() {
215 + local man_file
216 + for man_file in "${NV_MAN}"/*1.gz; do
217 + gunzip $man_file || die
218 + done
219 +
220 + if use tools; then
221 + cp "${FILESDIR}"/nvidia-settings-linker.patch "${WORKDIR}" || die
222 + sed -i \
223 + -e "s:@PV@:${PV}:g" \
224 + "${WORKDIR}"/nvidia-settings-linker.patch || die
225 + eapply "${WORKDIR}"/nvidia-settings-linker.patch
226 + fi
227 +
228 + default
229 +
230 + if ! [ -f nvidia_icd.json ]; then
231 + cp nvidia_icd.json.template nvidia_icd.json || die
232 + sed -i -e 's:__NV_VK_ICD__:libGLX_nvidia.so.0:g' nvidia_icd.json || die
233 + fi
234 +}
235 +
236 +src_compile() {
237 + # This is already the default on Linux, as there's no toplevel Makefile, but
238 + # on FreeBSD there's one and triggers the kernel module build, as we install
239 + # it by itself, pass this.
240 +
241 + cd "${NV_SRC}"
242 + if use kernel_FreeBSD; then
243 + MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
244 + LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
245 + elif use driver && use kernel_linux; then
246 + BUILD_TARGETS=module linux-mod_src_compile \
247 + KERNELRELEASE="${KV_FULL}" \
248 + src="${KERNEL_DIR}"
249 + fi
250 +
251 + if use tools; then
252 + emake -C "${S}"/nvidia-settings-${PV}/src \
253 + AR="$(tc-getAR)" \
254 + CC="$(tc-getCC)" \
255 + DO_STRIP= \
256 + LD="$(tc-getCC)" \
257 + LIBDIR="$(get_libdir)" \
258 + NVLD="$(tc-getLD)" \
259 + NV_VERBOSE=1 \
260 + RANLIB="$(tc-getRANLIB)" \
261 + build-xnvctrl
262 +
263 + emake -C "${S}"/nvidia-settings-${PV}/src \
264 + CC="$(tc-getCC)" \
265 + DO_STRIP= \
266 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
267 + LD="$(tc-getCC)" \
268 + LIBDIR="$(get_libdir)" \
269 + NVLD="$(tc-getLD)" \
270 + NVML_ENABLED=0 \
271 + NV_USE_BUNDLED_LIBJANSSON=0 \
272 + NV_VERBOSE=1
273 + fi
274 +}
275 +
276 +# Install nvidia library:
277 +# the first parameter is the library to install
278 +# the second parameter is the provided soversion
279 +# the third parameter is the target directory if it is not /usr/lib
280 +donvidia() {
281 + # Full path to library
282 + nv_LIB="${1}"
283 +
284 + # SOVER to use
285 + nv_SOVER="$(scanelf -qF'%S#F' ${nv_LIB})"
286 +
287 + # Where to install
288 + nv_DEST="${2}"
289 +
290 + # Get just the library name
291 + nv_LIBNAME=$(basename "${nv_LIB}")
292 +
293 + if [[ "${nv_DEST}" ]]; then
294 + exeinto ${nv_DEST}
295 + action="doexe"
296 + else
297 + nv_DEST="/usr/$(get_libdir)"
298 + action="dolib.so"
299 + fi
300 +
301 + # Install the library
302 + ${action} ${nv_LIB} || die "failed to install ${nv_LIBNAME}"
303 +
304 + # If the library has a SONAME and SONAME does not match the library name,
305 + # then we need to create a symlink
306 + if [[ ${nv_SOVER} ]] && ! [[ "${nv_SOVER}" = "${nv_LIBNAME}" ]]; then
307 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_SOVER} \
308 + || die "failed to create ${nv_DEST}/${nv_SOVER} symlink"
309 + fi
310 +
311 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_LIBNAME/.so*/.so} \
312 + || die "failed to create ${nv_LIBNAME/.so*/.so} symlink"
313 +}
314 +
315 +src_install() {
316 + if use driver && use kernel_linux; then
317 + linux-mod_src_install
318 +
319 + # Add the aliases
320 + # This file is tweaked with the appropriate video group in
321 + # pkg_preinst, see bug #491414
322 + insinto /etc/modprobe.d
323 + newins "${FILESDIR}"/nvidia-169.07 nvidia.conf
324 + if use uvm; then
325 + doins "${FILESDIR}"/nvidia-rmmod.conf
326 + udev_newrules "${FILESDIR}"/nvidia-uvm.udev-rule 99-nvidia-uvm.rules
327 + else
328 + sed -e 's|nvidia-uvm ||g' "${FILESDIR}"/nvidia-rmmod.conf \
329 + > "${T}"/nvidia-rmmod.conf || die
330 + doins "${T}"/nvidia-rmmod.conf
331 + fi
332 +
333 + # Ensures that our device nodes are created when not using X
334 + exeinto "$(get_udevdir)"
335 + newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
336 + udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
337 + elif use kernel_FreeBSD; then
338 + if use x86-fbsd; then
339 + insinto /boot/modules
340 + doins "${S}/src/nvidia.kld"
341 + fi
342 +
343 + exeinto /boot/modules
344 + doexe "${S}/src/nvidia.ko"
345 + fi
346 +
347 + # NVIDIA kernel <-> userspace driver config lib
348 + donvidia ${NV_OBJ}/libnvidia-cfg.so.${NV_SOVER}
349 +
350 + # NVIDIA framebuffer capture library
351 + donvidia ${NV_OBJ}/libnvidia-fbc.so.${NV_SOVER}
352 +
353 + # NVIDIA video encode/decode <-> CUDA
354 + if use kernel_linux; then
355 + donvidia ${NV_OBJ}/libnvcuvid.so.${NV_SOVER}
356 + donvidia ${NV_OBJ}/libnvidia-encode.so.${NV_SOVER}
357 + fi
358 +
359 + if use X; then
360 + # Xorg DDX driver
361 + insinto /usr/$(get_libdir)/xorg/modules/drivers
362 + doins ${NV_X11}/nvidia_drv.so
363 +
364 + # Xorg GLX driver
365 + donvidia ${NV_X11}/libglx.so.${NV_SOVER} \
366 + /usr/$(get_libdir)/opengl/nvidia/extensions
367 +
368 + # Xorg nvidia.conf
369 + if has_version '>=x11-base/xorg-server-1.16'; then
370 + insinto /usr/share/X11/xorg.conf.d
371 + newins {,50-}nvidia-drm-outputclass.conf
372 + fi
373 +
374 + insinto /usr/share/glvnd/egl_vendor.d
375 + doins ${NV_X11}/10_nvidia.json
376 + fi
377 +
378 + if use wayland; then
379 + insinto /usr/share/egl/egl_external_platform.d
380 + doins ${NV_X11}/10_nvidia_wayland.json
381 + fi
382 +
383 + # OpenCL ICD for NVIDIA
384 + if use kernel_linux; then
385 + insinto /etc/OpenCL/vendors
386 + doins ${NV_OBJ}/nvidia.icd
387 + fi
388 +
389 + # Documentation
390 + if use kernel_FreeBSD; then
391 + dodoc "${NV_DOC}/README"
392 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
393 + use tools && doman "${NV_MAN}"/nvidia-settings.1
394 + else
395 + # Docs
396 + newdoc "${NV_DOC}/README.txt" README
397 + dodoc "${NV_DOC}/NVIDIA_Changelog"
398 + doman "${NV_MAN}"/nvidia-smi.1
399 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
400 + use tools && doman "${NV_MAN}"/nvidia-settings.1
401 + doman "${NV_MAN}"/nvidia-cuda-mps-control.1
402 + fi
403 +
404 + docinto html
405 + dodoc -r ${NV_DOC}/html/*
406 +
407 + # Helper Apps
408 + exeinto /opt/bin/
409 +
410 + if use X; then
411 + doexe ${NV_OBJ}/nvidia-xconfig
412 +
413 + insinto /etc/vulkan/icd.d
414 + doins nvidia_icd.json
415 + fi
416 +
417 + if use kernel_linux; then
418 + doexe ${NV_OBJ}/nvidia-cuda-mps-control
419 + doexe ${NV_OBJ}/nvidia-cuda-mps-server
420 + doexe ${NV_OBJ}/nvidia-debugdump
421 + doexe ${NV_OBJ}/nvidia-persistenced
422 + doexe ${NV_OBJ}/nvidia-smi
423 +
424 + # install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
425 + doexe ${NV_OBJ}/nvidia-modprobe
426 + fowners root:video /opt/bin/nvidia-modprobe
427 + fperms 4710 /opt/bin/nvidia-modprobe
428 + dosym /{opt,usr}/bin/nvidia-modprobe
429 +
430 + doman nvidia-cuda-mps-control.1
431 + doman nvidia-modprobe.1
432 + doman nvidia-persistenced.1
433 + newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
434 + newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
435 + newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
436 + fi
437 +
438 + if use tools; then
439 + emake -C "${S}"/nvidia-settings-${PV}/src/ \
440 + DESTDIR="${D}" \
441 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
442 + LIBDIR="${D}/usr/$(get_libdir)" \
443 + NV_USE_BUNDLED_LIBJANSSON=0 \
444 + NV_VERBOSE=1 \
445 + PREFIX=/usr \
446 + DO_STRIP= \
447 + install
448 +
449 + if use static-libs; then
450 + dolib.a "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/libXNVCtrl.a
451 +
452 + insinto /usr/include/NVCtrl
453 + doins "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/*.h
454 + fi
455 +
456 + insinto /usr/share/nvidia/
457 + doins nvidia-application-profiles-${PV}-key-documentation
458 +
459 + insinto /etc/nvidia
460 + newins \
461 + nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
462 +
463 + # There is no icon in the FreeBSD tarball.
464 + use kernel_FreeBSD || \
465 + doicon ${NV_OBJ}/nvidia-settings.png
466 +
467 + domenu "${FILESDIR}"/nvidia-settings.desktop
468 +
469 + exeinto /etc/X11/xinit/xinitrc.d
470 + newexe "${FILESDIR}"/95-nvidia-settings-r1 95-nvidia-settings
471 + fi
472 +
473 + dobin ${NV_OBJ}/nvidia-bug-report.sh
474 +
475 + if has_multilib_profile && use multilib; then
476 + local OABI=${ABI}
477 + for ABI in $(get_install_abis); do
478 + src_install-libs
479 + done
480 + ABI=${OABI}
481 + unset OABI
482 + else
483 + src_install-libs
484 + fi
485 +
486 + is_final_abi || die "failed to iterate through all ABIs"
487 +
488 + readme.gentoo_create_doc
489 +}
490 +
491 +src_install-libs() {
492 + local inslibdir=$(get_libdir)
493 + local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
494 + local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
495 + local nv_libdir="${NV_OBJ}"
496 +
497 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "x86" ]]; then
498 + nv_libdir="${NV_OBJ}"/32
499 + fi
500 +
501 + if use X; then
502 + NV_GLX_LIBRARIES=(
503 + "libEGL.so.$(usex compat ${NV_SOVER} 1.1.0) ${GL_ROOT}"
504 + "libEGL_nvidia.so.${NV_SOVER} ${GL_ROOT}"
505 + "libGL.so.$(usex compat ${NV_SOVER} 1.7.0) ${GL_ROOT}"
506 + "libGLESv1_CM.so.1.2.0 ${GL_ROOT}"
507 + "libGLESv1_CM_nvidia.so.${NV_SOVER} ${GL_ROOT}"
508 + "libGLESv2.so.2.1.0 ${GL_ROOT}"
509 + "libGLESv2_nvidia.so.${NV_SOVER} ${GL_ROOT}"
510 + "libGLX.so.0 ${GL_ROOT}"
511 + "libGLX_nvidia.so.${NV_SOVER} ${GL_ROOT}"
512 + "libGLdispatch.so.0 ${GL_ROOT}"
513 + "libOpenCL.so.1.0.0 ${CL_ROOT}"
514 + "libOpenGL.so.0 ${GL_ROOT}"
515 + "libcuda.so.${NV_SOVER}"
516 + "libnvcuvid.so.${NV_SOVER}"
517 + "libnvidia-compiler.so.${NV_SOVER}"
518 + "libnvidia-eglcore.so.${NV_SOVER}"
519 + "libnvidia-encode.so.${NV_SOVER}"
520 + "libnvidia-fatbinaryloader.so.${NV_SOVER}"
521 + "libnvidia-fbc.so.${NV_SOVER}"
522 + "libnvidia-glcore.so.${NV_SOVER}"
523 + "libnvidia-glsi.so.${NV_SOVER}"
524 + "libnvidia-ifr.so.${NV_SOVER}"
525 + "libnvidia-opencl.so.${NV_SOVER}"
526 + "libnvidia-ptxjitcompiler.so.${NV_SOVER}"
527 + "libvdpau_nvidia.so.${NV_SOVER}"
528 + )
529 +
530 + if use wayland && has_multilib_profile && [[ ${ABI} == "amd64" ]];
531 + then
532 + NV_GLX_LIBRARIES+=(
533 + "libnvidia-egl-wayland.so.1.0.2"
534 + )
535 + fi
536 +
537 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "amd64" ]];
538 + then
539 + NV_GLX_LIBRARIES+=(
540 + "libnvidia-wfb.so.${NV_SOVER}"
541 + )
542 + fi
543 +
544 + if use kernel_FreeBSD; then
545 + NV_GLX_LIBRARIES+=(
546 + "libnvidia-tls.so.${NV_SOVER}"
547 + )
548 + fi
549 +
550 + if use kernel_linux; then
551 + NV_GLX_LIBRARIES+=(
552 + "libnvidia-ml.so.${NV_SOVER}"
553 + "tls/libnvidia-tls.so.${NV_SOVER}"
554 + )
555 + fi
556 +
557 + for NV_LIB in "${NV_GLX_LIBRARIES[@]}"; do
558 + donvidia "${nv_libdir}"/${NV_LIB}
559 + done
560 + fi
561 +}
562 +
563 +pkg_preinst() {
564 + if use driver && use kernel_linux; then
565 + linux-mod_pkg_preinst
566 +
567 + local videogroup="$(egetent group video | cut -d ':' -f 3)"
568 + if [ -z "${videogroup}" ]; then
569 + eerror "Failed to determine the video group gid"
570 + die "Failed to determine the video group gid"
571 + else
572 + sed -i \
573 + -e "s:PACKAGE:${PF}:g" \
574 + -e "s:VIDEOGID:${videogroup}:" \
575 + "${D}"/etc/modprobe.d/nvidia.conf || die
576 + fi
577 + fi
578 +
579 + # Clean the dynamic libGL stuff's home to ensure
580 + # we dont have stale libs floating around
581 + if [ -d "${ROOT}"/usr/lib/opengl/nvidia ]; then
582 + rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
583 + fi
584 + # Make sure we nuke the old nvidia-glx's env.d file
585 + if [ -e "${ROOT}"/etc/env.d/09nvidia ]; then
586 + rm -f "${ROOT}"/etc/env.d/09nvidia
587 + fi
588 +}
589 +
590 +pkg_postinst() {
591 + use driver && use kernel_linux && linux-mod_pkg_postinst
592 +
593 + # Switch to the nvidia implementation
594 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
595 + "${ROOT}"/usr/bin/eselect opencl set --use-old nvidia
596 +
597 + readme.gentoo_print_elog
598 +
599 + if ! use X; then
600 + elog "You have elected to not install the X.org driver. Along with"
601 + elog "this the OpenGL libraries and VDPAU libraries were not"
602 + elog "installed. Additionally, once the driver is loaded your card"
603 + elog "and fan will run at max speed which may not be desirable."
604 + elog "Use the 'nvidia-smi' init script to have your card and fan"
605 + elog "speed scale appropriately."
606 + elog
607 + fi
608 + if ! use tools; then
609 + elog "USE=tools controls whether the nvidia-settings application"
610 + elog "is installed. If you would like to use it, enable that"
611 + elog "flag and re-emerge this ebuild. Optionally you can install"
612 + elog "media-video/nvidia-settings"
613 + elog
614 + fi
615 +}
616 +
617 +pkg_prerm() {
618 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
619 +}
620 +
621 +pkg_postrm() {
622 + use driver && use kernel_linux && linux-mod_pkg_postrm
623 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
624 +}
625
626 diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-410.104-r1.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-410.104-r1.ebuild
627 new file mode 100644
628 index 00000000000..4a4029ee9d4
629 --- /dev/null
630 +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-410.104-r1.ebuild
631 @@ -0,0 +1,592 @@
632 +# Copyright 1999-2019 Gentoo Authors
633 +# Distributed under the terms of the GNU General Public License v2
634 +
635 +EAPI=6
636 +inherit eutils flag-o-matic linux-info linux-mod multilib-minimal nvidia-driver \
637 + portability toolchain-funcs unpacker user udev
638 +
639 +DESCRIPTION="NVIDIA Accelerated Graphics Driver"
640 +HOMEPAGE="http://www.nvidia.com/"
641 +
642 +AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
643 +AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
644 +ARM_NV_PACKAGE="NVIDIA-Linux-armv7l-gnueabihf-${PV}"
645 +
646 +NV_URI="https://us.download.nvidia.com/XFree86/"
647 +SRC_URI="
648 + amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
649 + amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
650 + tools? (
651 + https://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-${PV}.tar.bz2
652 + )
653 +"
654 +
655 +LICENSE="GPL-2 NVIDIA-r2"
656 +SLOT="0/${PV%.*}"
657 +KEYWORDS="-* ~amd64 ~amd64-fbsd"
658 +RESTRICT="bindist mirror"
659 +EMULTILIB_PKG="true"
660 +
661 +IUSE="acpi compat +driver gtk3 kernel_FreeBSD kernel_linux +kms multilib static-libs +tools uvm wayland +X"
662 +REQUIRED_USE="
663 + tools? ( X )
664 + static-libs? ( tools )
665 +"
666 +
667 +COMMON="
668 + app-eselect/eselect-opencl
669 + kernel_linux? ( >=sys-libs/glibc-2.6.1 )
670 + tools? (
671 + dev-libs/atk
672 + dev-libs/glib:2
673 + dev-libs/jansson
674 + gtk3? (
675 + x11-libs/gtk+:3
676 + )
677 + x11-libs/cairo
678 + x11-libs/gdk-pixbuf[X]
679 + x11-libs/gtk+:2
680 + x11-libs/libX11
681 + x11-libs/libXext
682 + x11-libs/libXrandr
683 + x11-libs/libXv
684 + x11-libs/libXxf86vm
685 + x11-libs/pango[X]
686 + )
687 + X? (
688 + >=app-eselect/eselect-opengl-1.0.9
689 + app-misc/pax-utils
690 + )
691 +"
692 +DEPEND="
693 + ${COMMON}
694 + kernel_linux? ( virtual/linux-sources )
695 + tools? ( sys-apps/dbus )
696 +"
697 +RDEPEND="
698 + ${COMMON}
699 + acpi? ( sys-power/acpid )
700 + tools? ( !media-video/nvidia-settings )
701 + wayland? ( dev-libs/wayland[${MULTILIB_USEDEP}] )
702 + X? (
703 + <x11-base/xorg-server-1.20.99:=
704 + >=x11-libs/libX11-1.6.2[${MULTILIB_USEDEP}]
705 + >=x11-libs/libXext-1.3.2[${MULTILIB_USEDEP}]
706 + >=x11-libs/libvdpau-1.0[${MULTILIB_USEDEP}]
707 + sys-libs/zlib[${MULTILIB_USEDEP}]
708 + )
709 +"
710 +QA_PREBUILT="opt/* usr/lib*"
711 +S=${WORKDIR}/
712 +
713 +nvidia_drivers_versions_check() {
714 + if use amd64 && has_multilib_profile && \
715 + [ "${DEFAULT_ABI}" != "amd64" ]; then
716 + eerror "This ebuild doesn't currently support changing your default ABI"
717 + die "Unexpected \${DEFAULT_ABI} = ${DEFAULT_ABI}"
718 + fi
719 +
720 + if use kernel_linux && kernel_is ge 5 1; then
721 + ewarn "Gentoo supports kernels which are supported by NVIDIA"
722 + ewarn "which are limited to the following kernels:"
723 + ewarn "<sys-kernel/gentoo-sources-5.1"
724 + ewarn "<sys-kernel/vanilla-sources-5.1"
725 + ewarn ""
726 + ewarn "You are free to utilize epatch_user to provide whatever"
727 + ewarn "support you feel is appropriate, but will not receive"
728 + ewarn "support as a result of those changes."
729 + ewarn ""
730 + ewarn "Do not file a bug report about this."
731 + ewarn ""
732 + fi
733 +
734 + # Since Nvidia ships many different series of drivers, we need to give the user
735 + # some kind of guidance as to what version they should install. This tries
736 + # to point the user in the right direction but can't be perfect. check
737 + # nvidia-driver.eclass
738 + nvidia-driver-check-warning
739 +
740 + # Kernel features/options to check for
741 + CONFIG_CHECK="!DEBUG_MUTEXES ~!LOCKDEP ~MTRR ~PM ~SYSVIPC ~ZONE_DMA"
742 +
743 + # Now do the above checks
744 + use kernel_linux && check_extra_config
745 +}
746 +
747 +pkg_pretend() {
748 + nvidia_drivers_versions_check
749 +}
750 +
751 +pkg_setup() {
752 + nvidia_drivers_versions_check
753 +
754 + # try to turn off distcc and ccache for people that have a problem with it
755 + export DISTCC_DISABLE=1
756 + export CCACHE_DISABLE=1
757 +
758 + if use driver && use kernel_linux; then
759 + MODULE_NAMES="nvidia(video:${S}/kernel)"
760 + use uvm && MODULE_NAMES+=" nvidia-uvm(video:${S}/kernel)"
761 + use kms && MODULE_NAMES+=" nvidia-modeset(video:${S}/kernel) nvidia-drm(video:${S}/kernel)"
762 +
763 + # This needs to run after MODULE_NAMES (so that the eclass checks
764 + # whether the kernel supports loadable modules) but before BUILD_PARAMS
765 + # is set (so that KV_DIR is populated).
766 + linux-mod_pkg_setup
767 +
768 + BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
769 + SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC) NV_VERBOSE=1"
770 +
771 + # linux-mod_src_compile calls set_arch_to_kernel, which
772 + # sets the ARCH to x86 but NVIDIA's wrapping Makefile
773 + # expects x86_64 or i386 and then converts it to x86
774 + # later on in the build process
775 + BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
776 + fi
777 +
778 + if use kernel_linux && kernel_is lt 2 6 9; then
779 + eerror "You must build this against 2.6.9 or higher kernels."
780 + fi
781 +
782 + # set variables to where files are in the package structure
783 + if use kernel_FreeBSD; then
784 + use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
785 + NV_DOC="${S}/doc"
786 + NV_OBJ="${S}/obj"
787 + NV_SRC="${S}/src"
788 + NV_MAN="${S}/x11/man"
789 + NV_X11="${S}/obj"
790 + NV_SOVER=1
791 + elif use kernel_linux; then
792 + NV_DOC="${S}"
793 + NV_OBJ="${S}"
794 + NV_SRC="${S}/kernel"
795 + NV_MAN="${S}"
796 + NV_X11="${S}"
797 + NV_SOVER=${PV}
798 + else
799 + die "Could not determine proper NVIDIA package"
800 + fi
801 +}
802 +
803 +src_prepare() {
804 + local man_file
805 + for man_file in "${NV_MAN}"/*1.gz; do
806 + gunzip $man_file || die
807 + done
808 +
809 + if use tools; then
810 + cp "${FILESDIR}"/nvidia-settings-linker.patch "${WORKDIR}" || die
811 + sed -i \
812 + -e "s:@PV@:${PV}:g" \
813 + "${WORKDIR}"/nvidia-settings-linker.patch || die
814 + eapply "${WORKDIR}"/nvidia-settings-linker.patch
815 + fi
816 +
817 + default
818 +
819 + if ! [ -f nvidia_icd.json ]; then
820 + cp nvidia_icd.json.template nvidia_icd.json || die
821 + sed -i -e 's:__NV_VK_ICD__:libGLX_nvidia.so.0:g' nvidia_icd.json || die
822 + fi
823 +}
824 +
825 +src_compile() {
826 + # This is already the default on Linux, as there's no toplevel Makefile, but
827 + # on FreeBSD there's one and triggers the kernel module build, as we install
828 + # it by itself, pass this.
829 +
830 + cd "${NV_SRC}"
831 + if use kernel_FreeBSD; then
832 + MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
833 + LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
834 + elif use driver && use kernel_linux; then
835 + BUILD_TARGETS=module linux-mod_src_compile \
836 + KERNELRELEASE="${KV_FULL}" \
837 + src="${KERNEL_DIR}"
838 + fi
839 +
840 + if use tools; then
841 + emake -C "${S}"/nvidia-settings-${PV}/src \
842 + AR="$(tc-getAR)" \
843 + CC="$(tc-getCC)" \
844 + DO_STRIP= \
845 + LD="$(tc-getCC)" \
846 + LIBDIR="$(get_libdir)" \
847 + NVLD="$(tc-getLD)" \
848 + NV_VERBOSE=1 \
849 + RANLIB="$(tc-getRANLIB)" \
850 + build-xnvctrl
851 +
852 + emake -C "${S}"/nvidia-settings-${PV}/src \
853 + CC="$(tc-getCC)" \
854 + DO_STRIP= \
855 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
856 + LD="$(tc-getCC)" \
857 + LIBDIR="$(get_libdir)" \
858 + NVLD="$(tc-getLD)" \
859 + NVML_ENABLED=0 \
860 + NV_USE_BUNDLED_LIBJANSSON=0 \
861 + NV_VERBOSE=1
862 + fi
863 +}
864 +
865 +# Install nvidia library:
866 +# the first parameter is the library to install
867 +# the second parameter is the provided soversion
868 +# the third parameter is the target directory if it is not /usr/lib
869 +donvidia() {
870 + # Full path to library
871 + nv_LIB="${1}"
872 +
873 + # SOVER to use
874 + nv_SOVER="$(scanelf -qF'%S#F' ${nv_LIB})"
875 +
876 + # Where to install
877 + nv_DEST="${2}"
878 +
879 + # Get just the library name
880 + nv_LIBNAME=$(basename "${nv_LIB}")
881 +
882 + if [[ "${nv_DEST}" ]]; then
883 + exeinto ${nv_DEST}
884 + action="doexe"
885 + else
886 + nv_DEST="/usr/$(get_libdir)"
887 + action="dolib.so"
888 + fi
889 +
890 + # Install the library
891 + ${action} ${nv_LIB} || die "failed to install ${nv_LIBNAME}"
892 +
893 + # If the library has a SONAME and SONAME does not match the library name,
894 + # then we need to create a symlink
895 + if [[ ${nv_SOVER} ]] && ! [[ "${nv_SOVER}" = "${nv_LIBNAME}" ]]; then
896 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_SOVER} \
897 + || die "failed to create ${nv_DEST}/${nv_SOVER} symlink"
898 + fi
899 +
900 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_LIBNAME/.so*/.so} \
901 + || die "failed to create ${nv_LIBNAME/.so*/.so} symlink"
902 +}
903 +
904 +src_install() {
905 + if use driver && use kernel_linux; then
906 + linux-mod_src_install
907 +
908 + # Add the aliases
909 + # This file is tweaked with the appropriate video group in
910 + # pkg_preinst, see bug #491414
911 + insinto /etc/modprobe.d
912 + newins "${FILESDIR}"/nvidia-169.07 nvidia.conf
913 + if use uvm; then
914 + doins "${FILESDIR}"/nvidia-rmmod.conf
915 + udev_newrules "${FILESDIR}"/nvidia-uvm.udev-rule 99-nvidia-uvm.rules
916 + else
917 + sed -e 's|nvidia-uvm ||g' "${FILESDIR}"/nvidia-rmmod.conf \
918 + > "${T}"/nvidia-rmmod.conf || die
919 + doins "${T}"/nvidia-rmmod.conf
920 + fi
921 +
922 + # Ensures that our device nodes are created when not using X
923 + exeinto "$(get_udevdir)"
924 + newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
925 + udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
926 + elif use kernel_FreeBSD; then
927 + if use x86-fbsd; then
928 + insinto /boot/modules
929 + doins "${S}/src/nvidia.kld"
930 + fi
931 +
932 + exeinto /boot/modules
933 + doexe "${S}/src/nvidia.ko"
934 + fi
935 +
936 + # NVIDIA kernel <-> userspace driver config lib
937 + donvidia ${NV_OBJ}/libnvidia-cfg.so.${NV_SOVER}
938 +
939 + # NVIDIA framebuffer capture library
940 + donvidia ${NV_OBJ}/libnvidia-fbc.so.${NV_SOVER}
941 +
942 + # NVIDIA video encode/decode <-> CUDA
943 + if use kernel_linux; then
944 + donvidia ${NV_OBJ}/libnvcuvid.so.${NV_SOVER}
945 + donvidia ${NV_OBJ}/libnvidia-encode.so.${NV_SOVER}
946 + fi
947 +
948 + if use X; then
949 + # Xorg DDX driver
950 + insinto /usr/$(get_libdir)/xorg/modules/drivers
951 + doins ${NV_X11}/nvidia_drv.so
952 +
953 + # Xorg GLX driver
954 + donvidia ${NV_X11}/libglxserver_nvidia.so.${NV_SOVER} \
955 + /usr/$(get_libdir)/xorg/modules/extensions
956 +
957 + # Xorg nvidia.conf
958 + if has_version '>=x11-base/xorg-server-1.16'; then
959 + insinto /usr/share/X11/xorg.conf.d
960 + newins {,50-}nvidia-drm-outputclass.conf
961 + fi
962 +
963 + insinto /usr/share/glvnd/egl_vendor.d
964 + doins ${NV_X11}/10_nvidia.json
965 + fi
966 +
967 + if use wayland; then
968 + insinto /usr/share/egl/egl_external_platform.d
969 + doins ${NV_X11}/10_nvidia_wayland.json
970 + fi
971 +
972 + # OpenCL ICD for NVIDIA
973 + if use kernel_linux; then
974 + insinto /etc/OpenCL/vendors
975 + doins ${NV_OBJ}/nvidia.icd
976 + fi
977 +
978 + # Documentation
979 + if use kernel_FreeBSD; then
980 + dodoc "${NV_DOC}/README"
981 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
982 + use tools && doman "${NV_MAN}"/nvidia-settings.1
983 + else
984 + # Docs
985 + newdoc "${NV_DOC}/README.txt" README
986 + dodoc "${NV_DOC}/NVIDIA_Changelog"
987 + doman "${NV_MAN}"/nvidia-smi.1
988 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
989 + use tools && doman "${NV_MAN}"/nvidia-settings.1
990 + doman "${NV_MAN}"/nvidia-cuda-mps-control.1
991 + fi
992 +
993 + docinto html
994 + dodoc -r ${NV_DOC}/html/*
995 +
996 + # Helper Apps
997 + exeinto /opt/bin/
998 +
999 + if use X; then
1000 + doexe ${NV_OBJ}/nvidia-xconfig
1001 +
1002 + insinto /etc/vulkan/icd.d
1003 + doins nvidia_icd.json
1004 + fi
1005 +
1006 + if use kernel_linux; then
1007 + doexe ${NV_OBJ}/nvidia-cuda-mps-control
1008 + doexe ${NV_OBJ}/nvidia-cuda-mps-server
1009 + doexe ${NV_OBJ}/nvidia-debugdump
1010 + doexe ${NV_OBJ}/nvidia-persistenced
1011 + doexe ${NV_OBJ}/nvidia-smi
1012 +
1013 + # install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
1014 + doexe ${NV_OBJ}/nvidia-modprobe
1015 + fowners root:video /opt/bin/nvidia-modprobe
1016 + fperms 4710 /opt/bin/nvidia-modprobe
1017 + dosym /{opt,usr}/bin/nvidia-modprobe
1018 +
1019 + doman nvidia-cuda-mps-control.1
1020 + doman nvidia-modprobe.1
1021 + doman nvidia-persistenced.1
1022 + newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
1023 + newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
1024 + newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
1025 + fi
1026 +
1027 + if use tools; then
1028 + emake -C "${S}"/nvidia-settings-${PV}/src/ \
1029 + DESTDIR="${D}" \
1030 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
1031 + LIBDIR="${D}/usr/$(get_libdir)" \
1032 + NV_USE_BUNDLED_LIBJANSSON=0 \
1033 + NV_VERBOSE=1 \
1034 + PREFIX=/usr \
1035 + DO_STRIP= \
1036 + install
1037 +
1038 + if use static-libs; then
1039 + dolib.a "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/libXNVCtrl.a
1040 +
1041 + insinto /usr/include/NVCtrl
1042 + doins "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/*.h
1043 + fi
1044 +
1045 + insinto /usr/share/nvidia/
1046 + doins nvidia-application-profiles-${PV}-key-documentation
1047 +
1048 + insinto /etc/nvidia
1049 + newins \
1050 + nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
1051 +
1052 + # There is no icon in the FreeBSD tarball.
1053 + use kernel_FreeBSD || \
1054 + doicon ${NV_OBJ}/nvidia-settings.png
1055 +
1056 + domenu "${FILESDIR}"/nvidia-settings.desktop
1057 +
1058 + exeinto /etc/X11/xinit/xinitrc.d
1059 + newexe "${FILESDIR}"/95-nvidia-settings-r1 95-nvidia-settings
1060 + fi
1061 +
1062 + dobin ${NV_OBJ}/nvidia-bug-report.sh
1063 +
1064 + if has_multilib_profile && use multilib; then
1065 + local OABI=${ABI}
1066 + for ABI in $(get_install_abis); do
1067 + src_install-libs
1068 + done
1069 + ABI=${OABI}
1070 + unset OABI
1071 + else
1072 + src_install-libs
1073 + fi
1074 +
1075 + is_final_abi || die "failed to iterate through all ABIs"
1076 +
1077 + readme.gentoo_create_doc
1078 +}
1079 +
1080 +src_install-libs() {
1081 + local inslibdir=$(get_libdir)
1082 + local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
1083 + local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
1084 + local nv_libdir="${NV_OBJ}"
1085 +
1086 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "x86" ]]; then
1087 + nv_libdir="${NV_OBJ}"/32
1088 + fi
1089 +
1090 + if use X; then
1091 + NV_GLX_LIBRARIES=(
1092 + "libEGL.so.$(usex compat ${NV_SOVER} 1.1.0) ${GL_ROOT}"
1093 + "libEGL_nvidia.so.${NV_SOVER} ${GL_ROOT}"
1094 + "libGL.so.$(usex compat ${NV_SOVER} 1.7.0) ${GL_ROOT}"
1095 + "libGLESv1_CM.so.1.2.0 ${GL_ROOT}"
1096 + "libGLESv1_CM_nvidia.so.${NV_SOVER} ${GL_ROOT}"
1097 + "libGLESv2.so.2.1.0 ${GL_ROOT}"
1098 + "libGLESv2_nvidia.so.${NV_SOVER} ${GL_ROOT}"
1099 + "libGLX.so.0 ${GL_ROOT}"
1100 + "libGLX_nvidia.so.${NV_SOVER} ${GL_ROOT}"
1101 + "libGLdispatch.so.0 ${GL_ROOT}"
1102 + "libOpenCL.so.1.0.0 ${CL_ROOT}"
1103 + "libOpenGL.so.0 ${GL_ROOT}"
1104 + "libcuda.so.${NV_SOVER}"
1105 + "libnvcuvid.so.${NV_SOVER}"
1106 + "libnvidia-compiler.so.${NV_SOVER}"
1107 + "libnvidia-eglcore.so.${NV_SOVER}"
1108 + "libnvidia-encode.so.${NV_SOVER}"
1109 + "libnvidia-fatbinaryloader.so.${NV_SOVER}"
1110 + "libnvidia-fbc.so.${NV_SOVER}"
1111 + "libnvidia-glcore.so.${NV_SOVER}"
1112 + "libnvidia-glsi.so.${NV_SOVER}"
1113 + "libnvidia-glvkspirv.so.${NV_SOVER}"
1114 + "libnvidia-ifr.so.${NV_SOVER}"
1115 + "libnvidia-opencl.so.${NV_SOVER}"
1116 + "libnvidia-ptxjitcompiler.so.${NV_SOVER}"
1117 + "libvdpau_nvidia.so.${NV_SOVER}"
1118 + )
1119 +
1120 + if use wayland && has_multilib_profile && [[ ${ABI} == "amd64" ]];
1121 + then
1122 + NV_GLX_LIBRARIES+=(
1123 + "libnvidia-egl-wayland.so.1.1.0"
1124 + )
1125 + fi
1126 +
1127 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "amd64" ]];
1128 + then
1129 + NV_GLX_LIBRARIES+=(
1130 + "libnvidia-wfb.so.${NV_SOVER}"
1131 + )
1132 + fi
1133 +
1134 + if use kernel_FreeBSD; then
1135 + NV_GLX_LIBRARIES+=(
1136 + "libnvidia-tls.so.${NV_SOVER}"
1137 + )
1138 + fi
1139 +
1140 + if use kernel_linux; then
1141 + NV_GLX_LIBRARIES+=(
1142 + "libnvidia-ml.so.${NV_SOVER}"
1143 + "tls/libnvidia-tls.so.${NV_SOVER}"
1144 + )
1145 + fi
1146 +
1147 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "amd64" ]];
1148 + then
1149 + NV_GLX_LIBRARIES+=(
1150 + "libnvidia-cbl.so.${NV_SOVER}"
1151 + "libnvidia-rtcore.so.${NV_SOVER}"
1152 + "libnvoptix.so.${NV_SOVER}"
1153 + )
1154 + fi
1155 +
1156 + for NV_LIB in "${NV_GLX_LIBRARIES[@]}"; do
1157 + donvidia "${nv_libdir}"/${NV_LIB}
1158 + done
1159 + fi
1160 +}
1161 +
1162 +pkg_preinst() {
1163 + if use driver && use kernel_linux; then
1164 + linux-mod_pkg_preinst
1165 +
1166 + local videogroup="$(egetent group video | cut -d ':' -f 3)"
1167 + if [ -z "${videogroup}" ]; then
1168 + eerror "Failed to determine the video group gid"
1169 + die "Failed to determine the video group gid"
1170 + else
1171 + sed -i \
1172 + -e "s:PACKAGE:${PF}:g" \
1173 + -e "s:VIDEOGID:${videogroup}:" \
1174 + "${D}"/etc/modprobe.d/nvidia.conf || die
1175 + fi
1176 + fi
1177 +
1178 + # Clean the dynamic libGL stuff's home to ensure
1179 + # we dont have stale libs floating around
1180 + if [ -d "${ROOT}"/usr/lib/opengl/nvidia ]; then
1181 + rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
1182 + fi
1183 + # Make sure we nuke the old nvidia-glx's env.d file
1184 + if [ -e "${ROOT}"/etc/env.d/09nvidia ]; then
1185 + rm -f "${ROOT}"/etc/env.d/09nvidia
1186 + fi
1187 +}
1188 +
1189 +pkg_postinst() {
1190 + use driver && use kernel_linux && linux-mod_pkg_postinst
1191 +
1192 + # Switch to the nvidia implementation
1193 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
1194 + "${ROOT}"/usr/bin/eselect opencl set --use-old nvidia
1195 +
1196 + readme.gentoo_print_elog
1197 +
1198 + if ! use X; then
1199 + elog "You have elected to not install the X.org driver. Along with"
1200 + elog "this the OpenGL libraries and VDPAU libraries were not"
1201 + elog "installed. Additionally, once the driver is loaded your card"
1202 + elog "and fan will run at max speed which may not be desirable."
1203 + elog "Use the 'nvidia-smi' init script to have your card and fan"
1204 + elog "speed scale appropriately."
1205 + elog
1206 + fi
1207 + if ! use tools; then
1208 + elog "USE=tools controls whether the nvidia-settings application"
1209 + elog "is installed. If you would like to use it, enable that"
1210 + elog "flag and re-emerge this ebuild. Optionally you can install"
1211 + elog "media-video/nvidia-settings"
1212 + elog
1213 + fi
1214 +}
1215 +
1216 +pkg_prerm() {
1217 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
1218 +}
1219 +
1220 +pkg_postrm() {
1221 + use driver && use kernel_linux && linux-mod_pkg_postrm
1222 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
1223 +}
1224
1225 diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-415.27-r1.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-415.27-r1.ebuild
1226 new file mode 100644
1227 index 00000000000..3e96bb07188
1228 --- /dev/null
1229 +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-415.27-r1.ebuild
1230 @@ -0,0 +1,592 @@
1231 +# Copyright 1999-2019 Gentoo Authors
1232 +# Distributed under the terms of the GNU General Public License v2
1233 +
1234 +EAPI=6
1235 +inherit eutils flag-o-matic linux-info linux-mod multilib-minimal nvidia-driver \
1236 + portability toolchain-funcs unpacker user udev
1237 +
1238 +DESCRIPTION="NVIDIA Accelerated Graphics Driver"
1239 +HOMEPAGE="http://www.nvidia.com/"
1240 +
1241 +AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
1242 +AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
1243 +ARM_NV_PACKAGE="NVIDIA-Linux-armv7l-gnueabihf-${PV}"
1244 +
1245 +NV_URI="https://us.download.nvidia.com/XFree86/"
1246 +SRC_URI="
1247 + amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
1248 + amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
1249 + tools? (
1250 + https://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-${PV}.tar.bz2
1251 + )
1252 +"
1253 +
1254 +LICENSE="GPL-2 NVIDIA-r2"
1255 +SLOT="0/${PV%.*}"
1256 +KEYWORDS="-* ~amd64 ~amd64-fbsd"
1257 +RESTRICT="bindist mirror"
1258 +EMULTILIB_PKG="true"
1259 +
1260 +IUSE="acpi compat +driver gtk3 kernel_FreeBSD kernel_linux +kms multilib static-libs +tools uvm wayland +X"
1261 +REQUIRED_USE="
1262 + tools? ( X )
1263 + static-libs? ( tools )
1264 +"
1265 +
1266 +COMMON="
1267 + app-eselect/eselect-opencl
1268 + kernel_linux? ( >=sys-libs/glibc-2.6.1 )
1269 + tools? (
1270 + dev-libs/atk
1271 + dev-libs/glib:2
1272 + dev-libs/jansson
1273 + gtk3? (
1274 + x11-libs/gtk+:3
1275 + )
1276 + x11-libs/cairo
1277 + x11-libs/gdk-pixbuf[X]
1278 + x11-libs/gtk+:2
1279 + x11-libs/libX11
1280 + x11-libs/libXext
1281 + x11-libs/libXrandr
1282 + x11-libs/libXv
1283 + x11-libs/libXxf86vm
1284 + x11-libs/pango[X]
1285 + )
1286 + X? (
1287 + >=app-eselect/eselect-opengl-1.0.9
1288 + app-misc/pax-utils
1289 + )
1290 +"
1291 +DEPEND="
1292 + ${COMMON}
1293 + kernel_linux? ( virtual/linux-sources )
1294 + tools? ( sys-apps/dbus )
1295 +"
1296 +RDEPEND="
1297 + ${COMMON}
1298 + acpi? ( sys-power/acpid )
1299 + tools? ( !media-video/nvidia-settings )
1300 + wayland? ( dev-libs/wayland[${MULTILIB_USEDEP}] )
1301 + X? (
1302 + <x11-base/xorg-server-1.20.99:=
1303 + >=x11-libs/libX11-1.6.2[${MULTILIB_USEDEP}]
1304 + >=x11-libs/libXext-1.3.2[${MULTILIB_USEDEP}]
1305 + >=x11-libs/libvdpau-1.0[${MULTILIB_USEDEP}]
1306 + sys-libs/zlib[${MULTILIB_USEDEP}]
1307 + )
1308 +"
1309 +QA_PREBUILT="opt/* usr/lib*"
1310 +S=${WORKDIR}/
1311 +
1312 +nvidia_drivers_versions_check() {
1313 + if use amd64 && has_multilib_profile && \
1314 + [ "${DEFAULT_ABI}" != "amd64" ]; then
1315 + eerror "This ebuild doesn't currently support changing your default ABI"
1316 + die "Unexpected \${DEFAULT_ABI} = ${DEFAULT_ABI}"
1317 + fi
1318 +
1319 + if use kernel_linux && kernel_is ge 4 21; then
1320 + ewarn "Gentoo supports kernels which are supported by NVIDIA"
1321 + ewarn "which are limited to the following kernels:"
1322 + ewarn "<sys-kernel/gentoo-sources-4.21"
1323 + ewarn "<sys-kernel/vanilla-sources-4.21"
1324 + ewarn ""
1325 + ewarn "You are free to utilize epatch_user to provide whatever"
1326 + ewarn "support you feel is appropriate, but will not receive"
1327 + ewarn "support as a result of those changes."
1328 + ewarn ""
1329 + ewarn "Do not file a bug report about this."
1330 + ewarn ""
1331 + fi
1332 +
1333 + # Since Nvidia ships many different series of drivers, we need to give the user
1334 + # some kind of guidance as to what version they should install. This tries
1335 + # to point the user in the right direction but can't be perfect. check
1336 + # nvidia-driver.eclass
1337 + nvidia-driver-check-warning
1338 +
1339 + # Kernel features/options to check for
1340 + CONFIG_CHECK="!DEBUG_MUTEXES !I2C_NVIDIA_GPU ~!LOCKDEP ~MTRR ~SYSVIPC ~ZONE_DMA"
1341 +
1342 + # Now do the above checks
1343 + use kernel_linux && check_extra_config
1344 +}
1345 +
1346 +pkg_pretend() {
1347 + nvidia_drivers_versions_check
1348 +}
1349 +
1350 +pkg_setup() {
1351 + nvidia_drivers_versions_check
1352 +
1353 + # try to turn off distcc and ccache for people that have a problem with it
1354 + export DISTCC_DISABLE=1
1355 + export CCACHE_DISABLE=1
1356 +
1357 + if use driver && use kernel_linux; then
1358 + MODULE_NAMES="nvidia(video:${S}/kernel)"
1359 + use uvm && MODULE_NAMES+=" nvidia-uvm(video:${S}/kernel)"
1360 + use kms && MODULE_NAMES+=" nvidia-modeset(video:${S}/kernel) nvidia-drm(video:${S}/kernel)"
1361 +
1362 + # This needs to run after MODULE_NAMES (so that the eclass checks
1363 + # whether the kernel supports loadable modules) but before BUILD_PARAMS
1364 + # is set (so that KV_DIR is populated).
1365 + linux-mod_pkg_setup
1366 +
1367 + BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
1368 + SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC) NV_VERBOSE=1"
1369 +
1370 + # linux-mod_src_compile calls set_arch_to_kernel, which
1371 + # sets the ARCH to x86 but NVIDIA's wrapping Makefile
1372 + # expects x86_64 or i386 and then converts it to x86
1373 + # later on in the build process
1374 + BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
1375 + fi
1376 +
1377 + if use kernel_linux && kernel_is lt 2 6 9; then
1378 + eerror "You must build this against 2.6.9 or higher kernels."
1379 + fi
1380 +
1381 + # set variables to where files are in the package structure
1382 + if use kernel_FreeBSD; then
1383 + use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
1384 + NV_DOC="${S}/doc"
1385 + NV_OBJ="${S}/obj"
1386 + NV_SRC="${S}/src"
1387 + NV_MAN="${S}/x11/man"
1388 + NV_X11="${S}/obj"
1389 + NV_SOVER=1
1390 + elif use kernel_linux; then
1391 + NV_DOC="${S}"
1392 + NV_OBJ="${S}"
1393 + NV_SRC="${S}/kernel"
1394 + NV_MAN="${S}"
1395 + NV_X11="${S}"
1396 + NV_SOVER=${PV}
1397 + else
1398 + die "Could not determine proper NVIDIA package"
1399 + fi
1400 +}
1401 +
1402 +src_prepare() {
1403 + local man_file
1404 + for man_file in "${NV_MAN}"/*1.gz; do
1405 + gunzip $man_file || die
1406 + done
1407 +
1408 + if use tools; then
1409 + cp "${FILESDIR}"/nvidia-settings-linker.patch "${WORKDIR}" || die
1410 + sed -i \
1411 + -e "s:@PV@:${PV}:g" \
1412 + "${WORKDIR}"/nvidia-settings-linker.patch || die
1413 + eapply "${WORKDIR}"/nvidia-settings-linker.patch
1414 + fi
1415 +
1416 + default
1417 +
1418 + if ! [ -f nvidia_icd.json ]; then
1419 + cp nvidia_icd.json.template nvidia_icd.json || die
1420 + sed -i -e 's:__NV_VK_ICD__:libGLX_nvidia.so.0:g' nvidia_icd.json || die
1421 + fi
1422 +}
1423 +
1424 +src_compile() {
1425 + # This is already the default on Linux, as there's no toplevel Makefile, but
1426 + # on FreeBSD there's one and triggers the kernel module build, as we install
1427 + # it by itself, pass this.
1428 +
1429 + cd "${NV_SRC}"
1430 + if use kernel_FreeBSD; then
1431 + MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
1432 + LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
1433 + elif use driver && use kernel_linux; then
1434 + BUILD_TARGETS=module linux-mod_src_compile \
1435 + KERNELRELEASE="${KV_FULL}" \
1436 + src="${KERNEL_DIR}"
1437 + fi
1438 +
1439 + if use tools; then
1440 + emake -C "${S}"/nvidia-settings-${PV}/src \
1441 + AR="$(tc-getAR)" \
1442 + CC="$(tc-getCC)" \
1443 + DO_STRIP= \
1444 + LD="$(tc-getCC)" \
1445 + LIBDIR="$(get_libdir)" \
1446 + NVLD="$(tc-getLD)" \
1447 + NV_VERBOSE=1 \
1448 + RANLIB="$(tc-getRANLIB)" \
1449 + build-xnvctrl
1450 +
1451 + emake -C "${S}"/nvidia-settings-${PV}/src \
1452 + CC="$(tc-getCC)" \
1453 + DO_STRIP= \
1454 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
1455 + LD="$(tc-getCC)" \
1456 + LIBDIR="$(get_libdir)" \
1457 + NVLD="$(tc-getLD)" \
1458 + NVML_ENABLED=0 \
1459 + NV_USE_BUNDLED_LIBJANSSON=0 \
1460 + NV_VERBOSE=1
1461 + fi
1462 +}
1463 +
1464 +# Install nvidia library:
1465 +# the first parameter is the library to install
1466 +# the second parameter is the provided soversion
1467 +# the third parameter is the target directory if it is not /usr/lib
1468 +donvidia() {
1469 + # Full path to library
1470 + nv_LIB="${1}"
1471 +
1472 + # SOVER to use
1473 + nv_SOVER="$(scanelf -qF'%S#F' ${nv_LIB})"
1474 +
1475 + # Where to install
1476 + nv_DEST="${2}"
1477 +
1478 + # Get just the library name
1479 + nv_LIBNAME=$(basename "${nv_LIB}")
1480 +
1481 + if [[ "${nv_DEST}" ]]; then
1482 + exeinto ${nv_DEST}
1483 + action="doexe"
1484 + else
1485 + nv_DEST="/usr/$(get_libdir)"
1486 + action="dolib.so"
1487 + fi
1488 +
1489 + # Install the library
1490 + ${action} ${nv_LIB} || die "failed to install ${nv_LIBNAME}"
1491 +
1492 + # If the library has a SONAME and SONAME does not match the library name,
1493 + # then we need to create a symlink
1494 + if [[ ${nv_SOVER} ]] && ! [[ "${nv_SOVER}" = "${nv_LIBNAME}" ]]; then
1495 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_SOVER} \
1496 + || die "failed to create ${nv_DEST}/${nv_SOVER} symlink"
1497 + fi
1498 +
1499 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_LIBNAME/.so*/.so} \
1500 + || die "failed to create ${nv_LIBNAME/.so*/.so} symlink"
1501 +}
1502 +
1503 +src_install() {
1504 + if use driver && use kernel_linux; then
1505 + linux-mod_src_install
1506 +
1507 + # Add the aliases
1508 + # This file is tweaked with the appropriate video group in
1509 + # pkg_preinst, see bug #491414
1510 + insinto /etc/modprobe.d
1511 + newins "${FILESDIR}"/nvidia-169.07 nvidia.conf
1512 + if use uvm; then
1513 + doins "${FILESDIR}"/nvidia-rmmod.conf
1514 + udev_newrules "${FILESDIR}"/nvidia-uvm.udev-rule 99-nvidia-uvm.rules
1515 + else
1516 + sed -e 's|nvidia-uvm ||g' "${FILESDIR}"/nvidia-rmmod.conf \
1517 + > "${T}"/nvidia-rmmod.conf || die
1518 + doins "${T}"/nvidia-rmmod.conf
1519 + fi
1520 +
1521 + # Ensures that our device nodes are created when not using X
1522 + exeinto "$(get_udevdir)"
1523 + newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
1524 + udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
1525 + elif use kernel_FreeBSD; then
1526 + if use x86-fbsd; then
1527 + insinto /boot/modules
1528 + doins "${S}/src/nvidia.kld"
1529 + fi
1530 +
1531 + exeinto /boot/modules
1532 + doexe "${S}/src/nvidia.ko"
1533 + fi
1534 +
1535 + # NVIDIA kernel <-> userspace driver config lib
1536 + donvidia ${NV_OBJ}/libnvidia-cfg.so.${NV_SOVER}
1537 +
1538 + # NVIDIA framebuffer capture library
1539 + donvidia ${NV_OBJ}/libnvidia-fbc.so.${NV_SOVER}
1540 +
1541 + # NVIDIA video encode/decode <-> CUDA
1542 + if use kernel_linux; then
1543 + donvidia ${NV_OBJ}/libnvcuvid.so.${NV_SOVER}
1544 + donvidia ${NV_OBJ}/libnvidia-encode.so.${NV_SOVER}
1545 + fi
1546 +
1547 + if use X; then
1548 + # Xorg DDX driver
1549 + insinto /usr/$(get_libdir)/xorg/modules/drivers
1550 + doins ${NV_X11}/nvidia_drv.so
1551 +
1552 + # Xorg GLX driver
1553 + donvidia ${NV_X11}/libglxserver_nvidia.so.${NV_SOVER} \
1554 + /usr/$(get_libdir)/xorg/modules/extensions
1555 +
1556 + # Xorg nvidia.conf
1557 + if has_version '>=x11-base/xorg-server-1.16'; then
1558 + insinto /usr/share/X11/xorg.conf.d
1559 + newins {,50-}nvidia-drm-outputclass.conf
1560 + fi
1561 +
1562 + insinto /usr/share/glvnd/egl_vendor.d
1563 + doins ${NV_X11}/10_nvidia.json
1564 + fi
1565 +
1566 + if use wayland; then
1567 + insinto /usr/share/egl/egl_external_platform.d
1568 + doins ${NV_X11}/10_nvidia_wayland.json
1569 + fi
1570 +
1571 + # OpenCL ICD for NVIDIA
1572 + if use kernel_linux; then
1573 + insinto /etc/OpenCL/vendors
1574 + doins ${NV_OBJ}/nvidia.icd
1575 + fi
1576 +
1577 + # Documentation
1578 + if use kernel_FreeBSD; then
1579 + dodoc "${NV_DOC}/README"
1580 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
1581 + use tools && doman "${NV_MAN}"/nvidia-settings.1
1582 + else
1583 + # Docs
1584 + newdoc "${NV_DOC}/README.txt" README
1585 + dodoc "${NV_DOC}/NVIDIA_Changelog"
1586 + doman "${NV_MAN}"/nvidia-smi.1
1587 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
1588 + use tools && doman "${NV_MAN}"/nvidia-settings.1
1589 + doman "${NV_MAN}"/nvidia-cuda-mps-control.1
1590 + fi
1591 +
1592 + docinto html
1593 + dodoc -r ${NV_DOC}/html/*
1594 +
1595 + # Helper Apps
1596 + exeinto /opt/bin/
1597 +
1598 + if use X; then
1599 + doexe ${NV_OBJ}/nvidia-xconfig
1600 +
1601 + insinto /etc/vulkan/icd.d
1602 + doins nvidia_icd.json
1603 + fi
1604 +
1605 + if use kernel_linux; then
1606 + doexe ${NV_OBJ}/nvidia-cuda-mps-control
1607 + doexe ${NV_OBJ}/nvidia-cuda-mps-server
1608 + doexe ${NV_OBJ}/nvidia-debugdump
1609 + doexe ${NV_OBJ}/nvidia-persistenced
1610 + doexe ${NV_OBJ}/nvidia-smi
1611 +
1612 + # install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
1613 + doexe ${NV_OBJ}/nvidia-modprobe
1614 + fowners root:video /opt/bin/nvidia-modprobe
1615 + fperms 4710 /opt/bin/nvidia-modprobe
1616 + dosym /{opt,usr}/bin/nvidia-modprobe
1617 +
1618 + doman nvidia-cuda-mps-control.1
1619 + doman nvidia-modprobe.1
1620 + doman nvidia-persistenced.1
1621 + newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
1622 + newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
1623 + newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
1624 + fi
1625 +
1626 + if use tools; then
1627 + emake -C "${S}"/nvidia-settings-${PV}/src/ \
1628 + DESTDIR="${D}" \
1629 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
1630 + LIBDIR="${D}/usr/$(get_libdir)" \
1631 + NV_USE_BUNDLED_LIBJANSSON=0 \
1632 + NV_VERBOSE=1 \
1633 + PREFIX=/usr \
1634 + DO_STRIP= \
1635 + install
1636 +
1637 + if use static-libs; then
1638 + dolib.a "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/libXNVCtrl.a
1639 +
1640 + insinto /usr/include/NVCtrl
1641 + doins "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/*.h
1642 + fi
1643 +
1644 + insinto /usr/share/nvidia/
1645 + doins nvidia-application-profiles-${PV}-key-documentation
1646 +
1647 + insinto /etc/nvidia
1648 + newins \
1649 + nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
1650 +
1651 + # There is no icon in the FreeBSD tarball.
1652 + use kernel_FreeBSD || \
1653 + doicon ${NV_OBJ}/nvidia-settings.png
1654 +
1655 + domenu "${FILESDIR}"/nvidia-settings.desktop
1656 +
1657 + exeinto /etc/X11/xinit/xinitrc.d
1658 + newexe "${FILESDIR}"/95-nvidia-settings-r1 95-nvidia-settings
1659 + fi
1660 +
1661 + dobin ${NV_OBJ}/nvidia-bug-report.sh
1662 +
1663 + if has_multilib_profile && use multilib; then
1664 + local OABI=${ABI}
1665 + for ABI in $(get_install_abis); do
1666 + src_install-libs
1667 + done
1668 + ABI=${OABI}
1669 + unset OABI
1670 + else
1671 + src_install-libs
1672 + fi
1673 +
1674 + is_final_abi || die "failed to iterate through all ABIs"
1675 +
1676 + readme.gentoo_create_doc
1677 +}
1678 +
1679 +src_install-libs() {
1680 + local inslibdir=$(get_libdir)
1681 + local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
1682 + local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
1683 + local nv_libdir="${NV_OBJ}"
1684 +
1685 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "x86" ]]; then
1686 + nv_libdir="${NV_OBJ}"/32
1687 + fi
1688 +
1689 + if use X; then
1690 + NV_GLX_LIBRARIES=(
1691 + "libEGL.so.$(usex compat ${NV_SOVER} 1.1.0) ${GL_ROOT}"
1692 + "libEGL_nvidia.so.${NV_SOVER} ${GL_ROOT}"
1693 + "libGL.so.$(usex compat ${NV_SOVER} 1.7.0) ${GL_ROOT}"
1694 + "libGLESv1_CM.so.1.2.0 ${GL_ROOT}"
1695 + "libGLESv1_CM_nvidia.so.${NV_SOVER} ${GL_ROOT}"
1696 + "libGLESv2.so.2.1.0 ${GL_ROOT}"
1697 + "libGLESv2_nvidia.so.${NV_SOVER} ${GL_ROOT}"
1698 + "libGLX.so.0 ${GL_ROOT}"
1699 + "libGLX_nvidia.so.${NV_SOVER} ${GL_ROOT}"
1700 + "libGLdispatch.so.0 ${GL_ROOT}"
1701 + "libOpenCL.so.1.0.0 ${CL_ROOT}"
1702 + "libOpenGL.so.0 ${GL_ROOT}"
1703 + "libcuda.so.${NV_SOVER}"
1704 + "libnvcuvid.so.${NV_SOVER}"
1705 + "libnvidia-compiler.so.${NV_SOVER}"
1706 + "libnvidia-eglcore.so.${NV_SOVER}"
1707 + "libnvidia-encode.so.${NV_SOVER}"
1708 + "libnvidia-fatbinaryloader.so.${NV_SOVER}"
1709 + "libnvidia-fbc.so.${NV_SOVER}"
1710 + "libnvidia-glcore.so.${NV_SOVER}"
1711 + "libnvidia-glsi.so.${NV_SOVER}"
1712 + "libnvidia-glvkspirv.so.${NV_SOVER}"
1713 + "libnvidia-ifr.so.${NV_SOVER}"
1714 + "libnvidia-opencl.so.${NV_SOVER}"
1715 + "libnvidia-ptxjitcompiler.so.${NV_SOVER}"
1716 + "libvdpau_nvidia.so.${NV_SOVER}"
1717 + )
1718 +
1719 + if use wayland && has_multilib_profile && [[ ${ABI} == "amd64" ]];
1720 + then
1721 + NV_GLX_LIBRARIES+=(
1722 + "libnvidia-egl-wayland.so.1.1.0"
1723 + )
1724 + fi
1725 +
1726 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "amd64" ]];
1727 + then
1728 + NV_GLX_LIBRARIES+=(
1729 + "libnvidia-wfb.so.${NV_SOVER}"
1730 + )
1731 + fi
1732 +
1733 + if use kernel_FreeBSD; then
1734 + NV_GLX_LIBRARIES+=(
1735 + "libnvidia-tls.so.${NV_SOVER}"
1736 + )
1737 + fi
1738 +
1739 + if use kernel_linux; then
1740 + NV_GLX_LIBRARIES+=(
1741 + "libnvidia-ml.so.${NV_SOVER}"
1742 + "libnvidia-tls.so.${NV_SOVER}"
1743 + )
1744 + fi
1745 +
1746 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "amd64" ]];
1747 + then
1748 + NV_GLX_LIBRARIES+=(
1749 + "libnvidia-cbl.so.${NV_SOVER}"
1750 + "libnvidia-rtcore.so.${NV_SOVER}"
1751 + "libnvoptix.so.${NV_SOVER}"
1752 + )
1753 + fi
1754 +
1755 + for NV_LIB in "${NV_GLX_LIBRARIES[@]}"; do
1756 + donvidia "${nv_libdir}"/${NV_LIB}
1757 + done
1758 + fi
1759 +}
1760 +
1761 +pkg_preinst() {
1762 + if use driver && use kernel_linux; then
1763 + linux-mod_pkg_preinst
1764 +
1765 + local videogroup="$(egetent group video | cut -d ':' -f 3)"
1766 + if [ -z "${videogroup}" ]; then
1767 + eerror "Failed to determine the video group gid"
1768 + die "Failed to determine the video group gid"
1769 + else
1770 + sed -i \
1771 + -e "s:PACKAGE:${PF}:g" \
1772 + -e "s:VIDEOGID:${videogroup}:" \
1773 + "${D}"/etc/modprobe.d/nvidia.conf || die
1774 + fi
1775 + fi
1776 +
1777 + # Clean the dynamic libGL stuff's home to ensure
1778 + # we dont have stale libs floating around
1779 + if [ -d "${ROOT}"/usr/lib/opengl/nvidia ]; then
1780 + rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
1781 + fi
1782 + # Make sure we nuke the old nvidia-glx's env.d file
1783 + if [ -e "${ROOT}"/etc/env.d/09nvidia ]; then
1784 + rm -f "${ROOT}"/etc/env.d/09nvidia
1785 + fi
1786 +}
1787 +
1788 +pkg_postinst() {
1789 + use driver && use kernel_linux && linux-mod_pkg_postinst
1790 +
1791 + # Switch to the nvidia implementation
1792 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
1793 + "${ROOT}"/usr/bin/eselect opencl set --use-old nvidia
1794 +
1795 + readme.gentoo_print_elog
1796 +
1797 + if ! use X; then
1798 + elog "You have elected to not install the X.org driver. Along with"
1799 + elog "this the OpenGL libraries and VDPAU libraries were not"
1800 + elog "installed. Additionally, once the driver is loaded your card"
1801 + elog "and fan will run at max speed which may not be desirable."
1802 + elog "Use the 'nvidia-smi' init script to have your card and fan"
1803 + elog "speed scale appropriately."
1804 + elog
1805 + fi
1806 + if ! use tools; then
1807 + elog "USE=tools controls whether the nvidia-settings application"
1808 + elog "is installed. If you would like to use it, enable that"
1809 + elog "flag and re-emerge this ebuild. Optionally you can install"
1810 + elog "media-video/nvidia-settings"
1811 + elog
1812 + fi
1813 +}
1814 +
1815 +pkg_prerm() {
1816 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
1817 +}
1818 +
1819 +pkg_postrm() {
1820 + use driver && use kernel_linux && linux-mod_pkg_postrm
1821 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
1822 +}
1823
1824 diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-418.43-r1.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-418.43-r1.ebuild
1825 new file mode 100644
1826 index 00000000000..422f58398a8
1827 --- /dev/null
1828 +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-418.43-r1.ebuild
1829 @@ -0,0 +1,585 @@
1830 +# Copyright 1999-2019 Gentoo Authors
1831 +# Distributed under the terms of the GNU General Public License v2
1832 +
1833 +EAPI=6
1834 +inherit eutils flag-o-matic linux-info linux-mod multilib-minimal nvidia-driver \
1835 + portability toolchain-funcs unpacker user udev
1836 +
1837 +DESCRIPTION="NVIDIA Accelerated Graphics Driver"
1838 +HOMEPAGE="http://www.nvidia.com/"
1839 +
1840 +AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
1841 +AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
1842 +ARM_NV_PACKAGE="NVIDIA-Linux-armv7l-gnueabihf-${PV}"
1843 +
1844 +NV_URI="https://us.download.nvidia.com/XFree86/"
1845 +SRC_URI="
1846 + amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
1847 + amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
1848 + tools? (
1849 + https://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-${PV}.tar.bz2
1850 + )
1851 +"
1852 +
1853 +LICENSE="GPL-2 NVIDIA-r2"
1854 +SLOT="0/${PV%.*}"
1855 +KEYWORDS="-* ~amd64 ~amd64-fbsd"
1856 +RESTRICT="bindist mirror"
1857 +EMULTILIB_PKG="true"
1858 +
1859 +IUSE="acpi compat +driver gtk3 kernel_FreeBSD kernel_linux +kms multilib static-libs +tools uvm wayland +X"
1860 +REQUIRED_USE="
1861 + tools? ( X )
1862 + static-libs? ( tools )
1863 +"
1864 +
1865 +COMMON="
1866 + app-eselect/eselect-opencl
1867 + kernel_linux? ( >=sys-libs/glibc-2.6.1 )
1868 + tools? (
1869 + dev-libs/atk
1870 + dev-libs/glib:2
1871 + dev-libs/jansson
1872 + gtk3? (
1873 + x11-libs/gtk+:3
1874 + )
1875 + x11-libs/cairo
1876 + x11-libs/gdk-pixbuf[X]
1877 + x11-libs/gtk+:2
1878 + x11-libs/libX11
1879 + x11-libs/libXext
1880 + x11-libs/libXrandr
1881 + x11-libs/libXv
1882 + x11-libs/libXxf86vm
1883 + x11-libs/pango[X]
1884 + )
1885 + X? (
1886 + >=app-eselect/eselect-opengl-1.0.9
1887 + app-misc/pax-utils
1888 + )
1889 +"
1890 +DEPEND="
1891 + ${COMMON}
1892 + kernel_linux? ( virtual/linux-sources )
1893 + tools? ( sys-apps/dbus )
1894 +"
1895 +RDEPEND="
1896 + ${COMMON}
1897 + acpi? ( sys-power/acpid )
1898 + tools? ( !media-video/nvidia-settings )
1899 + wayland? ( dev-libs/wayland[${MULTILIB_USEDEP}] )
1900 + X? (
1901 + <x11-base/xorg-server-1.20.99:=
1902 + >=x11-libs/libX11-1.6.2[${MULTILIB_USEDEP}]
1903 + >=x11-libs/libXext-1.3.2[${MULTILIB_USEDEP}]
1904 + >=x11-libs/libvdpau-1.0[${MULTILIB_USEDEP}]
1905 + sys-libs/zlib[${MULTILIB_USEDEP}]
1906 + )
1907 +"
1908 +QA_PREBUILT="opt/* usr/lib*"
1909 +S=${WORKDIR}/
1910 +
1911 +nvidia_drivers_versions_check() {
1912 + if use amd64 && has_multilib_profile && \
1913 + [ "${DEFAULT_ABI}" != "amd64" ]; then
1914 + eerror "This ebuild doesn't currently support changing your default ABI"
1915 + die "Unexpected \${DEFAULT_ABI} = ${DEFAULT_ABI}"
1916 + fi
1917 +
1918 + if use kernel_linux && kernel_is ge 5 1; then
1919 + ewarn "Gentoo supports kernels which are supported by NVIDIA"
1920 + ewarn "which are limited to the following kernels:"
1921 + ewarn "<sys-kernel/gentoo-sources-5.1"
1922 + ewarn "<sys-kernel/vanilla-sources-5.1"
1923 + ewarn ""
1924 + ewarn "You are free to utilize epatch_user to provide whatever"
1925 + ewarn "support you feel is appropriate, but will not receive"
1926 + ewarn "support as a result of those changes."
1927 + ewarn ""
1928 + ewarn "Do not file a bug report about this."
1929 + ewarn ""
1930 + fi
1931 +
1932 + # Since Nvidia ships many different series of drivers, we need to give the user
1933 + # some kind of guidance as to what version they should install. This tries
1934 + # to point the user in the right direction but can't be perfect. check
1935 + # nvidia-driver.eclass
1936 + nvidia-driver-check-warning
1937 +
1938 + # Kernel features/options to check for
1939 + CONFIG_CHECK="!DEBUG_MUTEXES !I2C_NVIDIA_GPU ~!LOCKDEP ~MTRR ~SYSVIPC ~ZONE_DMA"
1940 +
1941 + # Now do the above checks
1942 + use kernel_linux && check_extra_config
1943 +}
1944 +
1945 +pkg_pretend() {
1946 + nvidia_drivers_versions_check
1947 +}
1948 +
1949 +pkg_setup() {
1950 + nvidia_drivers_versions_check
1951 +
1952 + # try to turn off distcc and ccache for people that have a problem with it
1953 + export DISTCC_DISABLE=1
1954 + export CCACHE_DISABLE=1
1955 +
1956 + if use driver && use kernel_linux; then
1957 + MODULE_NAMES="nvidia(video:${S}/kernel)"
1958 + use uvm && MODULE_NAMES+=" nvidia-uvm(video:${S}/kernel)"
1959 + use kms && MODULE_NAMES+=" nvidia-modeset(video:${S}/kernel) nvidia-drm(video:${S}/kernel)"
1960 +
1961 + # This needs to run after MODULE_NAMES (so that the eclass checks
1962 + # whether the kernel supports loadable modules) but before BUILD_PARAMS
1963 + # is set (so that KV_DIR is populated).
1964 + linux-mod_pkg_setup
1965 +
1966 + BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
1967 + SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC) NV_VERBOSE=1"
1968 +
1969 + # linux-mod_src_compile calls set_arch_to_kernel, which
1970 + # sets the ARCH to x86 but NVIDIA's wrapping Makefile
1971 + # expects x86_64 or i386 and then converts it to x86
1972 + # later on in the build process
1973 + BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
1974 + fi
1975 +
1976 + if use kernel_linux && kernel_is lt 2 6 9; then
1977 + eerror "You must build this against 2.6.9 or higher kernels."
1978 + fi
1979 +
1980 + # set variables to where files are in the package structure
1981 + if use kernel_FreeBSD; then
1982 + use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
1983 + NV_DOC="${S}/doc"
1984 + NV_OBJ="${S}/obj"
1985 + NV_SRC="${S}/src"
1986 + NV_MAN="${S}/x11/man"
1987 + NV_X11="${S}/obj"
1988 + NV_SOVER=1
1989 + elif use kernel_linux; then
1990 + NV_DOC="${S}"
1991 + NV_OBJ="${S}"
1992 + NV_SRC="${S}/kernel"
1993 + NV_MAN="${S}"
1994 + NV_X11="${S}"
1995 + NV_SOVER=${PV}
1996 + else
1997 + die "Could not determine proper NVIDIA package"
1998 + fi
1999 +}
2000 +
2001 +src_prepare() {
2002 + local man_file
2003 + for man_file in "${NV_MAN}"/*1.gz; do
2004 + gunzip $man_file || die
2005 + done
2006 +
2007 + if use tools; then
2008 + cp "${FILESDIR}"/nvidia-settings-linker.patch "${WORKDIR}" || die
2009 + sed -i \
2010 + -e "s:@PV@:${PV}:g" \
2011 + "${WORKDIR}"/nvidia-settings-linker.patch || die
2012 + eapply "${WORKDIR}"/nvidia-settings-linker.patch
2013 + fi
2014 +
2015 + default
2016 +
2017 + if ! [ -f nvidia_icd.json ]; then
2018 + cp nvidia_icd.json.template nvidia_icd.json || die
2019 + sed -i -e 's:__NV_VK_ICD__:libGLX_nvidia.so.0:g' nvidia_icd.json || die
2020 + fi
2021 +}
2022 +
2023 +src_compile() {
2024 + # This is already the default on Linux, as there's no toplevel Makefile, but
2025 + # on FreeBSD there's one and triggers the kernel module build, as we install
2026 + # it by itself, pass this.
2027 +
2028 + cd "${NV_SRC}"
2029 + if use kernel_FreeBSD; then
2030 + MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
2031 + LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
2032 + elif use driver && use kernel_linux; then
2033 + BUILD_TARGETS=module linux-mod_src_compile \
2034 + KERNELRELEASE="${KV_FULL}" \
2035 + src="${KERNEL_DIR}"
2036 + fi
2037 +
2038 + if use tools; then
2039 + emake -C "${S}"/nvidia-settings-${PV}/src \
2040 + AR="$(tc-getAR)" \
2041 + CC="$(tc-getCC)" \
2042 + DO_STRIP= \
2043 + LD="$(tc-getCC)" \
2044 + LIBDIR="$(get_libdir)" \
2045 + NVLD="$(tc-getLD)" \
2046 + NV_VERBOSE=1 \
2047 + RANLIB="$(tc-getRANLIB)" \
2048 + build-xnvctrl
2049 +
2050 + emake -C "${S}"/nvidia-settings-${PV}/src \
2051 + CC="$(tc-getCC)" \
2052 + DO_STRIP= \
2053 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
2054 + LD="$(tc-getCC)" \
2055 + LIBDIR="$(get_libdir)" \
2056 + NVLD="$(tc-getLD)" \
2057 + NVML_ENABLED=0 \
2058 + NV_USE_BUNDLED_LIBJANSSON=0 \
2059 + NV_VERBOSE=1
2060 + fi
2061 +}
2062 +
2063 +# Install nvidia library:
2064 +# the first parameter is the library to install
2065 +# the second parameter is the provided soversion
2066 +# the third parameter is the target directory if it is not /usr/lib
2067 +donvidia() {
2068 + # Full path to library
2069 + nv_LIB="${1}"
2070 +
2071 + # SOVER to use
2072 + nv_SOVER="$(scanelf -qF'%S#F' ${nv_LIB})"
2073 +
2074 + # Where to install
2075 + nv_DEST="${2}"
2076 +
2077 + # Get just the library name
2078 + nv_LIBNAME=$(basename "${nv_LIB}")
2079 +
2080 + if [[ "${nv_DEST}" ]]; then
2081 + exeinto ${nv_DEST}
2082 + action="doexe"
2083 + else
2084 + nv_DEST="/usr/$(get_libdir)"
2085 + action="dolib.so"
2086 + fi
2087 +
2088 + # Install the library
2089 + ${action} ${nv_LIB} || die "failed to install ${nv_LIBNAME}"
2090 +
2091 + # If the library has a SONAME and SONAME does not match the library name,
2092 + # then we need to create a symlink
2093 + if [[ ${nv_SOVER} ]] && ! [[ "${nv_SOVER}" = "${nv_LIBNAME}" ]]; then
2094 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_SOVER} \
2095 + || die "failed to create ${nv_DEST}/${nv_SOVER} symlink"
2096 + fi
2097 +
2098 + dosym ${nv_LIBNAME} ${nv_DEST}/${nv_LIBNAME/.so*/.so} \
2099 + || die "failed to create ${nv_LIBNAME/.so*/.so} symlink"
2100 +}
2101 +
2102 +src_install() {
2103 + if use driver && use kernel_linux; then
2104 + linux-mod_src_install
2105 +
2106 + # Add the aliases
2107 + # This file is tweaked with the appropriate video group in
2108 + # pkg_preinst, see bug #491414
2109 + insinto /etc/modprobe.d
2110 + newins "${FILESDIR}"/nvidia-169.07 nvidia.conf
2111 + if use uvm; then
2112 + doins "${FILESDIR}"/nvidia-rmmod.conf
2113 + udev_newrules "${FILESDIR}"/nvidia-uvm.udev-rule 99-nvidia-uvm.rules
2114 + else
2115 + sed -e 's|nvidia-uvm ||g' "${FILESDIR}"/nvidia-rmmod.conf \
2116 + > "${T}"/nvidia-rmmod.conf || die
2117 + doins "${T}"/nvidia-rmmod.conf
2118 + fi
2119 +
2120 + # Ensures that our device nodes are created when not using X
2121 + exeinto "$(get_udevdir)"
2122 + newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
2123 + udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
2124 + elif use kernel_FreeBSD; then
2125 + if use x86-fbsd; then
2126 + insinto /boot/modules
2127 + doins "${S}/src/nvidia.kld"
2128 + fi
2129 +
2130 + exeinto /boot/modules
2131 + doexe "${S}/src/nvidia.ko"
2132 + fi
2133 +
2134 + # NVIDIA kernel <-> userspace driver config lib
2135 + donvidia ${NV_OBJ}/libnvidia-cfg.so.${NV_SOVER}
2136 +
2137 + # NVIDIA framebuffer capture library
2138 + donvidia ${NV_OBJ}/libnvidia-fbc.so.${NV_SOVER}
2139 +
2140 + # NVIDIA video encode/decode <-> CUDA
2141 + if use kernel_linux; then
2142 + donvidia ${NV_OBJ}/libnvcuvid.so.${NV_SOVER}
2143 + donvidia ${NV_OBJ}/libnvidia-encode.so.${NV_SOVER}
2144 + fi
2145 +
2146 + if use X; then
2147 + # Xorg DDX driver
2148 + insinto /usr/$(get_libdir)/xorg/modules/drivers
2149 + doins ${NV_X11}/nvidia_drv.so
2150 +
2151 + # Xorg GLX driver
2152 + donvidia ${NV_X11}/libglxserver_nvidia.so.${NV_SOVER} \
2153 + /usr/$(get_libdir)/xorg/modules/extensions
2154 +
2155 + # Xorg nvidia.conf
2156 + if has_version '>=x11-base/xorg-server-1.16'; then
2157 + insinto /usr/share/X11/xorg.conf.d
2158 + newins {,50-}nvidia-drm-outputclass.conf
2159 + fi
2160 +
2161 + insinto /usr/share/glvnd/egl_vendor.d
2162 + doins ${NV_X11}/10_nvidia.json
2163 + fi
2164 +
2165 + if use wayland; then
2166 + insinto /usr/share/egl/egl_external_platform.d
2167 + doins ${NV_X11}/10_nvidia_wayland.json
2168 + fi
2169 +
2170 + # OpenCL ICD for NVIDIA
2171 + if use kernel_linux; then
2172 + insinto /etc/OpenCL/vendors
2173 + doins ${NV_OBJ}/nvidia.icd
2174 + fi
2175 +
2176 + # Documentation
2177 + if use kernel_FreeBSD; then
2178 + dodoc "${NV_DOC}/README"
2179 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
2180 + use tools && doman "${NV_MAN}"/nvidia-settings.1
2181 + else
2182 + # Docs
2183 + newdoc "${NV_DOC}/README.txt" README
2184 + dodoc "${NV_DOC}/NVIDIA_Changelog"
2185 + doman "${NV_MAN}"/nvidia-smi.1
2186 + use X && doman "${NV_MAN}"/nvidia-xconfig.1
2187 + use tools && doman "${NV_MAN}"/nvidia-settings.1
2188 + doman "${NV_MAN}"/nvidia-cuda-mps-control.1
2189 + fi
2190 +
2191 + docinto html
2192 + dodoc -r ${NV_DOC}/html/*
2193 +
2194 + # Helper Apps
2195 + exeinto /opt/bin/
2196 +
2197 + if use X; then
2198 + doexe ${NV_OBJ}/nvidia-xconfig
2199 +
2200 + insinto /etc/vulkan/icd.d
2201 + doins nvidia_icd.json
2202 + fi
2203 +
2204 + if use kernel_linux; then
2205 + doexe ${NV_OBJ}/nvidia-cuda-mps-control
2206 + doexe ${NV_OBJ}/nvidia-cuda-mps-server
2207 + doexe ${NV_OBJ}/nvidia-debugdump
2208 + doexe ${NV_OBJ}/nvidia-persistenced
2209 + doexe ${NV_OBJ}/nvidia-smi
2210 +
2211 + # install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
2212 + doexe ${NV_OBJ}/nvidia-modprobe
2213 + fowners root:video /opt/bin/nvidia-modprobe
2214 + fperms 4710 /opt/bin/nvidia-modprobe
2215 + dosym /{opt,usr}/bin/nvidia-modprobe
2216 +
2217 + doman nvidia-cuda-mps-control.1
2218 + doman nvidia-modprobe.1
2219 + doman nvidia-persistenced.1
2220 + newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
2221 + newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
2222 + newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
2223 + fi
2224 +
2225 + if use tools; then
2226 + emake -C "${S}"/nvidia-settings-${PV}/src/ \
2227 + DESTDIR="${D}" \
2228 + GTK3_AVAILABLE=$(usex gtk3 1 0) \
2229 + LIBDIR="${D}/usr/$(get_libdir)" \
2230 + NV_USE_BUNDLED_LIBJANSSON=0 \
2231 + NV_VERBOSE=1 \
2232 + PREFIX=/usr \
2233 + DO_STRIP= \
2234 + install
2235 +
2236 + if use static-libs; then
2237 + dolib.a "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/libXNVCtrl.a
2238 +
2239 + insinto /usr/include/NVCtrl
2240 + doins "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/*.h
2241 + fi
2242 +
2243 + insinto /usr/share/nvidia/
2244 + doins nvidia-application-profiles-${PV}-key-documentation
2245 +
2246 + insinto /etc/nvidia
2247 + newins \
2248 + nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
2249 +
2250 + # There is no icon in the FreeBSD tarball.
2251 + use kernel_FreeBSD || \
2252 + doicon ${NV_OBJ}/nvidia-settings.png
2253 +
2254 + domenu "${FILESDIR}"/nvidia-settings.desktop
2255 +
2256 + exeinto /etc/X11/xinit/xinitrc.d
2257 + newexe "${FILESDIR}"/95-nvidia-settings-r1 95-nvidia-settings
2258 + fi
2259 +
2260 + dobin ${NV_OBJ}/nvidia-bug-report.sh
2261 +
2262 + if has_multilib_profile && use multilib; then
2263 + local OABI=${ABI}
2264 + for ABI in $(get_install_abis); do
2265 + src_install-libs
2266 + done
2267 + ABI=${OABI}
2268 + unset OABI
2269 + else
2270 + src_install-libs
2271 + fi
2272 +
2273 + is_final_abi || die "failed to iterate through all ABIs"
2274 +
2275 + readme.gentoo_create_doc
2276 +}
2277 +
2278 +src_install-libs() {
2279 + local inslibdir=$(get_libdir)
2280 + local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
2281 + local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
2282 + local nv_libdir="${NV_OBJ}"
2283 +
2284 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "x86" ]]; then
2285 + nv_libdir="${NV_OBJ}"/32
2286 + fi
2287 +
2288 + if use X; then
2289 + NV_GLX_LIBRARIES=(
2290 + "libEGL.so.$(usex compat ${NV_SOVER} 1.1.0) ${GL_ROOT}"
2291 + "libEGL_nvidia.so.${NV_SOVER} ${GL_ROOT}"
2292 + "libGL.so.$(usex compat ${NV_SOVER} 1.7.0) ${GL_ROOT}"
2293 + "libGLESv1_CM.so.1.2.0 ${GL_ROOT}"
2294 + "libGLESv1_CM_nvidia.so.${NV_SOVER} ${GL_ROOT}"
2295 + "libGLESv2.so.2.1.0 ${GL_ROOT}"
2296 + "libGLESv2_nvidia.so.${NV_SOVER} ${GL_ROOT}"
2297 + "libGLX.so.0 ${GL_ROOT}"
2298 + "libGLX_nvidia.so.${NV_SOVER} ${GL_ROOT}"
2299 + "libGLdispatch.so.0 ${GL_ROOT}"
2300 + "libOpenCL.so.1.0.0 ${CL_ROOT}"
2301 + "libOpenGL.so.0 ${GL_ROOT}"
2302 + "libcuda.so.${NV_SOVER}"
2303 + "libnvcuvid.so.${NV_SOVER}"
2304 + "libnvidia-compiler.so.${NV_SOVER}"
2305 + "libnvidia-eglcore.so.${NV_SOVER}"
2306 + "libnvidia-encode.so.${NV_SOVER}"
2307 + "libnvidia-fatbinaryloader.so.${NV_SOVER}"
2308 + "libnvidia-fbc.so.${NV_SOVER}"
2309 + "libnvidia-glcore.so.${NV_SOVER}"
2310 + "libnvidia-glsi.so.${NV_SOVER}"
2311 + "libnvidia-glvkspirv.so.${NV_SOVER}"
2312 + "libnvidia-ifr.so.${NV_SOVER}"
2313 + "libnvidia-opencl.so.${NV_SOVER}"
2314 + "libnvidia-ptxjitcompiler.so.${NV_SOVER}"
2315 + "libvdpau_nvidia.so.${NV_SOVER}"
2316 + )
2317 +
2318 + if use wayland && has_multilib_profile && [[ ${ABI} == "amd64" ]];
2319 + then
2320 + NV_GLX_LIBRARIES+=(
2321 + "libnvidia-egl-wayland.so.1.1.2"
2322 + )
2323 + fi
2324 +
2325 + if use kernel_FreeBSD; then
2326 + NV_GLX_LIBRARIES+=(
2327 + "libnvidia-tls.so.${NV_SOVER}"
2328 + )
2329 + fi
2330 +
2331 + if use kernel_linux; then
2332 + NV_GLX_LIBRARIES+=(
2333 + "libnvidia-ml.so.${NV_SOVER}"
2334 + "libnvidia-tls.so.${NV_SOVER}"
2335 + )
2336 + fi
2337 +
2338 + if use kernel_linux && has_multilib_profile && [[ ${ABI} == "amd64" ]];
2339 + then
2340 + NV_GLX_LIBRARIES+=(
2341 + "libnvidia-cbl.so.${NV_SOVER}"
2342 + "libnvidia-rtcore.so.${NV_SOVER}"
2343 + "libnvoptix.so.${NV_SOVER}"
2344 + )
2345 + fi
2346 +
2347 + for NV_LIB in "${NV_GLX_LIBRARIES[@]}"; do
2348 + donvidia "${nv_libdir}"/${NV_LIB}
2349 + done
2350 + fi
2351 +}
2352 +
2353 +pkg_preinst() {
2354 + if use driver && use kernel_linux; then
2355 + linux-mod_pkg_preinst
2356 +
2357 + local videogroup="$(egetent group video | cut -d ':' -f 3)"
2358 + if [ -z "${videogroup}" ]; then
2359 + eerror "Failed to determine the video group gid"
2360 + die "Failed to determine the video group gid"
2361 + else
2362 + sed -i \
2363 + -e "s:PACKAGE:${PF}:g" \
2364 + -e "s:VIDEOGID:${videogroup}:" \
2365 + "${D}"/etc/modprobe.d/nvidia.conf || die
2366 + fi
2367 + fi
2368 +
2369 + # Clean the dynamic libGL stuff's home to ensure
2370 + # we dont have stale libs floating around
2371 + if [ -d "${ROOT}"/usr/lib/opengl/nvidia ]; then
2372 + rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
2373 + fi
2374 + # Make sure we nuke the old nvidia-glx's env.d file
2375 + if [ -e "${ROOT}"/etc/env.d/09nvidia ]; then
2376 + rm -f "${ROOT}"/etc/env.d/09nvidia
2377 + fi
2378 +}
2379 +
2380 +pkg_postinst() {
2381 + use driver && use kernel_linux && linux-mod_pkg_postinst
2382 +
2383 + # Switch to the nvidia implementation
2384 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
2385 + "${ROOT}"/usr/bin/eselect opencl set --use-old nvidia
2386 +
2387 + readme.gentoo_print_elog
2388 +
2389 + if ! use X; then
2390 + elog "You have elected to not install the X.org driver. Along with"
2391 + elog "this the OpenGL libraries and VDPAU libraries were not"
2392 + elog "installed. Additionally, once the driver is loaded your card"
2393 + elog "and fan will run at max speed which may not be desirable."
2394 + elog "Use the 'nvidia-smi' init script to have your card and fan"
2395 + elog "speed scale appropriately."
2396 + elog
2397 + fi
2398 + if ! use tools; then
2399 + elog "USE=tools controls whether the nvidia-settings application"
2400 + elog "is installed. If you would like to use it, enable that"
2401 + elog "flag and re-emerge this ebuild. Optionally you can install"
2402 + elog "media-video/nvidia-settings"
2403 + elog
2404 + fi
2405 +}
2406 +
2407 +pkg_prerm() {
2408 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
2409 +}
2410 +
2411 +pkg_postrm() {
2412 + use driver && use kernel_linux && linux-mod_pkg_postrm
2413 + use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
2414 +}