1{ lib
2, stdenv
3, fetchFromGitHub
4, cmake
5, runCommandLocal
6, bison
7, flex
8, llvmPackages_11
9, lld_11
10, opencl-clang
11, python3
12, spirv-tools
13, spirv-headers
14, spirv-llvm-translator
15
16, buildWithPatches ? true
17}:
18
19let
20 vc_intrinsics_src = fetchFromGitHub {
21 owner = "intel";
22 repo = "vc-intrinsics";
23 rev = "v0.3.0";
24 sha256 = "sha256-1Rm4TCERTOcPGWJF+yNoKeB9x3jfqnh7Vlv+0Xpmjbk=";
25 };
26 llvmPkgs = llvmPackages_11 // {
27 inherit spirv-llvm-translator;
28 };
29 inherit (llvmPkgs) llvm;
30 inherit (if buildWithPatches then opencl-clang else llvmPkgs) clang libclang spirv-llvm-translator;
31 inherit (lib) getVersion optional optionals versionOlder versions;
32in
33
34stdenv.mkDerivation rec {
35 pname = "intel-graphics-compiler";
36 version = "1.0.11061";
37
38 src = fetchFromGitHub {
39 owner = "intel";
40 repo = "intel-graphics-compiler";
41 rev = "igc-${version}";
42 sha256 = "sha256-qS/+GTqHtp3T6ggPKrCDsrTb7XvVOUaNbMzGU51jTu4=";
43 };
44
45 nativeBuildInputs = [ clang cmake bison flex python3 ];
46
47 buildInputs = [ spirv-headers spirv-tools clang opencl-clang spirv-llvm-translator llvm lld_11 ];
48
49 strictDeps = true;
50
51 # checkInputs = [ lit pythonPackages.nose ];
52
53 # FIXME: How do we run the test suite?
54 # https://github.com/intel/intel-graphics-compiler/issues/98
55 doCheck = false;
56
57 postPatch = ''
58 substituteInPlace ./external/SPIRV-Tools/CMakeLists.txt \
59 --replace '$'''{SPIRV-Tools_DIR}../../..' \
60 '${spirv-tools}' \
61 --replace 'SPIRV-Headers_INCLUDE_DIR "/usr/include"' \
62 'SPIRV-Headers_INCLUDE_DIR "${spirv-headers}/include"' \
63 --replace 'set_target_properties(SPIRV-Tools' \
64 'set_target_properties(SPIRV-Tools-shared' \
65 --replace 'IGC_BUILD__PROJ__SPIRV-Tools SPIRV-Tools' \
66 'IGC_BUILD__PROJ__SPIRV-Tools SPIRV-Tools-shared'
67 substituteInPlace ./IGC/AdaptorOCL/igc-opencl.pc.in \
68 --replace '/@CMAKE_INSTALL_INCLUDEDIR@' "/include" \
69 --replace '/@CMAKE_INSTALL_LIBDIR@' "/lib"
70 '';
71
72 # Handholding the braindead build script
73 # cmake requires an absolute path
74 prebuilds = runCommandLocal "igc-cclang-prebuilds" { } ''
75 mkdir $out
76 ln -s ${clang}/bin/clang $out/
77 ln -s clang $out/clang-${versions.major (getVersion clang)}
78 ln -s ${opencl-clang}/lib/* $out/
79 ln -s ${lib.getLib libclang}/lib/clang/${getVersion clang}/include/opencl-c.h $out/
80 ln -s ${lib.getLib libclang}/lib/clang/${getVersion clang}/include/opencl-c-base.h $out/
81 '';
82
83 cmakeFlags = [
84 "-Wno-dev"
85 "-DVC_INTRINSICS_SRC=${vc_intrinsics_src}"
86 "-DIGC_OPTION__SPIRV_TOOLS_MODE=Prebuilds"
87 "-DCCLANG_BUILD_PREBUILDS=ON"
88 "-DCCLANG_BUILD_PREBUILDS_DIR=${prebuilds}"
89 "-DIGC_PREFERRED_LLVM_VERSION=${getVersion llvm}"
90 ];
91
92 meta = with lib; {
93 homepage = "https://github.com/intel/intel-graphics-compiler";
94 description = "LLVM-based compiler for OpenCL targeting Intel Gen graphics hardware";
95 license = licenses.mit;
96 platforms = platforms.all;
97 maintainers = with maintainers; [ gloaming ];
98 broken = stdenv.isDarwin; # never built on Hydra https://hydra.nixos.org/job/nixpkgs/trunk/intel-graphics-compiler.x86_64-darwin
99 };
100}