{ stdenv, ocl-icd, opencl-headers, pocl, clinfo, runCommand, lib, }: stdenv.mkDerivation (finalAttrs: { pname = "opencl-pocl-test"; version = "1.0.0"; src = ./opencl.c; dontUnpack = true; dontConfigure = true; buildInputs = [ ocl-icd opencl-headers ]; buildPhase = '' runHook preBuild $CC -Wall -Wextra -D CL_TARGET_OPENCL_VERSION=100 $src -o ocl-hello -lOpenCL runHook postBuild ''; installPhase = '' runHook preInstall mkdir -p $out/bin cp ocl-hello $out/bin runHook postInstall ''; passthru = { test-icd = runCommand "custom-clinfo" { nativeBuildInputs = assert !(lib.hasPrefix "pocl" ocl-icd.pname); [ clinfo finalAttrs.finalPackage pocl ]; env = { POCL_DEBUG = "error,warn"; POCL_CACHE_DIR = "/build/pocl_cache"; }; requiredSystemFeatures = [ "sys-devices" ]; } '' set -x mkdir $out clinfo -l >$out/clinfo clinfo >$out/clinfo-full ocl-hello >$out/hello for i in $out/*; do grep "Portable Computing Language" $i done echo $OCL_ICD_VENDORS >$out/env grep "pocl.*/etc/OpenCL/vendors" $out/env set +x ''; # this needs: ocl-icd = pocl-noicd test-noicd = runCommand "custom-clinfo" { nativeBuildInputs = [ finalAttrs.finalPackage ]; env = { POCL_DEBUG = "error,warn"; POCL_CACHE_DIR = "/build/pocl_cache"; }; requiredSystemFeatures = [ "sys-devices" ]; } '' ocl-hello >$out grep "Portable Computing Language" $out ''; }; })