Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1{ lib, makeImpureTest, coreutils, amdvlk, vulkan-tools }:
2makeImpureTest {
3 name = "amdvlk";
4 testedPackage = "amdvlk";
5
6 sandboxPaths = [ "/sys" "/dev/dri" ];
7
8 nativeBuildInputs = [ vulkan-tools ];
9
10 VK_ICD_FILENAMES = "${amdvlk}/share/vulkan/icd.d/amd_icd64.json";
11 XDG_RUNTIME_DIR = "/tmp";
12
13 # AMDVLK needs access to /dev/dri/card0 (or another card), but normally it is rw-rw----
14 # Change the permissions to be rw for everyone
15 prepareRunCommands = ''
16 function reset_perms()
17 {
18 # Reset permissions to previous state
19 for card in /dev/dri/card*; do
20 sudo ${coreutils}/bin/chmod "0''${cardPerms[$card]}" $card
21 done
22 }
23
24 # Save permissions on /dev/dri/card*
25 declare -A cardPerms
26 for card in /dev/dri/card*; do
27 cardPerms[$card]=$(stat -c "%a" $card)
28 done
29
30 sudo ${coreutils}/bin/chmod o+rw /dev/dri/card*
31 trap reset_perms EXIT
32 '';
33
34 testScript = ''
35 # Check that there is at least one card with write-access
36 if ! ls -l /dev/dri/card* | cut -b8-9 | grep -q rw; then
37 echo 'AMDVLK needs rw access to /dev/dri/card0 or a fitting card, please run `sudo chmod o+rw /dev/dri/card*`'
38 exit 1
39 fi
40
41 vulkaninfo --summary
42 echo "Checking version"
43 vulkaninfo --summary | grep '= ${amdvlk.version}'
44 '';
45
46 meta = with lib.maintainers; {
47 maintainers = [ Flakebi ];
48 };
49}