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