-
Notifications
You must be signed in to change notification settings - Fork 97
/
clang.nix
79 lines (72 loc) · 2.71 KB
/
clang.nix
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
{ pkgs }:
with pkgs;
let
gcc = portableGcc;
gccForLibs = gcc.cc;
in
stdenvNoCC.mkDerivation {
name = "clang";
src = pkgs.fetchFromGitHub {
owner = "llvm";
repo = "llvm-project";
rev = "fdbff88";
hash = "sha256-kipkrgqzSgdsHwYz5P2NpUo6miulE/Nd9zRgeKAHeHM=";
};
nativeBuildInputs = [
cmake
perl
ninja
python3
git
];
buildInputs = [
gcc
];
NIX_LDFLAGS = "-L${gccForLibs}/lib/gcc/${targetPlatform.config}/${gccForLibs.version} -L${gcc.libc}/lib";
CFLAGS = "-B${gccForLibs}/lib/gcc/${targetPlatform.config}/${gccForLibs.version} -B${gcc.libc}/lib";
patches = [
./clang_driver.patch
# Patch compiler_rt so that only the static library versions of the sanitizers are build.
# This is a workaround to https://github.com/llvm/llvm-project/issues/69056#issuecomment-1781423887.
./compiler_rt.patch
];
postPatch = ''
substituteInPlace clang/lib/Driver/ToolChains/Gnu.cpp \
--replace 'GLIBC_PATH_ABC123' '${gcc.libc}/lib'
'';
configurePhase = pkgs.lib.strings.concatStringsSep " " [
"mkdir build; cd build;"
"cmake"
"-G \"Unix Makefiles\""
"-DGCC_INSTALL_PREFIX=${gccForLibs}"
"-DC_INCLUDE_DIRS=${gcc.libc.dev}/include"
"-DLLVM_TARGETS_TO_BUILD=\"host;NVPTX\""
"-DLLVM_BUILTIN_TARGETS=\"x86_64-unknown-linux-gnu\""
"-DLLVM_RUNTIME_TARGETS=\"x86_64-unknown-linux-gnu\""
"-DLLVM_ENABLE_PROJECTS=\"clang;clang-tools-extra\""
"-DLLVM_ENABLE_RUNTIMES=\"libcxx;libcxxabi;libunwind;compiler-rt\""
"-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF"
"-DRUNTIMES_x86_64-unknown-linux-gnu_CMAKE_BUILD_TYPE=Release"
# libcxx
"-DRUNTIMES_x86_64-unknown-linux-gnu_LIBCXX_ENABLE_SHARED=ON"
"-DRUNTIMES_x86_64-unknown-linux-gnu_LIBCXX_ENABLE_STATIC=ON"
"-DRUNTIMES_x86_64-unknown-linux-gnu_LIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON"
"-DRUNTIMES_x86_64-unknown-linux-gnu_LIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY=ON"
# libcxxabi
"-DRUNTIMES_x86_64-unknown-linux-gnu_LIBCXXABI_USE_LLVM_UNWINDER=ON"
"-DRUNTIMES_x86_64-unknown-linux-gnu_LIBCXXABI_ENABLE_STATIC=ON"
"-DRUNTIMES_x86_64-unknown-linux-gnu_LIBCXXABI_ENABLE_STATIC_UNWINDER=ON"
"-DRUNTIMES_x86_64-unknown-linux-gnu_LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_STATIC_LIBRARY=ON"
# libunwind
"-DRUNTIMES_x86_64-unknown-linux-gnu_LIBUNWIND_ENABLE_STATIC=ON"
# compiler-rt
"-DRUNTIMES_x86_64-unknown-linux-gnu_COMPILER_RT_CXX_LIBRARY=libcxx"
"-DRUNTIMES_x86_64-unknown-linux-gnu_COMPILER_RT_USE_LLVM_UNWINDER=ON"
"-DRUNTIMES_x86_64-unknown-linux-gnu_COMPILER_RT_SCUDO_STANDALONE_BUILD_SHARED=OFF"
"-DCMAKE_BUILD_TYPE=Release"
"-DCMAKE_INSTALL_PREFIX=\"$out\""
"../llvm"
];
buildPhase = "make";
installPhase = "make install";
}