summary refs log tree commit diff
path: root/pkgs/development/compilers/llvm/rocm/clang.nix
blob: 45c0bfda19228c3d1ad228daf1c0db12b27fd75a (plain) (blame)
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
{ lib, stdenv
, fetchFromGitHub
, cmake
, python
, llvm
, clang-tools-extra_src ? null
, lld

, version
, src
}:

stdenv.mkDerivation rec {
  inherit version src;

  pname = "clang";

  nativeBuildInputs = [ cmake python ];

  buildInputs = [ llvm ];

  hardeningDisable = [ "all" ];

  cmakeFlags = [
    "-DLLVM_CMAKE_PATH=${llvm}/lib/cmake/llvm"
    "-DLLVM_MAIN_SRC_DIR=${llvm.src}"
    "-DCLANG_SOURCE_DIR=${src}"
    "-DLLVM_ENABLE_RTTI=ON"
  ];

  VCSVersion = ''
    #undef LLVM_REVISION
    #undef LLVM_REPOSITORY
    #undef CLANG_REVISION
    #undef CLANG_REPOSITORY
  '';

  postUnpack = lib.optionalString (!(isNull clang-tools-extra_src)) ''
    ln -s ${clang-tools-extra_src} $sourceRoot/tools/extra
  '';

  # Rather than let cmake extract version information from LLVM or
  # clang source control repositories, we generate the wanted
  # `VCSVersion.inc` file ourselves and remove it from the
  # depencencies of the `clangBasic` target.
  preConfigure = ''
    sed 's/  ''${version_inc}//' -i lib/Basic/CMakeLists.txt
    sed 's|sys::path::parent_path(BundlerExecutable)|StringRef("${llvm}/bin")|' -i tools/clang-offload-bundler/ClangOffloadBundler.cpp
    sed 's|\([[:space:]]*std::string Linker = \)getToolChain().GetProgramPath(getShortName())|\1"${lld}/bin/ld.lld"|' -i lib/Driver/ToolChains/AMDGPU.cpp
    substituteInPlace lib/Driver/ToolChains/AMDGPU.h --replace ld.lld ${lld}/bin/ld.lld
    sed 's|configure_file(AST/gen_ast_dump_json_test.py ''${LLVM_TOOLS_BINARY_DIR}/gen_ast_dump_json_test.py COPYONLY)||' -i test/CMakeLists.txt
  '';

  postConfigure = ''
    mkdir -p lib/Basic
    echo "$VCSVersion" > lib/Basic/VCSVersion.inc
  '';

  passthru = {
    isClang = true;
    inherit llvm;
  };

  meta = with lib; {
    description = "ROCm fork of the clang C/C++/Objective-C/Objective-C++ LLVM compiler frontend";
    homepage = "https://llvm.org/";
    license = with licenses; [ ncsa ];
    maintainers = with maintainers; [ ];
    platforms = platforms.linux;
  };
}