nvidia-drivers: fork with 5.7 patch

This commit is contained in:
Rick Farina (Zero_Chaos) 2020-06-24 10:59:23 -04:00
parent c72b985c2e
commit bf0d4471eb
No known key found for this signature in database
GPG key ID: A29433C0AA431DDC
21 changed files with 864 additions and 0 deletions

View file

@ -0,0 +1,20 @@
DIST NVIDIA-FreeBSD-x86-340.108.tar.gz 60616768 BLAKE2B 816d1b04aabb2853007dde1aaa31a71b9f42690a5a9e0f017668d79b262d7dc495d15729e276c5eb52c751d4e56841dad6d4f6322f07fce247dae2e51403ca2b SHA512 5384186412ba030768797e3c6db6945b35f86f3b58d632d2bd8e5d57f66c45ff4659fbe119f6b153e48053b21fe38f8cedf1009713d94049efce49df9f4a3196
DIST NVIDIA-FreeBSD-x86-390.132.tar.gz 64863740 BLAKE2B aa92a8968c81b64e2df637fd20116320431cc9b2acde4e71c5828c37ac124ed15f89074cf2ae1a3dc039d042f3bd87b27f8fe0a07f073e2cfac02871a79e7e72 SHA512 f11152e14ed3c0806df007559087a74f8841c382b19aceb00880f9d92fd549f256874223c987f6b167215c711bee8962d49f34eb047957885a57c1dd6f1eb27a
DIST NVIDIA-FreeBSD-x86_64-340.108.tar.gz 61500286 BLAKE2B 6997395199b5105249c93c8b6b36d1f29cc7663f21d3a2ad4479f7a46822524c8a00bd2b310d7ee830208cf36f911c5f090d899de34801d5d2487a61370bb7da SHA512 70d5ae62fa0a018d4bb84f285c0850a0b9f760212d5468feac312c575cc018fac8c2686e70c3ef594337b6afaada3d4392126b63a517b6032d54d9af8b7533f3
DIST NVIDIA-FreeBSD-x86_64-390.132.tar.gz 64206643 BLAKE2B a95bc5bbb99c89b817692167946deddff1c131c54165e5958e0600432c59fa7ce06cfc6037f4bcf090232c8c25ae36e370e77594ca9a057565adc8e8ac231e72 SHA512 120bf1c5784ef2c74047780383ce5ba8997dc588bab7a5178afeca99fb3829f7b99651238348c9098d023eee1c7f94b5321e6fb4c6e542ece2af705fe33da863
DIST NVIDIA-FreeBSD-x86_64-430.64.tar.gz 62723909 BLAKE2B f3e48bc38a3ec051a75c08845b45c0ba6b80bca31d7efd85f115e6244f9cdff70c68466f9139f69c645207d4cf61103432d75c943d3f3508811d405fba55d1b6 SHA512 498a3007c065d8b17f94024f6ca80ffbe3dca253fdb73c4a08babede821e52f8466523b402af350e961f153c5f732eb04160937fabef1f1be3846a0a4743b310
DIST NVIDIA-FreeBSD-x86_64-435.21.tar.gz 64153630 BLAKE2B fee655cc843c004ac0c1ec85b9417292016a013136e04ad047d2513edbdc7c732561d6bcc4603c658905972dce6618de49d4d6ac583e84fdf212cf45397b48c1 SHA512 2c160c06ca58e3009deb1ba4a4a28d39419e251ced3bfa9a442942f9cce17003d67e8a8bfa23036d3916cc0e66f4bff0fbedaae73db6f10b995235a56d7eba7c
DIST NVIDIA-FreeBSD-x86_64-440.82.tar.gz 82289126 BLAKE2B b8d0a0c235bbc7a1bdeb6cde2a3c72b4b54044e6d22cdf9c275640349051f9c1aa1ce358f47b10b0917d15f359ccec579f43caf8e4ec7a142192061b9e61a7b7 SHA512 88c7ce2f3786a364befd5690e973eb82b12421d0abbd16cf88e0727a137ce0099fe606b577d325185f3ee85bace89da745cae000d8d8665548a283b5bb397095
DIST NVIDIA-Linux-armv7l-gnueabihf-390.132.run 29084574 BLAKE2B 4727627de610928f0808c0213c9d359c5566900972ab9fbd3d0c58b36c0a1331799ceea22b4defdcfb81c3132f6124d8a6357de8124921eef608938afdc1380d SHA512 2f78a722ec31ceda86afc1831cb42d0eab8f8698b94c7fbc8569a6d34693b50e74453d5aaf3c0180f1fc2511b8c237ac635aceb24bcbea468f2a092cb44f98ee
DIST NVIDIA-Linux-x86-340.108.run 38902892 BLAKE2B 67e3c336a1f3e953e0fbccf96177bef7e0674c32243856660e9203e7c5fd4ada12a5fa784cebc2150d2133bdb16c19109f9fc5c04d4a138bd519def80c43164c SHA512 cf122c4cf724737cc647bc3d115e853bfe17027d5070c5ed68caf78e0dab718e7345bf824d0e8b33489bf299957dab8ff249cb0f837c3d17b2bb60887afe2818
DIST NVIDIA-Linux-x86-390.132.run 48152101 BLAKE2B f1e76c2796d12476a35701607226483a34ee3b50a0c7dc03e3626e8cab4250b07c0f5aa238a0d5d5b65b79dc504963f2723089108281668b2f4fae03f4bf25c5 SHA512 12b0f80b4bbaebc984c7dbacd365795646c7697606242b05095ac61d69d89ab89fded47d583b4b99793ebcea9e38ec1e7b63dda1c2fdce53ab697cafcdbb3a85
DIST NVIDIA-Linux-x86_64-340.108.run 70165522 BLAKE2B 890d00ff2d1d1a602d7ce65e62d5c3fdb5d9096b61dbfa41e3348260e0c0cc068f92b32ee28a48404376e7a311e12ad1535c68d89e76a956ecabc4e452030f15 SHA512 7941b5496b2c17b06320d676a51ec2866c08a3d3dce9d7cf20464bc35ccb4616c398eb247d1f1e5039386aa73bb610a36937252ce4ad47959437938db8cf3c29
DIST NVIDIA-Linux-x86_64-390.132.run 82900057 BLAKE2B e94cc2493701e34c4dd2f0fc4f89501d6b1d3e44abf80af2eff20c19a22c1160ce322c25d2b5b13e212bf48fb41f94d3c1bb6f9251302e6c8facb687d807a3dc SHA512 bad3453472e8af9ef0681b82db75f9c53816a7d57ff2bf1facd2ea010e757bf7fd4fb907317471934a0cb56510eaf2a90503a3a86ec80b76afdacfa2b9ee6c13
DIST NVIDIA-Linux-x86_64-430.64.run 111331457 BLAKE2B 59d8b739bc472810eb896ef620735b6f21ccfde653e08f248797720d21d75580dcea2448f17a5d1c32be393595d9dfedc48c81e96a8ea422c7f0d9eadf36ae1c SHA512 552bf1e8c4725258c07cbb0e000d0e407fba1b51207903f2b77c0d9fd8b15b629f791b20239f75a1aec85aa03cbcca90a1cb633090919cf0599054231f715250
DIST NVIDIA-Linux-x86_64-435.21.run 144387574 BLAKE2B e9afd6335182a28f5136dbef55195a2f2d8f768376ebc148190a0a82470a34d008ce04170ffc1aab36585605910c1300567a90443b5f58cb46ec3bff6ab9409c SHA512 e83b6dff80434971c0b254815945d485a45c978b8a19994244f50a463658863948b2eac8bc62d667bb10c23f41cf1c3521c409d23ac2ab6a0c0cd094a6e20270
DIST NVIDIA-Linux-x86_64-440.82.run 142872609 BLAKE2B 3ebef17002a788f145b61fb8c921f120324eac036ff4c7b972913e30ed830339fc971fd352f5e59ee3bb1b4a7a159dcf3e35d2f33ee37357c3f177aa605307ea SHA512 d86ed2cd715c5a9aebdd11ee562cfa454dbafdb1b468004cbb93d37ee258623f11144cf30b8b14996a4e093cb3119edc36d13152893d735e3536f49c45e2cca3
DIST nvidia-settings-340.108.tar.bz2 1550018 BLAKE2B 1acdfbcb0e7c02af33f5e86b9b140e356057efd9825fbc130971884ae76dd23765c2a0dbd00e1ac47bbff882f6d004e0a10c0195e6c6dce1408c72a00e0e6322 SHA512 d8b6dcbd3803af4da22cfffc039e1c050313f90b7ee86106a784863f7c203de9137ac2fee12aa800498cc56081dbe7e3aaa943c162037477ce97a07a237db41a
DIST nvidia-settings-390.132.tar.bz2 1109373 BLAKE2B cec60b7409f6d352afe3845a2ec65db96183d1fe009340fa3601166718f21b43bb08b63c5eaaaf4c266c7b16e7d374f6ecc00691763d5ae1b6902c8002da5bea SHA512 12553edc1a1ba9c3f578e0e921b25ec7114cbc80a55621cbd612a1bd85c9a518e221b30809058e4df5da6ae75ea7a1cd5c3d9c8f02a0898bc8c08ac9c22ccee3
DIST nvidia-settings-430.64.tar.bz2 1130931 BLAKE2B 032bbe8cdb7ec3b353e8f8ef33d0e86f4b4f3ef24b38de669e09173519149efe0aa55d5d30d0a0c6d2b8398d5ce38bbe4176df735501725475df4137d533e57d SHA512 fa82699610aa0f4709101e1a4e9e8147b133c85afb20ecb4506bfccf233e4f42dac26e53e2966f2137eb29190b5e4173b267167f5341b516fa1169785946e240
DIST nvidia-settings-435.21.tar.bz2 1131222 BLAKE2B 855f5c7667f4a5ec0f917fbb017d70ec6ee5e768f7087e77e54a66dea852c471bd1810a2163fb33204e5f381998a27a4254e0a5d2c73e2b6b624813ff8294f24 SHA512 8b408cc70118df3a138a99fe7fc14f6370d500b8ae26888b27b07de22f6fc6eebd65bd437d83ee82e18a1d8ee4cceec601c414b1947302ca808fff48165f31bb
DIST nvidia-settings-440.82.tar.bz2 1128498 BLAKE2B cc26d83b8ac8d609919db15b462b98976ad063026c39fdf58de36ce26a5b9a9ed5aca8e966f5b61c231ab1f7324a5530fb9779fccb999f39f79252570d62cb79 SHA512 8f9b546f65a1bd17f6336df9e62b0d1403581d3f60276793a536ff39bf67038def1c2738545b24b04eb465860f0cb97b5b9688d7dfb759fda567c05b1cc651ff

View file

@ -0,0 +1 @@
PRELINK_PATH_MASK="/usr/lib{,64}/tls/libnvidia-tls*:/usr/lib{,64}/libnvidia*:/usr/lib{,64}/libGL*:/usr/lib{,64}/opengl/nvidia/*:/usr/lib{,64}/OpenCL/vendors/nvidia/*:/usr/lib{,64}/xorg/modules/drivers/nvidia*:/usr/lib{,64}/libvdpau_nvidia*:/usr/lib{,64}/libXvMCNVIDIA*:/usr/lib{,64}/libcuda*:/usr/lib{,64}/libnvcuvid*"

View file

@ -0,0 +1,2 @@
#!/bin/sh
/opt/bin/nvidia-settings --load-config-only

View file

@ -0,0 +1,2 @@
#!/bin/sh
/usr/bin/nvidia-settings --load-config-only

View file

@ -0,0 +1,14 @@
# Nvidia drivers support
alias char-major-195 nvidia
alias /dev/nvidiactl char-major-195
# To tweak the driver the following options can be used, note that
# you should be careful, as it could cause instability!! For more
# options see /usr/share/doc/PACKAGE/README
#
# !!! SECURITY WARNING !!!
# DO NOT MODIFY OR REMOVE THE DEVICE FILE RELATED OPTIONS UNLESS YOU KNOW
# WHAT YOU ARE DOING.
# ONLY ADD TRUSTED USERS TO THE VIDEO GROUP, THESE USERS MAY BE ABLE TO CRASH,
# COMPROMISE, OR IRREPARABLY DAMAGE THE MACHINE.
options nvidia NVreg_DeviceFileMode=432 NVreg_DeviceFileUID=0 NVreg_DeviceFileGID=VIDEOGID NVreg_ModifyDeviceFiles=1

View file

@ -0,0 +1,20 @@
# Nvidia drivers support
alias char-major-195 nvidia
alias /dev/nvidiactl char-major-195
# To tweak the driver the following options can be used, note that
# you should be careful, as it could cause instability!! For more
# options see /usr/share/doc/PACKAGE/README
#
# !!! SECURITY WARNING !!!
# DO NOT MODIFY OR REMOVE THE DEVICE FILE RELATED OPTIONS UNLESS YOU KNOW
# WHAT YOU ARE DOING.
# ONLY ADD TRUSTED USERS TO THE VIDEO GROUP, THESE USERS MAY BE ABLE TO CRASH,
# COMPROMISE, OR IRREPARABLY DAMAGE THE MACHINE.
options nvidia \
NVreg_DeviceFileGID=VIDEOGID \
NVreg_DeviceFileMode=432 \
NVreg_DeviceFileUID=0 \
NVreg_ModifyDeviceFiles=1 \
NVreg_PreserveVideoMemoryAllocations=1 \
NVreg_TemporaryFilePath=/tmp

View file

@ -0,0 +1,13 @@
--- a/kernel/conftest.sh
+++ b/kernel/conftest.sh
@@ -6,6 +6,10 @@
SCRIPTDIR=`dirname $0`
cd $SCRIPTDIR
+# translate_and_compile_header_files() expects the default locale
+# https://bugs.gentoo.org/698238
+export LC_ALL=C
+
CC="$1"
ARCH=$2
ISYSTEM=`$CC -print-file-name=include 2> /dev/null`

View file

@ -0,0 +1,23 @@
https://forums.developer.nvidia.com/t/nvidia-440-82-kernel-5-7-patch/125815
diff --git a/kernel/conftest.sh b/kernel/conftest.sh
index 8f807a1..af29636 100755
--- a/kernel/conftest.sh
+++ b/kernel/conftest.sh
@@ -143,6 +143,7 @@ test_headers() {
FILES="$FILES video/nv_internal.h"
FILES="$FILES asm/book3s/64/hash-64k.h"
FILES="$FILES asm/set_memory.h"
+ FILES="$FILES asm/pgtable.h"
FILES="$FILES asm/prom.h"
FILES="$FILES asm/powernv.h"
FILES="$FILES asm/tlbflush.h"
@@ -466,6 +467,9 @@ compile_test() {
# It does not exist on all architectures.
#
CODE="
+ #if defined(NV_ASM_PGTABLE_H_PRESENT)
+ #include <asm/pgtable.h>
+ #endif
#if defined(NV_ASM_SET_MEMORY_H_PRESENT)
#include <asm/set_memory.h>
#else

View file

@ -0,0 +1,8 @@
# run-time configuration file for /etc/init.d/nvidia-persistenced
# NVPD_USER: The user nvidia-persistenced is intended to run for
NVPD_USER=""
# ARGS: Additional arguments to set the default persistence mode
# (see nvidia-persistenced(1))
ARGS=""

View file

@ -0,0 +1,24 @@
#!/sbin/openrc-run
# Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
pidfile="/var/run/nvidia-persistenced/nvidia-persistenced.pid"
start() {
if ! [ "${NVPD_USER}x" = x ]; then
ebegin "Starting nvidia-persistenced for ${NVPD_USER}"
NVPD_USER_ARG="--user ${NVPD_USER}"
else
ebegin "Starting nvidia-persistenced"
fi
start-stop-daemon --start --quiet --pidfile ${pidfile} \
--background --exec /opt/bin/nvidia-persistenced \
-- ${NVPD_USER_ARG} ${ARGS}
eend $?
}
stop() {
ebegin "Stopping nvidia-persistenced"
start-stop-daemon --stop --quiet --pidfile ${pidfile}
eend $?
}

View file

@ -0,0 +1,3 @@
# Nvidia UVM support
remove nvidia modprobe -r --ignore-remove nvidia-drm nvidia-modeset nvidia-uvm nvidia

View file

@ -0,0 +1,22 @@
--- a/nvidia-settings-@PV@/src/gtk+-2.x/ctkvdpau.c
+++ b/nvidia-settings-@PV@/src/gtk+-2.x/ctkvdpau.c
@@ -103,6 +103,8 @@
const gchar* __video_mixer_attribute_help =
"This shows the video mixer attributes and any applicable ranges.";
+struct VDPAUDeviceImpl VDPAUDeviceFunctions;
+
static int queryOutputSurface(CtkVDPAU *ctk_vdpau, VdpDevice device,
VdpGetProcAddress *getProcAddress);
--- a/nvidia-settings-@PV@/src/gtk+-2.x/ctkvdpau.h
+++ b/nvidia-settings-@PV@/src/gtk+-2.x/ctkvdpau.h
@@ -46,7 +46,7 @@
(G_TYPE_INSTANCE_GET_CLASS ((obj), CTK_TYPE_VDPAU, CtkVDPAUClass))
-struct VDPAUDeviceImpl {
+extern struct VDPAUDeviceImpl {
VdpGetErrorString *GetErrorString;
VdpGetProcAddress *GetProcAddress;

View file

@ -0,0 +1,22 @@
--- a/nvidia-settings-@PV@/utils.mk
+++ b/nvidia-settings-@PV@/utils.mk
@@ -475,7 +475,7 @@
define READ_ONLY_OBJECT_FROM_FILE_RULE
$$(OUTPUTDIR)/$$(notdir $(1)).o: $(1)
$(at_if_quiet)cd $$(dir $(1)); \
- $$(call quiet_cmd_no_at,LD) -r -z noexecstack --format=binary \
+ $$(call quiet_cmd_no_at,NVLD) -r -z noexecstack --format=binary \
$$(notdir $(1)) -o $$(OUTPUTDIR_ABSOLUTE)/$$(notdir $$@)
$$(call quiet_cmd,OBJCOPY) \
--rename-section .data=.rodata,contents,alloc,load,data,readonly \
--- a/nvidia-settings-@PV@/src/libXNVCtrl/utils.mk
+++ b/nvidia-settings-@PV@/src/libXNVCtrl/utils.mk
@@ -475,7 +475,7 @@
define READ_ONLY_OBJECT_FROM_FILE_RULE
$$(OUTPUTDIR)/$$(notdir $(1)).o: $(1)
$(at_if_quiet)cd $$(dir $(1)); \
- $$(call quiet_cmd_no_at,LD) -r -z noexecstack --format=binary \
+ $$(call quiet_cmd_no_at,NVLD) -r -z noexecstack --format=binary \
$$(notdir $(1)) -o $$(OUTPUTDIR_ABSOLUTE)/$$(notdir $$@)
$$(call quiet_cmd,OBJCOPY) \
--rename-section .data=.rodata,contents,alloc,load,data,readonly \

View file

@ -0,0 +1,7 @@
[Desktop Entry]
Type=Application
Name=NVIDIA X Server Settings
Comment=Configure NVIDIA X Server Settings
Exec=/usr/bin/nvidia-settings
Icon=nvidia-settings
Categories=System;Settings;

View file

@ -0,0 +1,24 @@
#!/sbin/openrc-run
# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
pidfile="/run/nvidia-smi.pid"
depend() {
after modules
}
start() {
ebegin "Starting NVIDIA System Management Interface"
rm -f ${pidfile}
start-stop-daemon --start --quiet --pidfile ${pidfile} \
--make-pidfile --background --exec /opt/bin/nvidia-smi -- \
-q -l 300
eend $?
}
stop() {
ebegin "Stopping NVIDIA System Management Interface"
start-stop-daemon --stop --quiet --pidfile ${pidfile}
eend $?
}

View file

@ -0,0 +1,17 @@
#!/bin/sh
if [ $# -ne 1 ]; then
echo "Invalid args" >&2
exit 1
fi
case $1 in
add|ADD)
/opt/bin/nvidia-smi > /dev/null
;;
remove|REMOVE)
rm -f /dev/nvidia*
;;
esac
exit 0

View file

@ -0,0 +1,20 @@
#!/bin/sh
if [ $# -ne 1 ]; then
echo "Invalid args" >&2
exit 1
fi
case $1 in
add|ADD)
#hopefully this prevents infinite loops like bug #454740
if lsmod | grep -iq nvidia; then
/opt/bin/nvidia-smi > /dev/null
fi
;;
remove|REMOVE)
rm -f /dev/nvidia*
;;
esac
exit 0

View file

@ -0,0 +1 @@
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'"

View file

@ -0,0 +1,6 @@
ACTION=="add", DEVPATH=="/module/nvidia", SUBSYSTEM=="module", RUN+="nvidia-udev.sh $env{ACTION}"
# Previously the ACTION was "add|remove" but one user on bug #376527 had a
# problem until he recompiled udev-171-r5, which is one of the versions I
# tested with and it was fine. I'm breaking the rules out just to be safe
# so someone else doesn't have an issue
ACTION=="remove", DEVPATH=="/module/nvidia", SUBSYSTEM=="module", RUN+="nvidia-udev.sh $env{ACTION}"

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="person">
<email>jer@gentoo.org</email>
</maintainer>
<longdescription>
Nvidia provides different branches of its drivers for different batches of its
hardware. When maintaining these ebuilds or other ebuilds depending on them,
you will need to keep in mind that the major versions represent these different
branches.
You can use http://www.nvidia.com/Download/Find.aspx to figure out which branch
best matches your hardware.
</longdescription>
<use>
<flag name="X">Install the X.org driver, OpenGL libraries, XvMC libraries, and VDPAU libraries</flag>
<flag name="compat">Install non-GLVND libGL for backwards compatibility</flag>
<flag name="driver">Install the kernel driver module</flag>
<flag name="gtk3">Install nvidia-settings with support for GTK+ 3</flag>
<flag name="kms">Enable support for kernel mode setting (KMS)</flag>
<flag name="libglvnd">Use <pkg>media-libs/libglvnd</pkg> for dispatch</flag>
<flag name="tools">Install additional tools such as nvidia-settings</flag>
<flag name="uvm">Install the Unified Memory kernel module (nvidia-uvm) for sharing memory between CPU and GPU in CUDA programs</flag>
</use>
</pkgmetadata>

View file

@ -0,0 +1,589 @@
# Copyright 1999-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
inherit desktop flag-o-matic linux-info linux-mod multilib-minimal \
nvidia-driver portability systemd toolchain-funcs unpacker udev
AMD64_FBSD_NV_PACKAGE="NVIDIA-FreeBSD-x86_64-${PV}"
AMD64_NV_PACKAGE="NVIDIA-Linux-x86_64-${PV}"
ARM_NV_PACKAGE="NVIDIA-Linux-armv7l-gnueabihf-${PV}"
NV_URI="https://us.download.nvidia.com/XFree86/"
SRC_URI="
amd64-fbsd? ( ${NV_URI}FreeBSD-x86_64/${PV}/${AMD64_FBSD_NV_PACKAGE}.tar.gz )
amd64? ( ${NV_URI}Linux-x86_64/${PV}/${AMD64_NV_PACKAGE}.run )
tools? (
https://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-${PV}.tar.bz2
)
"
EMULTILIB_PKG="true"
KEYWORDS="-* amd64"
LICENSE="GPL-2 NVIDIA-r2"
SLOT="0/${PV%.*}"
IUSE="compat +driver gtk3 kernel_FreeBSD kernel_linux +kms +libglvnd multilib static-libs +tools uvm wayland +X"
REQUIRED_USE="
tools? ( X )
static-libs? ( tools )
"
COMMON="
driver? ( kernel_linux? ( acct-group/video ) )
kernel_linux? ( >=sys-libs/glibc-2.6.1 )
tools? (
dev-libs/atk
dev-libs/glib:2
dev-libs/jansson
gtk3? (
x11-libs/gtk+:3
)
x11-libs/cairo
x11-libs/gdk-pixbuf[X]
x11-libs/gtk+:2
x11-libs/libX11
x11-libs/libXext
x11-libs/libXrandr
x11-libs/libXv
x11-libs/libXxf86vm
x11-libs/pango[X]
)
X? (
!libglvnd? ( >=app-eselect/eselect-opengl-1.0.9 )
libglvnd? (
media-libs/libglvnd[${MULTILIB_USEDEP}]
!app-eselect/eselect-opengl
)
app-misc/pax-utils
)
"
DEPEND="
${COMMON}
kernel_linux? ( virtual/linux-sources )
tools? ( sys-apps/dbus )
"
RDEPEND="
${COMMON}
tools? ( !media-video/nvidia-settings )
uvm? ( >=virtual/opencl-3 )
wayland? ( dev-libs/wayland[${MULTILIB_USEDEP}] )
X? (
<x11-base/xorg-server-1.20.99:=
>=x11-libs/libX11-1.6.2[${MULTILIB_USEDEP}]
>=x11-libs/libXext-1.3.2[${MULTILIB_USEDEP}]
>=x11-libs/libvdpau-1.0[${MULTILIB_USEDEP}]
sys-libs/zlib[${MULTILIB_USEDEP}]
)
"
QA_PREBUILT="opt/* usr/lib*"
S=${WORKDIR}/
PATCHES=(
"${FILESDIR}"/${PN}-440.26-locale.patch
"${FILESDIR}"/${PN}-5.7.patch
)
NV_KV_MAX_PLUS="5.7"
CONFIG_CHECK="!DEBUG_MUTEXES ~!I2C_NVIDIA_GPU ~!LOCKDEP ~MTRR ~SYSVIPC ~ZONE_DMA"
pkg_pretend() {
nvidia-driver_check
}
pkg_setup() {
nvidia-driver_check
# try to turn off distcc and ccache for people that have a problem with it
export DISTCC_DISABLE=1
export CCACHE_DISABLE=1
if use driver && use kernel_linux; then
MODULE_NAMES="nvidia(video:${S}/kernel)"
use uvm && MODULE_NAMES+=" nvidia-uvm(video:${S}/kernel)"
use kms && MODULE_NAMES+=" nvidia-modeset(video:${S}/kernel) nvidia-drm(video:${S}/kernel)"
# This needs to run after MODULE_NAMES (so that the eclass checks
# whether the kernel supports loadable modules) but before BUILD_PARAMS
# is set (so that KV_DIR is populated).
linux-mod_pkg_setup
BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} \
SYSOUT=${KV_OUT_DIR} CC=$(tc-getBUILD_CC) NV_VERBOSE=1"
# linux-mod_src_compile calls set_arch_to_kernel, which
# sets the ARCH to x86 but NVIDIA's wrapping Makefile
# expects x86_64 or i386 and then converts it to x86
# later on in the build process
BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')"
fi
if use kernel_linux && kernel_is lt 2 6 9; then
eerror "You must build this against 2.6.9 or higher kernels."
fi
# set variables to where files are in the package structure
if use kernel_FreeBSD; then
use amd64-fbsd && S="${WORKDIR}/${AMD64_FBSD_NV_PACKAGE}"
NV_DOC="${S}/doc"
NV_OBJ="${S}/obj"
NV_SRC="${S}/src"
NV_MAN="${S}/x11/man"
NV_X11="${S}/obj"
NV_SOVER=1
elif use kernel_linux; then
NV_DOC="${S}"
NV_OBJ="${S}"
NV_SRC="${S}/kernel"
NV_MAN="${S}"
NV_X11="${S}"
NV_SOVER=${PV}
else
die "Could not determine proper NVIDIA package"
fi
}
src_configure() {
tc-export AR CC LD
default
}
src_prepare() {
local man_file
for man_file in "${NV_MAN}"/*1.gz; do
gunzip $man_file || die
done
if use tools; then
cp "${FILESDIR}"/nvidia-settings-fno-common.patch "${WORKDIR}" || die
cp "${FILESDIR}"/nvidia-settings-linker.patch "${WORKDIR}" || die
sed -i \
-e "s:@PV@:${PV}:g" \
"${WORKDIR}"/nvidia-settings-fno-common.patch \
"${WORKDIR}"/nvidia-settings-linker.patch \
|| die
eapply "${WORKDIR}"/nvidia-settings-fno-common.patch
eapply "${WORKDIR}"/nvidia-settings-linker.patch
fi
default
if ! [ -f nvidia_icd.json ]; then
cp nvidia_icd.json.template nvidia_icd.json || die
sed -i -e 's:__NV_VK_ICD__:libGLX_nvidia.so.0:g' nvidia_icd.json || die
fi
}
src_compile() {
cd "${NV_SRC}"
if use kernel_FreeBSD; then
MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" \
LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die
elif use driver && use kernel_linux; then
BUILD_TARGETS=module linux-mod_src_compile \
KERNELRELEASE="${KV_FULL}" \
src="${KERNEL_DIR}"
fi
if use tools; then
emake -C "${S}"/nvidia-settings-${PV}/src/libXNVCtrl \
DO_STRIP= \
LIBDIR="$(get_libdir)" \
NVLD="$(tc-getLD)" \
NV_VERBOSE=1 \
OUTPUTDIR=. \
RANLIB="$(tc-getRANLIB)"
emake -C "${S}"/nvidia-settings-${PV}/src \
DO_STRIP= \
GTK3_AVAILABLE=$(usex gtk3 1 0) \
LIBDIR="$(get_libdir)" \
NVLD="$(tc-getLD)" \
NVML_ENABLED=0 \
NV_USE_BUNDLED_LIBJANSSON=0 \
NV_VERBOSE=1 \
OUTPUTDIR=.
fi
}
# Install nvidia library:
# the first parameter is the library to install
# the second parameter is the provided soversion
# the third parameter is the target directory if it is not /usr/lib
donvidia() {
# Full path to library
nv_LIB="${1}"
# SOVER to use
nv_SOVER="$(scanelf -qF'%S#F' ${nv_LIB})"
# Where to install
nv_DEST="${2}"
# Get just the library name
nv_LIBNAME=$(basename "${nv_LIB}")
if [[ "${nv_DEST}" ]]; then
exeinto ${nv_DEST}
action="doexe"
else
nv_DEST="/usr/$(get_libdir)"
action="dolib.so"
fi
# Install the library
${action} ${nv_LIB} || die "failed to install ${nv_LIBNAME}"
# If the library has a SONAME and SONAME does not match the library name,
# then we need to create a symlink
if [[ ${nv_SOVER} ]] && ! [[ "${nv_SOVER}" = "${nv_LIBNAME}" ]]; then
dosym ${nv_LIBNAME} ${nv_DEST}/${nv_SOVER}
fi
dosym ${nv_LIBNAME} ${nv_DEST}/${nv_LIBNAME/.so*/.so}
}
src_install() {
if use driver && use kernel_linux; then
linux-mod_src_install
# Add the aliases
# This file is tweaked with the appropriate video group in
# pkg_preinst, see bug #491414
insinto /etc/modprobe.d
newins "${FILESDIR}"/nvidia-430.conf nvidia.conf
if use uvm; then
doins "${FILESDIR}"/nvidia-rmmod.conf
udev_newrules "${FILESDIR}"/nvidia-uvm.udev-rule 99-nvidia-uvm.rules
else
sed -e 's|nvidia-uvm ||g' "${FILESDIR}"/nvidia-rmmod.conf \
> "${T}"/nvidia-rmmod.conf || die
doins "${T}"/nvidia-rmmod.conf
fi
# Ensures that our device nodes are created when not using X
exeinto "$(get_udevdir)"
newexe "${FILESDIR}"/nvidia-udev.sh-r1 nvidia-udev.sh
udev_newrules "${FILESDIR}"/nvidia.udev-rule 99-nvidia.rules
elif use kernel_FreeBSD; then
if use x86-fbsd; then
insinto /boot/modules
doins "${S}/src/nvidia.kld"
fi
exeinto /boot/modules
doexe "${S}/src/nvidia.ko"
fi
# NVIDIA kernel <-> userspace driver config lib
donvidia ${NV_OBJ}/libnvidia-cfg.so.${NV_SOVER}
# NVIDIA framebuffer capture library
donvidia ${NV_OBJ}/libnvidia-fbc.so.${NV_SOVER}
# NVIDIA video encode/decode <-> CUDA
if use kernel_linux; then
donvidia ${NV_OBJ}/libnvcuvid.so.${NV_SOVER}
donvidia ${NV_OBJ}/libnvidia-encode.so.${NV_SOVER}
fi
if use X; then
# Xorg DDX driver
insinto /usr/$(get_libdir)/xorg/modules/drivers
doins ${NV_X11}/nvidia_drv.so
# Xorg GLX driver
donvidia ${NV_X11}/libglxserver_nvidia.so.${NV_SOVER} \
/usr/$(get_libdir)/xorg/modules/extensions
# Xorg nvidia.conf
if has_version '>=x11-base/xorg-server-1.16'; then
insinto /usr/share/X11/xorg.conf.d
newins {,50-}nvidia-drm-outputclass.conf
fi
insinto /usr/share/glvnd/egl_vendor.d
doins ${NV_X11}/10_nvidia.json
fi
if use wayland; then
insinto /usr/share/egl/egl_external_platform.d
doins ${NV_X11}/10_nvidia_wayland.json
fi
# OpenCL ICD for NVIDIA
if use kernel_linux; then
insinto /etc/OpenCL/vendors
doins ${NV_OBJ}/nvidia.icd
fi
# Helper Apps
exeinto /opt/bin/
if use X; then
doexe ${NV_OBJ}/nvidia-xconfig
insinto /etc/vulkan/icd.d
doins nvidia_icd.json
insinto /etc/vulkan/implicit_layer.d
doins nvidia_layers.json
fi
if use kernel_linux; then
doexe ${NV_OBJ}/nvidia-cuda-mps-control
doexe ${NV_OBJ}/nvidia-cuda-mps-server
doexe ${NV_OBJ}/nvidia-debugdump
doexe ${NV_OBJ}/nvidia-persistenced
doexe ${NV_OBJ}/nvidia-smi
# install nvidia-modprobe setuid and symlink in /usr/bin (bug #505092)
doexe ${NV_OBJ}/nvidia-modprobe
fowners root:video /opt/bin/nvidia-modprobe
fperms 4710 /opt/bin/nvidia-modprobe
dosym /{opt,usr}/bin/nvidia-modprobe
doman nvidia-cuda-mps-control.1
doman nvidia-modprobe.1
doman nvidia-persistenced.1
newinitd "${FILESDIR}/nvidia-smi.init" nvidia-smi
newconfd "${FILESDIR}/nvidia-persistenced.conf" nvidia-persistenced
newinitd "${FILESDIR}/nvidia-persistenced.init" nvidia-persistenced
fi
if use tools; then
emake -C "${S}"/nvidia-settings-${PV}/src/ \
DESTDIR="${D}" \
DO_STRIP= \
GTK3_AVAILABLE=$(usex gtk3 1 0) \
LIBDIR="${D}/usr/$(get_libdir)" \
NV_USE_BUNDLED_LIBJANSSON=0 \
NV_VERBOSE=1 \
OUTPUTDIR=. \
PREFIX=/usr \
install
if use static-libs; then
dolib.a "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/libXNVCtrl.a
insinto /usr/include/NVCtrl
doins "${S}"/nvidia-settings-${PV}/src/libXNVCtrl/*.h
fi
insinto /usr/share/nvidia/
doins nvidia-application-profiles-${PV}-key-documentation
insinto /etc/nvidia
newins \
nvidia-application-profiles-${PV}-rc nvidia-application-profiles-rc
# There is no icon in the FreeBSD tarball.
use kernel_FreeBSD || \
doicon ${NV_OBJ}/nvidia-settings.png
domenu "${FILESDIR}"/nvidia-settings.desktop
exeinto /etc/X11/xinit/xinitrc.d
newexe "${FILESDIR}"/95-nvidia-settings-r1 95-nvidia-settings
fi
dobin ${NV_OBJ}/nvidia-bug-report.sh
systemd_dounit *.service
dobin nvidia-sleep.sh
exeinto $(systemd_get_utildir)/system-sleep
doexe nvidia
if has_multilib_profile && use multilib; then
local OABI=${ABI}
for ABI in $(get_install_abis); do
src_install-libs
done
ABI=${OABI}
unset OABI
else
src_install-libs
fi
is_final_abi || die "failed to iterate through all ABIs"
# Documentation
if use kernel_FreeBSD; then
dodoc "${NV_DOC}/README"
use X && doman "${NV_MAN}"/nvidia-xconfig.1
use tools && doman "${NV_MAN}"/nvidia-settings.1
else
# Docs
newdoc "${NV_DOC}/README.txt" README
dodoc "${NV_DOC}/NVIDIA_Changelog"
doman "${NV_MAN}"/nvidia-smi.1
use X && doman "${NV_MAN}"/nvidia-xconfig.1
use tools && doman "${NV_MAN}"/nvidia-settings.1
doman "${NV_MAN}"/nvidia-cuda-mps-control.1
fi
readme.gentoo_create_doc
docinto html
dodoc -r ${NV_DOC}/html/*
}
src_install-libs() {
local inslibdir=$(get_libdir)
if use libglvnd; then
local GL_ROOT="/usr/$(get_libdir)"
else
local GL_ROOT="/usr/$(get_libdir)/opengl/nvidia/lib"
fi
local CL_ROOT="/usr/$(get_libdir)/OpenCL/vendors/nvidia"
local nv_libdir="${NV_OBJ}"
if use kernel_linux && has_multilib_profile && [[ ${ABI} == "x86" ]]; then
nv_libdir="${NV_OBJ}"/32
fi
if use X; then
NV_GLX_LIBRARIES=(
"libEGL_nvidia.so.${NV_SOVER} ${GL_ROOT}"
"libGLESv1_CM_nvidia.so.${NV_SOVER} ${GL_ROOT}"
"libGLESv2_nvidia.so.${NV_SOVER} ${GL_ROOT}"
"libGLX_nvidia.so.${NV_SOVER} ${GL_ROOT}"
"libOpenCL.so.1.0.0 ${CL_ROOT}"
"libcuda.so.${NV_SOVER}"
"libnvcuvid.so.${NV_SOVER}"
"libnvidia-compiler.so.${NV_SOVER}"
"libnvidia-eglcore.so.${NV_SOVER}"
"libnvidia-encode.so.${NV_SOVER}"
"libnvidia-fatbinaryloader.so.${NV_SOVER}"
"libnvidia-fbc.so.${NV_SOVER}"
"libnvidia-glcore.so.${NV_SOVER}"
"libnvidia-glsi.so.${NV_SOVER}"
"libnvidia-glvkspirv.so.${NV_SOVER}"
"libnvidia-ifr.so.${NV_SOVER}"
"libnvidia-opencl.so.${NV_SOVER}"
"libnvidia-ptxjitcompiler.so.${NV_SOVER}"
"libvdpau_nvidia.so.${NV_SOVER}"
)
if ! use libglvnd; then
NV_GLX_LIBRARIES+=(
"libEGL.so.$( [[ ${ABI} == "amd64" ]] && usex compat ${NV_SOVER} 1.1.0 || echo 1.1.0) ${GL_ROOT}"
"libGL.so.1.7.0 ${GL_ROOT}"
"libGLESv1_CM.so.1.2.0 ${GL_ROOT}"
"libGLESv2.so.2.1.0 ${GL_ROOT}"
"libGLX.so.0 ${GL_ROOT}"
"libGLdispatch.so.0 ${GL_ROOT}"
"libOpenGL.so.0 ${GL_ROOT}"
)
fi
if use wayland && has_multilib_profile && [[ ${ABI} == "amd64" ]];
then
NV_GLX_LIBRARIES+=(
"libnvidia-egl-wayland.so.1.1.4"
)
fi
if use kernel_FreeBSD; then
NV_GLX_LIBRARIES+=(
"libnvidia-tls.so.${NV_SOVER}"
)
fi
if use kernel_linux; then
NV_GLX_LIBRARIES+=(
"libnvidia-ml.so.${NV_SOVER}"
"libnvidia-tls.so.${NV_SOVER}"
)
fi
if use kernel_linux && has_multilib_profile && [[ ${ABI} == "amd64" ]];
then
NV_GLX_LIBRARIES+=(
"libnvidia-cbl.so.${NV_SOVER}"
"libnvidia-rtcore.so.${NV_SOVER}"
"libnvoptix.so.${NV_SOVER}"
)
fi
for NV_LIB in "${NV_GLX_LIBRARIES[@]}"; do
donvidia "${nv_libdir}"/${NV_LIB}
done
fi
}
pkg_preinst() {
if use driver && use kernel_linux; then
linux-mod_pkg_preinst
local videogroup="$(getent group video | cut -d ':' -f 3)"
if [ -z "${videogroup}" ]; then
eerror "Failed to determine the video group gid"
die "Failed to determine the video group gid"
else
sed -i \
-e "s:PACKAGE:${PF}:g" \
-e "s:VIDEOGID:${videogroup}:" \
"${D}"/etc/modprobe.d/nvidia.conf || die
fi
fi
# Clean the dynamic libGL stuff's home to ensure
# we dont have stale libs floating around
if [ -d "${ROOT}"/usr/lib/opengl/nvidia ]; then
rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*
fi
# Make sure we nuke the old nvidia-glx's env.d file
if [ -e "${ROOT}"/etc/env.d/09nvidia ]; then
rm -f "${ROOT}"/etc/env.d/09nvidia
fi
}
pkg_postinst() {
use driver && use kernel_linux && linux-mod_pkg_postinst
# Switch to the nvidia implementation
if ! use libglvnd; then
use X && "${ROOT}"/usr/bin/eselect opengl set --use-old nvidia
fi
readme.gentoo_print_elog
if ! use X; then
elog "You have elected to not install the X.org driver. Along with"
elog "this the OpenGL libraries and VDPAU libraries were not"
elog "installed. Additionally, once the driver is loaded your card"
elog "and fan will run at max speed which may not be desirable."
elog "Use the 'nvidia-smi' init script to have your card and fan"
elog "speed scale appropriately."
elog
fi
if ! use tools; then
elog "USE=tools controls whether the nvidia-settings application"
elog "is installed. If you would like to use it, enable that"
elog "flag and re-emerge this ebuild. Optionally you can install"
elog "media-video/nvidia-settings"
elog
fi
elog "To enable nvidia sleep services under systemd, run these commands:"
elog " systemctl enable nvidia-suspend.service"
elog " systemctl enable nvidia-hibernate.service"
elog " systemctl enable nvidia-resume.service"
elog "Set the NVreg_TemporaryFilePath kernel module parameter to a"
elog "suitable path in case the default of /tmp does not work for you"
elog "For more information see:"
elog "${ROOT}/usr/share/doc/${PF}/html/powermanagement.html"
}
pkg_prerm() {
if ! use libglvnd; then
use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
fi
}
pkg_postrm() {
use driver && use kernel_linux && linux-mod_pkg_postrm
if ! use libglvnd; then
use X && "${ROOT}"/usr/bin/eselect opengl set --use-old xorg-x11
fi
}