diff options
-rw-r--r-- | .SRCINFO | 107 | ||||
-rw-r--r-- | 10-nvidia-drm-outputclass.conf | 6 | ||||
-rw-r--r-- | 20-nvidia.conf | 4 | ||||
-rw-r--r-- | PKGBUILD | 475 | ||||
-rw-r--r-- | nvidia-utils-vulkan.install | 10 | ||||
-rw-r--r-- | nvidia-vulkan.install | 46 |
6 files changed, 648 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO new file mode 100644 index 000000000000..e5a374ca2c14 --- /dev/null +++ b/.SRCINFO @@ -0,0 +1,107 @@ +pkgbase = nvidia-vulkan + pkgver = 396.24.02 + pkgrel = 1 + url = http://www.nvidia.com/ + arch = x86_64 + license = custom:NVIDIA + makedepends = linux-headers + options = !strip + source = NVIDIA-Linux-x86_64-396.24.02.run::https://developer.nvidia.com/linux-3962402 + source = 10-nvidia-drm-outputclass.conf + source = 20-nvidia.conf + md5sums = 2beac36fcc0e5ad7138a980395ab2f4e + md5sums = 4f5562ee8f3171769e4638b35396c55d + md5sums = 2640eac092c220073f0668a7aaff61f7 + +pkgname = nvidia-vulkan + pkgdesc = Full NVIDIA driver package for Arch's official 'linux' package (driver, utilities, and libraries) (beta version) + install = nvidia-vulkan.install + depends = linux + depends = nvidia-utils-vulkan>=396.24.02 + depends = libgl + provides = nvidia=396.24.02 + conflicts = nvidia-96xx + conflicts = nvidia-173xx + conflicts = nvidia + +pkgname = nvidia-utils-vulkan + pkgdesc = NVIDIA driver utilities and libraries for 'nvidia-vulkan' + install = nvidia-utils-vulkan.install + depends = xorg-server + depends = mesa>=17.0.2-2 + optdepends = gtk2: nvidia-settings (GTK+ v2) + optdepends = gtk3: nvidia-settings (GTK+ v3) + optdepends = opencl-nvidia-vulkan: OpenCL support + optdepends = xorg-server-devel: nvidia-xconfig + optdepends = egl-wayland-git: for alternative, more advanced Wayland library (libnvidia-egl-wayland.so.1.0.3) + provides = nvidia-utils=396.24.02 + provides = nvidia-settings=396.24.02 + provides = libglvnd + provides = vulkan-driver + conflicts = nvidia-utils + conflicts = nvidia-settings + conflicts = libglvnd + backup = etc/X11/xorg.conf.d/20-nvidia.conf + +pkgname = nvidia-egl-wayland-vulkan + pkgdesc = NVIDIA EGL Wayland library (libnvidia-egl-wayland.so.1.0.3) for 'nvidia-utils-vulkan' + depends = nvidia-utils-vulkan + provides = egl-wayland + conflicts = egl-wayland + +pkgname = nvidia-libgl-vulkan + pkgdesc = NVIDIA driver library symlinks for 'nvidia-utils-vulkan' + depends = nvidia-utils-vulkan + provides = nvidia-libgl=396.24.02 + provides = libgl + provides = libegl + provides = libgles + conflicts = nvidia-libgl + conflicts = libgl + conflicts = libegl + conflicts = libgles + +pkgname = opencl-nvidia-vulkan + pkgdesc = NVIDIA's OpenCL implemention for 'nvidia-utils-vulkan' + depends = zlib + optdepends = opencl-headers: headers necessary for OpenCL development + provides = opencl-nvidia=396.24.02 + provides = opencl-driver + conflicts = opencl-nvidia + +pkgname = lib32-nvidia-utils-vulkan + pkgdesc = NVIDIA driver utilities and libraries for 'nvidia-vulkan' (32-bit) + depends = lib32-zlib + depends = lib32-gcc-libs + depends = nvidia-utils-vulkan + depends = lib32-mesa>=17.0.2-1 + optdepends = lib32-opencl-nvidia-vulkan: OpenCL support + provides = lib32-nvidia-utils=396.24.02 + provides = lib32-libglvnd + provides = lib32-vulkan-driver + conflicts = lib32-nvidia-utils + conflicts = lib32-libglvnd + +pkgname = lib32-nvidia-libgl-vulkan + pkgdesc = NVIDIA driver library symlinks for 'lib32-nvidia-utils-vulkan' + depends = lib32-nvidia-utils-vulkan + depends = nvidia-libgl-vulkan + provides = lib32-nvidia-libgl=396.24.02 + provides = lib32-libgl + provides = lib32-libegl + provides = lib32-libgles + conflicts = lib32-nvidia-libgl + conflicts = lib32-libgl + conflicts = lib32-libegl + conflicts = lib32-libgles + replaces = lib32-nvidia-utils<=313.26-1 + +pkgname = lib32-opencl-nvidia-vulkan + pkgdesc = NVIDIA's OpenCL implemention for 'lib32-nvidia-utils-vulkan' + depends = lib32-zlib + depends = lib32-gcc-libs + optdepends = opencl-headers: headers necessary for OpenCL development + provides = lib32-opencl-nvidia=396.24.02 + provides = lib32-opencl-driver + conflicts = lib32-opencl-nvidia + diff --git a/10-nvidia-drm-outputclass.conf b/10-nvidia-drm-outputclass.conf new file mode 100644 index 000000000000..6a01fba8cfc3 --- /dev/null +++ b/10-nvidia-drm-outputclass.conf @@ -0,0 +1,6 @@ +Section "OutputClass" + Identifier "nvidia" + MatchDriver "nvidia-drm" + Driver "nvidia" + ModulePath "/usr/lib/nvidia/xorg" +EndSection diff --git a/20-nvidia.conf b/20-nvidia.conf new file mode 100644 index 000000000000..8b8e26863c90 --- /dev/null +++ b/20-nvidia.conf @@ -0,0 +1,4 @@ +Section "Device" + Identifier "Default Nvidia Device" + Option "NoLogo" "True" +EndSection diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 000000000000..418037a37e7f --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,475 @@ +# Maintainer: jcstryker <inbox at jasonstryker dot com> +# Contributor: Det <nimetonmaili g-mail> + +pkgname=('nvidia-vulkan' 'nvidia-utils-vulkan' 'nvidia-egl-wayland-vulkan' 'nvidia-libgl-vulkan' 'opencl-nvidia-vulkan' + 'lib32-nvidia-utils-vulkan' 'lib32-nvidia-libgl-vulkan' 'lib32-opencl-nvidia-vulkan') +pkgver=396.24.02 +pkgrel=1 +arch=('x86_64') +url="http://www.nvidia.com/" +license=('custom:NVIDIA') +makedepends=('linux-headers') +options=('!strip') + +# Installer name +_pkg="NVIDIA-Linux-x86_64-$pkgver" + +# Source +source=("NVIDIA-Linux-x86_64-$pkgver.run::https://developer.nvidia.com/linux-3962402" + '10-nvidia-drm-outputclass.conf' + '20-nvidia.conf') +md5sums=('2beac36fcc0e5ad7138a980395ab2f4e' + '4f5562ee8f3171769e4638b35396c55d' + '2640eac092c220073f0668a7aaff61f7') + +# Patch +#source+=('linux-4.11.patch') +#md5sums+=('cc8941b6898d9daa0fb67371f57a56b6') + +# Auto-add *.patch files from $startdir to source=() +for _patch in $(find "$startdir" -maxdepth 1 -name '*.patch' -printf "%f\n"); do + # Don't duplicate already listed ones + if [[ ! " ${source[@]} " =~ " $_patch " ]]; then # https://stackoverflow.com/a/15394738/1821548 + source+=("$_patch") + md5sums+=('SKIP') + fi +done + +_create_links() { + # create missing soname links + for _lib in $(find "$pkgdir" -name '*.so*' | grep -v 'xorg/'); do + # Get soname/base name + _soname=$(dirname "$_lib")/$(readelf -d "$_lib" | grep -Po 'SONAME.*: \[\K[^]]*' || true) + _base=$(echo "$_soname" | sed -r 's/(.*).so.*/\1.so/') + + # Create missing links + [[ -e $_soname ]] || ln -s $(basename "$_lib") "$_soname" + [[ -e $_base ]] || ln -s $(basename "$_soname") "$_base" + done +} + +prepare() { + # Remove previous builds + [[ -d $_pkg ]] && rm -rf $_pkg + + # Extract + msg2 "Self-Extracting $_pkg.run..." + sh $_pkg.run -x + cd $_pkg + bsdtar -xf nvidia-persistenced-init.tar.bz2 + + # Kernel version (e.g. 4.15.0-1-ARCH) + _kernel=$(cat /usr/lib/modules/extramodules-*-ARCH/version) + + # Loop patches (linux-4.15.patch, lol.patch, ...) + for _p in $(printf -- '%s\n' ${source[@]} | grep .patch); do # https://stackoverflow.com/a/21058239/1821548 + # Patch version (4.15, "", ...) + _patch=$(echo $_p | grep -Po "\d+\.\d+") + + # Compare versions + if (( $(vercmp "$_kernel" "$_patch") >= 0 )); then + msg2 "Applying $_p..." + patch -p1 -i "$srcdir"/$_p + else + msg2 "Skipping $_p..." # List these, instead of ignoring silently + fi + done +} + +build() { + # Version of 'linux' + _kernel=$(cat /usr/lib/modules/extramodules-*-ARCH/version) + + # Build module + cd $_pkg/kernel + msg2 "Building Nvidia module for $_kernel..." + make SYSSRC=/usr/lib/modules/$_kernel/build module +} + +package_opencl-nvidia-vulkan() { + pkgdesc="NVIDIA's OpenCL implemention for 'nvidia-utils-vulkan'" + depends=('zlib') + optdepends=('opencl-headers: headers necessary for OpenCL development') + provides=("opencl-nvidia=$pkgver" 'opencl-driver') + conflicts=('opencl-nvidia') + cd $_pkg + + # OpenCL + install -Dm644 nvidia.icd "$pkgdir"/etc/OpenCL/vendors/nvidia.icd + install -Dm755 libnvidia-compiler.so.$pkgver "$pkgdir"/usr/lib/libnvidia-compiler.so.$pkgver + install -Dm755 libnvidia-opencl.so.$pkgver "$pkgdir"/usr/lib/libnvidia-opencl.so.$pkgver + + # create missing soname links + _create_links + + # License (link) + install -d "$pkgdir"/usr/share/licenses/ + ln -s nvidia/ "$pkgdir"/usr/share/licenses/opencl-nvidia +} + +package_nvidia-libgl-vulkan() { + pkgdesc="NVIDIA driver library symlinks for 'nvidia-utils-vulkan'" + depends=('nvidia-utils-vulkan') + provides=("nvidia-libgl=$pkgver" 'libgl' 'libegl' 'libgles') + conflicts=('nvidia-libgl' 'libgl' 'libegl' 'libgles') + cd $_pkg + + mkdir -p "${pkgdir}/usr/lib/" + + # libGL (link) + ln -s /usr/lib/nvidia/libGL.so.1.7.0 "$pkgdir"/usr/lib/libGL.so.1 + ln -s libGL.so.1 "$pkgdir"/usr/lib/libGL.so + + # EGL (link) + ln -s /usr/lib/nvidia/libEGL.so.1.1.0 "$pkgdir"/usr/lib/libEGL.so.1 + ln -s libEGL.so.1 "$pkgdir"/usr/lib/libEGL.so + + # OpenGL ES 1 (link) + ln -s /usr/lib/nvidia/libGLESv1_CM.so.1.2.0 "$pkgdir"/usr/lib/libGLESv1_CM.so.1 + ln -s libGLESv1_CM.so.1 "$pkgdir"/usr/lib/libGLESv1_CM.so + + # OpenGL ES 2 (link) + ln -s /usr/lib/nvidia/libGLESv2.so.2.1.0 "$pkgdir"/usr/lib/libGLESv2.so.2 + ln -s libGLESv2.so.2 "$pkgdir"/usr/lib/libGLESv2.so + + # License (link) + install -d "$pkgdir"/usr/share/licenses/ + ln -s nvidia/ "$pkgdir"/usr/share/licenses/nvidia-libgl +} + +package_nvidia-egl-wayland-vulkan() { + pkgdesc="NVIDIA EGL Wayland library (libnvidia-egl-wayland.so.1.0.3) for 'nvidia-utils-vulkan'" + depends=('nvidia-utils-vulkan') + provides=('egl-wayland') + conflicts=('egl-wayland') + cd $_pkg + + install -Dm755 libnvidia-egl-wayland.so.1.0.3 "$pkgdir"/usr/lib/libnvidia-egl-wayland.so.1.0.3 + ln -s libnvidia-egl-wayland.so.1.0.3 "$pkgdir"/usr/lib/libnvidia-egl-wayland.so.1 +} + +package_nvidia-utils-vulkan() { + pkgdesc="NVIDIA driver utilities and libraries for 'nvidia-vulkan'" + depends=('xorg-server' 'mesa>=17.0.2-2') + optdepends=('gtk2: nvidia-settings (GTK+ v2)' + 'gtk3: nvidia-settings (GTK+ v3)' + 'opencl-nvidia-vulkan: OpenCL support' + 'xorg-server-devel: nvidia-xconfig' + 'egl-wayland-git: for alternative, more advanced Wayland library (libnvidia-egl-wayland.so.1.0.3)') + provides=("nvidia-utils=$pkgver" "nvidia-settings=$pkgver" 'libglvnd' 'vulkan-driver') + conflicts=('nvidia-utils' 'nvidia-settings' 'libglvnd') + backup=('etc/X11/xorg.conf.d/20-nvidia.conf') + install=$pkgname.install + cd $_pkg + + # X driver + install -Dm755 nvidia_drv.so "$pkgdir"/usr/lib/xorg/modules/drivers/nvidia_drv.so + + # GLX extension for X + install -Dm755 libglx.so.$pkgver "$pkgdir"/usr/lib/nvidia/xorg/libglx.so.$pkgver + ln -s libglx.so.$pkgver "$pkgdir"/usr/lib/nvidia/xorg/libglx.so.1 # X doesn't find glx otherwise + ln -s libglx.so.$pkgver "$pkgdir"/usr/lib/nvidia/xorg/libglx.so # X doesn't find glx otherwise + + # libGL & OpenGL + install -Dm755 libGL.so.1.7.0 "$pkgdir"/usr/lib/nvidia/libGL.so.1.7.0 + install -Dm755 libGLdispatch.so.0 "$pkgdir"/usr/lib/libGLdispatch.so.0 + install -Dm755 libnvidia-glcore.so.$pkgver "$pkgdir"/usr/lib/libnvidia-glcore.so.$pkgver + install -Dm755 libOpenGL.so.0 "$pkgdir"/usr/lib/libOpenGL.so.0 + install -Dm755 libnvidia-glvkspirv.so.$pkgver "$pkgdir"/usr/lib/libnvidia-glvkspirv.so.$pkgver + + # GLX + install -Dm755 libGLX.so.0 "$pkgdir"/usr/lib/libGLX.so.0 + install -Dm755 libGLX_nvidia.so.$pkgver "$pkgdir"/usr/lib/libGLX_nvidia.so.$pkgver + # now in mesa driver + #ln -s libGLX_nvidia.so.$pkgver "$pkgdir"/usr/lib/libGLX_indirect.so.0 + + # EGL + install -Dm755 libEGL.so.1.1.0 "$pkgdir"/usr/lib/nvidia/libEGL.so.1.1.0 + install -Dm755 libEGL_nvidia.so.$pkgver "$pkgdir"/usr/lib/libEGL_nvidia.so.$pkgver + install -Dm755 libnvidia-eglcore.so.$pkgver "$pkgdir"/usr/lib/libnvidia-eglcore.so.$pkgver + install -Dm644 10_nvidia.json "$pkgdir"/usr/share/glvnd/egl_vendor.d/10_nvidia.json + install -Dm644 10_nvidia_wayland.json "$pkgdir"/usr/share/egl/egl_external_platform.d/10_nvidia_wayland.json + + # OpenGL ES + install -Dm755 libGLESv1_CM.so.1.2.0 "$pkgdir"/usr/lib/nvidia/libGLESv1_CM.so.1.2.0 + install -Dm755 libGLESv1_CM_nvidia.so.$pkgver "$pkgdir"/usr/lib/libGLESv1_CM_nvidia.so.$pkgver + install -Dm755 libGLESv2.so.2.1.0 "$pkgdir"/usr/lib/nvidia/libGLESv2.so.2.1.0 + install -Dm755 libGLESv2_nvidia.so.$pkgver "$pkgdir"/usr/lib/libGLESv2_nvidia.so.$pkgver + install -Dm755 libnvidia-glsi.so.$pkgver "$pkgdir"/usr/lib/libnvidia-glsi.so.$pkgver + + # VDPAU (Video Decode and Presentation API for Unix) + install -Dm755 libvdpau_nvidia.so.$pkgver "$pkgdir"/usr/lib/vdpau/libvdpau_nvidia.so.$pkgver + + # GPU-accelerated video encoding + install -Dm755 libnvidia-encode.so.$pkgver "$pkgdir"/usr/lib/libnvidia-encode.so.$pkgver + + # GTK+ for nvidia-settings + install -Dm755 libnvidia-gtk2.so.$pkgver "$pkgdir"/usr/lib/libnvidia-gtk2.so.$pkgver + install -Dm755 libnvidia-gtk3.so.$pkgver "$pkgdir"/usr/lib/libnvidia-gtk3.so.$pkgver + + # Component of nvidia-xconfig + install -Dm755 libnvidia-cfg.so.$pkgver "$pkgdir"/usr/lib/libnvidia-cfg.so.$pkgver + + # CUDA (Compute Unified Device Architecture) (perform traditional CPU calculations with the GPU) + install -Dm755 libcuda.so.$pkgver "$pkgdir"/usr/lib/libcuda.so.$pkgver + install -Dm755 libnvcuvid.so.$pkgver "$pkgdir"/usr/lib/libnvcuvid.so.$pkgver + + # PTX JIT Compiler (Parallel Thread Execution (PTX) is a pseudo-assembly language for CUDA) + install -Dm755 libnvidia-ptxjitcompiler.so.$pkgver "$pkgdir"/usr/lib/libnvidia-ptxjitcompiler.so.$pkgver + + # Fat (multiarchitecture) binary loader + install -Dm755 libnvidia-fatbinaryloader.so.$pkgver "$pkgdir"/usr/lib/libnvidia-fatbinaryloader.so.$pkgver + + # TLS (Thread local storage) support for OpenGL libs + install -Dm755 libnvidia-tls.so.$pkgver "$pkgdir"/usr/lib/libnvidia-tls.so.$pkgver # Classic + install -Dm755 tls/libnvidia-tls.so.$pkgver "$pkgdir"/usr/lib/tls/libnvidia-tls.so.$pkgver # New + + # GPU monitoring and management (1/2) + install -Dm755 libnvidia-ml.so.$pkgver "$pkgdir"/usr/lib/libnvidia-ml.so.$pkgver + + # Vulkan icd + install -Dm644 nvidia_icd.json.template "$pkgdir"/usr/share/vulkan/icd.d/nvidia_icd.json + sed -i 's/__NV_VK_ICD__/libGLX_nvidia.so.0/' "$pkgdir"/usr/share/vulkan/icd.d/nvidia_icd.json + + # Helper libs for approved partners' GRID remote apps + install -Dm755 libnvidia-ifr.so.$pkgver "$pkgdir"/usr/lib/libnvidia-ifr.so.$pkgver + install -Dm755 libnvidia-fbc.so.$pkgver "$pkgdir"/usr/lib/libnvidia-fbc.so.$pkgver + + # Not required (https://bugs.archlinux.org/task/38604): + # - libnvidia-wfb.so.$pkgver (provided by xorg-server: https://www.archlinux.org/packages/extra/x86_64/xorg-server/) + + # create missing soname links + _create_links + +##### BINARIES AND MANPAGES ##### + + # CUDA MPS (Multi Process Service) + install -Dm755 nvidia-cuda-mps-control "$pkgdir"/usr/bin/nvidia-cuda-mps-control + install -Dm644 nvidia-cuda-mps-control.1.gz "$pkgdir"/usr/share/man/man1/nvidia-cuda-mps-control.1.gz + install -Dm755 nvidia-cuda-mps-server "$pkgdir"/usr/bin/nvidia-cuda-mps-server + + # For loading the kernel module and creating the character device files + install -Dm4755 nvidia-modprobe "$pkgdir"/usr/bin/nvidia-modprobe + install -Dm644 nvidia-modprobe.1.gz "$pkgdir"/usr/share/man/man1/nvidia-modprobe.1.gz + + # Daemon for maintaining persistent software state in the driver + install -Dm755 nvidia-persistenced "$pkgdir"/usr/bin/nvidia-persistenced + install -Dm644 nvidia-persistenced.1.gz "$pkgdir"/usr/share/man/man1/nvidia-persistenced.1.gz + install -Dm644 nvidia-persistenced-init/systemd/nvidia-persistenced.service.template \ + "$pkgdir"/usr/lib/systemd/system/nvidia-persistenced.service + sed -i 's/__USER__/nvidia-persistenced/' "$pkgdir"/usr/lib/systemd/system/nvidia-persistenced.service + + # GUI for configuring the driver + install -Dm755 nvidia-settings "$pkgdir"/usr/bin/nvidia-settings + install -Dm644 nvidia-settings.1.gz "$pkgdir"/usr/share/man/man1/nvidia-settings.1.gz + install -Dm644 nvidia-settings.png "$pkgdir"/usr/share/pixmaps/nvidia-settings.png + install -Dm644 nvidia-settings.desktop "$pkgdir"/usr/share/applications/nvidia-settings.desktop + sed -e 's:__UTILS_PATH__:/usr/bin:' \ + -e 's:__PIXMAP_PATH__:/usr/share/pixmaps:' \ + -i "$pkgdir"/usr/share/applications/nvidia-settings.desktop + + # GPU monitoring and management (2/2) + install -Dm755 nvidia-smi "$pkgdir"/usr/bin/nvidia-smi + install -Dm644 nvidia-smi.1.gz "$pkgdir"/usr/share/man/man1/nvidia-smi.1.gz + + # Basic control over configuration options in the driver + install -Dm755 nvidia-xconfig "$pkgdir"/usr/bin/nvidia-xconfig + install -Dm644 nvidia-xconfig.1.gz "$pkgdir"/usr/share/man/man1/nvidia-xconfig.1.gz + + # Debugging and bug reporting + install -Dm755 nvidia-bug-report.sh "$pkgdir"/usr/bin/nvidia-bug-report.sh + install -Dm755 nvidia-debugdump "$pkgdir"/usr/bin/nvidia-debugdump + +##### MISCELLANEOUS ##### + + # Vendor profiles + install -Dm644 nvidia-application-profiles-$pkgver-rc \ + "$pkgdir"/usr/share/nvidia/nvidia-application-profiles-$pkgver-rc + install -Dm644 nvidia-application-profiles-$pkgver-key-documentation \ + "$pkgdir"/usr/share/nvidia/nvidia-application-profiles-$pkgver-key-documentation + + # Documentation + install -Dm644 README.txt "$pkgdir"/usr/share/doc/nvidia/README + install -Dm644 NVIDIA_Changelog "$pkgdir"/usr/share/doc/nvidia/NVIDIA_Changelog + cp -r html "$pkgdir"/usr/share/doc/nvidia/ + ln -s nvidia/ "$pkgdir"/usr/share/doc/nvidia-utils + + # Licenses + install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/nvidia/LICENSE + ln -s nvidia/ "$pkgdir"/usr/share/licenses/nvidia-utils + + # Disable logo splash + install -Dm644 "$srcdir"/20-nvidia.conf "$pkgdir"/etc/X11/xorg.conf.d/20-nvidia.conf + + # Distro-specific files must be installed in /usr/share/X11/xorg.conf.d + install -Dm644 "$srcdir"/10-nvidia-drm-outputclass.conf "$pkgdir"/usr/share/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf +} + +package_nvidia-vulkan() { + pkgdesc="Full NVIDIA driver package for Arch's official 'linux' package (driver, utilities, and libraries) (beta version)" + depends=('linux' "nvidia-utils-vulkan>=$pkgver" 'libgl') + provides=("nvidia=$pkgver") + conflicts=('nvidia-96xx' 'nvidia-173xx' 'nvidia') + install=$pkgname.install + + # Version of 'linux' + _major=$(pacman -Q linux | grep -Po "\d+\.\d+") + _extramodules=extramodules-$_major-ARCH + + # Nvidia kernel module; provides low-level access to your NVIDIA hardware for the other components. Generally + # loaded into the kernel when the X server is started, to be used by the X driver and OpenGL. Consists of two + # pieces: the binary-only core, and a kernel interface that must be compiled specifically for your kernel version, + # because the Linux kernel doesn't have a consistent binary interface like the X server. + install -Dm644 $_pkg/kernel/nvidia.ko \ + "$pkgdir"/usr/lib/modules/$_extramodules/nvidia.ko + + # NVIDIA Unified Memory kernel module; provides functionality for sharing memory between the CPU and GPU in + # CUDA programs. Generally loaded into the kernel when a CUDA program is started, and used by the CUDA + # driver on supported platforms: http://devblogs.nvidia.com/parallelforall/unified-memory-in-cuda-6/ + install -Dm644 $_pkg/kernel/nvidia-uvm.ko \ + "$pkgdir"/usr/lib/modules/$_extramodules/nvidia-uvm.ko + + # Kernel module responsible for programming the display engine of the GPU. User-mode NVIDIA driver components + # such as the NVIDIA X driver, OpenGL driver, and VDPAU driver communicate with nvidia-modeset.ko through the + # /dev/nvidia-modeset device file. + install -Dm644 $_pkg/kernel/nvidia-modeset.ko \ + "$pkgdir"/usr/lib/modules/$_extramodules/nvidia-modeset.ko + + # NVIDIA DRM kernel module; registers as a DRM driver to provide GEM and PRIME DRM capabilities + # for atomic DRM KMS and graphics display offload on Optimus notebooks: + # https://devtalk.nvidia.com/default/topic/925605/linux/nvidia-364-12-release-vulkan-glvnd-drm-kms-and-eglstreams/ + install -Dm644 $_pkg/kernel/nvidia-drm.ko \ + "$pkgdir"/usr/lib/modules/$_extramodules/nvidia-drm.ko + + # Compress + gzip "$pkgdir"/usr/lib/modules/$_extramodules/nvidia*.ko + + # Write _extramodules to .install + sed -i "s/_extramodules='.*'/_extramodules='$_extramodules'/" "$startdir"/$install + + # Blacklist Nouveau + install -d "$pkgdir"/usr/lib/modprobe.d/ + echo "blacklist nouveau" >> "$pkgdir"/usr/lib/modprobe.d/nvidia.conf +} + +package_lib32-opencl-nvidia-vulkan() { + pkgdesc="NVIDIA's OpenCL implemention for 'lib32-nvidia-utils-vulkan' " + depends=('lib32-zlib' 'lib32-gcc-libs') + optdepends=('opencl-headers: headers necessary for OpenCL development') + provides=("lib32-opencl-nvidia=$pkgver" 'lib32-opencl-driver') + conflicts=('lib32-opencl-nvidia') + cd $_pkg + + # OpenCL + install -Dm755 32/libnvidia-compiler.so.$pkgver "$pkgdir"/usr/lib32/libnvidia-compiler.so.$pkgver + install -Dm755 32/libnvidia-opencl.so.$pkgver "$pkgdir"/usr/lib32/libnvidia-opencl.so.$pkgver + + # create missing soname links + _create_links + + # License (link) + install -d "$pkgdir"/usr/share/licenses/ + ln -s nvidia-utils/ "$pkgdir"/usr/share/licenses/lib32-opencl-nvidia +} + +package_lib32-nvidia-libgl-vulkan() { + pkgdesc="NVIDIA driver library symlinks for 'lib32-nvidia-utils-vulkan'" + depends=('lib32-nvidia-utils-vulkan' 'nvidia-libgl-vulkan') + provides=("lib32-nvidia-libgl=$pkgver" 'lib32-libgl' 'lib32-libegl' 'lib32-libgles') + conflicts=('lib32-nvidia-libgl' 'lib32-libgl' 'lib32-libegl' 'lib32-libgles') + replaces=('lib32-nvidia-utils<=313.26-1') + cd $_pkg + + mkdir -p "${pkgdir}/usr/lib32/" + + # libGL (link) + ln -s /usr/lib32/nvidia/libGL.so.1.7.0 "$pkgdir"/usr/lib32/libGL.so.1 + ln -s libGL.so.1 "$pkgdir"/usr/lib32/libGL.so + + # EGL (link) + ln -s /usr/lib32/nvidia/libEGL.so.1.1.0 "$pkgdir"/usr/lib32/libEGL.so.1 + ln -s libEGL.so.1 "$pkgdir"/usr/lib32/libEGL.so + + # OpenGL ES 1 (link) + ln -s /usr/lib32/nvidia/libGLESv1_CM.so.1.2.0 "$pkgdir"/usr/lib32/libGLESv1_CM.so.1 + ln -s libGLESv1_CM.so.1 "$pkgdir"/usr/lib32/libGLESv1_CM.so + + # OpenGL ES 2 (link) + ln -s /usr/lib32/nvidia/libGLESv2.so.2.1.0 "$pkgdir"/usr/lib32/libGLESv2.so.2 + ln -s libGLESv2.so.2 "$pkgdir"/usr/lib32/libGLESv2.so + + # License (link) + install -d "$pkgdir"/usr/share/licenses/ + ln -s nvidia-utils/ "$pkgdir"/usr/share/licenses/lib32-nvidia-libgl +} + +package_lib32-nvidia-utils-vulkan() { + pkgdesc="NVIDIA driver utilities and libraries for 'nvidia-vulkan' (32-bit)" + depends=('lib32-zlib' 'lib32-gcc-libs' 'nvidia-utils-vulkan' 'lib32-mesa>=17.0.2-1') + optdepends=('lib32-opencl-nvidia-vulkan: OpenCL support') + provides=("lib32-nvidia-utils=$pkgver" 'lib32-libglvnd' 'lib32-vulkan-driver') + conflicts=('lib32-nvidia-utils' 'lib32-libglvnd') + cd $_pkg + + # libGL & OpenGL + install -Dm755 32/libGL.so.1.7.0 "$pkgdir"/usr/lib32/nvidia/libGL.so.1.7.0 + install -Dm755 32/libGLdispatch.so.0 "$pkgdir"/usr/lib32/libGLdispatch.so.0 + install -Dm755 32/libnvidia-glcore.so.$pkgver "$pkgdir"/usr/lib32/libnvidia-glcore.so.$pkgver + install -Dm755 32/libOpenGL.so.0 "$pkgdir"/usr/lib32/libOpenGL.so.0 + install -Dm755 32/libnvidia-glvkspirv.so.$pkgver "$pkgdir"/usr/lib32/libnvidia-glvkspirv.so.$pkgver + + # GLX + install -Dm755 32/libGLX.so.0 "$pkgdir"/usr/lib32/libGLX.so.0 + install -Dm755 32/libGLX_nvidia.so.$pkgver "$pkgdir"/usr/lib32/libGLX_nvidia.so.$pkgver + # now in lib32-mesa driver + #ln -s libGLX_nvidia.so.$pkgver "$pkgdir"/usr/lib32/libGLX_indirect.so.0 + + # EGL + install -Dm755 32/libEGL.so.1.1.0 "$pkgdir"/usr/lib32/nvidia/libEGL.so.1.1.0 + install -Dm755 32/libEGL_nvidia.so.$pkgver "$pkgdir"/usr/lib32/libEGL_nvidia.so.$pkgver + install -Dm755 32/libnvidia-eglcore.so.$pkgver "$pkgdir"/usr/lib32/libnvidia-eglcore.so.$pkgver + + # OpenGL ES + install -Dm755 32/libGLESv1_CM.so.1.2.0 "$pkgdir"/usr/lib32/nvidia/libGLESv1_CM.so.1.2.0 + install -Dm755 32/libGLESv1_CM_nvidia.so.$pkgver "$pkgdir"/usr/lib32/libGLESv1_CM_nvidia.so.$pkgver + install -Dm755 32/libGLESv2.so.2.1.0 "$pkgdir"/usr/lib32/nvidia/libGLESv2.so.2.1.0 + install -Dm755 32/libGLESv2_nvidia.so.$pkgver "$pkgdir"/usr/lib32/libGLESv2_nvidia.so.$pkgver + install -Dm755 32/libnvidia-glsi.so.$pkgver "$pkgdir"/usr/lib32/libnvidia-glsi.so.$pkgver + + # VDPAU (Video Decode and Presentation API for Unix) + install -Dm755 32/libvdpau_nvidia.so.$pkgver "$pkgdir"/usr/lib32/vdpau/libvdpau_nvidia.so.$pkgver + + # GPU-accelerated video encoding + install -Dm755 32/libnvidia-encode.so.$pkgver "$pkgdir"/usr/lib32/libnvidia-encode.so.$pkgver + + # CUDA (Compute Unified Device Architecture) + install -Dm755 32/libcuda.so.$pkgver "$pkgdir"/usr/lib32/libcuda.so.$pkgver + install -Dm755 32/libnvcuvid.so.$pkgver "$pkgdir"/usr/lib32/libnvcuvid.so.$pkgver + + # PTX JIT Compiler (Parallel Thread Execution (PTX) is a pseudo-assembly language for CUDA) + install -Dm755 32/libnvidia-ptxjitcompiler.so.$pkgver "$pkgdir"/usr/lib32/libnvidia-ptxjitcompiler.so.$pkgver + + # Fat (multiarchitecture) binary loader + install -Dm755 32/libnvidia-fatbinaryloader.so.$pkgver "$pkgdir"/usr/lib32/libnvidia-fatbinaryloader.so.$pkgver + + # TLS (Thread local storage) support for OpenGL libs + install -Dm755 32/libnvidia-tls.so.$pkgver "$pkgdir"/usr/lib32/libnvidia-tls.so.$pkgver # Classic + install -Dm755 32/tls/libnvidia-tls.so.$pkgver "$pkgdir"/usr/lib32/tls/libnvidia-tls.so.$pkgver # New + + # GPU monitoring and management + install -Dm755 32/libnvidia-ml.so.$pkgver "$pkgdir"/usr/lib32/libnvidia-ml.so.$pkgver + + # Helper libs for approved partners' GRID remote apps + install -Dm755 32/libnvidia-ifr.so.$pkgver "$pkgdir"/usr/lib32/libnvidia-ifr.so.$pkgver + install -Dm755 32/libnvidia-fbc.so.$pkgver "$pkgdir"/usr/lib32/libnvidia-fbc.so.$pkgver + + # Not required (https://bugs.archlinux.org/task/38604): + # - libnvidia-wfb.so.$pkgver (provided by xorg-server: https://www.archlinux.org/packages/extra/x86_64/xorg-server/) + + # create missing soname links + _create_links + + # License (link) + install -d "$pkgdir"/usr/share/licenses/ + ln -s nvidia-utils/ "$pkgdir"/usr/share/licenses/lib32-nvidia-utils +} diff --git a/nvidia-utils-vulkan.install b/nvidia-utils-vulkan.install new file mode 100644 index 000000000000..5c4c1cfa36dd --- /dev/null +++ b/nvidia-utils-vulkan.install @@ -0,0 +1,10 @@ +post_upgrade() { + echo ":: If CUDA is unavailable, run 'nvidia-modprobe'." +} + +post_install() { + getent group nvidia-persistenced &>/dev/null || groupadd -g 143 nvidia-persistenced + getent passwd nvidia-persistenced &>/dev/null || useradd -c 'NVIDIA Persistence Daemon' -u 143 -g nvidia-persistenced -d '/' -s /sbin/nologin nvidia-persistenced + + post_upgrade +} diff --git a/nvidia-vulkan.install b/nvidia-vulkan.install new file mode 100644 index 000000000000..7ae1086c5e77 --- /dev/null +++ b/nvidia-vulkan.install @@ -0,0 +1,46 @@ +_depmod() { + # This gets auto-updated during build + _extramodules='extramodules-4.17-ARCH' + + # Update module dependencies + depmod $(cat /usr/lib/modules/$_extramodules/version) +} + +_rmmod() { + # Try unloading + if lsmod | grep -q nvidia; then + rmmod nvidia + fi + + # What? + if [[ $? != 0 ]]; then + # X running? + if pidof Xorg >/dev/null; then + echo ":: Please reboot or exit X first." + fi + fi +} + +post_install() { + _depmod + + # X running? + if pidof Xorg >/dev/null; then + echo ":: Please reboot or exit X to unload the current module." + fi +} + +post_upgrade() { + _depmod + + # Not rebuilding? + if (( $(vercmp $1 $2) != 0 )); then + _rmmod + fi +} + +post_remove() { + _depmod + + _rmmod +} |