mirror of
https://github.com/elwrcl/intel-hard-lab.git
synced 2026-10-31 15:48:02 +03:00
175 lines
5.0 KiB
Nix
175 lines
5.0 KiB
Nix
{
|
|
description = "gen7-lab — Ivy Bridge (HD 4000) driver test lab";
|
|
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
|
|
outputs =
|
|
{ self, nixpkgs }:
|
|
let
|
|
system = "x86_64-linux";
|
|
pkgs = import nixpkgs { inherit system; };
|
|
|
|
pciId = "8086:0166";
|
|
|
|
packages = with pkgs; [
|
|
# CL
|
|
clinfo
|
|
clpeak
|
|
ocl-icd
|
|
opencl-headers
|
|
pocl
|
|
|
|
# VK
|
|
vulkan-tools
|
|
vulkan-headers
|
|
vulkan-loader
|
|
vulkan-validation-layers
|
|
shaderc
|
|
glslang
|
|
spirv-tools
|
|
|
|
# build
|
|
gcc
|
|
pkg-config
|
|
cmake
|
|
(python3.withPackages (
|
|
ps: with ps; [
|
|
pyopencl
|
|
numpy
|
|
opencv4
|
|
]
|
|
))
|
|
# media
|
|
ffmpeg
|
|
mpv
|
|
|
|
# debug
|
|
gdb
|
|
strace
|
|
jq
|
|
patchelf
|
|
binutils
|
|
libdrm
|
|
];
|
|
|
|
runtimeLibs = with pkgs; [
|
|
libxshmfence
|
|
xorg.xcbutilkeysyms
|
|
llvmPackages_21.llvm.lib
|
|
llvmPackages_21.libclang.lib
|
|
spirv-llvm-translator
|
|
vulkan-loader
|
|
libdrm
|
|
expat
|
|
zlib
|
|
zstd
|
|
elfutils
|
|
];
|
|
|
|
paths = ''
|
|
export LAB_ROOT="''${LAB_ROOT:-$PWD}"
|
|
if [ ! -f "$LAB_ROOT/ivb-test/runner.py" ]; then
|
|
echo "warning: LAB_ROOT=$LAB_ROOT does not look like the gen7-lab checkout"
|
|
fi
|
|
export DRIVERS_ROOT="''${DRIVERS_ROOT:-$(dirname "$LAB_ROOT")}"
|
|
|
|
export MESA_SRC="''${MESA_SRC:-$DRIVERS_ROOT/intel-hard-graphics}"
|
|
export MESA_BUILD="''${MESA_BUILD:-$MESA_SRC/build}"
|
|
export CLVK_SRC="''${CLVK_SRC:-$DRIVERS_ROOT/clvk}"
|
|
export CLVK_BUILD="''${CLVK_BUILD:-$CLVK_SRC/build}"
|
|
export CTS_DIR="''${CTS_DIR:-$MESA_SRC/VK-GL-CTS/build-cts/external/vulkancts/modules/vulkan}"
|
|
export CTS_MUSTPASS="''${CTS_MUSTPASS:-$MESA_SRC/VK-GL-CTS/external/vulkancts/mustpass/main/vk-default}"
|
|
export ICD_VENDORS="$LAB_ROOT/.icd-vendors"
|
|
|
|
export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath runtimeLibs}:''${LD_LIBRARY_PATH:-}"
|
|
'';
|
|
|
|
vulkanEnv = ''
|
|
export HASVK_ICD="$MESA_BUILD/src/intel/vulkan_hasvk/intel_hasvk13_devenv_icd.x86_64.json"
|
|
if [ -f "$HASVK_ICD" ]; then
|
|
export VK_DRIVER_FILES="$HASVK_ICD"
|
|
export VK_ICD_FILENAMES="$HASVK_ICD"
|
|
else
|
|
echo "warning: hasvk ICD not found: $HASVK_ICD"
|
|
unset HASVK_ICD
|
|
fi
|
|
export MESA_VK_DEVICE_SELECT="${pciId}"
|
|
'';
|
|
|
|
openclEnv = ''
|
|
mkdir -p "$ICD_VENDORS/lib"
|
|
ln -sf ${pkgs.pocl}/etc/OpenCL/vendors/pocl.icd "$ICD_VENDORS/pocl.icd"
|
|
|
|
if [ -f "$MESA_BUILD/src/gallium/targets/rusticl/rusticl.icd" ]; then
|
|
ln -sf "$MESA_BUILD/src/gallium/targets/rusticl/rusticl.icd" "$ICD_VENDORS/rusticl.icd"
|
|
export LD_LIBRARY_PATH="$MESA_BUILD/src/gallium/targets/rusticl:''${LD_LIBRARY_PATH:-}"
|
|
else
|
|
rm -f "$ICD_VENDORS/rusticl.icd"
|
|
echo "warning: rusticl.icd not found under $MESA_BUILD"
|
|
fi
|
|
|
|
if [ -f "$CLVK_BUILD/libOpenCL.so.1" ]; then
|
|
_clvk_lib="$ICD_VENDORS/lib/libclvk.so.1"
|
|
if [ "$CLVK_BUILD/libOpenCL.so.1" -nt "$_clvk_lib" ]; then
|
|
cp -L "$CLVK_BUILD/libOpenCL.so.1" "$_clvk_lib.tmp"
|
|
chmod u+w "$_clvk_lib.tmp"
|
|
patchelf --set-soname libclvk.so.1 "$_clvk_lib.tmp"
|
|
mv "$_clvk_lib.tmp" "$_clvk_lib"
|
|
fi
|
|
echo "$_clvk_lib" > "$ICD_VENDORS/clvk.icd"
|
|
else
|
|
rm -f "$ICD_VENDORS/clvk.icd"
|
|
echo "warning: clvk libOpenCL.so.1 not found under $CLVK_BUILD"
|
|
fi
|
|
|
|
export OCL_ICD_VENDORS="$ICD_VENDORS"
|
|
export OCL_ICD_ASSUME_ICD_EXTENSION=1
|
|
export RUSTICL_ENABLE=crocus
|
|
'';
|
|
|
|
runner = ''
|
|
ivb() { python3 "$LAB_ROOT/ivb-test/runner.py" "$@"; }
|
|
export -f ivb
|
|
'';
|
|
|
|
banner = name: ocl: ''
|
|
echo "=== ${name} ==="
|
|
printf '%-18s %s\n' \
|
|
"MESA_BUILD" "$MESA_BUILD" \
|
|
"CLVK_BUILD" "$CLVK_BUILD" \
|
|
"CTS_DIR" "$CTS_DIR" \
|
|
"VK_DRIVER_FILES" "''${VK_DRIVER_FILES:-(none)}" \
|
|
"OpenCL" "${ocl}"
|
|
echo
|
|
echo "ivb list | ivb run | ivb doctor"
|
|
echo
|
|
'';
|
|
in
|
|
{
|
|
devShells.${system} = {
|
|
default = pkgs.mkShell {
|
|
inherit packages;
|
|
shellHook = ''
|
|
${paths}
|
|
${vulkanEnv}
|
|
${openclEnv}
|
|
${runner}
|
|
${banner "gen7-lab" "$(ls \"$ICD_VENDORS\"/*.icd 2>/dev/null | xargs -rn1 basename | sed 's/\\.icd//' | tr '\\n' ' ')"}
|
|
'';
|
|
};
|
|
|
|
clvk = pkgs.mkShell {
|
|
inherit packages;
|
|
shellHook = ''
|
|
${paths}
|
|
${vulkanEnv}
|
|
${runner}
|
|
export LD_LIBRARY_PATH="$CLVK_BUILD:''${LD_LIBRARY_PATH:-}"
|
|
export CLVK_MAX_COMPUTE_UNITS="''${CLVK_MAX_COMPUTE_UNITS:-16}"
|
|
unset OCL_ICD_VENDORS
|
|
${banner "gen7-lab (clvk only)" "clvk (libOpenCL.so.1 shadows the loader)"}
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
}
|