{ 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)"} ''; }; }; }; }