summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibrewish2020-08-26 18:17:06 +0530
committerLibrewish2020-08-26 18:17:06 +0530
commitd79009c50565c6e2f49737dcd72cab26f73c8c33 (patch)
treefb27c03c908fd30d1ca45dc8cfb0eb1519a35371
parentc94ded76af8836391c9b62e9a55acd13fef1d18f (diff)
downloadaur-d79009c50565c6e2f49737dcd72cab26f73c8c33.tar.gz
automate it
-rw-r--r--.SRCINFO10
-rw-r--r--PKGBUILD22
-rw-r--r--mhwd-nvidia89
-rw-r--r--nvidia.ids2
4 files changed, 110 insertions, 13 deletions
diff --git a/.SRCINFO b/.SRCINFO
index d297ea2f9db3..35eb7cf3b381 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,13 +1,15 @@
pkgbase = mhwd-nvidia
pkgdesc = mhwd-nvidia pci id
- pkgver = 0.1
- pkgrel = 4
+ pkgver = 450.66
+ pkgrel = 1
url = https://garudalinux.in/
arch = any
license = GPL2
+ makedepends = nvidia-dkms
+ makedepends = nvidia-utils
provides = mhwd-nvidia
- source = nvidia.ids
- sha256sums = 44ed1d791a64de33120d436fe082b02d660bf181e59cbb1f25d97004f267c007
+ source = mhwd-nvidia
+ sha256sums = ddffe7033abf38253b50d4c02d780a270f79089bbe163994e00a4d7c91d64f0e
pkgname = mhwd-nvidia
diff --git a/PKGBUILD b/PKGBUILD
index 1b599bc1705a..910166c377f4 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -2,18 +2,26 @@
# Contributer : Guinux <nuxgui@gmail.com>
pkgname=mhwd-nvidia
-pkgver=0.1
-pkgrel=4
+pkgver=450.66
+pkgrel=1
pkgdesc="mhwd-nvidia pci id"
arch=("any")
url="https://garudalinux.in/"
license=('GPL2')
-source=('nvidia.ids')
-sha256sums=('44ed1d791a64de33120d436fe082b02d660bf181e59cbb1f25d97004f267c007')
+source=('mhwd-nvidia')
+makedepends=('nvidia-dkms' 'nvidia-utils')
+sha256sums=('ddffe7033abf38253b50d4c02d780a270f79089bbe163994e00a4d7c91d64f0e')
provides=('mhwd-nvidia')
package() {
- # Copy files
- mkdir -p ${pkgdir}/var/lib/mhwd/ids/pci
- install -m644 ${srcdir}/nvidia.ids ${pkgdir}/var/lib/mhwd/ids/pci/
+
+ install -d -m755 "$pkgdir/var/lib/mhwd/ids/pci/"
+
+ # Generate mhwd database
+ sh -e $srcdir/mhwd-nvidia \
+ /usr/share/doc/nvidia/README \
+ /usr/src/nvidia-$pkgver/nvidia/nv-kernel.o_binary \
+ > $pkgdir/var/lib/mhwd/ids/pci/nvidia.ids
+ # add PCIID: 1b82 Nvidia Gforce 1070 Ti
+ sed -i 's/1b81 1b84/1b81 1b82 1b84/g' $pkgdir/var/lib/mhwd/ids/pci/nvidia.ids
}
diff --git a/mhwd-nvidia b/mhwd-nvidia
new file mode 100644
index 000000000000..b48b4bcded70
--- /dev/null
+++ b/mhwd-nvidia
@@ -0,0 +1,89 @@
+#!/bin/sh
+set -e
+
+# This is a nasty kluge, but it seems to work. Better check the output when
+# upgrading to a new release of the nvidia driver, though.
+
+if [ "$#" -ne 2 ]; then
+ >&2 printf 'USAGE: %s README.txt nv-kernel.o\n' "$0"
+ exit 1
+fi
+
+device_ids() {
+ local readme="$1"; shift
+ local object="$1"; shift
+
+ local ret=1
+
+ local symbols="$(mktemp)"
+ local readme_list="$(mktemp)"
+ local object_list="$(mktemp)"
+ local diff="$(mktemp)"
+
+ sed -nr '/^Appendix .\. Supported NVIDIA /,/legacy/ {
+ s/.* ([0-9a-fA-F]{4})( .*|$)/\1/p
+ }' "$readme" | tr A-F a-f | sort | uniq >"$readme_list"
+
+ local readme_length="$(grep -Ec . "$readme_list")"
+
+ objdump --section=.rodata --syms "$object" |
+ sed -nr '/SYMBOL TABLE/,/^$/ {
+ s/^([0-9a-f]+)\s+l\s+O\s+\S+\s+([0-9a-f]+)\s+\S+.*/\2 \1/p
+ }' |
+ sort -nr >"$symbols" # The list is probably among the larger symbols.
+
+ while read length start; do
+ [ "$((0x$length))" -gt 0 ] || continue
+
+ objdump --section=.rodata --full-contents \
+ --start-address="0x$start" \
+ --stop-address="$((0x$start+0x$length))" "$object" |
+ sed -nr 's/^ [0-9a-f]+ ([0-9a-f]{2})([0-9a-f]{2}).*/\2\1/p' |
+ sort | uniq | (grep -vx 0000 || :) >"$object_list"
+
+ local object_length="$(grep -Ec . "$object_list")"
+
+ diff -u "$readme_list" "$object_list" | tail -n +3 >"$diff"
+ local num_deletions="$(grep -Ec '^-' "$diff")"
+ local num_additions="$(grep -Ec '^\+' "$diff")"
+
+ # Some thresholds for now.
+ if [ "$num_deletions" -eq 0 ] &&
+ [ "$num_additions" -le "$(($readme_length*3/2))" ]; then
+ >&2 printf 'DEBUG: readme:%d object:%d deletions:%d additions:%d\n' \
+ "$readme_length" "$object_length" "$num_deletions" "$num_additions"
+ ret=0
+ break
+ fi
+ done <"$symbols"
+
+ if [ "$ret" -eq 0 ]; then
+ printf '%s\n' '# List generated by mhwd. Do not edit manually.'
+
+ while read id; do
+ printf "$id "
+ done <"$object_list"
+
+ else
+ >&2 printf '%s\n' 'Failed to find the list. Using README.txt to get the list'
+
+ # We failed to extract the ids from the blob. Use the ones in README.txt
+ # as a fallback
+ printf '%s\n' '# List generated by mhwd. Do not edit manually.'
+ while read id; do
+ printf "$id "
+ done <"$readme_list"
+ # fix Geforce mobile + Quadro K3100M
+ printf "1140 11a0 11b6" <"$readme_list"
+
+ ret=0
+ fi
+
+ rm -f "$symbols" "$readme_list" "$object_list" "$diff"
+
+ return "$ret"
+}
+
+device_ids "$@"
+
+# vim:set et sw=2 sts=2:
diff --git a/nvidia.ids b/nvidia.ids
deleted file mode 100644
index 1355662183ab..000000000000
--- a/nvidia.ids
+++ /dev/null
@@ -1,2 +0,0 @@
-# List generated by mhwd. Do not edit manually.
-0fc0 0fc1 0fc2 0fc6 0fc8 0fc9 0ff3 0ff9 0ffa 0ffd 0ffe 0fff 1001 1004 1005 1007 1008 100a 100c 1021 1022 1023 1024 1026 1027 1028 1029 102a 102d 103a 103c 1180 1183 1184 1185 1187 1188 1189 118a 118e 118f 1193 1194 1195 11b4 11ba 11c0 11c2 11c3 11c4 11c5 11c6 11c8 11cb 11fa 1280 1281 1282 1284 1286 1287 1288 1289 128b 1340 1341 1344 1346 1347 1348 1349 134b 134d 134e 134f 137b 1380 1381 1382 1390 1391 1392 1393 1398 1399 139a 139b 139c 139d 13b0 13b1 13b2 13b3 13b4 13b6 13b9 13ba 13bb 13bc 13c0 13c2 13d7 13d8 13d9 13da 13f0 13f1 13f2 13f3 13f8 13f9 13fa 13fb 1401 1402 1406 1407 1427 1430 1431 1436 15f0 15f7 15f8 15f9 1617 1618 1619 161a 1667 174d 174e 179c 17c2 17c8 17f0 17f1 17fd 1b00 1b02 1b06 1b30 1b38 1b80 1b81 1b82 1b83 1b84 1b87 1ba0 1ba1 1ba2 1bb0 1bb1 1bb3 1bb4 1bb5 1bb6 1bb7 1bb8 1bb9 1bbb 1bc7 1be0 1be1 1c02 1c03 1c04 1c06 1c07 1c09 1c20 1c21 1c22 1c23 1c30 1c31 1c60 1c61 1c62 1c81 1c82 1c83 1c8c 1c8d 1c8f 1c90 1c91 1c92 1c94 1c96 1cb1 1cb2 1cb3 1cb6 1cba 1cbb 1cbc 1cbd 1cfa 1cfb 1d01 1d10 1d11 1d12 1d13 1d16 1d33 1d34 1d52 1d81 1db1 1db3 1db4 1db5 1db6 1db7 1db8 1dba 1df0 1df2 1df5 1df6 1e02 1e04 1e07 1e30 1e81 1e82 1e84 1e87 1e89 1e90 1e91 1e93 1eb0 1eb1 1eb5 1eb6 1eb8 1ec2 1ec7 1ed0 1ed1 1ed3 1ef5 1f02 1f06 1f07 1f08 1f09 1f0a 1f10 1f11 1f12 1f14 1f15 1f36 1f42 1f47 1f50 1f51 1f54 1f55 1f76 1f82 1f91 1f95 1f96 1f99 1fb8 1fb9 1ff9 20b0 2182 2184 2187 2188 2191 2192 21c4 21d1 1140 11a0 11b6 \ No newline at end of file