diff options
author | Alyssa Ross <hi@alyssa.is> | 2020-01-11 23:37:02 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2020-01-11 23:41:30 +0000 |
commit | 6c557e3f1c28cf87e9fba232811d6875dd1399c1 (patch) | |
tree | 035a071d5d8980df6de0fa42e2ef8fc0cce7055e /nixpkgs/pkgs/development/libraries/opencl-clang | |
parent | da7500bc026e937ac7fce7b50f67a0e1765737a7 (diff) | |
parent | e4134747f5666bcab8680aff67fa3b63384f9a0f (diff) | |
download | nixlib-6c557e3f1c28cf87e9fba232811d6875dd1399c1.tar nixlib-6c557e3f1c28cf87e9fba232811d6875dd1399c1.tar.gz nixlib-6c557e3f1c28cf87e9fba232811d6875dd1399c1.tar.bz2 nixlib-6c557e3f1c28cf87e9fba232811d6875dd1399c1.tar.lz nixlib-6c557e3f1c28cf87e9fba232811d6875dd1399c1.tar.xz nixlib-6c557e3f1c28cf87e9fba232811d6875dd1399c1.tar.zst nixlib-6c557e3f1c28cf87e9fba232811d6875dd1399c1.zip |
Merge commit 'e4134747f5666bcab8680aff67fa3b63384f9a0f'
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/opencl-clang')
-rw-r--r-- | nixpkgs/pkgs/development/libraries/opencl-clang/default.nix | 97 | ||||
-rw-r--r-- | nixpkgs/pkgs/development/libraries/opencl-clang/opencl-headers-dir.patch | 25 |
2 files changed, 122 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/opencl-clang/default.nix b/nixpkgs/pkgs/development/libraries/opencl-clang/default.nix new file mode 100644 index 000000000000..50794863defb --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/opencl-clang/default.nix @@ -0,0 +1,97 @@ +{ stdenv +, fetchFromGitHub +, fetchpatch +, cmake +, git + +, llvmPackages_8 +, spirv-llvm-translator + +, buildWithPatches ? true +}: + +let + llvmPkgs = llvmPackages_8 // { + inherit spirv-llvm-translator; + }; + + inherit (stdenv.lib) getVersion; + + addPatches = component: pkg: + with builtins; with stdenv.lib; + let path = "${passthru.patchesOut}/${component}"; + in pkg.overrideAttrs (super: { + postPatch = (if super ? postPatch then super.postPatch + "\n" else "") + '' + for p in ${path}/* + do + patch -p1 -i "$p" + done + ''; + }); + + passthru = rec { + + clang-unwrapped = addPatches "clang" llvmPkgs.clang-unwrapped; + + clang = llvmPkgs.clang.override { + cc = clang-unwrapped; + }; + + patchesOut = stdenv.mkDerivation rec { + pname = "opencl-clang-patches"; + inherit (lib) version src patches; + installPhase = '' + [ -d patches ] && cp -r patches/ $out || mkdir $out + mkdir -p $out/clang $out/spirv + ''; + }; + + spirv-llvm-translator = addPatches "spirv" llvmPkgs.spirv-llvm-translator; + + }; + + lib = let + inherit (llvmPkgs) llvm; + inherit (if buildWithPatches then passthru else llvmPkgs) clang-unwrapped spirv-llvm-translator; + in + stdenv.mkDerivation rec { + pname = "opencl-clang"; + version = "unstable-2019-08-16"; + + inherit passthru; + + src = fetchFromGitHub { + owner = "intel"; + repo = "opencl-clang"; + rev = "94af090661d7c953c516c97a25ed053c744a0737"; + sha256 = "05cg89m62nqjqm705h7gpdz4jd4hiczg8944dcjsvaybrqv3hcm5"; + }; + + patches = [ + # Build script tries to find Clang OpenCL headers under ${llvm} + # Work around it by specifying that directory manually. + ./opencl-headers-dir.patch + ]; + + nativeBuildInputs = [ cmake git ]; + + buildInputs = [ clang-unwrapped llvm spirv-llvm-translator ]; + + cmakeFlags = [ + "-DPREFERRED_LLVM_VERSION=${getVersion llvm}" + "-DOPENCL_HEADERS_DIR=${clang-unwrapped}/lib/clang/${getVersion clang-unwrapped}/include/" + + "-DLLVMSPIRV_INCLUDED_IN_LLVM=OFF" + "-DSPIRV_TRANSLATOR_DIR=${spirv-llvm-translator}" + ]; + + meta = with stdenv.lib; { + homepage = https://github.com/intel/opencl-clang/; + description = "A clang wrapper library with an OpenCL-oriented API and the ability to compile OpenCL C kernels to SPIR-V modules"; + license = licenses.ncsa; + platforms = platforms.all; + maintainers = with maintainers; [ gloaming ]; + }; + }; +in + lib diff --git a/nixpkgs/pkgs/development/libraries/opencl-clang/opencl-headers-dir.patch b/nixpkgs/pkgs/development/libraries/opencl-clang/opencl-headers-dir.patch new file mode 100644 index 000000000000..70343b8ee197 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/opencl-clang/opencl-headers-dir.patch @@ -0,0 +1,25 @@ +diff --git a/cl_headers/CMakeLists.txt b/cl_headers/CMakeLists.txt +index 3dd2ea4..aeae6e9 100644 +--- a/cl_headers/CMakeLists.txt ++++ b/cl_headers/CMakeLists.txt +@@ -11,12 +11,14 @@ add_custom_command( + ) + endfunction(copy_file) + +-if(USE_PREBUILT_LLVM) +- set(OPENCL_HEADERS_DIR +- "${LLVM_LIBRARY_DIRS}/clang/${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}/include/") +-else(USE_PREBUILT_LLVM) +- set(OPENCL_HEADERS_DIR "${CLANG_SOURCE_DIR}/lib/Headers") +-endif(USE_PREBUILT_LLVM) ++if(NOT DEFINED OPENCL_HEADERS_DIR) ++ if(USE_PREBUILT_LLVM) ++ set(OPENCL_HEADERS_DIR ++ "${LLVM_LIBRARY_DIRS}/clang/${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}/include/") ++ else(USE_PREBUILT_LLVM) ++ set(OPENCL_HEADERS_DIR "${CLANG_SOURCE_DIR}/lib/Headers") ++ endif(USE_PREBUILT_LLVM) ++endif() + copy_file(${OPENCL_HEADERS_DIR}/opencl-c.h opencl-c.h) + + add_custom_target ( |