From 0217d3ba23ec4537c073a551c5c10bc508bc0fc4 Mon Sep 17 00:00:00 2001 From: David McFarland Date: Sat, 4 May 2024 19:59:56 -0300 Subject: [PATCH 1/8] dotnet: move tests to $out/bin/ --- pkgs/development/compilers/dotnet/common.nix | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pkgs/development/compilers/dotnet/common.nix b/pkgs/development/compilers/dotnet/common.nix index e26fd0e33770..f0a591672d1a 100644 --- a/pkgs/development/compilers/dotnet/common.nix +++ b/pkgs/development/compilers/dotnet/common.nix @@ -113,8 +113,8 @@ publish = mkDotnetTest { name = "publish"; template = "console"; - build = "dotnet publish -o $out"; - run = checkConsoleOutput "$src/test"; + build = "dotnet publish -o $out/bin"; + run = checkConsoleOutput "$src/bin/test"; }; self-contained = mkDotnetTest { @@ -130,20 +130,20 @@ name = "single-file"; template = "console"; usePackageSource = true; - build = "dotnet publish --use-current-runtime -p:PublishSingleFile=true -o $out"; + build = "dotnet publish --use-current-runtime -p:PublishSingleFile=true -o $out/bin"; runtime = null; - run = checkConsoleOutput "$src/test"; + run = checkConsoleOutput "$src/bin/test"; }; web = mkDotnetTest { name = "web"; template = "web"; - build = "dotnet publish -o $out"; + build = "dotnet publish -o $out/bin"; runInputs = [ expect curl ]; run = '' expect <<"EOF" set status 1 - spawn $env(src)/test + spawn $env(src)/bin/test proc abort { } { exit 2 } expect_before default abort expect -re {Now listening on: ([^\r]+)\r} { From 4bf5bf18a14bc5543f7f348b84dd0ac7feeec49e Mon Sep 17 00:00:00 2001 From: David McFarland Date: Sat, 4 May 2024 20:01:27 -0300 Subject: [PATCH 2/8] dotnet: fix RPATH in ilcompiler output --- .../compilers/dotnet/build-dotnet.nix | 26 +++++++++++++++---- .../development/compilers/dotnet/packages.nix | 2 ++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/pkgs/development/compilers/dotnet/build-dotnet.nix b/pkgs/development/compilers/dotnet/build-dotnet.nix index 11ece5397166..25bf78d9a054 100644 --- a/pkgs/development/compilers/dotnet/build-dotnet.nix +++ b/pkgs/development/compilers/dotnet/build-dotnet.nix @@ -18,6 +18,7 @@ assert if type == "sdk" then packages != null else true; , libuuid , zlib , libkrb5 +, openssl , curl , lttng-ust_2_12 , testers @@ -51,6 +52,20 @@ let sigtool = callPackage ./sigtool.nix {}; signAppHost = callPackage ./sign-apphost.nix {}; + hasILCompiler = lib.versionAtLeast version "7"; + + extraTargets = writeText "extra.targets" ('' + + '' + lib.optionalString hasILCompiler '' + + + + '' + lib.optionalString stdenv.isDarwin '' + + '' + '' + + ''); + in mkCommon type rec { inherit pname version; @@ -70,6 +85,7 @@ mkCommon type rec { icu libkrb5 curl + xmlstarlet ] ++ lib.optional stdenv.isLinux lttng-ust_2_12; src = fetchurl ( @@ -79,15 +95,15 @@ mkCommon type rec { sourceRoot = "."; - postPatch = if type == "sdk" && stdenv.isDarwin then '' + postPatch = if type == "sdk" then ('' xmlstarlet ed \ --inplace \ -s //_:Project -t elem -n Import \ - -i \$prev -t attr -n Project -v "${signAppHost}" \ + -i \$prev -t attr -n Project -v "${extraTargets}" \ sdk/*/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets - + '' + lib.optionalString stdenv.isDarwin '' codesign --remove-signature packs/Microsoft.NETCore.App.Host.osx-*/*/runtimes/osx-*/native/{apphost,singlefilehost} - '' else null; + '') else null; dontPatchELF = true; noDumpEnvVars = true; @@ -135,7 +151,7 @@ mkCommon type rec { ''; passthru = { - inherit icu; + inherit icu hasILCompiler; } // lib.optionalAttrs (type == "sdk") { packages = mkNugetDeps { name = "${pname}-${version}-deps"; diff --git a/pkgs/development/compilers/dotnet/packages.nix b/pkgs/development/compilers/dotnet/packages.nix index 4ce789e00b91..4e82e80a044f 100644 --- a/pkgs/development/compilers/dotnet/packages.nix +++ b/pkgs/development/compilers/dotnet/packages.nix @@ -37,6 +37,8 @@ in { passthru = { inherit (vmr) icu targetRid; + # ilcompiler is currently broken: https://github.com/dotnet/source-build/issues/1215 + hasILCompiler = false; }; meta = vmr.meta // { From f36b8c76879d61dd7a83c7562c03dcfa98c389cf Mon Sep 17 00:00:00 2001 From: David McFarland Date: Sun, 5 May 2024 21:27:29 -0300 Subject: [PATCH 3/8] dotnet: add ilcompiler package --- pkgs/development/compilers/dotnet/update.sh | 1 + pkgs/development/compilers/dotnet/versions/7.0.nix | 1 + pkgs/development/compilers/dotnet/versions/8.0.nix | 1 + pkgs/development/compilers/dotnet/versions/9.0.nix | 1 + 4 files changed, 4 insertions(+) diff --git a/pkgs/development/compilers/dotnet/update.sh b/pkgs/development/compilers/dotnet/update.sh index fbcbd84bf9f6..b440ff1cf1be 100755 --- a/pkgs/development/compilers/dotnet/update.sh +++ b/pkgs/development/compilers/dotnet/update.sh @@ -282,6 +282,7 @@ sdk_packages () { # Packages that only apply to .NET 7 and up if ! version_older "$version" "7"; then pkgs+=( + "Microsoft.DotNet.ILCompiler" "runtime.linux-arm64.Microsoft.DotNet.ILCompiler" "runtime.linux-musl-arm64.Microsoft.DotNet.ILCompiler" "runtime.linux-musl-x64.Microsoft.DotNet.ILCompiler" diff --git a/pkgs/development/compilers/dotnet/versions/7.0.nix b/pkgs/development/compilers/dotnet/versions/7.0.nix index fac65c6b2dd0..159d9cc23985 100644 --- a/pkgs/development/compilers/dotnet/versions/7.0.nix +++ b/pkgs/development/compilers/dotnet/versions/7.0.nix @@ -111,6 +111,7 @@ let (fetchNuGet { pname = "runtime.win-arm.Microsoft.NETCore.DotNetHostPolicy"; version = "7.0.20"; sha256 = "18sarln3kbkqc1ab9jnadcqqxs8iicf7jqldxzbjzhdpmf96vwna"; }) (fetchNuGet { pname = "runtime.win-arm.Microsoft.NETCore.DotNetHostResolver"; version = "7.0.20"; sha256 = "1vh3ymhv33qysc4vj4gb3g1rgajy4jr4kxfjcsq2myn96aan84i1"; }) (fetchNuGet { pname = "Microsoft.NETCore.App.Composite"; version = "7.0.20"; sha256 = "12w9hlq70ynkrgqbr555lnqmbf67iz3kaci2vi07zsn3mmak3z6j"; }) + (fetchNuGet { pname = "Microsoft.DotNet.ILCompiler"; version = "7.0.20"; sha256 = "0c966243j6m22hy3n922rl64vi6y1l7ljn69bwydm5clyh7zvn0a"; }) (fetchNuGet { pname = "runtime.linux-arm64.Microsoft.DotNet.ILCompiler"; version = "7.0.20"; sha256 = "11c31fzq4qfxcsz3p6vzdfnaqs29saf1dnmzq7l90p6ylwsblc7f"; }) (fetchNuGet { pname = "runtime.linux-musl-arm64.Microsoft.DotNet.ILCompiler"; version = "7.0.20"; sha256 = "087q3p57snmvvzzqpxp3vwvi2q21kzlk8qh1w6axrcjdci31xmji"; }) (fetchNuGet { pname = "runtime.linux-musl-x64.Microsoft.DotNet.ILCompiler"; version = "7.0.20"; sha256 = "1nc8m38jsqai934nn26f6dkl3c0r4sabssjiizcixdyypzlv3hcf"; }) diff --git a/pkgs/development/compilers/dotnet/versions/8.0.nix b/pkgs/development/compilers/dotnet/versions/8.0.nix index e88c122e3a8d..28a4cc725525 100644 --- a/pkgs/development/compilers/dotnet/versions/8.0.nix +++ b/pkgs/development/compilers/dotnet/versions/8.0.nix @@ -103,6 +103,7 @@ let (fetchNuGet { pname = "Microsoft.NETCore.App.Crossgen2.linux-x64"; version = "8.0.6"; sha256 = "1628i25saxmny4k8zzhh6nkz0njlvmi05f1m2sx976flqd3kxr78"; }) (fetchNuGet { pname = "Microsoft.NETCore.App.Crossgen2.osx-x64"; version = "8.0.6"; sha256 = "0fz0a4hm8lf56r5hff4vcz6pfmwfqygddm6cyxj04x63wqd16sl8"; }) (fetchNuGet { pname = "Microsoft.NETCore.App.Crossgen2.osx-arm64"; version = "8.0.6"; sha256 = "1bg9d8fcwr7808vbakkgrzry4wf0l7r28xn9hsnh14awsqprngid"; }) + (fetchNuGet { pname = "Microsoft.DotNet.ILCompiler"; version = "8.0.6"; sha256 = "0wvdsmpriwvzf53n8sp7vda0996s8vhv83nis45sz1imwm7gxn4r"; }) (fetchNuGet { pname = "runtime.linux-arm64.Microsoft.DotNet.ILCompiler"; version = "8.0.6"; sha256 = "0l3pibk6q4hhinf2ki42vcc6kvvi5x4icm8bpcnm9iss6kafchry"; }) (fetchNuGet { pname = "runtime.linux-musl-arm64.Microsoft.DotNet.ILCompiler"; version = "8.0.6"; sha256 = "19wwim19f1aqscvya85chbycj30ns5cxr2ga5jfrkxbyni9q557m"; }) (fetchNuGet { pname = "runtime.linux-musl-x64.Microsoft.DotNet.ILCompiler"; version = "8.0.6"; sha256 = "1bggciasdgh7yr9vjkfq8fjxzg8lbcj4cd16slcr8kkpqy1lj79s"; }) diff --git a/pkgs/development/compilers/dotnet/versions/9.0.nix b/pkgs/development/compilers/dotnet/versions/9.0.nix index 2cf73e2a4a7a..8433cc2a8d97 100644 --- a/pkgs/development/compilers/dotnet/versions/9.0.nix +++ b/pkgs/development/compilers/dotnet/versions/9.0.nix @@ -67,6 +67,7 @@ let (fetchNuGet { pname = "Microsoft.NETCore.App.Crossgen2.linux-x64"; version = "9.0.0-preview.5.24306.7"; sha256 = "0hxf3xk6yn8n04fwj9j7c6a70y9apf31aafn2nhd3yykvvf7618d"; }) (fetchNuGet { pname = "Microsoft.NETCore.App.Crossgen2.osx-x64"; version = "9.0.0-preview.5.24306.7"; sha256 = "1pw27c0czrrgp0vqnlcz6zhyrhbjbqh14wbcknrcn1smlm6fl77x"; }) (fetchNuGet { pname = "Microsoft.NETCore.App.Crossgen2.osx-arm64"; version = "9.0.0-preview.5.24306.7"; sha256 = "14k0sd0b6rpngw8s1gz833kq89qghnhszgvk9v2rabncb1qlhanv"; }) + (fetchNuGet { pname = "Microsoft.DotNet.ILCompiler"; version = "9.0.0-preview.5.24306.7"; sha256 = "1qmshjgd3wpal5gbsq5ajanissr237bjgfpxg7sp5bqjb20yg4hp"; }) (fetchNuGet { pname = "runtime.linux-arm64.Microsoft.DotNet.ILCompiler"; version = "9.0.0-preview.5.24306.7"; sha256 = "0c2spsh6m236cmpf6c2hafcrr4w2ks433g024cmpa93a3s6dfvcp"; }) (fetchNuGet { pname = "runtime.linux-musl-arm64.Microsoft.DotNet.ILCompiler"; version = "9.0.0-preview.5.24306.7"; sha256 = "0wla1jr95b7hm6wa2yx080wgy8iaqr7r3q83jp3qdnp3k2y0rgpk"; }) (fetchNuGet { pname = "runtime.linux-musl-x64.Microsoft.DotNet.ILCompiler"; version = "9.0.0-preview.5.24306.7"; sha256 = "00mkrwlx48dis7fg73gxj1c99zs1na4k6y11q1908a674hni8qlx"; }) From 575679089f06af179dc32eb2e7190779dc1bce7e Mon Sep 17 00:00:00 2001 From: David McFarland Date: Tue, 11 Jun 2024 20:39:53 -0300 Subject: [PATCH 4/8] dotnet: indent update.sh according to .editorconfig --- pkgs/development/compilers/dotnet/update.sh | 402 ++++++++++---------- 1 file changed, 201 insertions(+), 201 deletions(-) diff --git a/pkgs/development/compilers/dotnet/update.sh b/pkgs/development/compilers/dotnet/update.sh index b440ff1cf1be..0622c21f856c 100755 --- a/pkgs/development/compilers/dotnet/update.sh +++ b/pkgs/development/compilers/dotnet/update.sh @@ -7,46 +7,46 @@ set -Eeuo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" release () { - local content="$1" - local version="$2" + local content="$1" + local version="$2" - jq -r '.releases[] | select(."release-version" == "'"$version"'")' <<< "$content" + jq -r '.releases[] | select(."release-version" == "'"$version"'")' <<< "$content" } release_files () { - local release="$1" - local expr="$2" + local release="$1" + local expr="$2" - jq -r '[('"$expr"').files[] | select(.name | test("^.*.tar.gz$"))]' <<< "$release" + jq -r '[('"$expr"').files[] | select(.name | test("^.*.tar.gz$"))]' <<< "$release" } release_platform_attr () { - local release_files="$1" - local platform="$2" - local attr="$3" + local release_files="$1" + local platform="$2" + local attr="$3" - jq -r '.[] | select((.rid == "'"$platform"'") and (.name | contains("composite") | not)) | ."'"$attr"'"' <<< "$release_files" + jq -r '.[] | select((.rid == "'"$platform"'") and (.name | contains("composite") | not)) | ."'"$attr"'"' <<< "$release_files" } platform_sources () { - local release_files="$1" - local platforms=( - "x86_64-linux linux-x64" - "aarch64-linux linux-arm64" - "x86_64-darwin osx-x64" - "aarch64-darwin osx-arm64" - ) + local release_files="$1" + local platforms=( + "x86_64-linux linux-x64" + "aarch64-linux linux-arm64" + "x86_64-darwin osx-x64" + "aarch64-darwin osx-arm64" + ) - echo "srcs = {" - for kv in "${platforms[@]}"; do - local nix_platform=${kv%% *} - local ms_platform=${kv##* } + echo "srcs = {" + for kv in "${platforms[@]}"; do + local nix_platform=${kv%% *} + local ms_platform=${kv##* } - local url=$(release_platform_attr "$release_files" "$ms_platform" url) - local hash=$(release_platform_attr "$release_files" "$ms_platform" hash) + local url=$(release_platform_attr "$release_files" "$ms_platform" url) + local hash=$(release_platform_attr "$release_files" "$ms_platform" hash) - [[ -z "$url" || -z "$hash" ]] && continue - echo " $nix_platform = { + [[ -z "$url" || -z "$hash" ]] && continue + echo " $nix_platform = { url = \"$url\"; sha512 = \"$hash\"; };" @@ -112,15 +112,15 @@ aspnetcore_packages () { # This should not happend in minor or bugfix updates, but probably happens # with every new major .NET release. local pkgs=( - "Microsoft.AspNetCore.App.Runtime.linux-arm" - "Microsoft.AspNetCore.App.Runtime.linux-arm64" - "Microsoft.AspNetCore.App.Runtime.linux-musl-arm64" - "Microsoft.AspNetCore.App.Runtime.linux-musl-x64" - "Microsoft.AspNetCore.App.Runtime.linux-x64" - "Microsoft.AspNetCore.App.Runtime.osx-x64" - "Microsoft.AspNetCore.App.Runtime.win-arm64" - "Microsoft.AspNetCore.App.Runtime.win-x64" - "Microsoft.AspNetCore.App.Runtime.win-x86" + "Microsoft.AspNetCore.App.Runtime.linux-arm" + "Microsoft.AspNetCore.App.Runtime.linux-arm64" + "Microsoft.AspNetCore.App.Runtime.linux-musl-arm64" + "Microsoft.AspNetCore.App.Runtime.linux-musl-x64" + "Microsoft.AspNetCore.App.Runtime.linux-x64" + "Microsoft.AspNetCore.App.Runtime.osx-x64" + "Microsoft.AspNetCore.App.Runtime.win-arm64" + "Microsoft.AspNetCore.App.Runtime.win-x64" + "Microsoft.AspNetCore.App.Runtime.win-x86" ) # These packages are currently broken on .NET 8 @@ -133,9 +133,9 @@ aspnetcore_packages () { # Packages that only apply to .NET 6 and up if ! version_older "$version" "6"; then pkgs+=( - "Microsoft.AspNetCore.App.Ref" - "Microsoft.AspNetCore.App.Runtime.linux-musl-arm" - "Microsoft.AspNetCore.App.Runtime.osx-arm64" + "Microsoft.AspNetCore.App.Ref" + "Microsoft.AspNetCore.App.Runtime.linux-musl-arm" + "Microsoft.AspNetCore.App.Runtime.osx-arm64" ) fi @@ -168,102 +168,102 @@ sdk_packages () { # This should not happend in minor or bugfix updates, but probably happens # with every new major .NET release. local pkgs=( - "Microsoft.NETCore.App.Host.linux-arm" - "Microsoft.NETCore.App.Host.linux-arm64" - "Microsoft.NETCore.App.Host.linux-musl-arm64" - "Microsoft.NETCore.App.Host.linux-musl-x64" - "Microsoft.NETCore.App.Host.linux-x64" - "Microsoft.NETCore.App.Host.osx-x64" - "Microsoft.NETCore.App.Host.win-arm64" - "Microsoft.NETCore.App.Host.win-x64" - "Microsoft.NETCore.App.Host.win-x86" - "Microsoft.NETCore.App.Runtime.linux-arm" - "Microsoft.NETCore.App.Runtime.linux-arm64" - "Microsoft.NETCore.App.Runtime.linux-musl-arm64" - "Microsoft.NETCore.App.Runtime.linux-musl-x64" - "Microsoft.NETCore.App.Runtime.linux-x64" - "Microsoft.NETCore.App.Runtime.osx-x64" - "Microsoft.NETCore.App.Runtime.win-arm64" - "Microsoft.NETCore.App.Runtime.win-x64" - "Microsoft.NETCore.App.Runtime.win-x86" - "Microsoft.NETCore.DotNetAppHost" - "Microsoft.NETCore.DotNetHost" - "Microsoft.NETCore.DotNetHostPolicy" - "Microsoft.NETCore.DotNetHostResolver" - "runtime.linux-arm64.Microsoft.NETCore.DotNetAppHost" - "runtime.linux-arm64.Microsoft.NETCore.DotNetHost" - "runtime.linux-arm64.Microsoft.NETCore.DotNetHostPolicy" - "runtime.linux-arm64.Microsoft.NETCore.DotNetHostResolver" - "runtime.linux-arm.Microsoft.NETCore.DotNetAppHost" - "runtime.linux-arm.Microsoft.NETCore.DotNetHost" - "runtime.linux-arm.Microsoft.NETCore.DotNetHostPolicy" - "runtime.linux-arm.Microsoft.NETCore.DotNetHostResolver" - "runtime.linux-musl-arm64.Microsoft.NETCore.DotNetAppHost" - "runtime.linux-musl-arm64.Microsoft.NETCore.DotNetHost" - "runtime.linux-musl-arm64.Microsoft.NETCore.DotNetHostPolicy" - "runtime.linux-musl-arm64.Microsoft.NETCore.DotNetHostResolver" - "runtime.linux-musl-x64.Microsoft.NETCore.DotNetAppHost" - "runtime.linux-musl-x64.Microsoft.NETCore.DotNetHost" - "runtime.linux-musl-x64.Microsoft.NETCore.DotNetHostPolicy" - "runtime.linux-musl-x64.Microsoft.NETCore.DotNetHostResolver" - "runtime.linux-x64.Microsoft.NETCore.DotNetAppHost" - "runtime.linux-x64.Microsoft.NETCore.DotNetHost" - "runtime.linux-x64.Microsoft.NETCore.DotNetHostPolicy" - "runtime.linux-x64.Microsoft.NETCore.DotNetHostResolver" - "runtime.osx-x64.Microsoft.NETCore.DotNetAppHost" - "runtime.osx-x64.Microsoft.NETCore.DotNetHost" - "runtime.osx-x64.Microsoft.NETCore.DotNetHostPolicy" - "runtime.osx-x64.Microsoft.NETCore.DotNetHostResolver" - "runtime.win-arm64.Microsoft.NETCore.DotNetAppHost" - "runtime.win-arm64.Microsoft.NETCore.DotNetHost" - "runtime.win-arm64.Microsoft.NETCore.DotNetHostPolicy" - "runtime.win-arm64.Microsoft.NETCore.DotNetHostResolver" - "runtime.win-x64.Microsoft.NETCore.DotNetAppHost" - "runtime.win-x64.Microsoft.NETCore.DotNetHost" - "runtime.win-x64.Microsoft.NETCore.DotNetHostPolicy" - "runtime.win-x64.Microsoft.NETCore.DotNetHostResolver" - "runtime.win-x86.Microsoft.NETCore.DotNetAppHost" - "runtime.win-x86.Microsoft.NETCore.DotNetHost" - "runtime.win-x86.Microsoft.NETCore.DotNetHostPolicy" - "runtime.win-x86.Microsoft.NETCore.DotNetHostResolver" - "Microsoft.NETCore.App.Host.linux-musl-arm" - "Microsoft.NETCore.App.Host.osx-arm64" - "Microsoft.NETCore.App.Runtime.linux-musl-arm" - "Microsoft.NETCore.App.Runtime.osx-arm64" - "Microsoft.NETCore.App.Ref" - "Microsoft.NETCore.App.Runtime.Mono.linux-arm" - "Microsoft.NETCore.App.Runtime.Mono.linux-arm64" - "Microsoft.NETCore.App.Runtime.Mono.linux-musl-x64" - "Microsoft.NETCore.App.Runtime.Mono.linux-x64" - "Microsoft.NETCore.App.Runtime.Mono.osx-arm64" - "Microsoft.NETCore.App.Runtime.Mono.osx-x64" - "Microsoft.NETCore.App.Runtime.Mono.win-x64" - "Microsoft.NETCore.App.Runtime.Mono.win-x86" - "runtime.linux-musl-arm.Microsoft.NETCore.DotNetAppHost" - "runtime.linux-musl-arm.Microsoft.NETCore.DotNetHost" - "runtime.linux-musl-arm.Microsoft.NETCore.DotNetHostPolicy" - "runtime.linux-musl-arm.Microsoft.NETCore.DotNetHostResolver" - "runtime.osx-arm64.Microsoft.NETCore.DotNetAppHost" - "runtime.osx-arm64.Microsoft.NETCore.DotNetHost" - "runtime.osx-arm64.Microsoft.NETCore.DotNetHostPolicy" - "runtime.osx-arm64.Microsoft.NETCore.DotNetHostResolver" - "Microsoft.NETCore.App.Crossgen2.linux-musl-arm" - "Microsoft.NETCore.App.Crossgen2.linux-musl-arm64" - "Microsoft.NETCore.App.Crossgen2.linux-musl-x64" - "Microsoft.NETCore.App.Crossgen2.linux-arm" - "Microsoft.NETCore.App.Crossgen2.linux-arm64" - "Microsoft.NETCore.App.Crossgen2.linux-x64" - "Microsoft.NETCore.App.Crossgen2.osx-x64" - "Microsoft.NETCore.App.Crossgen2.osx-arm64" + "Microsoft.NETCore.App.Host.linux-arm" + "Microsoft.NETCore.App.Host.linux-arm64" + "Microsoft.NETCore.App.Host.linux-musl-arm64" + "Microsoft.NETCore.App.Host.linux-musl-x64" + "Microsoft.NETCore.App.Host.linux-x64" + "Microsoft.NETCore.App.Host.osx-x64" + "Microsoft.NETCore.App.Host.win-arm64" + "Microsoft.NETCore.App.Host.win-x64" + "Microsoft.NETCore.App.Host.win-x86" + "Microsoft.NETCore.App.Runtime.linux-arm" + "Microsoft.NETCore.App.Runtime.linux-arm64" + "Microsoft.NETCore.App.Runtime.linux-musl-arm64" + "Microsoft.NETCore.App.Runtime.linux-musl-x64" + "Microsoft.NETCore.App.Runtime.linux-x64" + "Microsoft.NETCore.App.Runtime.osx-x64" + "Microsoft.NETCore.App.Runtime.win-arm64" + "Microsoft.NETCore.App.Runtime.win-x64" + "Microsoft.NETCore.App.Runtime.win-x86" + "Microsoft.NETCore.DotNetAppHost" + "Microsoft.NETCore.DotNetHost" + "Microsoft.NETCore.DotNetHostPolicy" + "Microsoft.NETCore.DotNetHostResolver" + "runtime.linux-arm64.Microsoft.NETCore.DotNetAppHost" + "runtime.linux-arm64.Microsoft.NETCore.DotNetHost" + "runtime.linux-arm64.Microsoft.NETCore.DotNetHostPolicy" + "runtime.linux-arm64.Microsoft.NETCore.DotNetHostResolver" + "runtime.linux-arm.Microsoft.NETCore.DotNetAppHost" + "runtime.linux-arm.Microsoft.NETCore.DotNetHost" + "runtime.linux-arm.Microsoft.NETCore.DotNetHostPolicy" + "runtime.linux-arm.Microsoft.NETCore.DotNetHostResolver" + "runtime.linux-musl-arm64.Microsoft.NETCore.DotNetAppHost" + "runtime.linux-musl-arm64.Microsoft.NETCore.DotNetHost" + "runtime.linux-musl-arm64.Microsoft.NETCore.DotNetHostPolicy" + "runtime.linux-musl-arm64.Microsoft.NETCore.DotNetHostResolver" + "runtime.linux-musl-x64.Microsoft.NETCore.DotNetAppHost" + "runtime.linux-musl-x64.Microsoft.NETCore.DotNetHost" + "runtime.linux-musl-x64.Microsoft.NETCore.DotNetHostPolicy" + "runtime.linux-musl-x64.Microsoft.NETCore.DotNetHostResolver" + "runtime.linux-x64.Microsoft.NETCore.DotNetAppHost" + "runtime.linux-x64.Microsoft.NETCore.DotNetHost" + "runtime.linux-x64.Microsoft.NETCore.DotNetHostPolicy" + "runtime.linux-x64.Microsoft.NETCore.DotNetHostResolver" + "runtime.osx-x64.Microsoft.NETCore.DotNetAppHost" + "runtime.osx-x64.Microsoft.NETCore.DotNetHost" + "runtime.osx-x64.Microsoft.NETCore.DotNetHostPolicy" + "runtime.osx-x64.Microsoft.NETCore.DotNetHostResolver" + "runtime.win-arm64.Microsoft.NETCore.DotNetAppHost" + "runtime.win-arm64.Microsoft.NETCore.DotNetHost" + "runtime.win-arm64.Microsoft.NETCore.DotNetHostPolicy" + "runtime.win-arm64.Microsoft.NETCore.DotNetHostResolver" + "runtime.win-x64.Microsoft.NETCore.DotNetAppHost" + "runtime.win-x64.Microsoft.NETCore.DotNetHost" + "runtime.win-x64.Microsoft.NETCore.DotNetHostPolicy" + "runtime.win-x64.Microsoft.NETCore.DotNetHostResolver" + "runtime.win-x86.Microsoft.NETCore.DotNetAppHost" + "runtime.win-x86.Microsoft.NETCore.DotNetHost" + "runtime.win-x86.Microsoft.NETCore.DotNetHostPolicy" + "runtime.win-x86.Microsoft.NETCore.DotNetHostResolver" + "Microsoft.NETCore.App.Host.linux-musl-arm" + "Microsoft.NETCore.App.Host.osx-arm64" + "Microsoft.NETCore.App.Runtime.linux-musl-arm" + "Microsoft.NETCore.App.Runtime.osx-arm64" + "Microsoft.NETCore.App.Ref" + "Microsoft.NETCore.App.Runtime.Mono.linux-arm" + "Microsoft.NETCore.App.Runtime.Mono.linux-arm64" + "Microsoft.NETCore.App.Runtime.Mono.linux-musl-x64" + "Microsoft.NETCore.App.Runtime.Mono.linux-x64" + "Microsoft.NETCore.App.Runtime.Mono.osx-arm64" + "Microsoft.NETCore.App.Runtime.Mono.osx-x64" + "Microsoft.NETCore.App.Runtime.Mono.win-x64" + "Microsoft.NETCore.App.Runtime.Mono.win-x86" + "runtime.linux-musl-arm.Microsoft.NETCore.DotNetAppHost" + "runtime.linux-musl-arm.Microsoft.NETCore.DotNetHost" + "runtime.linux-musl-arm.Microsoft.NETCore.DotNetHostPolicy" + "runtime.linux-musl-arm.Microsoft.NETCore.DotNetHostResolver" + "runtime.osx-arm64.Microsoft.NETCore.DotNetAppHost" + "runtime.osx-arm64.Microsoft.NETCore.DotNetHost" + "runtime.osx-arm64.Microsoft.NETCore.DotNetHostPolicy" + "runtime.osx-arm64.Microsoft.NETCore.DotNetHostResolver" + "Microsoft.NETCore.App.Crossgen2.linux-musl-arm" + "Microsoft.NETCore.App.Crossgen2.linux-musl-arm64" + "Microsoft.NETCore.App.Crossgen2.linux-musl-x64" + "Microsoft.NETCore.App.Crossgen2.linux-arm" + "Microsoft.NETCore.App.Crossgen2.linux-arm64" + "Microsoft.NETCore.App.Crossgen2.linux-x64" + "Microsoft.NETCore.App.Crossgen2.osx-x64" + "Microsoft.NETCore.App.Crossgen2.osx-arm64" ) # These packages were removed on .NET 9 if ! version_older "$version" "9"; then - local newpkgs=() - for pkg in "${pkgs[@]}"; do - [[ "$pkg" = *Microsoft.NETCore.DotNetHost* ]] || newpkgs+=("$pkg") - done - pkgs=("${newpkgs[@]}") + local newpkgs=() + for pkg in "${pkgs[@]}"; do + [[ "$pkg" = *Microsoft.NETCore.DotNetHost* ]] || newpkgs+=("$pkg") + done + pkgs=("${newpkgs[@]}") fi # These packages were removed on .NET 8 @@ -282,14 +282,14 @@ sdk_packages () { # Packages that only apply to .NET 7 and up if ! version_older "$version" "7"; then pkgs+=( - "Microsoft.DotNet.ILCompiler" - "runtime.linux-arm64.Microsoft.DotNet.ILCompiler" - "runtime.linux-musl-arm64.Microsoft.DotNet.ILCompiler" - "runtime.linux-musl-x64.Microsoft.DotNet.ILCompiler" - "runtime.linux-x64.Microsoft.DotNet.ILCompiler" - "runtime.osx-x64.Microsoft.DotNet.ILCompiler" - "runtime.win-arm64.Microsoft.DotNet.ILCompiler" - "runtime.win-x64.Microsoft.DotNet.ILCompiler" + "Microsoft.DotNet.ILCompiler" + "runtime.linux-arm64.Microsoft.DotNet.ILCompiler" + "runtime.linux-musl-arm64.Microsoft.DotNet.ILCompiler" + "runtime.linux-musl-x64.Microsoft.DotNet.ILCompiler" + "runtime.linux-x64.Microsoft.DotNet.ILCompiler" + "runtime.osx-x64.Microsoft.DotNet.ILCompiler" + "runtime.win-arm64.Microsoft.DotNet.ILCompiler" + "runtime.win-x64.Microsoft.DotNet.ILCompiler" ) fi @@ -304,74 +304,74 @@ sdk_packages () { } main () { - pname=$(basename "$0") - if [[ ! "$*" =~ ^.*[0-9]{1,}\.[0-9]{1,}.*$ ]]; then - echo "Usage: $pname [sem-versions] + pname=$(basename "$0") + if [[ ! "$*" =~ ^.*[0-9]{1,}\.[0-9]{1,}.*$ ]]; then + echo "Usage: $pname [sem-versions] Get updated dotnet src (platform - url & sha512) expressions for specified versions Examples: $pname 6.0.14 7.0.201 - specific x.y.z versions $pname 6.0 7.0 - latest x.y versions " >&2 - exit 1 - fi - - for sem_version in "$@"; do - echo "Generating ./versions/${sem_version}.nix" - patch_specified=false - # Check if a patch was specified as an argument. - # If so, generate file for the specific version. - # If only x.y version was provided, get the latest patch - # version of the given x.y version. - if [[ "$sem_version" =~ ^[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,} ]]; then - patch_specified=true - elif [[ ! "$sem_version" =~ ^[0-9]{1,}\.[0-9]{1,}$ ]]; then - continue + exit 1 fi - # Make sure the x.y version is properly passed to .NET release metadata url. - # Then get the json file and parse it to find the latest patch release. - major_minor=$(sed 's/^\([0-9]*\.[0-9]*\).*$/\1/' <<< "$sem_version") - content=$(curl -sL https://dotnetcli.blob.core.windows.net/dotnet/release-metadata/"$major_minor"/releases.json) - major_minor_patch=$([ "$patch_specified" == true ] && echo "$sem_version" || jq -r '."latest-release"' <<< "$content") - major_minor_underscore=${major_minor/./_} + for sem_version in "$@"; do + echo "Generating ./versions/${sem_version}.nix" + patch_specified=false + # Check if a patch was specified as an argument. + # If so, generate file for the specific version. + # If only x.y version was provided, get the latest patch + # version of the given x.y version. + if [[ "$sem_version" =~ ^[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,} ]]; then + patch_specified=true + elif [[ ! "$sem_version" =~ ^[0-9]{1,}\.[0-9]{1,}$ ]]; then + continue + fi - release_content=$(release "$content" "$major_minor_patch") - aspnetcore_version=$(jq -r '."aspnetcore-runtime".version' <<< "$release_content") - runtime_version=$(jq -r '.runtime.version' <<< "$release_content") - mapfile -t sdk_versions < <(jq -r '.sdks[] | .version' <<< "$release_content" | sort -rn) + # Make sure the x.y version is properly passed to .NET release metadata url. + # Then get the json file and parse it to find the latest patch release. + major_minor=$(sed 's/^\([0-9]*\.[0-9]*\).*$/\1/' <<< "$sem_version") + content=$(curl -sL https://dotnetcli.blob.core.windows.net/dotnet/release-metadata/"$major_minor"/releases.json) + major_minor_patch=$([ "$patch_specified" == true ] && echo "$sem_version" || jq -r '."latest-release"' <<< "$content") + major_minor_underscore=${major_minor/./_} - # If patch was not specified, check if the package is already the latest version - # If it is, exit early - if [ "$patch_specified" == false ] && [ -f "./versions/${sem_version}.nix" ]; then - current_version=$(nix-instantiate --eval -E "(import ./versions/${sem_version}.nix { \ + release_content=$(release "$content" "$major_minor_patch") + aspnetcore_version=$(jq -r '."aspnetcore-runtime".version' <<< "$release_content") + runtime_version=$(jq -r '.runtime.version' <<< "$release_content") + mapfile -t sdk_versions < <(jq -r '.sdks[] | .version' <<< "$release_content" | sort -rn) + + # If patch was not specified, check if the package is already the latest version + # If it is, exit early + if [ "$patch_specified" == false ] && [ -f "./versions/${sem_version}.nix" ]; then + current_version=$(nix-instantiate --eval -E "(import ./versions/${sem_version}.nix { \ buildAspNetCore = { ... }: {}; \ buildNetSdk = { ... }: {}; \ buildNetRuntime = { ... }: {}; \ }).release_${major_minor_underscore}" | jq -r) - if [[ "$current_version" == "$major_minor_patch" ]]; then - echo "Nothing to update." - continue + if [[ "$current_version" == "$major_minor_patch" ]]; then + echo "Nothing to update." + continue + fi fi - fi - aspnetcore_files="$(release_files "$release_content" .\"aspnetcore-runtime\")" - runtime_files="$(release_files "$release_content" .runtime)" + aspnetcore_files="$(release_files "$release_content" .\"aspnetcore-runtime\")" + runtime_files="$(release_files "$release_content" .runtime)" - channel_version=$(jq -r '."channel-version"' <<< "$content") - support_phase=$(jq -r '."support-phase"' <<< "$content") + channel_version=$(jq -r '."channel-version"' <<< "$content") + support_phase=$(jq -r '."support-phase"' <<< "$content") - aspnetcore_sources="$(platform_sources "$aspnetcore_files")" - runtime_sources="$(platform_sources "$runtime_files")" + aspnetcore_sources="$(platform_sources "$aspnetcore_files")" + runtime_sources="$(platform_sources "$runtime_files")" - sdk_packages="$(sdk_packages "${runtime_version}")" - aspnetcore_packages="$(aspnetcore_packages "${aspnetcore_version}")" + sdk_packages="$(sdk_packages "${runtime_version}")" + aspnetcore_packages="$(aspnetcore_packages "${aspnetcore_version}")" - result=$(mktemp) - trap "rm -f $result" TERM INT EXIT + result=$(mktemp) + trap "rm -f $result" TERM INT EXIT - echo "{ buildAspNetCore, buildNetRuntime, buildNetSdk }: + echo "{ buildAspNetCore, buildNetRuntime, buildNetSdk }: # v$channel_version ($support_phase) @@ -393,35 +393,35 @@ in rec { $runtime_sources };" > "${result}" - declare -A feature_bands - unset latest_sdk + declare -A feature_bands + unset latest_sdk - for sdk_version in "${sdk_versions[@]}"; do - sdk_base_version=${sdk_version%-*} - feature_band=${sdk_base_version:0:-2}xx - # sometimes one release has e.g. both 8.0.202 and 8.0.203 - [[ ! ${feature_bands[$feature_band]+true} ]] || continue - feature_bands[$feature_band]=$sdk_version - sdk_files="$(release_files "$release_content" ".sdks[] | select(.version == \"$sdk_version\")")" - sdk_sources="$(platform_sources "$sdk_files")" - sdk_attrname=sdk_${feature_band//./_} - [[ -v latest_sdk ]] || latest_sdk=$sdk_attrname + for sdk_version in "${sdk_versions[@]}"; do + sdk_base_version=${sdk_version%-*} + feature_band=${sdk_base_version:0:-2}xx + # sometimes one release has e.g. both 8.0.202 and 8.0.203 + [[ ! ${feature_bands[$feature_band]+true} ]] || continue + feature_bands[$feature_band]=$sdk_version + sdk_files="$(release_files "$release_content" ".sdks[] | select(.version == \"$sdk_version\")")" + sdk_sources="$(platform_sources "$sdk_files")" + sdk_attrname=sdk_${feature_band//./_} + [[ -v latest_sdk ]] || latest_sdk=$sdk_attrname - echo " + echo " $sdk_attrname = buildNetSdk { version = \"${sdk_version}\"; $sdk_sources inherit packages; };" >> "${result}" - done + done - echo " + echo " sdk_$major_minor_underscore = $latest_sdk; }" >> "${result}" - cp "${result}" "./versions/${sem_version}.nix" - echo "Generated ./versions/${sem_version}.nix" - done + cp "${result}" "./versions/${sem_version}.nix" + echo "Generated ./versions/${sem_version}.nix" + done } main "$@" From accaa2d16369829510b1ba8d58a5738dc0795bc6 Mon Sep 17 00:00:00 2001 From: David McFarland Date: Tue, 11 Jun 2024 20:26:42 -0300 Subject: [PATCH 5/8] dotnet: use local variables in update.sh --- pkgs/development/compilers/dotnet/update.sh | 43 ++++++++++++++------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/pkgs/development/compilers/dotnet/update.sh b/pkgs/development/compilers/dotnet/update.sh index 0622c21f856c..6604966d3578 100755 --- a/pkgs/development/compilers/dotnet/update.sh +++ b/pkgs/development/compilers/dotnet/update.sh @@ -38,12 +38,14 @@ platform_sources () { ) echo "srcs = {" + local kv for kv in "${platforms[@]}"; do local nix_platform=${kv%% *} local ms_platform=${kv##* } + local url hash - local url=$(release_platform_attr "$release_files" "$ms_platform" url) - local hash=$(release_platform_attr "$release_files" "$ms_platform" hash) + url=$(release_platform_attr "$release_files" "$ms_platform" url) + hash=$(release_platform_attr "$release_files" "$ms_platform" hash) [[ -z "$url" || -z "$hash" ]] && continue echo " $nix_platform = { @@ -55,15 +57,13 @@ platform_sources () { } generate_package_list() { - local version pkgs nuget_url - version="$1" + local version="$1" shift - pkgs=( "$@" ) + local pkgs=( "$@" ) nuget_url pkg url hash nuget_url="$(curl -f "https://api.nuget.org/v3/index.json" | jq --raw-output '.resources[] | select(."@type" == "PackageBaseAddress/3.0.0")."@id"')" for pkg in "${pkgs[@]}"; do - local url hash url="${nuget_url}${pkg,,}/${version,,}/${pkg,,}.${version,,}.nupkg" hash="$(nix-prefetch-url "$url")" if [[ -z "$hash" ]]; then @@ -76,8 +76,10 @@ generate_package_list() { } version_older () { - cur_version=$1 - max_version=$2 + local cur_version=$1 + local max_version=$2 + local result + result=$(nix-instantiate -I ../../../../. \ --eval -E "(import ../../../../. {}).lib.versionOlder \"$cur_version\" \"$max_version\"") if [[ "$result" == "true" ]]; then @@ -260,6 +262,7 @@ sdk_packages () { # These packages were removed on .NET 9 if ! version_older "$version" "9"; then local newpkgs=() + local pkg for pkg in "${pkgs[@]}"; do [[ "$pkg" = *Microsoft.NETCore.DotNetHost* ]] || newpkgs+=("$pkg") done @@ -304,6 +307,7 @@ sdk_packages () { } main () { + local pname pname=$(basename "$0") if [[ ! "$*" =~ ^.*[0-9]{1,}\.[0-9]{1,}.*$ ]]; then echo "Usage: $pname [sem-versions] @@ -318,7 +322,7 @@ Examples: for sem_version in "$@"; do echo "Generating ./versions/${sem_version}.nix" - patch_specified=false + local patch_specified=false # Check if a patch was specified as an argument. # If so, generate file for the specific version. # If only x.y version was provided, get the latest patch @@ -331,19 +335,23 @@ Examples: # Make sure the x.y version is properly passed to .NET release metadata url. # Then get the json file and parse it to find the latest patch release. + local major_minor content major_minor_patch major_minor=$(sed 's/^\([0-9]*\.[0-9]*\).*$/\1/' <<< "$sem_version") content=$(curl -sL https://dotnetcli.blob.core.windows.net/dotnet/release-metadata/"$major_minor"/releases.json) major_minor_patch=$([ "$patch_specified" == true ] && echo "$sem_version" || jq -r '."latest-release"' <<< "$content") - major_minor_underscore=${major_minor/./_} + local major_minor_underscore=${major_minor/./_} + local release_content aspnetcore_version runtime_version release_content=$(release "$content" "$major_minor_patch") aspnetcore_version=$(jq -r '."aspnetcore-runtime".version' <<< "$release_content") runtime_version=$(jq -r '.runtime.version' <<< "$release_content") + local -a sdk_versions mapfile -t sdk_versions < <(jq -r '.sdks[] | .version' <<< "$release_content" | sort -rn) # If patch was not specified, check if the package is already the latest version # If it is, exit early if [ "$patch_specified" == false ] && [ -f "./versions/${sem_version}.nix" ]; then + local current_version current_version=$(nix-instantiate --eval -E "(import ./versions/${sem_version}.nix { \ buildAspNetCore = { ... }: {}; \ buildNetSdk = { ... }: {}; \ @@ -356,15 +364,19 @@ Examples: fi fi + local aspnetcore_files runtime_files aspnetcore_files="$(release_files "$release_content" .\"aspnetcore-runtime\")" runtime_files="$(release_files "$release_content" .runtime)" + local channel_version support_phase channel_version=$(jq -r '."channel-version"' <<< "$content") support_phase=$(jq -r '."support-phase"' <<< "$content") + local aspnetcore_sources runtime_sources aspnetcore_sources="$(platform_sources "$aspnetcore_files")" runtime_sources="$(platform_sources "$runtime_files")" + local sdk_packages aspnetcore_packages sdk_packages="$(sdk_packages "${runtime_version}")" aspnetcore_packages="$(aspnetcore_packages "${aspnetcore_version}")" @@ -393,19 +405,20 @@ in rec { $runtime_sources };" > "${result}" - declare -A feature_bands + local -A feature_bands unset latest_sdk for sdk_version in "${sdk_versions[@]}"; do - sdk_base_version=${sdk_version%-*} - feature_band=${sdk_base_version:0:-2}xx + local sdk_base_version=${sdk_version%-*} + local feature_band=${sdk_base_version:0:-2}xx # sometimes one release has e.g. both 8.0.202 and 8.0.203 [[ ! ${feature_bands[$feature_band]+true} ]] || continue feature_bands[$feature_band]=$sdk_version + local sdk_files sdk_sources sdk_files="$(release_files "$release_content" ".sdks[] | select(.version == \"$sdk_version\")")" sdk_sources="$(platform_sources "$sdk_files")" - sdk_attrname=sdk_${feature_band//./_} - [[ -v latest_sdk ]] || latest_sdk=$sdk_attrname + local sdk_attrname=sdk_${feature_band//./_} + [[ -v latest_sdk ]] || local latest_sdk=$sdk_attrname echo " $sdk_attrname = buildNetSdk { From f364437d7bc208033adac313b94d647255f08816 Mon Sep 17 00:00:00 2001 From: David McFarland Date: Fri, 14 Jun 2024 22:53:13 -0300 Subject: [PATCH 6/8] dotnet: add runtime.osx-arm64.Microsoft.DotNet.ILCompiler --- pkgs/development/compilers/dotnet/build-dotnet.nix | 3 ++- pkgs/development/compilers/dotnet/update.sh | 1 + pkgs/development/compilers/dotnet/versions/8.0.nix | 1 + pkgs/development/compilers/dotnet/versions/9.0.nix | 1 + 4 files changed, 5 insertions(+), 1 deletion(-) diff --git a/pkgs/development/compilers/dotnet/build-dotnet.nix b/pkgs/development/compilers/dotnet/build-dotnet.nix index 25bf78d9a054..246cc9ade717 100644 --- a/pkgs/development/compilers/dotnet/build-dotnet.nix +++ b/pkgs/development/compilers/dotnet/build-dotnet.nix @@ -52,7 +52,8 @@ let sigtool = callPackage ./sigtool.nix {}; signAppHost = callPackage ./sign-apphost.nix {}; - hasILCompiler = lib.versionAtLeast version "7"; + hasILCompiler = + lib.versionAtLeast version (if targetRid == "osx-arm64" then "8" else "7"); extraTargets = writeText "extra.targets" ('' diff --git a/pkgs/development/compilers/dotnet/update.sh b/pkgs/development/compilers/dotnet/update.sh index 6604966d3578..486ad2636a0e 100755 --- a/pkgs/development/compilers/dotnet/update.sh +++ b/pkgs/development/compilers/dotnet/update.sh @@ -300,6 +300,7 @@ sdk_packages () { if ! version_older "$version" "8"; then pkgs+=( "Microsoft.NET.ILLink.Tasks" + "runtime.osx-arm64.Microsoft.DotNet.ILCompiler" ) fi diff --git a/pkgs/development/compilers/dotnet/versions/8.0.nix b/pkgs/development/compilers/dotnet/versions/8.0.nix index 28a4cc725525..b9b24b48a5b2 100644 --- a/pkgs/development/compilers/dotnet/versions/8.0.nix +++ b/pkgs/development/compilers/dotnet/versions/8.0.nix @@ -112,6 +112,7 @@ let (fetchNuGet { pname = "runtime.win-arm64.Microsoft.DotNet.ILCompiler"; version = "8.0.6"; sha256 = "0cqm5183as2m3nsl9as00qm9928bani6gflndg0fv73r799k5raz"; }) (fetchNuGet { pname = "runtime.win-x64.Microsoft.DotNet.ILCompiler"; version = "8.0.6"; sha256 = "0yjji845ngsaqxyg2cmngj3vba8v4wyriv0qz4hgn1wbrramml6b"; }) (fetchNuGet { pname = "Microsoft.NET.ILLink.Tasks"; version = "8.0.6"; sha256 = "0slfrm65izibsxg505vr8m4k6n2a2kl4iqyyr9xkgr8541g7rrs5"; }) + (fetchNuGet { pname = "runtime.osx-arm64.Microsoft.DotNet.ILCompiler"; version = "8.0.6"; sha256 = "07y19lzkfr0i122gqbvfwi87jipjvrw4wrm68z01k4k0yh0mk1lj"; }) ]; in rec { release_8_0 = "8.0.6"; diff --git a/pkgs/development/compilers/dotnet/versions/9.0.nix b/pkgs/development/compilers/dotnet/versions/9.0.nix index 8433cc2a8d97..d837cbe88624 100644 --- a/pkgs/development/compilers/dotnet/versions/9.0.nix +++ b/pkgs/development/compilers/dotnet/versions/9.0.nix @@ -76,6 +76,7 @@ let (fetchNuGet { pname = "runtime.win-arm64.Microsoft.DotNet.ILCompiler"; version = "9.0.0-preview.5.24306.7"; sha256 = "1s8m140xbwc2pmyhrrmgfd4r2lppld26m6x3k1kz9gfn7kk4ayjx"; }) (fetchNuGet { pname = "runtime.win-x64.Microsoft.DotNet.ILCompiler"; version = "9.0.0-preview.5.24306.7"; sha256 = "1f9hn43fs25fbzzhrawfjgz56mknsnmhmdgf1f1pqlpfzwb2bvvn"; }) (fetchNuGet { pname = "Microsoft.NET.ILLink.Tasks"; version = "9.0.0-preview.5.24306.7"; sha256 = "0ck2agia8lmhvwvzh73yh2ydkqfz4g21404cv4qxjj28l618cjl5"; }) + (fetchNuGet { pname = "runtime.osx-arm64.Microsoft.DotNet.ILCompiler"; version = "9.0.0-preview.5.24306.7"; sha256 = "1xdnyrbxdm9acnldinb4xcdk0jy32jx6rgrqwcsqh4a6xzdz7y05"; }) ]; in rec { release_9_0 = "9.0.0-preview.5"; From 1532eab9b966b95dbd0f106c4322f57cc7cf21c1 Mon Sep 17 00:00:00 2001 From: David McFarland Date: Sun, 7 Jul 2024 19:21:03 -0300 Subject: [PATCH 7/8] patch-nupkgs: fix ilcompiler on darwin --- .../compilers/dotnet/patch-nupkgs.nix | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/pkgs/development/compilers/dotnet/patch-nupkgs.nix b/pkgs/development/compilers/dotnet/patch-nupkgs.nix index 572211b1b378..4fcc53015c90 100644 --- a/pkgs/development/compilers/dotnet/patch-nupkgs.nix +++ b/pkgs/development/compilers/dotnet/patch-nupkgs.nix @@ -24,7 +24,7 @@ let openssl ] ++ lib.optional stdenv.isLinux lttng-ust_2_12); -in writeShellScriptBin "patch-nupkgs" '' +in writeShellScriptBin "patch-nupkgs" ('' set -euo pipefail shopt -s nullglob isELF() { @@ -71,4 +71,16 @@ in writeShellScriptBin "patch-nupkgs" '' touch .nix-patched popd done -'' +'' + lib.optionalString stdenv.isDarwin '' + for x in microsoft.dotnet.ilcompiler/*; do + # .nupkg.metadata is written last, so we know the packages is complete + [[ -d "$x" ]] && [[ -f "$x"/.nupkg.metadata ]] \ + && [[ ! -f "$x"/.nix-patched ]] || continue + echo "Patching package $x" + pushd "$x" + sed -i 's: -no_code_signature_warning::g' build/Microsoft.NETCore.Native.targets + sed -i 's:Include="-ld_classic"::g' build/Microsoft.NETCore.Native.Unix.targets + touch .nix-patched + popd + done +'') From f535b0c6613d63a0016712c3ef0b2f8d146b8f06 Mon Sep 17 00:00:00 2001 From: David McFarland Date: Sat, 30 Mar 2024 11:37:54 -0300 Subject: [PATCH 8/8] dotnet: add aot test --- pkgs/development/compilers/dotnet/common.nix | 56 ++++++++++++++++---- 1 file changed, 46 insertions(+), 10 deletions(-) diff --git a/pkgs/development/compilers/dotnet/common.nix b/pkgs/development/compilers/dotnet/common.nix index f0a591672d1a..2fea0e2773b1 100644 --- a/pkgs/development/compilers/dotnet/common.nix +++ b/pkgs/development/compilers/dotnet/common.nix @@ -1,12 +1,19 @@ # TODO: switch to stdenvNoCC { stdenv +, stdenvNoCC , lib , writeText , testers , runCommand +, runCommandWith , expect , curl , installShellFiles +, callPackage +, zlib +, swiftPackages +, darwin +, icu }: type: args: stdenv.mkDerivation (finalAttrs: args // { doInstallCheck = true; @@ -43,9 +50,11 @@ mkDotnetTest = { name, + stdenv ? stdenvNoCC, template, usePackageSource ? false, build, + buildInputs ? [], # TODO: use correct runtimes instead of sdk runtime ? finalAttrs.finalPackage, runInputs ? [], @@ -54,19 +63,20 @@ }: let sdk = finalAttrs.finalPackage; - built = runCommand "dotnet-test-${name}" { - buildInputs = [ sdk ]; - # make sure ICU works in a sandbox - propagatedSandboxProfile = toString sdk.__propagatedSandboxProfile + '' - (allow network-inbound (local ip)) - (allow mach-lookup (global-name "com.apple.FSEvents")) - ''; + built = runCommandWith { + name = "dotnet-test-${name}"; + inherit stdenv; + derivationArgs = { + buildInputs = [ sdk ] ++ buildInputs; + # make sure ICU works in a sandbox + propagatedSandboxProfile = toString sdk.__propagatedSandboxProfile; + }; } ('' HOME=$PWD/.home dotnet new nugetconfig dotnet nuget disable source nuget '' + lib.optionalString usePackageSource '' - dotnet nuget add source ${finalAttrs.finalPackage.packages} + dotnet nuget add source ${sdk.packages} '' + '' dotnet new ${template} -n test -o . '' + build); @@ -96,6 +106,8 @@ [[ "$output" =~ Hello,?\ World! ]] && touch "$out" ''; + patchNupkgs = callPackage ./patch-nupkgs.nix {}; + in { version = testers.testVersion ({ package = finalAttrs.finalPackage; @@ -103,7 +115,7 @@ command = "dotnet --info"; }); } - // lib.optionalAttrs (type == "sdk") { + // lib.optionalAttrs (type == "sdk") ({ console = mkDotnetTest { name = "console"; template = "console"; @@ -165,6 +177,30 @@ ''; runAllowNetworking = true; }; - } // args.passthru.tests or {}; + } // lib.optionalAttrs finalAttrs.finalPackage.hasILCompiler { + aot = mkDotnetTest { + name = "aot"; + stdenv = if stdenv.isDarwin then swiftPackages.stdenv else stdenv; + template = "console"; + usePackageSource = true; + buildInputs = + [ patchNupkgs + zlib + ] ++ lib.optional stdenv.isDarwin (with darwin; with apple_sdk.frameworks; [ + swiftPackages.swift + Foundation + CryptoKit + GSS + ICU + ]); + build = '' + dotnet restore -p:PublishAot=true + patch-nupkgs .home/.nuget/packages + dotnet publish -p:PublishAot=true -o $out/bin + ''; + runtime = null; + run = checkConsoleOutput "$src/bin/test"; + }; + }) // args.passthru.tests or {}; } // args.passthru or {}; })