1{ lib
2, stdenv
3, fetchFromGitHub
4, cmake
5, runCommandLocal
6, bison
7, flex
8, llvmPackages_11
9, opencl-clang
10, python3
11, spirv-tools
12, spirv-headers
13, spirv-llvm-translator
14
15, buildWithPatches ? true
16}:
17
18let
19 vc_intrinsics_src = fetchFromGitHub {
20 owner = "intel";
21 repo = "vc-intrinsics";
22 rev = "v0.11.0";
23 sha256 = "sha256-74JBW7qU8huSqwqgxNbvbGj1DlJJThgGhb3owBYmhvI=";
24 };
25
26 llvmPkgs = llvmPackages_11 // {
27 spirv-llvm-translator = spirv-llvm-translator.override { llvm = llvm; };
28 } // lib.optionalAttrs buildWithPatches opencl-clang;
29
30 inherit (llvmPackages_11) lld llvm;
31 inherit (llvmPkgs) clang libclang spirv-llvm-translator;
32in
33
34stdenv.mkDerivation rec {
35 pname = "intel-graphics-compiler";
36 version = "1.0.12812.26";
37
38 src = fetchFromGitHub {
39 owner = "intel";
40 repo = "intel-graphics-compiler";
41 rev = "igc-${version}";
42 sha256 = "sha256-KpaDaDYVp40H7OscDGUpzEMgIOIk397ANi+8sDk4Wow=";
43 };
44
45 nativeBuildInputs = [ cmake bison flex python3 ];
46
47 buildInputs = [ spirv-headers spirv-tools spirv-llvm-translator llvm lld ];
48
49 strictDeps = true;
50
51 # testing is done via intel-compute-runtime
52 doCheck = false;
53
54 postPatch = ''
55 substituteInPlace external/SPIRV-Tools/CMakeLists.txt \
56 --replace '$'''{SPIRV-Tools_DIR}../../..' \
57 '${spirv-tools}' \
58 --replace 'SPIRV-Headers_INCLUDE_DIR "/usr/include"' \
59 'SPIRV-Headers_INCLUDE_DIR "${spirv-headers}/include"' \
60 --replace 'set_target_properties(SPIRV-Tools' \
61 'set_target_properties(SPIRV-Tools-shared' \
62 --replace 'IGC_BUILD__PROJ__SPIRV-Tools SPIRV-Tools' \
63 'IGC_BUILD__PROJ__SPIRV-Tools SPIRV-Tools-shared'
64 substituteInPlace IGC/AdaptorOCL/igc-opencl.pc.in \
65 --replace '/@CMAKE_INSTALL_INCLUDEDIR@' "/include" \
66 --replace '/@CMAKE_INSTALL_LIBDIR@' "/lib"
67 '';
68
69 # Handholding the braindead build script
70 # cmake requires an absolute path
71 prebuilds = runCommandLocal "igc-cclang-prebuilds" { } ''
72 mkdir $out
73 ln -s ${clang}/bin/clang $out/
74 ln -s clang $out/clang-${lib.versions.major (lib.getVersion clang)}
75 ln -s ${opencl-clang}/lib/* $out/
76 ln -s ${lib.getLib libclang}/lib/clang/${lib.getVersion clang}/include/opencl-c.h $out/
77 ln -s ${lib.getLib libclang}/lib/clang/${lib.getVersion clang}/include/opencl-c-base.h $out/
78 '';
79
80 cmakeFlags = [
81 "-Wno-dev"
82 "-DVC_INTRINSICS_SRC=${vc_intrinsics_src}"
83 "-DIGC_OPTION__SPIRV_TOOLS_MODE=Prebuilds"
84 "-DCCLANG_BUILD_PREBUILDS=ON"
85 "-DCCLANG_BUILD_PREBUILDS_DIR=${prebuilds}"
86 "-DIGC_PREFERRED_LLVM_VERSION=${lib.getVersion llvm}"
87 ];
88
89 meta = with lib; {
90 homepage = "https://github.com/intel/intel-graphics-compiler";
91 description = "LLVM-based compiler for OpenCL targeting Intel Gen graphics hardware";
92 license = licenses.mit;
93 platforms = platforms.linux;
94 maintainers = with maintainers; [ SuperSandro2000 ];
95 };
96}