diff --git a/pkgs/by-name/po/pocl/package.nix b/pkgs/by-name/po/pocl/package.nix new file mode 100644 index 000000000000..d3c58c00e21e --- /dev/null +++ b/pkgs/by-name/po/pocl/package.nix @@ -0,0 +1,92 @@ +{ + lib, + stdenv, + fetchFromGitHub, + nix-update-script, + cmake, + pkg-config, + hwloc, + llvmPackages, + libxml2, # required for statically linked llvm + spirv-llvm-translator, + spirv-tools, + lttng-ust, + ocl-icd, + python3, + runCommand, + makeWrapper, +}: + +let + clang = llvmPackages.clangUseLLVM; + # Workaround to make sure libclang finds libgcc.a and libgcc_s.so when + # invoked from within libpocl + clangWrapped = runCommand "clang-pocl" { nativeBuildInputs = [ makeWrapper ]; } '' + mkdir -p $out/bin + cp -r ${clang}/bin/* $out/bin/ + LIBGCC_DIR=$(dirname $(find ${stdenv.cc.cc}/lib/ -name libgcc.a)) + for F in ${clang}/bin/ld*; do + BASENAME=$(basename "$F") + rm -f $out/bin/$BASENAME + makeWrapper ${clang}/bin/$BASENAME $out/bin/$BASENAME \ + --add-flags "-L$LIBGCC_DIR" \ + --add-flags "-L${stdenv.cc.cc.lib}/lib" + done + ''; +in +stdenv.mkDerivation (finalAttrs: { + pname = "pocl"; + version = "6.0"; + + src = fetchFromGitHub { + owner = "pocl"; + repo = "pocl"; + rev = "v${finalAttrs.version}"; + hash = "sha256-NHR9yrI6Odb/s/OBnEVifdcLEXvwqzAMZWpGViv2cJg="; + }; + + cmakeFlags = [ + "-DKERNELLIB_HOST_CPU_VARIANTS=distro" + # avoid the runtime linker pulling in a different llvm e.g. from graphics drivers + "-DSTATIC_LLVM=ON" + "-DENABLE_POCL_BUILDING=OFF" + "-DPOCL_ICD_ABSOLUTE_PATH=ON" + "-DENABLE_ICD=ON" + "-DCLANG=${clangWrapped}/bin/clang" + "-DCLANGXX=${clangWrapped}/bin/clang++" + "-DENABLE_REMOTE_CLIENT=ON" + "-DENABLE_REMOTE_SERVER=ON" + ]; + + nativeBuildInputs = [ + cmake + pkg-config + clangWrapped + python3 + ]; + + buildInputs = [ + hwloc + libxml2 + llvmPackages.llvm + llvmPackages.libclang + lttng-ust + ocl-icd + spirv-tools + spirv-llvm-translator + ]; + + passthru.updateScript = nix-update-script { }; + + meta = { + description = "A portable open source (MIT-licensed) implementation of the OpenCL standard"; + homepage = "http://portablecl.org"; + changelog = "https://github.com/pocl/pocl/releases/tag/v${finalAttrs.version}"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ + jansol + xddxdd + ]; + platforms = lib.platforms.unix; + }; +})