summaryrefslogtreecommitdiff
path: root/.nix/adaptive-cpp.nix
blob: b8a7688d84c30a190a91298e047d929e6214bad5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
{ lib
, stdenv
, fetchFromGitHub
, cmake
, makeWrapper
, boost
, llvmPackages
, lld
, libffi
, libxml2
, python3
, config ? {
    rocm = false;
  }
, rocmPackages
, spirv-tools
, spirv-headers
, spirv-llvm-translator
}:

let
	version = "25.02.0";
in stdenv.mkDerivation {
	pname = "adaptive-cpp-kel-custom";
	inherit version;

	src = fetchFromGitHub {
		owner = "AdaptiveCpp";
		repo = "AdaptiveCpp";
		tag = "v${version}";
		sha256 = "sha256-vXfw8+xn3/DYxUKp3QGdQ8sEbDwyk+8jDCyuvQOXigc=";
	};

	nativeBuildInputs = [
    cmake
    makeWrapper
	];

	buildInputs = [
		boost
		llvmPackages.openmp
		llvmPackages.libclang
		llvmPackages.llvm
		python3
	] ++ lib.optionals config.rocm [
		rocmPackages.clr
		rocmPackages.rocm-runtime
		libffi
		libxml2
		spirv-tools
		spirv-headers
		spirv-llvm-translator
	];

  cmakeFlags = [
    "-DCLANG_INCLUDE_PATH=${llvmPackages.libclang.dev}/include"
  ];

  postInstall = ''
    if [ -d "$out/include/AdaptiveCpp" ]; then
      mv $out/include/AdaptiveCpp .hidden-fake
      mv .hidden-fake/* $out/include/
      rmdir .hidden-fake
    fi
  '';

  postFixup = ''
    wrapProgram $out/bin/syclcc-clang \
      --prefix PATH : ${lib.makeBinPath [ lld python3 ]} \
      --add-flags "-L${llvmPackages.openmp}/lib" \
      --add-flags "-I${llvmPackages.openmp.dev}/include" \
  '' + lib.optionalString config.rocm ''
    --add-flags "--rocm-device-lib-path=${rocmPackages.rocm-device-libs}/amdgcn/bitcode"
  '';

  postPatch = ''
    patchShebangs .
  '';
}