diff options
author | mdarocha <git@mdarocha.pl> | 2023-06-21 17:06:26 +0200 |
---|---|---|
committer | mdarocha <git@mdarocha.pl> | 2023-06-21 17:06:30 +0200 |
commit | 29e770e0ebd3a5190b34bf74ad86903f766773dc (patch) | |
tree | 03194d5b9882a7cfa94faf2c88f3cd47fb2a872f /pkgs/build-support/dotnet | |
parent | c51141d9972c54a93b4088b95720855754b6a07e (diff) |
buildDotnetModule: support native binaries in nuget packages
This helps with ie. crossgen2 building, and packages that use protoc
Diffstat (limited to 'pkgs/build-support/dotnet')
-rw-r--r-- | pkgs/build-support/dotnet/build-dotnet-module/hooks/default.nix | 10 | ||||
-rw-r--r-- | pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-configure-hook.sh | 21 |
2 files changed, 31 insertions, 0 deletions
diff --git a/pkgs/build-support/dotnet/build-dotnet-module/hooks/default.nix b/pkgs/build-support/dotnet/build-dotnet-module/hooks/default.nix index 52044770ec051..8d0d27f673454 100644 --- a/pkgs/build-support/dotnet/build-dotnet-module/hooks/default.nix +++ b/pkgs/build-support/dotnet/build-dotnet-module/hooks/default.nix @@ -2,6 +2,8 @@ , stdenv , which , coreutils +, zlib +, openssl , callPackage , makeSetupHook , makeWrapper @@ -26,6 +28,14 @@ in propagatedBuildInputs = [ dotnet-sdk nuget-source ]; substitutions = { nugetSource = nuget-source; + dynamicLinker = "${stdenv.cc}/nix-support/dynamic-linker"; + libPath = lib.makeLibraryPath [ + stdenv.cc.cc.lib + stdenv.cc.libc + dotnet-sdk.passthru.icu + zlib + openssl + ]; inherit runtimeId; }; } ./dotnet-configure-hook.sh) { }; diff --git a/pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-configure-hook.sh b/pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-configure-hook.sh index 20e353e2b418f..c046fc3c306b1 100644 --- a/pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-configure-hook.sh +++ b/pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-configure-hook.sh @@ -51,6 +51,27 @@ EOF dotnetRestore "$project" done + echo "Fixing up native binaries..." + # Find all native binaries and nuget libraries, and fix them up, + # by setting the proper interpreter and rpath to some commonly used libraries + for binary in $(find "$HOME/.nuget/packages/" -type f -executable); do + if patchelf --print-interpreter "$binary" >/dev/null 2>/dev/null; then + echo "Found binary: $binary, fixing it up..." + patchelf --set-interpreter "$(cat "@dynamicLinker@")" "$binary" + + # This makes sure that if the binary requires some specific runtime dependencies, it can find it. + # This fixes dotnet-built binaries like crossgen2 + patchelf \ + --add-needed libicui18n.so \ + --add-needed libicuuc.so \ + --add-needed libz.so \ + --add-needed libssl.so \ + "$binary" + + patchelf --set-rpath "@libPath@" "$binary" + fi + done + runHook postConfigure echo "Finished dotnetConfigureHook" |