about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/tools/misc/netcoredbg/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/tools/misc/netcoredbg/default.nix')
-rw-r--r--nixpkgs/pkgs/development/tools/misc/netcoredbg/default.nix78
1 files changed, 78 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/tools/misc/netcoredbg/default.nix b/nixpkgs/pkgs/development/tools/misc/netcoredbg/default.nix
new file mode 100644
index 000000000000..1907eb8b3637
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/netcoredbg/default.nix
@@ -0,0 +1,78 @@
+{ lib, clangStdenv, stdenvNoCC, cmake, fetchFromGitHub, dotnetCorePackages, buildDotnetModule }:
+let
+  pname = "netcoredbg";
+  version = "1.2.0-825";
+
+  # according to CMakeLists.txt, this should be 3.1 even when building for .NET 5
+  coreclr-version = "3.1.19";
+  coreclr-src = fetchFromGitHub {
+    owner = "dotnet";
+    repo = "coreclr";
+    rev = "v${coreclr-version}";
+    sha256 = "o1KafmXqNjX9axr6sSxPKrfUX0e+b/4ANiVQt4T2ybw=";
+  };
+
+  dotnet-sdk = dotnetCorePackages.sdk_5_0;
+
+  src = fetchFromGitHub {
+    owner = "Samsung";
+    repo = pname;
+    rev = version;
+    sha256 = "JQhDI1+bVbOIFNkXixZnFB/5+dzqCbInR0zJvykcFCg=";
+  };
+
+  unmanaged = clangStdenv.mkDerivation rec {
+    inherit src pname version;
+
+    nativeBuildInputs = [ cmake ];
+
+    # Building the "unmanaged part" still involves compiling C# code.
+    preBuild = ''
+      export HOME=$(mktemp -d)
+      export DOTNET_CLI_TELEMETRY_OPTOUT=1
+      export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
+    '';
+
+    hardeningDisable = [ "strictoverflow" ];
+
+    preConfigure = ''
+      dotnetVersion="$(${dotnet-sdk}/bin/dotnet --list-runtimes | grep -Po '^Microsoft.NETCore.App \K.*?(?= )')"
+      cmakeFlagsArray+=(
+        "-DDBGSHIM_RUNTIME_DIR=${dotnet-sdk}/shared/Microsoft.NETCore.App/$dotnetVersion"
+      )
+    '';
+
+    cmakeFlags = [
+      "-DCORECLR_DIR=${coreclr-src}"
+      "-DDOTNET_DIR=${dotnet-sdk}"
+      "-DBUILD_MANAGED=0"
+    ];
+  };
+
+  managed = buildDotnetModule {
+    inherit pname version src dotnet-sdk;
+
+    projectFile = "src/managed/ManagedPart.csproj";
+    nugetDeps = ./deps.nix;
+
+    executables = [ ];
+  };
+in
+stdenvNoCC.mkDerivation {
+  inherit pname version;
+
+  buildCommand = ''
+    mkdir -p $out/share/netcoredbg $out/bin
+    cp ${unmanaged}/* $out/share/netcoredbg
+    cp ${managed}/lib/netcoredbg/* $out/share/netcoredbg
+    ln -s $out/share/netcoredbg/netcoredbg $out/bin/netcoredbg
+  '';
+
+  meta = with lib; {
+    description = "Managed code debugger with MI interface for CoreCLR";
+    homepage = "https://github.com/Samsung/netcoredbg";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.leo60228 ];
+  };
+}