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