1{ lib, stdenv, llvm_meta
2, runCommand
3, monorepoSrc
4, cmake
5, zlib
6, ncurses
7, swig
8, which
9, libedit
10, libxml2
11, libllvm
12, libclang
13, python3
14, version
15, libobjc
16, xpc
17, Foundation
18, bootstrap_cmds
19, Carbon
20, Cocoa
21, lit
22, makeWrapper
23, enableManpages ? false
24, lua5_3
25}:
26
27stdenv.mkDerivation (rec {
28 pname = "lldb";
29 inherit version;
30
31 src = runCommand "${pname}-src-${version}" {} ''
32 mkdir -p "$out"
33 cp -r ${monorepoSrc}/cmake "$out"
34 cp -r ${monorepoSrc}/${pname} "$out"
35 '';
36
37 sourceRoot = "${src.name}/${pname}";
38
39 patches = [
40 ./procfs.patch
41 (runCommand "resource-dir.patch" {
42 clangLibDir = "${libclang.lib}/lib";
43 } ''
44 substitute '${./resource-dir.patch}' "$out" --subst-var clangLibDir
45 '')
46 ./gnu-install-dirs.patch
47 ];
48
49 outputs = [ "out" "lib" "dev" ];
50
51 nativeBuildInputs = [
52 cmake python3 which swig lit makeWrapper lua5_3
53 ] ++ lib.optionals enableManpages [
54 python3.pkgs.sphinx python3.pkgs.recommonmark
55 ];
56
57 buildInputs = [
58 ncurses
59 zlib
60 libedit
61 libxml2
62 libllvm
63 ] ++ lib.optionals stdenv.isDarwin [
64 libobjc
65 xpc
66 Foundation
67 bootstrap_cmds
68 Carbon
69 Cocoa
70 ];
71
72 hardeningDisable = [ "format" ];
73
74 cmakeFlags = [
75 "-DLLDB_INCLUDE_TESTS=${if doCheck then "YES" else "NO"}"
76 "-DLLVM_ENABLE_RTTI=OFF"
77 "-DClang_DIR=${libclang.dev}/lib/cmake"
78 "-DLLVM_EXTERNAL_LIT=${lit}/bin/lit"
79 ] ++ lib.optionals stdenv.isDarwin [
80 "-DLLDB_USE_SYSTEM_DEBUGSERVER=ON"
81 ] ++ lib.optionals (!stdenv.isDarwin) [
82 "-DLLDB_CODESIGN_IDENTITY=" # codesigning makes nondeterministic
83 ] ++ lib.optionals enableManpages [
84 "-DLLVM_ENABLE_SPHINX=ON"
85 "-DSPHINX_OUTPUT_MAN=ON"
86 "-DSPHINX_OUTPUT_HTML=OFF"
87 ] ++ lib.optionals doCheck [
88 "-DLLDB_TEST_C_COMPILER=${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc"
89 "-DLLDB_TEST_CXX_COMPILER=${stdenv.cc}/bin/${stdenv.cc.targetPrefix}c++"
90 ];
91
92 doCheck = false;
93
94 installCheckPhase = ''
95 if [ ! -e "$lib/${python3.sitePackages}/lldb/_lldb.so" ] ; then
96 return 1;
97 fi
98 '';
99
100 postInstall = ''
101 wrapProgram $out/bin/lldb --prefix PYTHONPATH : $lib/${python3.sitePackages}/
102
103 # Editor support
104 # vscode:
105 install -D ../tools/lldb-vscode/package.json $out/share/vscode/extensions/llvm-org.lldb-vscode-0.1.0/package.json
106 mkdir -p $out/share/vscode/extensions/llvm-org.lldb-vscode-0.1.0/bin
107 ln -s $out/bin/lldb-vscode $out/share/vscode/extensions/llvm-org.lldb-vscode-0.1.0/bin
108 '';
109
110 meta = llvm_meta // {
111 homepage = "https://lldb.llvm.org/";
112 description = "A next-generation high-performance debugger";
113 longDescription = ''
114 LLDB is a next generation, high-performance debugger. It is built as a set
115 of reusable components which highly leverage existing libraries in the
116 larger LLVM Project, such as the Clang expression parser and LLVM
117 disassembler.
118 '';
119 };
120} // lib.optionalAttrs enableManpages {
121 pname = "lldb-manpages";
122
123 buildPhase = ''
124 make docs-lldb-man
125 '';
126
127 propagatedBuildInputs = [];
128
129 # manually install lldb man page
130 installPhase = ''
131 mkdir -p $out/share/man/man1
132 install docs/man/lldb.1 -t $out/share/man/man1/
133 '';
134
135 postPatch = null;
136 postInstall = null;
137
138 outputs = [ "out" ];
139
140 doCheck = false;
141
142 meta = llvm_meta // {
143 description = "man pages for LLDB ${version}";
144 };
145})