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