nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{ lib, stdenv, llvm_meta
2, fetch
3, fetchpatch
4, cmake
5, zlib
6, ncurses
7, swig
8, which
9, libedit
10, libxml2
11, libllvm
12, libclang
13, python3
14, version
15, darwin
16, makeWrapper
17, perl
18, lit
19}:
20
21stdenv.mkDerivation rec {
22 pname = "lldb";
23 inherit version;
24
25 src = fetch pname "02gb3fbz09kyw8n71218v5v77ip559x3gqbcp8y3w6n3jpbryywa";
26
27 patches = [
28 ./procfs.patch
29 ./gnu-install-dirs.patch
30
31 # Fix darwin build
32 (fetchpatch {
33 name = "lldb-use-system-debugserver-fix.patch";
34 url = "https://github.com/llvm-mirror/lldb/commit/be770754cc43da22eacdb70c6203f4582eeb011f.diff";
35 sha256 = "sha256-tKkk6sn//0Hu0nlzoKWs5fXMWc+O2JAWOEJ1ZnaLuVU=";
36 excludes = [ "packages/*" ];
37 postFetch = ''
38 substituteInPlace "$out" --replace add_lldb_tool_subdirectory add_subdirectory
39 '';
40 })
41 ./lldb-gdb-remote-no-libcompress.patch
42 ];
43
44 outputs = [ "out" "lib" "dev" ];
45
46 nativeBuildInputs = [
47 cmake python3 which swig lit makeWrapper
48 ] ++ lib.optionals stdenv.isDarwin [
49 # for scripts/generate-vers.pl
50 perl
51 ];
52
53 buildInputs = [
54 ncurses zlib libedit libxml2 libllvm
55 ] ++ lib.optionals stdenv.isDarwin [
56 darwin.libobjc
57 darwin.apple_sdk.libs.xpc
58 darwin.apple_sdk.frameworks.Foundation
59 darwin.bootstrap_cmds
60 darwin.apple_sdk.frameworks.Carbon
61 darwin.apple_sdk.frameworks.Cocoa
62 darwin.apple_sdk.frameworks.DebugSymbols
63 ];
64
65 CXXFLAGS = "-fno-rtti";
66 hardeningDisable = [ "format" ];
67
68 cmakeFlags = [
69 "-DLLDB_INCLUDE_TESTS=${if doCheck then "YES" else "NO"}"
70 "-DClang_DIR=${libclang.dev}/lib/cmake"
71 "-DLLVM_EXTERNAL_LIT=${lit}/bin/lit"
72 "-DLLDB_CODESIGN_IDENTITY=" # codesigning makes nondeterministic
73 ] ++ lib.optionals stdenv.isDarwin [
74 # Building debugserver requires the proprietary libcompression
75 "-DLLDB_USE_SYSTEM_DEBUGSERVER=ON"
76 ] ++ lib.optionals doCheck [
77 "-DLLDB_TEST_C_COMPILER=${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc"
78 "-DLLDB_TEST_CXX_COMPILER=${stdenv.cc}/bin/${stdenv.cc.targetPrefix}c++"
79 ];
80
81 doCheck = false;
82
83 doInstallCheck = true;
84
85 installCheckPhase = ''
86 if [ ! -e "$lib/${python3.sitePackages}/lldb/_lldb.so" ] ; then
87 echo "ERROR: python files not installed where expected!";
88 return 1;
89 fi
90 '';
91
92 postInstall = ''
93 wrapProgram $out/bin/lldb --prefix PYTHONPATH : $lib/${python3.sitePackages}/
94
95 # man page
96 mkdir -p $out/share/man/man1
97 install ../docs/lldb.1 -t $out/share/man/man1/
98
99 # Editor support
100 # vscode:
101 install -D ../tools/lldb-vscode/package.json $out/share/vscode/extensions/llvm-org.lldb-vscode-0.1.0/package.json
102 mkdir -p $out/share/vscode/extensions/llvm-org.lldb-vscode-0.1.0/bin
103 ln -s $out/bin/llvm-vscode $out/share/vscode/extensions/llvm-org.lldb-vscode-0.1.0/bin
104 '';
105
106 meta = llvm_meta // {
107 broken = stdenv.isDarwin && stdenv.isAarch64;
108 homepage = "https://lldb.llvm.org/";
109 description = "A next-generation high-performance debugger";
110 longDescription = ''
111 LLDB is a next generation, high-performance debugger. It is built as a set
112 of reusable components which highly leverage existing libraries in the
113 larger LLVM Project, such as the Clang expression parser and LLVM
114 disassembler.
115 '';
116 };
117}