summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO107
-rw-r--r--10-nvidia-drm-outputclass.conf6
-rw-r--r--20-nvidia.conf4
-rw-r--r--PKGBUILD475
-rw-r--r--nvidia-utils-vulkan.install10
-rw-r--r--nvidia-vulkan.install46
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
+}