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, makeWrapper
16}:
17
18stdenv.mkDerivation rec {
19 pname = "lldb";
20 inherit version;
21
22 src = fetch "lldb" "1mriw4adrwm6kzabrjr7yqmdiylxd6glf6samd80dp8idnm9p9z8";
23
24 patches = [
25 ./gnu-install-dirs.patch
26
27 # Fix darwin build
28 ./lldb-gdb-remote-no-libcompress.patch
29 ];
30
31 postPatch = ''
32 # Fix up various paths that assume llvm and clang are installed in the same place
33 sed -i 's,".*ClangConfig.cmake","${libclang.dev}/lib/cmake/clang/ClangConfig.cmake",' \
34 cmake/modules/LLDBStandalone.cmake
35 sed -i 's,".*tools/clang/include","${libclang.dev}/include",' \
36 cmake/modules/LLDBStandalone.cmake
37 sed -i 's,"$.LLVM_LIBRARY_DIR.",${libllvm.lib}/lib ${libclang.lib}/lib,' \
38 cmake/modules/LLDBStandalone.cmake
39
40 substituteInPlace tools/CMakeLists.txt \
41 --replace "add_subdirectory(debugserver)" ""
42 '';
43
44 outputs = [ "out" "lib" "dev" ];
45
46 nativeBuildInputs = [
47 cmake python3 which swig makeWrapper
48 ];
49
50 buildInputs = [
51 ncurses zlib libedit libxml2 libllvm
52 ] ++ lib.optionals stdenv.isDarwin [
53 darwin.libobjc
54 darwin.apple_sdk.libs.xpc
55 darwin.apple_sdk.frameworks.Foundation
56 darwin.bootstrap_cmds
57 darwin.apple_sdk.frameworks.Carbon
58 darwin.apple_sdk.frameworks.Cocoa
59 darwin.apple_sdk.frameworks.DebugSymbols
60 ];
61
62 CXXFLAGS = "-fno-rtti";
63 hardeningDisable = [ "format" ];
64
65 cmakeFlags = [
66 "-DLLDB_INCLUDE_TESTS=${if doCheck then "YES" else "NO"}"
67 "-DLLDB_CODESIGN_IDENTITY=" # codesigning makes nondeterministic
68 ] ++ lib.optionals stdenv.isDarwin [
69 # Building debugserver requires the proprietary libcompression
70 "-DLLDB_NO_DEBUGSERVER=ON"
71 ] ++ lib.optionals doCheck [
72 "-DLLDB_TEST_C_COMPILER=${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc"
73 "-DLLDB_TEST_CXX_COMPILER=${stdenv.cc}/bin/${stdenv.cc.targetPrefix}c++"
74 ];
75
76 doCheck = false;
77
78 doInstallCheck = true;
79
80 installCheckPhase = ''
81 if [ ! -e "$lib/${python3.sitePackages}/lldb/_lldb.so" ] ; then
82 echo "ERROR: python files not installed where expected!";
83 return 1;
84 fi
85 '';
86
87 postInstall = ''
88 wrapProgram $out/bin/lldb --prefix PYTHONPATH : $lib/${python3.sitePackages}/
89
90 mkdir -p $out/share/man/man1
91 cp ../docs/lldb.1 $out/share/man/man1/
92
93 install -D ../tools/lldb-vscode/package.json $out/share/vscode/extensions/llvm-org.lldb-vscode-0.1.0/package.json
94 mkdir -p $out/share/vscode/extensions/llvm-org.lldb-vscode-0.1.0/bin
95 ln -s $out/bin/llvm-vscode $out/share/vscode/extensions/llvm-org.lldb-vscode-0.1.0/bin
96 '';
97
98 meta = llvm_meta // {
99 broken = stdenv.isDarwin && stdenv.isAarch64;
100 homepage = "https://lldb.llvm.org/";
101 description = "A next-generation high-performance debugger";
102 longDescription = ''
103 LLDB is a next generation, high-performance debugger. It is built as a set
104 of reusable components which highly leverage existing libraries in the
105 larger LLVM Project, such as the Clang expression parser and LLVM
106 disassembler.
107 '';
108 };
109}