{ lib, stdenv, fetchFromGitHub, rustPlatform, makeWrapper, callPackage , nodePackages, cmake, nodejs, unzip, python3 }: assert lib.versionAtLeast python3.version "3.5"; let publisher = "vadimcn"; pname = "vscode-lldb"; version = "1.6.5"; vscodeExtUniqueId = "${publisher}.${pname}"; src = fetchFromGitHub { owner = "vadimcn"; repo = "vscode-lldb"; rev = "v${version}"; sha256 = "sha256-ppiEWFKJiUtlF8LSqBb8Xvg26B+wHcIZJhU+ANE4J2k="; }; lldb = callPackage ./lldb.nix {}; adapter = rustPlatform.buildRustPackage { pname = "${pname}-adapter"; inherit version src; # It will pollute the build environment of `buildRustPackage`. cargoPatches = [ ./reset-cargo-config.patch ]; cargoSha256 = "sha256-ksRFlbtrFAbcX/Pc6rgWUHVl859GVUOvNckxM7Q971U="; nativeBuildInputs = [ makeWrapper ]; buildAndTestSubdir = "adapter"; cargoFlags = [ "--lib" "--bin=codelldb" "--features=weak-linkage" ]; # Tests are linked to liblldb but it is not available here. doCheck = false; }; nodeDeps = nodePackages."vscode-lldb-build-deps-../../misc/vscode-extensions/vscode-lldb/build-deps"; in stdenv.mkDerivation { pname = "vscode-extension-${publisher}-${pname}"; inherit src version vscodeExtUniqueId; installPrefix = "share/vscode/extensions/${vscodeExtUniqueId}"; nativeBuildInputs = [ cmake nodejs unzip makeWrapper ]; patches = [ ./cmake-build-extension-only.patch ]; postConfigure = '' cp -r ${nodeDeps}/lib/node_modules/vscode-lldb/{node_modules,package-lock.json} . ''; cmakeFlags = [ # Do not append timestamp to version. "-DVERSION_SUFFIX=" ]; makeFlags = [ "vsix_bootstrap" ]; installPhase = '' ext=$out/$installPrefix runHook preInstall unzip ./codelldb-bootstrap.vsix 'extension/*' -d ./vsix-extracted mkdir -p $ext/{adapter,formatters} mv -t $ext vsix-extracted/extension/* cp -t $ext/adapter ${adapter}/{bin,lib}/* ../adapter/*.py wrapProgram $ext/adapter/codelldb \ --set-default LLDB_DEBUGSERVER_PATH "${lldb.out}/bin/lldb-server" cp -t $ext/formatters ../formatters/*.py ln -s ${lldb.lib} $ext/lldb # Mark that all components are installed. touch $ext/platform.ok runHook postInstall ''; # `adapter` will find python binary and libraries at runtime. postFixup = '' wrapProgram $out/$installPrefix/adapter/codelldb \ --prefix PATH : "${python3}/bin" \ --prefix LD_LIBRARY_PATH : "${python3}/lib" ''; passthru = { inherit lldb adapter; }; meta = with lib; { description = "A native debugger extension for VSCode based on LLDB"; homepage = "https://github.com/vadimcn/vscode-lldb"; license = with licenses; [ mit ]; maintainers = with maintainers; [ oxalica ]; platforms = platforms.all; broken = stdenv.isDarwin; # Build failed on x86_64-darwin currently. }; }