diff --git a/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/adapter.nix b/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/adapter.nix new file mode 100644 index 000000000000..d040ef11778f --- /dev/null +++ b/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/adapter.nix @@ -0,0 +1,52 @@ +{ + lib, + lldb, + makeWrapper, + rustPlatform, + stdenv, + + pname, + src, + version, +}: +rustPlatform.buildRustPackage { + pname = "${pname}-adapter"; + inherit version src; + + cargoHash = "sha256-e/Jki/4pCs0qzaBVR4iiUhdBFmWlTZYREQkuFSoWYFo="; + + buildInputs = lib.optionals stdenv.hostPlatform.isDarwin [ lldb ]; + + nativeBuildInputs = [ makeWrapper ]; + + env = lib.optionalAttrs stdenv.hostPlatform.isDarwin { NIX_LDFLAGS = "-llldb -lc++abi"; }; + + buildAndTestSubdir = "adapter"; + + buildFeatures = [ "weak-linkage" ]; + + cargoBuildFlags = [ + "--lib" + "--bin=codelldb" + ]; + + postFixup = '' + mkdir -p $out/share/{adapter,formatters} + # codelldb expects libcodelldb.so to be in the same + # directory as the executable, and can't find it in $out/lib. + # To make codelldb executable as a standalone, + # we put all files in $out/share, and then wrap the binary in $out/bin. + mv $out/bin/* $out/share/adapter + cp $out/lib/* $out/share/adapter + cp -r adapter/scripts $out/share/adapter + cp -t $out/share/formatters formatters/*.py + ln -s ${lib.getLib lldb} $out/share/lldb + makeWrapper $out/share/adapter/codelldb $out/bin/codelldb \ + --set-default LLDB_DEBUGSERVER_PATH "${lldb.out}/bin/lldb-server" + ''; + + patches = [ ./adapter-output-shared_object.patch ]; + + # Tests are linked to liblldb but it is not available here. + doCheck = false; +} diff --git a/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/default.nix b/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/default.nix index c28093798a43..b257361d70a3 100644 --- a/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/default.nix +++ b/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/default.nix @@ -12,7 +12,6 @@ python3, pkg-config, libsecret, - darwin, }: assert lib.versionAtLeast python3.version "3.5"; let @@ -34,80 +33,36 @@ let # need to build a custom version of lldb and llvm for enhanced rust support lldb = (import ./lldb.nix { inherit fetchFromGitHub llvmPackages; }); - adapter = rustPlatform.buildRustPackage { - pname = "${pname}-adapter"; - inherit version src; + adapter = ( + import ./adapter.nix { + inherit + lib + lldb + makeWrapper + rustPlatform + stdenv - cargoHash = "sha256-e/Jki/4pCs0qzaBVR4iiUhdBFmWlTZYREQkuFSoWYFo="; + pname + src + version + ; + } + ); - buildInputs = lib.optionals stdenv.hostPlatform.isDarwin [ lldb ]; + nodeDeps = ( + import ./node_deps.nix { + inherit + buildNpmPackage + libsecret + pkg-config + python3 - nativeBuildInputs = [ makeWrapper ]; - - env = lib.optionalAttrs stdenv.hostPlatform.isDarwin { NIX_LDFLAGS = "-llldb -lc++abi"; }; - - buildAndTestSubdir = "adapter"; - - buildFeatures = [ "weak-linkage" ]; - - cargoBuildFlags = [ - "--lib" - "--bin=codelldb" - ]; - - postFixup = '' - mkdir -p $out/share/{adapter,formatters} - # codelldb expects libcodelldb.so to be in the same - # directory as the executable, and can't find it in $out/lib. - # To make codelldb executable as a standalone, - # we put all files in $out/share, and then wrap the binary in $out/bin. - mv $out/bin/* $out/share/adapter - cp $out/lib/* $out/share/adapter - cp -r adapter/scripts $out/share/adapter - cp -t $out/share/formatters formatters/*.py - ln -s ${lib.getLib lldb} $out/share/lldb - makeWrapper $out/share/adapter/codelldb $out/bin/codelldb \ - --set-default LLDB_DEBUGSERVER_PATH "${lldb.out}/bin/lldb-server" - ''; - - patches = [ ./adapter-output-shared_object.patch ]; - - # Tests are linked to liblldb but it is not available here. - doCheck = false; - }; - - nodeDeps = buildNpmPackage { - pname = "${pname}-node-deps"; - inherit version src; - - npmDepsHash = "sha256-fMKGi+AJTMlWl7SQtZ21hUwOLgqlFYDhwLvEergQLfI="; - - nativeBuildInputs = [ - python3 - pkg-config - ]; - - buildInputs = - [ libsecret ] - ++ lib.optionals stdenv.hostPlatform.isDarwin ( - with darwin.apple_sdk.frameworks; - [ - Security - AppKit - ] - ); - - dontNpmBuild = true; - - installPhase = '' - runHook preInstall - - mkdir -p $out/lib - cp -r node_modules $out/lib - - runHook postInstall - ''; - }; + pname + src + version + ; + } + ); # debugservers on macOS require the 'com.apple.security.cs.debugger' # entitlement which nixpkgs' lldb-server does not yet provide; see @@ -132,9 +87,9 @@ stdenv.mkDerivation { nativeBuildInputs = [ cmake + makeWrapper nodejs unzip - makeWrapper ]; patches = [ ./cmake-build-extension-only.patch ]; @@ -142,7 +97,7 @@ stdenv.mkDerivation { postPatch = '' # temporary patch for forgotten version updates substituteInPlace CMakeLists.txt \ - --replace "1.9.2" ${version} + --replace-fail "1.9.2" ${version} ''; postConfigure = diff --git a/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/node_deps.nix b/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/node_deps.nix new file mode 100644 index 000000000000..08dd9dc7e558 --- /dev/null +++ b/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/node_deps.nix @@ -0,0 +1,35 @@ +{ + buildNpmPackage, + + libsecret, + python3, + pkg-config, + + pname, + src, + version, +}: +buildNpmPackage { + pname = "${pname}-node-deps"; + inherit version src; + + npmDepsHash = "sha256-fMKGi+AJTMlWl7SQtZ21hUwOLgqlFYDhwLvEergQLfI="; + + nativeBuildInputs = [ + python3 + pkg-config + ]; + + buildInputs = [ libsecret ]; + + dontNpmBuild = true; + + installPhase = '' + runHook preInstall + + mkdir -p $out/lib + cp -r node_modules $out/lib + + runHook postInstall + ''; +}