diff --git a/.abf.yml b/.abf.yml index f3b3485..f0291e7 100644 --- a/.abf.yml +++ b/.abf.yml @@ -1,4 +1,3 @@ sources: - dotnet-v3.1.112-SDK.tar.gz: e4b887e6ae07247a64ce50689605c46f50a98da1 - dotnet-v3.1.118-SDK-original.tar.gz: 2f4fac048fda5cf19f04947ef7b509271db2f3db - dotnet-v3.1.118-SDK.tar.gz: 1b3240e054b9d1872aa043216755fe29c34e748a + dotnet-v6.0.106-x64-bootstrap.tar.xz: 8c726934c554821d15a759614d402db0b9afeadc + dotnet-v6.0.106.tar.gz: 8245cffa114bb13d2dd3eed9b8b48e7e1dc444c5 diff --git a/RID-ROSA.patch b/RID-ROSA.patch deleted file mode 100644 index d54c870..0000000 --- a/RID-ROSA.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- a/tools-local/tasks/Microsoft.DotNet.SourceBuild.Tasks.XPlat/PublishCoreSetupBinaries.cs 2021-08-31 16:02:07.573333299 +0300 -+++ b/tools-local/tasks/Microsoft.DotNet.SourceBuild.Tasks.XPlat/PublishCoreSetupBinaries.cs 2021-08-31 16:07:21.936666632 +0300 -@@ -49,6 +49,14 @@ - { - version = version.Substring(0, version.Length - "-osx".Length); - } -+ if (version.Contains("-rosa.2021.1")) -+ { -+ version = version.Substring(0, version.IndexOf("-rosa.2021.1")); -+ } -+ if (version.Contains("-rosa.2019.05")) -+ { -+ version = version.Substring(0, version.IndexOf("-rosa.2019.05")); -+ } - if (version.Contains("-ubuntu")) - { - version = version.Substring(0, version.IndexOf("-ubuntu")); diff --git a/RuntimeIdentifierGraph-Rosa.patch b/RuntimeIdentifierGraph-Rosa.patch deleted file mode 100644 index cd0b01d..0000000 --- a/RuntimeIdentifierGraph-Rosa.patch +++ /dev/null @@ -1,47 +0,0 @@ -diff --git a/sdk/3.1.118/RuntimeIdentifierGraph.json b/sdk/3.1.118/RuntimeIdentifierGraph.json-diff -index 627a6a3..f834806 100644 ---- a/sdk/3.1.118/RuntimeIdentifierGraph.json -+++ b/sdk/3.1.118/RuntimeIdentifierGraph.json-diff -@@ -1,5 +1,35 @@ - { - "runtimes": { -+ "rosa.2021.1": { -+ "#import": [ -+ "linux" -+ ] -+ }, -+ "rosa.2021.1-arm64": { -+ "#import": [ -+ "linux-arm64" -+ ] -+ }, -+ "rosa.2021.1-x64": { -+ "#import": [ -+ "linux-x64" -+ ] -+ }, -+ "rosa.2019.05": { -+ "#import": [ -+ "linux" -+ ] -+ }, -+ "rosa.2019.05-arm64": { -+ "#import": [ -+ "linux-arm64" -+ ] -+ }, -+ "rosa.2019.05-x64": { -+ "#import": [ -+ "linux-x64" -+ ] -+ }, - "alpine": { - "#import": [ - "linux-musl" -@@ -2368,4 +2398,4 @@ - ] - } - } --} -\ No newline at end of file -+} diff --git a/arcade-no-apphost.patch b/arcade-no-apphost.patch new file mode 100644 index 0000000..cec03a1 --- /dev/null +++ b/arcade-no-apphost.patch @@ -0,0 +1,36 @@ +Index: a/src/Microsoft.DotNet.GitSync.CommitManager/Microsoft.DotNet.GitSync.CommitManager.csproj +=================================================================== +--- a/src/Microsoft.DotNet.GitSync.CommitManager/Microsoft.DotNet.GitSync.CommitManager.csproj ++++ b/src/Microsoft.DotNet.GitSync.CommitManager/Microsoft.DotNet.GitSync.CommitManager.csproj +@@ -5,6 +5,7 @@ + netcoreapp3.1 + latest + true ++ false + + + +Index: a/src/Microsoft.DotNet.SwaggerGenerator/Microsoft.DotNet.SwaggerGenerator.CmdLine/Microsoft.DotNet.SwaggerGenerator.CmdLine.csproj +=================================================================== +--- a/src/Microsoft.DotNet.SwaggerGenerator/Microsoft.DotNet.SwaggerGenerator.CmdLine/Microsoft.DotNet.SwaggerGenerator.CmdLine.csproj ++++ b/src/Microsoft.DotNet.SwaggerGenerator/Microsoft.DotNet.SwaggerGenerator.CmdLine/Microsoft.DotNet.SwaggerGenerator.CmdLine.csproj +@@ -9,6 +9,7 @@ + dotnet-swaggergen + false + true ++ false + + + +Index: a/src/Microsoft.DotNet.XUnitConsoleRunner/src/Microsoft.DotNet.XUnitConsoleRunner.csproj +=================================================================== +--- a/src/Microsoft.DotNet.XUnitConsoleRunner/src/Microsoft.DotNet.XUnitConsoleRunner.csproj ++++ b/src/Microsoft.DotNet.XUnitConsoleRunner/src/Microsoft.DotNet.XUnitConsoleRunner.csproj +@@ -11,6 +11,7 @@ + 2.5.1 + true + Major ++ false + + + diff --git a/build-arm64-bootstrap-tarball b/build-arm64-bootstrap-tarball new file mode 100755 index 0000000..9f1cc7d --- /dev/null +++ b/build-arm64-bootstrap-tarball @@ -0,0 +1,43 @@ +#!/bin/bash + +set -euo pipefail + +set -x + +bootstrap_dir=$(readlink -f "$1") + +version=$(jq -r '.tools.dotnet' "$bootstrap_dir"/global.json) + +date=$(date +%F) + +mkdir -p "dotnet-arm64-prebuilts-$date" + +pushd "dotnet-arm64-prebuilts-$date" + +# Getting the exact matching rc2 version gets us an arm64 build without this +# fix https://github.com/dotnet/runtime/pull/58959. That causes a segfault on +# startup. +# wget "https://dotnetcli.azureedge.net/dotnet/Sdk/$version/dotnet-sdk-$version-linux-arm64.tar.gz" + +wget https://aka.ms/dotnet/6.0.1XX-rc2/daily/dotnet-sdk-linux-arm64.tar.gz + +mapfile -t linux_x64_packages < <(tar tf "$bootstrap_dir"/packages/archive/Private.SourceBuilt.Artifacts.*.tar.gz | grep linux-x64) + +for package in "${linux_x64_packages[@]}"; do + if [[ "$package" = *'.Intermediate.'* ]]; then + continue; + fi + + filename=${package##*/} + name=${filename%.6.0*} + arm_name=${name/linux-x64/linux-arm64} + version="6.0${filename##*6.0}" + version=${version%.*} + + nappo download --verbose "$arm_name" "$version" + +done + +popd + +tar czf "dotnet-arm64-prebuilts-$date.tar.gz" "dotnet-arm64-prebuilts-$date" diff --git a/build-bootstrap-tarball b/build-bootstrap-tarball deleted file mode 100755 index d3f3547..0000000 --- a/build-bootstrap-tarball +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash - -set -euo pipefail - -set -x - -sdk_version=3.1.105 - -arch=$(uname -m) -if [[ $arch == "x86_64" ]]; then - arch=x64 -elif [[ $arch == "aarch64" ]]; then - arch=arm64 -fi - -if rpm -qa | grep libunwind; then - echo "error: libunwind is installed. Not a good idea for bootstrapping." - exit 1 -fi -if rpm -qa | grep dotnet ; then - echo "error: dotnet is installed. Not a good idea for bootstrapping." - exit 1 -fi -if [ -d /usr/lib/dotnet ] || [ -d /usr/lib64/dotnet ] || [ -d /usr/share/dotnet ] ; then - echo "error: one of /usr/lib/dotnet /usr/lib64/dotnet or /usr/share/dotnet/ exists. Not a good idea for bootstrapping." - exit 1 -fi -if command -v dotnet ; then - echo "error: dotnet is in $PATH. Not a good idea for bootstrapping." - exit 1 -fi - -if [ ! -d dotnet-source-build-tarball ]; then - if [ ! -d source-build ]; then - git clone https://github.com/dotnet/source-build - fi - pushd source-build - sed -i -e 's|cmakeargs -DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE||' repos/coreclr.common.props - git clean -xdf - ./build-source-tarball.sh ../dotnet-source-build-tarball/ -- -p:DownloadSourceBuildReferencePackagesTimeoutSeconds=100000 - popd -fi - -rm -rf dotnet-v${sdk_version}-SDK dotnet-v${sdk_version}-SDK.tar.gz - -cp -a dotnet-source-build-tarball dotnet-v${sdk_version}-SDK -cp -a source-build/artifacts/$arch/Release/Private.SourceBuilt.Artifacts.*.tar.gz dotnet-v${sdk_version}-SDK/packages/archive/Private.SourceBuilt.Artifacts.*.tar.gz - -tar czf dotnet-v${sdk_version}-SDK-$arch.tar.gz dotnet-v${sdk_version}-SDK - diff --git a/build-coreclr-clang10.patch b/build-coreclr-clang10.patch deleted file mode 100644 index a817ba4..0000000 --- a/build-coreclr-clang10.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/configurecompiler.cmake b/configurecompiler.cmake -index d769e82f57..4936c8b00d 100644 ---- a/configurecompiler.cmake -+++ b/configurecompiler.cmake -@@ -474,6 +474,7 @@ if (CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-Wno-unused-variable) - add_compile_options(-Wno-unused-value) - add_compile_options(-Wno-unused-function) -+ add_compile_options(-Wno-error=misleading-indentation) - - #These seem to indicate real issues - add_compile_options($<$:-Wno-invalid-offsetof>) diff --git a/build-dotnet-tarball b/build-dotnet-tarball index c7e5257..e45d0e4 100755 --- a/build-dotnet-tarball +++ b/build-dotnet-tarball @@ -1,11 +1,11 @@ #!/bin/bash # Usage: -# build-dotnet-tarball +# build-dotnet-tarball [--bootstrap] # -# Creates a source archive from a tag (or commit) at github.com/dotnet/source-build +# Creates a source archive from a tag (or commit) at github.com/dotnet/installer -# Source-build is a little strange, we need to clone it, check out the +# installer is a little strange, we need to clone it, check out the # tag, build it and then create a tarball from the archive directory # it creates. Also, it is likely that the source archive is only # buildable on the OS it was initially created in. @@ -13,32 +13,37 @@ set -euo pipefail IFS=$'\n\t' -print_usage() { +function print_usage { echo "Usage:" - echo "$0 " + echo "$0 [--bootstrap] " echo - echo "Creates a source archive from a tag at https://github.com/dotnet/source-build" + echo "Creates a source archive from a tag at https://github.com/dotnet/installer" + echo "" + echo " --bootstrap build a source tarball usable for bootstrapping .NET" } -clean_dotnet_cache() { +function clean_dotnet_cache { rm -rf ~/.aspnet ~/.dotnet/ ~/.nuget/ ~/.local/share/NuGet ~/.templateengine rm -rf /tmp/NuGet /tmp/NuGetScratch /tmp/.NETCore* /tmp/.NETStandard* /tmp/.dotnet /tmp/dotnet.* /tmp/clr-debug-pipe* /tmp/Razor-Server /tmp/CoreFxPipe* /tmp/VBCSCompiler /tmp/.NETFramework* } +function check_bootstrap_environment { + if rpm -qa | grep dotnet ; then + echo "error: dotnet is installed. Not a good idea for bootstrapping." + exit 1 + fi + if [ -d /usr/lib/dotnet ] || [ -d /usr/lib64/dotnet ] || [ -d /usr/share/dotnet ] ; then + echo "error: one of /usr/lib/dotnet /usr/lib64/dotnet or /usr/share/dotnet/ exists. Not a good idea for bootstrapping." + exit 1 + fi + if command -v dotnet ; then + echo "error: dotnet is in $PATH. Not a good idea for bootstrapping." + exit 1 + fi +} + function runtime_id { - declare -A archmap - archmap=( - ["aarch64"]="arm64" - ["amd64"]="x64" - ["armv8l"]="arm" - ["i686"]="x86" - ["i386"]="x86" - ["x86_64"]="x64" - ) - - arch=${archmap["$(uname -m)"]} - source /etc/os-release case "${ID}" in # Remove the RHEL minor version @@ -50,10 +55,30 @@ function runtime_id { echo "${ID}.${rid_version}-${arch}" } +build_bootstrap=false + +declare -A archmap +archmap=( + ["aarch64"]="arm64" + ["amd64"]="x64" + ["armv8l"]="arm" + ["i686"]="x86" + ["i386"]="x86" + ["x86_64"]="x64" +) + +arch=${archmap["$(uname -m)"]} + + positional_args=() while [[ "$#" -gt 0 ]]; do arg="${1}" case "${arg}" in + --bootstrap) + check_bootstrap_environment + build_bootstrap=true + shift + ;; -h|--help) print_usage exit 0 @@ -77,41 +102,33 @@ set -x dir_name="dotnet-${tag}" unmodified_tarball_name="${dir_name}-original" tarball_name="${dir_name}" +tarball_suffix=.tar.gz -if [ -f "${tarball_name}.tar.gz" ]; then - echo "error: ${tarball_name}.tar.gz already exists" +if [[ ${build_bootstrap} == true ]]; then + unmodified_tarball_name="${unmodified_tarball_name}-${arch}-bootstrap" + tarball_name="${tarball_name}-${arch}-bootstrap" + tarball_suffix=.tar.xz +fi + +if [ -f "${tarball_name}${tarball_suffix}" ]; then + echo "error: ${tarball_name}${tarball_suffix} already exists" exit 1 fi if [ ! -f "${unmodified_tarball_name}.tar.gz" ]; then temp_dir=$(mktemp -d -p "$(pwd)") pushd "${temp_dir}" - git clone https://github.com/dotnet/source-build - pushd source-build - git checkout "${tag}" + git clone https://github.com/dotnet/installer --branch "${tag}" --depth 1 + pushd installer git submodule update --init --recursive clean_dotnet_cache - sed -i -e 's|cmakeargs -DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE||' repos/coreclr.proj - patch -p1 < ../../RID-ROSA.patch - mkdir -p patches/cli - cp ../../dotnet-pull10652.patch patches/cli/ - mkdir -p patches/coreclr/ - cp ../../build-coreclr-clang10.patch patches/coreclr/ - cp ../../coreclr-libunwind-fno-common.patch patches/coreclr/ - mkdir -p patches/corefx/ - cp ../../corefx-42900-clang-10.patch patches/corefx/ - mkdir -p patches/aspnetcore/ - cp ../../disable-aspnetcore-targetingpackoverride.patch patches/aspnetcore/ - ./build.sh \ - /p:ArchiveDownloadedPackages=true \ - /p:DownloadSourceBuildReferencePackagesTimeoutSeconds=100000 \ - /p:DownloadSourceBuildReferencePackagesTimeoutSeconds=100000 - - ./build-source-tarball.sh "${unmodified_tarball_name}" --skip-build - popd + mkdir -p "../${unmodified_tarball_name}" + ./build.sh /p:ArcadeBuildTarball=true /p:TarballDir="$(readlink -f ../"${unmodified_tarball_name}")" popd - tar czf "${unmodified_tarball_name}.tar.gz" -C "${temp_dir}/source-build" "${unmodified_tarball_name}" + popd + + tar cf "${unmodified_tarball_name}.tar.gz" -C "${temp_dir}" "${unmodified_tarball_name}" rm -rf "${temp_dir}" fi @@ -121,14 +138,68 @@ tar xf "${unmodified_tarball_name}.tar.gz" mv "${unmodified_tarball_name}" "${tarball_name}" pushd "${tarball_name}" - Remove files with funny licenses, crypto implementations and other - not-very-useful artifacts to reduce tarball size -find -type f -iname '*.tar.gz' -delete -rm -rf .dotnet -rm -r src/aspnetcore.*/src/SignalR/clients/java/signalr/gradle* -find src/aspnetcore.*/src -type d -name samples -print0 | xargs -0 rm -r -rm -r src/NuGet.Client.*/test/EndToEnd/ProjectTemplates/NetCoreWebApplication1.0.zip -find src/coreclr.*/ -depth -name tests -print0 | xargs -0 rm -r + +if [[ ${build_bootstrap} == true ]]; then + if [[ "$(wc -l < packages/archive/archiveArtifacts.txt)" != 1 ]]; then + echo "error: this is not going to work! update $0 to fix this issue." + exit 1 + fi + + pushd packages/archive/ + curl -O $(cat archiveArtifacts.txt) + popd + + mkdir foo + pushd foo + + tar xf ../packages/archive/Private.SourceBuilt.Artifacts.*.tar.gz + sed -i -E 's|6.0.0-rtm.21521.16.0.0-rtm.21521.46.0.0-rtm.21521.16.0.0-rtm.21521.4 +Date: Thu, 9 Sep 2021 12:11:39 -0400 +Subject: [PATCH] [ArPow] Use --work-tree with git apply + +This makes things work better in a source-tarball build, where there may +be a .git directory but it's for a different repo than command-line-api. +--- + eng/SourceBuild.props | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/eng/SourceBuild.props b/eng/SourceBuild.props +index 6cc85018..5e223747 100644 +--- a/eng/SourceBuild.props ++++ b/eng/SourceBuild.props +@@ -15,7 +15,7 @@ + + + + +-- +2.31.1 + diff --git a/coreclr-libunwind-fno-common.patch b/coreclr-libunwind-fno-common.patch deleted file mode 100644 index 5a1d407..0000000 --- a/coreclr-libunwind-fno-common.patch +++ /dev/null @@ -1,402 +0,0 @@ -From 29e17d8d2ccbca07c423e3089a6d5ae8a1c9cb6e Mon Sep 17 00:00:00 2001 -From: Yichao Yu -Date: Tue, 31 Mar 2020 00:43:32 -0400 -Subject: [PATCH] Fix compilation with -fno-common. - -Making all other archs consistent with IA64 which should not have this problem. -Also move the FIXME to the correct place. - -Also add some minimum comments about this... ---- - src/aarch64/Ginit.c | 15 +++++++-------- - src/arm/Ginit.c | 15 +++++++-------- - src/coredump/_UPT_get_dyn_info_list_addr.c | 5 +++++ - src/hppa/Ginit.c | 15 +++++++-------- - src/ia64/Ginit.c | 1 + - src/mi/Gfind_dynamic_proc_info.c | 1 + - src/mips/Ginit.c | 15 +++++++-------- - src/ppc32/Ginit.c | 11 +++++++---- - src/ppc64/Ginit.c | 11 +++++++---- - src/ptrace/_UPT_get_dyn_info_list_addr.c | 5 +++++ - src/s390x/Ginit.c | 15 +++++++-------- - src/sh/Ginit.c | 15 +++++++-------- - src/tilegx/Ginit.c | 15 +++++++-------- - src/x86/Ginit.c | 15 +++++++-------- - src/x86_64/Ginit.c | 15 +++++++-------- - 15 files changed, 89 insertions(+), 80 deletions(-) - -diff --git a/src/pal/src/libunwind/src/aarch64/Ginit.c b/src/pal/src/libunwind/src/aarch64/Ginit.c -index dec235c82..35389762f 100644 ---- a/src/pal/src/libunwind/src/aarch64/Ginit.c -+++ b/src/pal/src/libunwind/src/aarch64/Ginit.c -@@ -61,13 +61,6 @@ tdep_uc_addr (unw_tdep_context_t *uc, int reg) - - # endif /* UNW_LOCAL_ONLY */ - --HIDDEN unw_dyn_info_list_t _U_dyn_info_list; -- --/* XXX fix me: there is currently no way to locate the dyn-info list -- by a remote unwinder. On ia64, this is done via a special -- unwind-table entry. Perhaps something similar can be done with -- DWARF2 unwind info. */ -- - static void - put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) - { -@@ -78,7 +71,13 @@ static int - get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, - void *arg) - { -- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; -+#ifndef UNW_LOCAL_ONLY -+# pragma weak _U_dyn_info_list_addr -+ if (!_U_dyn_info_list_addr) -+ return -UNW_ENOINFO; -+#endif -+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. -+ *dyn_info_list_addr = _U_dyn_info_list_addr (); - return 0; - } - -diff --git a/src/pal/src/libunwind/src/arm/Ginit.c b/ssrc/pal/src/libunwind/src/arm/Ginit.c -index 2720d063a..0bac0d72d 100644 ---- a/src/pal/src/libunwind/src/arm/Ginit.c -+++ b/src/pal/src/libunwind/src/arm/Ginit.c -@@ -57,18 +57,17 @@ tdep_uc_addr (unw_tdep_context_t *uc, int reg) - - # endif /* UNW_LOCAL_ONLY */ - --HIDDEN unw_dyn_info_list_t _U_dyn_info_list; -- --/* XXX fix me: there is currently no way to locate the dyn-info list -- by a remote unwinder. On ia64, this is done via a special -- unwind-table entry. Perhaps something similar can be done with -- DWARF2 unwind info. */ -- - static int - get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, - void *arg) - { -- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; -+#ifndef UNW_LOCAL_ONLY -+# pragma weak _U_dyn_info_list_addr -+ if (!_U_dyn_info_list_addr) -+ return -UNW_ENOINFO; -+#endif -+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. -+ *dyn_info_list_addr = _U_dyn_info_list_addr (); - return 0; - } - -diff --git a/src/pal/src/libunwind/src/coredump/_UPT_get_dyn_info_list_addr.c b/src/pal/src/libunwind/src/coredump/_UPT_get_dyn_info_list_addr.c -index 0d1190556..739ed0569 100644 ---- a/src/pal/src/libunwind/src/coredump/_UPT_get_dyn_info_list_addr.c -+++ b/src/pal/src/libunwind/src/coredump/_UPT_get_dyn_info_list_addr.c -@@ -74,6 +74,11 @@ get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg, - - #else - -+/* XXX fix me: there is currently no way to locate the dyn-info list -+ by a remote unwinder. On ia64, this is done via a special -+ unwind-table entry. Perhaps something similar can be done with -+ DWARF2 unwind info. */ -+ - static inline int - get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg, - int *countp) -diff --git a/src/pal/src/libunwind/src/hppa/Ginit.c b/src/pal/src/libunwind/src/hppa/Ginit.c -index 461e4b93d..265455a68 100644 ---- a/src/pal/src/libunwind/src/hppa/Ginit.c -+++ b/src/pal/src/libunwind/src/hppa/Ginit.c -@@ -64,13 +64,6 @@ _Uhppa_uc_addr (ucontext_t *uc, int reg) - - # endif /* UNW_LOCAL_ONLY */ - --HIDDEN unw_dyn_info_list_t _U_dyn_info_list; -- --/* XXX fix me: there is currently no way to locate the dyn-info list -- by a remote unwinder. On ia64, this is done via a special -- unwind-table entry. Perhaps something similar can be done with -- DWARF2 unwind info. */ -- - static void - put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) - { -@@ -81,7 +74,13 @@ static int - get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, - void *arg) - { -- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; -+#ifndef UNW_LOCAL_ONLY -+# pragma weak _U_dyn_info_list_addr -+ if (!_U_dyn_info_list_addr) -+ return -UNW_ENOINFO; -+#endif -+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. -+ *dyn_info_list_addr = _U_dyn_info_list_addr (); - return 0; - } - -diff --git a/src/pal/src/libunwind/src/ia64/Ginit.c b/src/pal/src/libunwind/src/ia64/Ginit.c -index b09a2ad57..8601bb3ca 100644 ---- a/src/pal/src/libunwind/src/ia64/Ginit.c -+++ b/src/pal/src/libunwind/src/ia64/Ginit.c -@@ -68,6 +68,7 @@ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, - if (!_U_dyn_info_list_addr) - return -UNW_ENOINFO; - #endif -+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. - *dyn_info_list_addr = _U_dyn_info_list_addr (); - return 0; - } -diff --git a/src/pal/src/libunwind/src/mi/Gfind_dynamic_proc_info.c b/src/pal/src/libunwind/src/mi/Gfind_dynamic_proc_info.c -index 98d350128..2e7c62e5e 100644 ---- a/src/pal/src/libunwind/src/mi/Gfind_dynamic_proc_info.c -+++ b/src/pal/src/libunwind/src/mi/Gfind_dynamic_proc_info.c -@@ -49,6 +49,7 @@ local_find_proc_info (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pi, - return -UNW_ENOINFO; - #endif - -+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. - list = (unw_dyn_info_list_t *) (uintptr_t) _U_dyn_info_list_addr (); - for (di = list->first; di; di = di->next) - if (ip >= di->start_ip && ip < di->end_ip) -diff --git a/src/pal/src/libunwind/src/mips/Ginit.c b/src/pal/src/libunwind/src/mips/Ginit.c -index 3df170c75..bf7a8f5a8 100644 ---- a/src/pal/src/libunwind/src/mips/Ginit.c -+++ b/src/pal/src/libunwind/src/mips/Ginit.c -@@ -69,13 +69,6 @@ tdep_uc_addr (ucontext_t *uc, int reg) - - # endif /* UNW_LOCAL_ONLY */ - --HIDDEN unw_dyn_info_list_t _U_dyn_info_list; -- --/* XXX fix me: there is currently no way to locate the dyn-info list -- by a remote unwinder. On ia64, this is done via a special -- unwind-table entry. Perhaps something similar can be done with -- DWARF2 unwind info. */ -- - static void - put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) - { -@@ -86,7 +79,13 @@ static int - get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, - void *arg) - { -- *dyn_info_list_addr = (unw_word_t) (intptr_t) &_U_dyn_info_list; -+#ifndef UNW_LOCAL_ONLY -+# pragma weak _U_dyn_info_list_addr -+ if (!_U_dyn_info_list_addr) -+ return -UNW_ENOINFO; -+#endif -+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. -+ *dyn_info_list_addr = _U_dyn_info_list_addr (); - return 0; - } - -diff --git a/src/pal/src/libunwind/src/ppc32/Ginit.c b/src/pal/src/libunwind/src/ppc32/Ginit.c -index ba302448a..7b4545580 100644 ---- a/src/pal/src/libunwind/src/ppc32/Ginit.c -+++ b/src/pal/src/libunwind/src/ppc32/Ginit.c -@@ -91,9 +91,6 @@ tdep_uc_addr (ucontext_t *uc, int reg) - - # endif /* UNW_LOCAL_ONLY */ - --HIDDEN unw_dyn_info_list_t _U_dyn_info_list; -- -- - static void - put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) - { -@@ -104,7 +101,13 @@ static int - get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, - void *arg) - { -- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; -+#ifndef UNW_LOCAL_ONLY -+# pragma weak _U_dyn_info_list_addr -+ if (!_U_dyn_info_list_addr) -+ return -UNW_ENOINFO; -+#endif -+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. -+ *dyn_info_list_addr = _U_dyn_info_list_addr (); - return 0; - } - -diff --git a/src/pal/src/libunwind/src/ppc64/Ginit.c b/src/pal/src/libunwind/src/ppc64/Ginit.c -index 4c88cd6e7..7bfb395a7 100644 ---- a/src/pal/src/libunwind/src/ppc64/Ginit.c -+++ b/src/pal/src/libunwind/src/ppc64/Ginit.c -@@ -95,9 +95,6 @@ tdep_uc_addr (ucontext_t *uc, int reg) - - # endif /* UNW_LOCAL_ONLY */ - --HIDDEN unw_dyn_info_list_t _U_dyn_info_list; -- -- - static void - put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) - { -@@ -108,7 +105,13 @@ static int - get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, - void *arg) - { -- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; -+#ifndef UNW_LOCAL_ONLY -+# pragma weak _U_dyn_info_list_addr -+ if (!_U_dyn_info_list_addr) -+ return -UNW_ENOINFO; -+#endif -+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. -+ *dyn_info_list_addr = _U_dyn_info_list_addr (); - return 0; - } - -diff --git a/src/pal/src/libunwind/src/ptrace/_UPT_get_dyn_info_list_addr.c b/src/pal/src/libunwind/src/ptrace/_UPT_get_dyn_info_list_addr.c -index cc5ed0441..16671d453 100644 ---- a/src/pal/src/libunwind/src/ptrace/_UPT_get_dyn_info_list_addr.c -+++ b/src/pal/src/libunwind/src/ptrace/_UPT_get_dyn_info_list_addr.c -@@ -71,6 +71,11 @@ get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg, - - #else - -+/* XXX fix me: there is currently no way to locate the dyn-info list -+ by a remote unwinder. On ia64, this is done via a special -+ unwind-table entry. Perhaps something similar can be done with -+ DWARF2 unwind info. */ -+ - static inline int - get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg, - int *countp) -diff --git a/src/pal/src/libunwind/src/sh/Ginit.c b/src/pal/src/libunwind/src/sh/Ginit.c -index 52988a721..9fe96d2bd 100644 ---- a/src/pal/src/libunwind/src/sh/Ginit.c -+++ b/src/pal/src/libunwind/src/sh/Ginit.c -@@ -58,13 +58,6 @@ tdep_uc_addr (ucontext_t *uc, int reg) - - # endif /* UNW_LOCAL_ONLY */ - --HIDDEN unw_dyn_info_list_t _U_dyn_info_list; -- --/* XXX fix me: there is currently no way to locate the dyn-info list -- by a remote unwinder. On ia64, this is done via a special -- unwind-table entry. Perhaps something similar can be done with -- DWARF2 unwind info. */ -- - static void - put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) - { -@@ -75,7 +68,13 @@ static int - get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, - void *arg) - { -- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; -+#ifndef UNW_LOCAL_ONLY -+# pragma weak _U_dyn_info_list_addr -+ if (!_U_dyn_info_list_addr) -+ return -UNW_ENOINFO; -+#endif -+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. -+ *dyn_info_list_addr = _U_dyn_info_list_addr (); - return 0; - } - -diff --git a/src/pal/src/libunwind/src/tilegx/Ginit.c b/src/pal/src/libunwind/src/tilegx/Ginit.c -index 7564a558b..925e64132 100644 ---- a/src/pal/src/libunwind/src/tilegx/Ginit.c -+++ b/src/pal/src/libunwind/src/tilegx/Ginit.c -@@ -64,13 +64,6 @@ tdep_uc_addr (ucontext_t *uc, int reg) - - # endif /* UNW_LOCAL_ONLY */ - --HIDDEN unw_dyn_info_list_t _U_dyn_info_list; -- --/* XXX fix me: there is currently no way to locate the dyn-info list -- by a remote unwinder. On ia64, this is done via a special -- unwind-table entry. Perhaps something similar can be done with -- DWARF2 unwind info. */ -- - static void - put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) - { -@@ -81,7 +74,13 @@ static int - get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, - void *arg) - { -- *dyn_info_list_addr = (unw_word_t) (intptr_t) &_U_dyn_info_list; -+#ifndef UNW_LOCAL_ONLY -+# pragma weak _U_dyn_info_list_addr -+ if (!_U_dyn_info_list_addr) -+ return -UNW_ENOINFO; -+#endif -+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. -+ *dyn_info_list_addr = _U_dyn_info_list_addr (); - return 0; - } - -diff --git a/src/pal/src/libunwind/src/x86/Ginit.c b/src/pal/src/libunwind/src/x86/Ginit.c -index f6b8dc27d..3cec74a21 100644 ---- a/src/pal/src/libunwind/src/x86/Ginit.c -+++ b/src/pal/src/libunwind/src/x86/Ginit.c -@@ -54,13 +54,6 @@ tdep_uc_addr (ucontext_t *uc, int reg) - - # endif /* UNW_LOCAL_ONLY */ - --HIDDEN unw_dyn_info_list_t _U_dyn_info_list; -- --/* XXX fix me: there is currently no way to locate the dyn-info list -- by a remote unwinder. On ia64, this is done via a special -- unwind-table entry. Perhaps something similar can be done with -- DWARF2 unwind info. */ -- - static void - put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) - { -@@ -71,7 +64,13 @@ static int - get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, - void *arg) - { -- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; -+#ifndef UNW_LOCAL_ONLY -+# pragma weak _U_dyn_info_list_addr -+ if (!_U_dyn_info_list_addr) -+ return -UNW_ENOINFO; -+#endif -+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. -+ *dyn_info_list_addr = _U_dyn_info_list_addr (); - return 0; - } - -diff --git a/src/pal/src/libunwind/src/x86_64/Ginit.c b/src/pal/src/libunwind/src/x86_64/Ginit.c -index a865d3385..fd8d418b1 100644 ---- a/src/pal/src/libunwind/src/x86_64/Ginit.c -+++ b/src/pal/src/libunwind/src/x86_64/Ginit.c -@@ -49,13 +49,6 @@ static struct unw_addr_space local_addr_space; - - unw_addr_space_t unw_local_addr_space = &local_addr_space; - --HIDDEN unw_dyn_info_list_t _U_dyn_info_list; -- --/* XXX fix me: there is currently no way to locate the dyn-info list -- by a remote unwinder. On ia64, this is done via a special -- unwind-table entry. Perhaps something similar can be done with -- DWARF2 unwind info. */ -- - static void - put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) - { -@@ -66,7 +59,13 @@ static int - get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, - void *arg) - { -- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; -+#ifndef UNW_LOCAL_ONLY -+# pragma weak _U_dyn_info_list_addr -+ if (!_U_dyn_info_list_addr) -+ return -UNW_ENOINFO; -+#endif -+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. -+ *dyn_info_list_addr = _U_dyn_info_list_addr (); - return 0; - } - diff --git a/corefx-39633-cgroupv2-mountpoints.patch b/corefx-39633-cgroupv2-mountpoints.patch deleted file mode 100644 index 34fbecb..0000000 --- a/corefx-39633-cgroupv2-mountpoints.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 1864630f762160e1cb439362cc0577471624192a Mon Sep 17 00:00:00 2001 -From: Omair Majid -Date: Fri, 19 Jul 2019 19:18:51 -0400 -Subject: [PATCH] Fix up cgroup2fs in Interop.MountPoints.FormatInfo - -`stat -fc %T /sys/fs/cgroup` calls this file system `cgroup2fs` - -Add the cgroup2fs file system magic number. Available from: - - - https://www.kernel.org/doc/Documentation/cgroup-v2.txt - - man 2 statfs - -Move cgroup2fs next to cgroupfs in the drive type list, since it is also -DriveType.Ram. ---- - .../Unix/System.Native/Interop.MountPoints.FormatInfo.cs | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/Common/src/Interop/Unix/System.Native/Interop.MountPoints.FormatInfo.cs b/src/Common/src/Interop/Unix/System.Native/Interop.MountPoints.FormatInfo.cs -index af38a2285ba2..4240bd4853ab 100644 ---- a/src/Common/src/Interop/Unix/System.Native/Interop.MountPoints.FormatInfo.cs -+++ b/src/Common/src/Interop/Unix/System.Native/Interop.MountPoints.FormatInfo.cs -@@ -47,6 +47,7 @@ internal enum UnixFileSystemTypes : long - btrfs = 0x9123683E, - ceph = 0x00C36400, - cgroupfs = 0x0027E0EB, -+ cgroup2fs = 0x63677270, - cifs = 0xFF534D42, - coda = 0x73757245, - coherent = 0x012FF7B7, -@@ -231,7 +232,6 @@ private static DriveType GetDriveType(string fileSystemName) - case "bpf_fs": - case "btrfs": - case "btrfs_test": -- case "cgroup2fs": - case "coh": - case "daxfs": - case "drvfs": -@@ -384,6 +384,7 @@ private static DriveType GetDriveType(string fileSystemName) - case "binfmt_misc": - case "cgroup": - case "cgroupfs": -+ case "cgroup2fs": - case "configfs": - case "cramfs": - case "cramfs-wend": diff --git a/corefx-39686-cgroupv2-01.patch b/corefx-39686-cgroupv2-01.patch deleted file mode 100644 index e7628e2..0000000 --- a/corefx-39686-cgroupv2-01.patch +++ /dev/null @@ -1,391 +0,0 @@ -From 2b2273ea4ea1c28472fa0d6ad2ffeb6374500550 Mon Sep 17 00:00:00 2001 -From: Omair Majid -Date: Wed, 23 Oct 2019 17:45:59 -0400 -Subject: [PATCH 1/2] Add cgroup v2 support to Interop.cgroups - -Fix up code to adjust cgroup v1 assumptions and check cgroup v2 paths, -locations and values. - -Continue using the older cgroup v1 terminology for APIs. ---- - .../Interop/Linux/cgroups/Interop.cgroups.cs | 116 ++++++++++++++---- - src/Common/tests/Common.Tests.csproj | 4 + - .../tests/Tests/Interop/cgroupsTests.cs | 107 ++++++++++++++++ - .../tests/DescriptionNameTests.cs | 2 +- - 4 files changed, 206 insertions(+), 23 deletions(-) - create mode 100644 src/Common/tests/Tests/Interop/cgroupsTests.cs - -diff --git a/src/Common/src/Interop/Linux/cgroups/Interop.cgroups.cs b/src/Common/src/Interop/Linux/cgroups/Interop.cgroups.cs -index 0ffd4d7b7c03..186fe0516c5b 100644 ---- a/src/Common/src/Interop/Linux/cgroups/Interop.cgroups.cs -+++ b/src/Common/src/Interop/Linux/cgroups/Interop.cgroups.cs -@@ -9,17 +9,22 @@ - - internal static partial class Interop - { -+ /// Provides access to some cgroup (v1 and v2) features - internal static partial class cgroups - { -+ // For cgroup v1, see https://www.kernel.org/doc/Documentation/cgroup-v1/ -+ // For cgroup v2, see https://www.kernel.org/doc/Documentation/cgroup-v2.txt -+ -+ /// The version of cgroup that's being used -+ internal enum CGroupVersion { None, CGroup1, CGroup2 }; -+ - /// Path to mountinfo file in procfs for the current process. - private const string ProcMountInfoFilePath = "/proc/self/mountinfo"; - /// Path to cgroup directory in procfs for the current process. - private const string ProcCGroupFilePath = "/proc/self/cgroup"; - -- /// Path to the found cgroup location, or null if it couldn't be found. -- internal static readonly string s_cgroupMemoryPath = FindCGroupPath("memory"); -- /// Path to the found cgroup memory limit_in_bytes path, or null if it couldn't be found. -- private static readonly string s_cgroupMemoryLimitPath = s_cgroupMemoryPath != null ? s_cgroupMemoryPath + "/memory.limit_in_bytes" : null; -+ /// Path to the found cgroup memory limit path, or null if it couldn't be found. -+ internal static readonly string s_cgroupMemoryLimitPath = FindCGroupMemoryLimitPath(); - - /// Tries to read the memory limit from the cgroup memory location. - /// The read limit, or 0 if it couldn't be read. -@@ -42,7 +47,7 @@ public static bool TryGetMemoryLimit(out ulong limit) - /// The path to the file to parse. - /// The parsed result, or 0 if it couldn't be parsed. - /// true if the value was read successfully; otherwise, false. -- private static bool TryReadMemoryValueFromFile(string path, out ulong result) -+ internal static bool TryReadMemoryValueFromFile(string path, out ulong result) - { - if (File.Exists(path)) - { -@@ -79,6 +84,11 @@ private static bool TryReadMemoryValueFromFile(string path, out ulong result) - result = checked(ulongValue * multiplier); - return true; - } -+ -+ // 'max' is also a possible valid value -+ // -+ // Treat this as 'no memory limit' and let the caller -+ // fallback to reading the real limit via other means - } - catch (Exception e) - { -@@ -90,12 +100,35 @@ private static bool TryReadMemoryValueFromFile(string path, out ulong result) - return false; - } - -+ /// Find the cgroup memory limit path. -+ /// The limit path if found; otherwise, null. -+ private static string FindCGroupMemoryLimitPath() -+ { -+ string cgroupMemoryPath = FindCGroupPath("memory", out CGroupVersion version); -+ if (cgroupMemoryPath != null) -+ { -+ if (version == CGroupVersion.CGroup1) -+ { -+ return cgroupMemoryPath + "/memory.limit_in_bytes"; -+ } -+ -+ if (version == CGroupVersion.CGroup2) -+ { -+ // 'memory.high' is a soft limit; the process may get throttled -+ // 'memory.max' is where OOM killer kicks in -+ return cgroupMemoryPath + "/memory.max"; -+ } -+ } -+ -+ return null; -+ } -+ - /// Find the cgroup path for the specified subsystem. - /// The subsystem, e.g. "memory". - /// The cgroup path if found; otherwise, null. -- private static string FindCGroupPath(string subsystem) -+ private static string FindCGroupPath(string subsystem, out CGroupVersion version) - { -- if (TryFindHierarchyMount(subsystem, out string hierarchyRoot, out string hierarchyMount) && -+ if (TryFindHierarchyMount(subsystem, out version, out string hierarchyRoot, out string hierarchyMount) && - TryFindCGroupPathForSubsystem(subsystem, out string cgroupPathRelativeToMount)) - { - // For a host cgroup, we need to append the relative path. -@@ -113,19 +146,24 @@ private static string FindCGroupPath(string subsystem) - /// The path of the directory in the filesystem which forms the root of this mount; null if not found. - /// The path of the mount point relative to the process's root directory; null if not found. - /// true if the mount was found; otherwise, null. -- private static bool TryFindHierarchyMount(string subsystem, out string root, out string path) -+ private static bool TryFindHierarchyMount(string subsystem, out CGroupVersion version, out string root, out string path) - { -- if (File.Exists(ProcMountInfoFilePath)) -+ return TryFindHierarchyMount(ProcMountInfoFilePath, subsystem, out version, out root, out path); -+ } -+ -+ internal static bool TryFindHierarchyMount(string mountInfoFilePath, string subsystem, out CGroupVersion version, out string root, out string path) -+ { -+ if (File.Exists(mountInfoFilePath)) - { - try - { -- using (var reader = new StreamReader(ProcMountInfoFilePath)) -+ using (var reader = new StreamReader(mountInfoFilePath)) - { - string line; - while ((line = reader.ReadLine()) != null) - { - // Look for an entry that has cgroup as the "filesystem type" -- // and that has options containing the specified subsystem. -+ // and, for cgroup1, that has options containing the specified subsystem - // See man page for /proc/[pid]/mountinfo for details, e.g.: - // (1)(2)(3) (4) (5) (6) (7) (8) (9) (10) (11) - // 36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 - ext3 /dev/root rw,errors=continue -@@ -148,17 +186,35 @@ private static bool TryFindHierarchyMount(string subsystem, out string root, out - continue; - } - -- if (postSeparatorlineParts[0] != "cgroup" || -- Array.IndexOf(postSeparatorlineParts[2].Split(','), subsystem) < 0) -+ bool validCGroup1Entry = ((postSeparatorlineParts[0] == "cgroup") && -+ (Array.IndexOf(postSeparatorlineParts[2].Split(','), subsystem) >= 0)); -+ bool validCGroup2Entry = postSeparatorlineParts[0] == "cgroup2"; -+ -+ if (!validCGroup1Entry && !validCGroup2Entry) - { - // Not the relevant entry. - continue; - } - -- // Found the relevant entry. Extract the mount root and path. -+ // Found the relevant entry. Extract the cgroup version, mount root and path. -+ switch (postSeparatorlineParts[0]) -+ { -+ case "cgroup": -+ version = CGroupVersion.CGroup1; -+ break; -+ case "cgroup2": -+ version = CGroupVersion.CGroup2; -+ break; -+ default: -+ version = CGroupVersion.None; -+ Debug.Fail($"invalid value for CGroupVersion \"{postSeparatorlineParts[0]}\""); -+ break; -+ } -+ - string[] lineParts = line.Substring(0, endOfOptionalFields).Split(' '); - root = lineParts[3]; - path = lineParts[4]; -+ - return true; - } - } -@@ -169,6 +225,7 @@ private static bool TryFindHierarchyMount(string subsystem, out string root, out - } - } - -+ version = CGroupVersion.None; - root = null; - path = null; - return false; -@@ -180,27 +237,42 @@ private static bool TryFindHierarchyMount(string subsystem, out string root, out - /// - private static bool TryFindCGroupPathForSubsystem(string subsystem, out string path) - { -- if (File.Exists(ProcCGroupFilePath)) -+ return TryFindCGroupPathForSubsystem(ProcCGroupFilePath, subsystem, out path); -+ } -+ -+ internal static bool TryFindCGroupPathForSubsystem(string procCGroupFilePath, string subsystem, out string path) -+ { -+ if (File.Exists(procCGroupFilePath)) - { - try - { -- using (var reader = new StreamReader(ProcCGroupFilePath)) -+ using (var reader = new StreamReader(procCGroupFilePath)) - { - string line; - while ((line = reader.ReadLine()) != null) - { -- // Find the first entry that has the subsystem listed in its controller -- // list. See man page for cgroups for /proc/[pid]/cgroups format, e.g: -- // hierarchy-ID:controller-list:cgroup-path -- // 5:cpuacct,cpu,cpuset:/daemons -- - string[] lineParts = line.Split(':'); -+ - if (lineParts.Length != 3) - { - // Malformed line. - continue; - } - -+ // cgroup v2: Find the first entry that matches the cgroup v2 hierarchy: -+ // 0::$PATH -+ -+ if ((lineParts[0] == "0") && (string.Empty == lineParts[1])) -+ { -+ path = lineParts[2]; -+ return true; -+ } -+ -+ // cgroup v1: Find the first entry that has the subsystem listed in its controller -+ // list. See man page for cgroups for /proc/[pid]/cgroups format, e.g: -+ // hierarchy-ID:controller-list:cgroup-path -+ // 5:cpuacct,cpu,cpuset:/daemons -+ - if (Array.IndexOf(lineParts[1].Split(','), subsystem) < 0) - { - // Not the relevant entry. -@@ -214,7 +286,7 @@ private static bool TryFindCGroupPathForSubsystem(string subsystem, out string p - } - catch (Exception e) - { -- Debug.Fail($"Failed to read or parse \"{ProcMountInfoFilePath}\": {e}"); -+ Debug.Fail($"Failed to read or parse \"{procCGroupFilePath}\": {e}"); - } - } - -diff --git a/src/Common/tests/Common.Tests.csproj b/src/Common/tests/Common.Tests.csproj -index a189d856348b..979c8dd7fbe6 100644 ---- a/src/Common/tests/Common.Tests.csproj -+++ b/src/Common/tests/Common.Tests.csproj -@@ -12,6 +12,9 @@ - - Common\System\Security\Cryptography\ByteUtils.cs - -+ -+ Common\Interop\Linux\cgroups\Interop.cgroups.cs -+ - - Common\Interop\Linux\procfs\Interop.ProcFsStat.cs - -@@ -69,6 +72,7 @@ - - Common\CoreLib\System\PasteArguments.cs - -+ - - - -diff --git a/src/Common/tests/Tests/Interop/cgroupsTests.cs b/src/Common/tests/Tests/Interop/cgroupsTests.cs -new file mode 100644 -index 000000000000..f16d9242879c ---- /dev/null -+++ b/src/Common/tests/Tests/Interop/cgroupsTests.cs -@@ -0,0 +1,107 @@ -+// Licensed to the .NET Foundation under one or more agreements. -+// The .NET Foundation licenses this file to you under the MIT license. -+// See the LICENSE file in the project root for more information. -+ -+using System; -+using System.IO; -+using System.Text; -+using Xunit; -+ -+namespace Common.Tests -+{ -+ public class cgroupsTests -+ { -+ [Theory] -+ [InlineData(true, "0", 0)] -+ [InlineData(false, "max", 0)] -+ [InlineData(true, "1k", 1024)] -+ [InlineData(true, "1K", 1024)] -+ public static void ValidateTryReadMemoryValue(bool expectedResult, string valueText, ulong expectedValue) -+ { -+ string path = Path.GetTempFileName(); -+ try -+ { -+ File.WriteAllText(path, valueText); -+ -+ bool result = Interop.cgroups.TryReadMemoryValueFromFile(path, out ulong val); -+ -+ Assert.Equal(expectedResult, result); -+ if (result) -+ { -+ Assert.Equal(expectedValue, val); -+ } -+ } -+ finally -+ { -+ File.Delete(path); -+ } -+ } -+ -+ [Theory] -+ [InlineData(false, "0 0 0:0 / /foo ignore ignore - overlay overlay ignore", "ignore", 0, "/", "/")] -+ [InlineData(true, "0 0 0:0 / /foo ignore ignore - cgroup2 cgroup2 ignore", "ignore", 2, "/", "/foo")] -+ [InlineData(true, "0 0 0:0 / /foo ignore ignore - cgroup2 cgroup2 ignore", "memory", 2, "/", "/foo")] -+ [InlineData(true, "0 0 0:0 / /foo ignore ignore - cgroup2 cgroup2 ignore", "cpu", 2, "/", "/foo")] -+ [InlineData(true, "0 0 0:0 / /foo ignore - cgroup2 cgroup2 ignore", "cpu", 2, "/", "/foo")] -+ [InlineData(true, "0 0 0:0 / /foo ignore ignore ignore - cgroup2 cgroup2 ignore", "cpu", 2, "/", "/foo")] -+ [InlineData(true, "0 0 0:0 / /foo-with-dashes ignore ignore - cgroup2 cgroup2 ignore", "ignore", 2, "/", "/foo-with-dashes")] -+ [InlineData(true, "0 0 0:0 / /foo ignore ignore - cgroup cgroup memory", "memory", 1, "/", "/foo")] -+ [InlineData(true, "0 0 0:0 / /foo-with-dashes ignore ignore - cgroup cgroup memory", "memory", 1, "/", "/foo-with-dashes")] -+ [InlineData(true, "0 0 0:0 / /foo ignore ignore - cgroup cgroup cpu,memory", "memory", 1, "/", "/foo")] -+ [InlineData(true, "0 0 0:0 / /foo ignore ignore - cgroup cgroup memory,cpu", "memory", 1, "/", "/foo")] -+ [InlineData(false, "0 0 0:0 / /foo ignore ignore - cgroup cgroup cpu", "memory", 0, "/", "/foo")] -+ public static void ParseValidateMountInfo(bool found, string procSelfMountInfoText, string subsystem, int expectedVersion, string expectedRoot, string expectedMount) -+ { -+ string path = Path.GetTempFileName(); -+ try -+ { -+ File.WriteAllText(path, procSelfMountInfoText); -+ -+ bool result = Interop.cgroups.TryFindHierarchyMount(path, subsystem, out Interop.cgroups.CGroupVersion version, out string root, out string mount); -+ -+ Assert.Equal(found, result); -+ if (found) -+ { -+ Assert.Equal(expectedVersion, (int)version); -+ Assert.Equal(expectedRoot, root); -+ Assert.Equal(expectedMount, mount); -+ } -+ } -+ finally -+ { -+ File.Delete(path); -+ } -+ } -+ -+ [Theory] -+ [InlineData(true, "0::/foo", "ignore", "/foo")] -+ [InlineData(true, "0::/bar", "ignore", "/bar")] -+ [InlineData(true, "0::frob", "ignore", "frob")] -+ [InlineData(false, "1::frob", "ignore", "ignore")] -+ [InlineData(true, "1:foo:bar", "foo", "bar")] -+ [InlineData(true, "2:foo:bar", "foo", "bar")] -+ [InlineData(false, "2:foo:bar", "bar", "ignore")] -+ [InlineData(true, "1:foo:bar\n2:eggs:spam", "foo", "bar")] -+ [InlineData(true, "1:foo:bar\n2:eggs:spam", "eggs", "spam")] -+ public static void ParseValidateProcCGroup(bool found, string procSelfCgroupText, string subsystem, string expectedMountPath) -+ { -+ string path = Path.GetTempFileName(); -+ try -+ { -+ File.WriteAllText(path, procSelfCgroupText); -+ -+ bool result = Interop.cgroups.TryFindCGroupPathForSubsystem(path, subsystem, out string mountPath); -+ -+ Assert.Equal(found, result); -+ if (found) -+ { -+ Assert.Equal(expectedMountPath, mountPath); -+ } -+ } -+ finally -+ { -+ File.Delete(path); -+ } -+ } -+ } -+} -diff --git a/src/System.Runtime.InteropServices.RuntimeInformation/tests/DescriptionNameTests.cs b/src/System.Runtime.InteropServices.RuntimeInformation/tests/DescriptionNameTests.cs -index 910af2fd82b4..73f692898dbc 100644 ---- a/src/System.Runtime.InteropServices.RuntimeInformation/tests/DescriptionNameTests.cs -+++ b/src/System.Runtime.InteropServices.RuntimeInformation/tests/DescriptionNameTests.cs -@@ -40,7 +40,7 @@ public void DumpRuntimeInformationToConsole() - - Console.WriteLine($"### CURRENT DIRECTORY: {Environment.CurrentDirectory}"); - -- string cgroupsLocation = Interop.cgroups.s_cgroupMemoryPath; -+ string cgroupsLocation = Interop.cgroups.s_cgroupMemoryLimitPath; - if (cgroupsLocation != null) - { - Console.WriteLine($"### CGROUPS MEMORY: {cgroupsLocation}"); - diff --git a/corefx-39686-cgroupv2-02.patch b/corefx-39686-cgroupv2-02.patch deleted file mode 100644 index 88dcd99..0000000 --- a/corefx-39686-cgroupv2-02.patch +++ /dev/null @@ -1,129 +0,0 @@ -From 9a8c5e4014ffca8aff70808cc0e50a403d38c292 Mon Sep 17 00:00:00 2001 -From: Stephen Toub -Date: Wed, 23 Oct 2019 20:35:49 -0400 -Subject: [PATCH 2/2] Clean up new tests - ---- - .../tests/Tests/Interop/cgroupsTests.cs | 79 ++++++------------- - 1 file changed, 25 insertions(+), 54 deletions(-) - -diff --git a/src/Common/tests/Tests/Interop/cgroupsTests.cs b/src/Common/tests/Tests/Interop/cgroupsTests.cs -index f16d9242879c..fc6ab5c9753c 100644 ---- a/src/Common/tests/Tests/Interop/cgroupsTests.cs -+++ b/src/Common/tests/Tests/Interop/cgroupsTests.cs -@@ -2,38 +2,27 @@ - // The .NET Foundation licenses this file to you under the MIT license. - // See the LICENSE file in the project root for more information. - --using System; - using System.IO; --using System.Text; - using Xunit; - - namespace Common.Tests - { -- public class cgroupsTests -+ public class cgroupsTests : FileCleanupTestBase - { - [Theory] -- [InlineData(true, "0", 0)] -- [InlineData(false, "max", 0)] -- [InlineData(true, "1k", 1024)] -- [InlineData(true, "1K", 1024)] -- public static void ValidateTryReadMemoryValue(bool expectedResult, string valueText, ulong expectedValue) -+ [InlineData(true, "0", 0)] -+ [InlineData(false, "max", 0)] -+ [InlineData(true, "1k", 1024)] -+ [InlineData(true, "1K", 1024)] -+ public void ValidateTryReadMemoryValue(bool expectedResult, string valueText, ulong expectedValue) - { -- string path = Path.GetTempFileName(); -- try -- { -- File.WriteAllText(path, valueText); -- -- bool result = Interop.cgroups.TryReadMemoryValueFromFile(path, out ulong val); -+ string path = GetTestFilePath(); -+ File.WriteAllText(path, valueText); - -- Assert.Equal(expectedResult, result); -- if (result) -- { -- Assert.Equal(expectedValue, val); -- } -- } -- finally -+ Assert.Equal(expectedResult, Interop.cgroups.TryReadMemoryValueFromFile(path, out ulong val)); -+ if (expectedResult) - { -- File.Delete(path); -+ Assert.Equal(expectedValue, val); - } - } - -@@ -50,26 +39,17 @@ public static void ValidateTryReadMemoryValue(bool expectedResult, string valueT - [InlineData(true, "0 0 0:0 / /foo ignore ignore - cgroup cgroup cpu,memory", "memory", 1, "/", "/foo")] - [InlineData(true, "0 0 0:0 / /foo ignore ignore - cgroup cgroup memory,cpu", "memory", 1, "/", "/foo")] - [InlineData(false, "0 0 0:0 / /foo ignore ignore - cgroup cgroup cpu", "memory", 0, "/", "/foo")] -- public static void ParseValidateMountInfo(bool found, string procSelfMountInfoText, string subsystem, int expectedVersion, string expectedRoot, string expectedMount) -+ public void ParseValidateMountInfo(bool expectedFound, string procSelfMountInfoText, string subsystem, int expectedVersion, string expectedRoot, string expectedMount) - { -- string path = Path.GetTempFileName(); -- try -- { -- File.WriteAllText(path, procSelfMountInfoText); -- -- bool result = Interop.cgroups.TryFindHierarchyMount(path, subsystem, out Interop.cgroups.CGroupVersion version, out string root, out string mount); -+ string path = GetTestFilePath(); -+ File.WriteAllText(path, procSelfMountInfoText); - -- Assert.Equal(found, result); -- if (found) -- { -- Assert.Equal(expectedVersion, (int)version); -- Assert.Equal(expectedRoot, root); -- Assert.Equal(expectedMount, mount); -- } -- } -- finally -+ Assert.Equal(expectedFound, Interop.cgroups.TryFindHierarchyMount(path, subsystem, out Interop.cgroups.CGroupVersion version, out string root, out string mount)); -+ if (expectedFound) - { -- File.Delete(path); -+ Assert.Equal(expectedVersion, (int)version); -+ Assert.Equal(expectedRoot, root); -+ Assert.Equal(expectedMount, mount); - } - } - -@@ -83,24 +63,15 @@ public static void ParseValidateMountInfo(bool found, string procSelfMountInfoTe - [InlineData(false, "2:foo:bar", "bar", "ignore")] - [InlineData(true, "1:foo:bar\n2:eggs:spam", "foo", "bar")] - [InlineData(true, "1:foo:bar\n2:eggs:spam", "eggs", "spam")] -- public static void ParseValidateProcCGroup(bool found, string procSelfCgroupText, string subsystem, string expectedMountPath) -+ public void ParseValidateProcCGroup(bool expectedFound, string procSelfCgroupText, string subsystem, string expectedMountPath) - { -- string path = Path.GetTempFileName(); -- try -- { -- File.WriteAllText(path, procSelfCgroupText); -+ string path = GetTestFilePath(); -+ File.WriteAllText(path, procSelfCgroupText); - -- bool result = Interop.cgroups.TryFindCGroupPathForSubsystem(path, subsystem, out string mountPath); -- -- Assert.Equal(found, result); -- if (found) -- { -- Assert.Equal(expectedMountPath, mountPath); -- } -- } -- finally -+ Assert.Equal(expectedFound, Interop.cgroups.TryFindCGroupPathForSubsystem(path, subsystem, out string mountPath)); -+ if (expectedFound) - { -- File.Delete(path); -+ Assert.Equal(expectedMountPath, mountPath); - } - } - } diff --git a/corefx-42900-clang-10.patch b/corefx-42900-clang-10.patch deleted file mode 100644 index b898f34..0000000 --- a/corefx-42900-clang-10.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 58d6cd09bd2d5b1085c6572c1d97b8533cf8294b Mon Sep 17 00:00:00 2001 -From: Omair Majid -Date: Fri, 3 Apr 2020 13:53:09 -0400 -Subject: [PATCH] Fix corefx to build on clang 10 - -Clang 10 adds/enables new warnings, some of which is affecting -the corefx code. - -Clang 10 has added -Walloca to warn about uses of alloca. This commit -replaces the only non-compliant use of that with a single fixed -stack-allocated buffer. - -Clang 10 has also added -Wimplicit-int-float-conversion. This commit -uses explicit casts to double to avoid the warnings. - -This is a backport of dotnet/runtime#33734 to corefx. - -After this commit, I can build all of corefx with Clang 10. ---- - src/Native/Unix/System.Native/pal_io.c | 20 +++++++++++--------- - src/Native/Unix/System.Native/pal_time.c | 2 +- - 2 files changed, 12 insertions(+), 10 deletions(-) - -diff --git a/src/Native/Unix/System.Native/pal_io.c b/src/Native/Unix/System.Native/pal_io.c -index 2d51edacf5ee..c7c42eb3e72b 100644 ---- a/src/Native/Unix/System.Native/pal_io.c -+++ b/src/Native/Unix/System.Native/pal_io.c -@@ -906,18 +906,20 @@ int32_t SystemNative_Poll(PollEvent* pollEvents, uint32_t eventCount, int32_t mi - return Error_EINVAL; - } - -- size_t bufferSize; -- if (!multiply_s(sizeof(struct pollfd), (size_t)eventCount, &bufferSize)) -+ struct pollfd stackBuffer[(uint32_t)(2048/sizeof(struct pollfd))]; -+ int useStackBuffer = eventCount <= (sizeof(stackBuffer)/sizeof(stackBuffer[0])); -+ struct pollfd* pollfds = NULL; -+ if (useStackBuffer) - { -- return SystemNative_ConvertErrorPlatformToPal(EOVERFLOW); -+ pollfds = (struct pollfd*)&stackBuffer[0]; - } -- -- -- int useStackBuffer = bufferSize <= 2048; -- struct pollfd* pollfds = (struct pollfd*)(useStackBuffer ? alloca(bufferSize) : malloc(bufferSize)); -- if (pollfds == NULL) -+ else - { -- return Error_ENOMEM; -+ pollfds = (struct pollfd*)calloc(eventCount, sizeof(*pollfds)); -+ if (pollfds == NULL) -+ { -+ return Error_ENOMEM; -+ } - } - - for (uint32_t i = 0; i < eventCount; i++) -diff --git a/src/Native/Unix/System.Native/pal_time.c b/src/Native/Unix/System.Native/pal_time.c -index 1a7c862749d1..54ebde60a83b 100644 ---- a/src/Native/Unix/System.Native/pal_time.c -+++ b/src/Native/Unix/System.Native/pal_time.c -@@ -169,7 +169,7 @@ int32_t SystemNative_GetCpuUtilization(ProcessCpuInformation* previousCpuInfo) - uint64_t resolution = SystemNative_GetTimestampResolution(); - uint64_t timestamp = SystemNative_GetTimestamp(); - -- uint64_t currentTime = (uint64_t)(timestamp * ((double)SecondsToNanoSeconds / resolution)); -+ uint64_t currentTime = (uint64_t)((double)timestamp * ((double)SecondsToNanoSeconds / (double)resolution)); - - uint64_t lastRecordedCurrentTime = previousCpuInfo->lastRecordedCurrentTime; - uint64_t lastRecordedKernelTime = previousCpuInfo->lastRecordedKernelTime; diff --git a/corefx-43032-fedora-35-rid.patch b/corefx-43032-fedora-35-rid.patch deleted file mode 100644 index 656158b..0000000 --- a/corefx-43032-fedora-35-rid.patch +++ /dev/null @@ -1,124 +0,0 @@ -From 66d0116c74a33e43b171f3ef5323e8a3883ceb18 Mon Sep 17 00:00:00 2001 -From: Omair Majid -Date: Fri, 12 Feb 2021 11:01:36 -0500 -Subject: [PATCH] Add Fedora 35 RID - -Fedora rawhide now uses the fedora.35-x64 RID: - - $ podman run -it registry.fedoraproject.org/fedora:rawhide /bin/bash -c 'cat /etc/os-release' - NAME=Fedora - VERSION="35 (Container Image Prerelease)" - ID=fedora - VERSION_ID=35 - VERSION_CODENAME="" - PLATFORM_ID="platform:f35" - PRETTY_NAME="Fedora 35 (Container Image Prerelease)" - ANSI_COLOR="0;38;2;60;110;180" - LOGO=fedora-logo-icon - CPE_NAME="cpe:/o:fedoraproject:fedora:35" - HOME_URL="https://fedoraproject.org/" - DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/rawhide/system-administrators-guide/" - SUPPORT_URL="https://fedoraproject.org/wiki/Communicating_and_getting_help" - BUG_REPORT_URL="https://bugzilla.redhat.com/" - REDHAT_BUGZILLA_PRODUCT="Fedora" - REDHAT_BUGZILLA_PRODUCT_VERSION=rawhide - REDHAT_SUPPORT_PRODUCT="Fedora" - REDHAT_SUPPORT_PRODUCT_VERSION=rawhide - PRIVACY_POLICY_URL="https://fedoraproject.org/wiki/Legal:PrivacyPolicy" - VARIANT="Container Image" - VARIANT_ID=container - -This is a backport of https://github.com/dotnet/runtime/pull/48200. ---- - eng/Packaging.props | 2 +- - .../runtime.compatibility.json | 32 +++++++++++++++++++ - pkg/Microsoft.NETCore.Platforms/runtime.json | 17 ++++++++++ - .../runtimeGroups.props | 2 +- - .../packageIndex.json | 5 +-- - src/packages.builds | 3 ++ - 6 files changed, 57 insertions(+), 4 deletions(-) - -diff --git a/pkg/Microsoft.NETCore.Platforms/runtime.compatibility.json b/pkg/Microsoft.NETCore.Platforms/runtime.compatibility.json -index 382ee4552177..bb045b0856f1 100644 ---- a/pkg/Microsoft.NETCore.Platforms/runtime.compatibility.json -+++ b/pkg/Microsoft.NETCore.Platforms/runtime.compatibility.json -@@ -1102,6 +1102,38 @@ - "any", - "base" - ], -+ "fedora.35": [ -+ "fedora.35", -+ "fedora", -+ "linux", -+ "unix", -+ "any", -+ "base" -+ ], -+ "fedora.35-arm64": [ -+ "fedora.35-arm64", -+ "fedora.35", -+ "fedora-arm64", -+ "fedora", -+ "linux-arm64", -+ "linux", -+ "unix-arm64", -+ "unix", -+ "any", -+ "base" -+ ], -+ "fedora.35-x64": [ -+ "fedora.35-x64", -+ "fedora.35", -+ "fedora-x64", -+ "fedora", -+ "linux-x64", -+ "linux", -+ "unix-x64", -+ "unix", -+ "any", -+ "base" -+ ], - "freebsd": [ - "freebsd", - "unix", -diff --git a/pkg/Microsoft.NETCore.Platforms/runtime.json b/pkg/Microsoft.NETCore.Platforms/runtime.json -index a50be8567ce0..10b204def550 100644 ---- a/pkg/Microsoft.NETCore.Platforms/runtime.json -+++ b/pkg/Microsoft.NETCore.Platforms/runtime.json -@@ -544,6 +544,23 @@ - "fedora-x64" - ] - }, -+ "fedora.35": { -+ "#import": [ -+ "fedora" -+ ] -+ }, -+ "fedora.35-arm64": { -+ "#import": [ -+ "fedora.35", -+ "fedora-arm64" -+ ] -+ }, -+ "fedora.35-x64": { -+ "#import": [ -+ "fedora.35", -+ "fedora-x64" -+ ] -+ }, - "freebsd": { - "#import": [ - "unix" -diff --git a/pkg/Microsoft.NETCore.Platforms/runtimeGroups.props b/pkg/Microsoft.NETCore.Platforms/runtimeGroups.props -index faa697f34e20..8b9c2e47ba2d 100644 ---- a/pkg/Microsoft.NETCore.Platforms/runtimeGroups.props -+++ b/pkg/Microsoft.NETCore.Platforms/runtimeGroups.props -@@ -43,7 +43,7 @@ - - linux - x64;arm64 -- 23;24;25;26;27;28;29;30;31;32;33;34 -+ 23;24;25;26;27;28;29;30;31;32;33;34;35 - false - - diff --git a/corefx-Rosalinux-groups.patch b/corefx-Rosalinux-groups.patch deleted file mode 100644 index d7b72f9..0000000 --- a/corefx-Rosalinux-groups.patch +++ /dev/null @@ -1,389 +0,0 @@ -diff --git a/pkg/Microsoft.NETCore.Platforms/runtime.compatibility.json b/pkg/Microsoft.NETCore.Platforms/runtime.compatibility.json -index da73456..428d9c9 100644 ---- a/pkg/Microsoft.NETCore.Platforms/runtime.compatibility.json -+++ b/pkg/Microsoft.NETCore.Platforms/runtime.compatibility.json -@@ -177,6 +177,53 @@ - "any", - "base" - ], -+ "alpine.3.14": [ -+ "alpine.3.14", -+ "alpine.3.13", -+ "alpine.3.12", -+ "alpine.3.11", -+ "alpine.3.10", -+ "alpine.3.9", -+ "alpine.3.8", -+ "alpine.3.7", -+ "alpine.3.6", -+ "alpine", -+ "linux-musl", -+ "linux", -+ "unix", -+ "any", -+ "base" -+ ], -+ "alpine.3.14-x64": [ -+ "alpine.3.14-x64", -+ "alpine.3.14", -+ "alpine.3.13-x64", -+ "alpine.3.13", -+ "alpine.3.12-x64", -+ "alpine.3.12", -+ "alpine.3.11-x64", -+ "alpine.3.11", -+ "alpine.3.10-x64", -+ "alpine.3.10", -+ "alpine.3.9-x64", -+ "alpine.3.9", -+ "alpine.3.8-x64", -+ "alpine.3.8", -+ "alpine.3.7-x64", -+ "alpine.3.7", -+ "alpine.3.6-x64", -+ "alpine.3.6", -+ "alpine-x64", -+ "alpine", -+ "linux-musl-x64", -+ "linux-musl", -+ "linux-x64", -+ "linux", -+ "unix-x64", -+ "unix", -+ "any", -+ "base" -+ ], - "alpine.3.6": [ - "alpine.3.6", - "alpine", -@@ -625,6 +672,74 @@ - "any", - "base" - ], -+ "debian.11": [ -+ "debian.11", -+ "debian", -+ "linux", -+ "unix", -+ "any", -+ "base" -+ ], -+ "debian.11-arm": [ -+ "debian.11-arm", -+ "debian.11", -+ "debian-arm", -+ "debian", -+ "linux-arm", -+ "linux", -+ "unix-arm", -+ "unix", -+ "any", -+ "base" -+ ], -+ "debian.11-arm64": [ -+ "debian.11-arm64", -+ "debian.11", -+ "debian-arm64", -+ "debian", -+ "linux-arm64", -+ "linux", -+ "unix-arm64", -+ "unix", -+ "any", -+ "base" -+ ], -+ "debian.11-armel": [ -+ "debian.11-armel", -+ "debian.11", -+ "debian-armel", -+ "debian", -+ "linux-armel", -+ "linux", -+ "unix-armel", -+ "unix", -+ "any", -+ "base" -+ ], -+ "debian.11-x64": [ -+ "debian.11-x64", -+ "debian.11", -+ "debian-x64", -+ "debian", -+ "linux-x64", -+ "linux", -+ "unix-x64", -+ "unix", -+ "any", -+ "base" -+ ], -+ "debian.11-x86": [ -+ "debian.11-x86", -+ "debian.11", -+ "debian-x86", -+ "debian", -+ "linux-x86", -+ "linux", -+ "unix-x86", -+ "unix", -+ "any", -+ "base" -+ ], - "debian.8": [ - "debian.8", - "debian", -@@ -3204,6 +3319,97 @@ - "any", - "base" - ], -+ "rosa": [ -+ "rosa", -+ "linux", -+ "unix", -+ "any", -+ "base" -+ ], -+ "rosa-arm64": [ -+ "rosa-arm64", -+ "rosa", -+ "linux-arm64", -+ "linux", -+ "unix-arm64", -+ "unix", -+ "any", -+ "base" -+ ], -+ "rosa-x64": [ -+ "rosa-x64", -+ "rosa", -+ "linux-x64", -+ "linux", -+ "unix-x64", -+ "unix", -+ "any", -+ "base" -+ ], -+ "rosa.2019.05": [ -+ "rosa.2019.05", -+ "rosa", -+ "linux", -+ "unix", -+ "any", -+ "base" -+ ], -+ "rosa.2019.05-arm64": [ -+ "rosa.2019.05-arm64", -+ "rosa.2019.05", -+ "rosa-arm64", -+ "rosa", -+ "linux-arm64", -+ "linux", -+ "unix-arm64", -+ "unix", -+ "any", -+ "base" -+ ], -+ "rosa.2019.05-x64": [ -+ "rosa.2019.05-x64", -+ "rosa.2019.05", -+ "rosa-x64", -+ "rosa", -+ "linux-x64", -+ "linux", -+ "unix-x64", -+ "unix", -+ "any", -+ "base" -+ ], -+ "rosa.2021.1": [ -+ "rosa.2021.1", -+ "rosa", -+ "linux", -+ "unix", -+ "any", -+ "base" -+ ], -+ "rosa.2021.1-arm64": [ -+ "rosa.2021.1-arm64", -+ "rosa.2021.1", -+ "rosa-arm64", -+ "rosa", -+ "linux-arm64", -+ "linux", -+ "unix-arm64", -+ "unix", -+ "any", -+ "base" -+ ], -+ "rosa.2021.1-x64": [ -+ "rosa.2021.1-x64", -+ "rosa.2021.1", -+ "rosa-x64", -+ "rosa", -+ "linux-x64", -+ "linux", -+ "unix-x64", -+ "unix", -+ "any", -+ "base" -+ ], - "sles": [ - "sles", - "linux", -diff --git a/pkg/Microsoft.NETCore.Platforms/runtime.json b/pkg/Microsoft.NETCore.Platforms/runtime.json -index 608a034..f832924 100644 ---- a/pkg/Microsoft.NETCore.Platforms/runtime.json -+++ b/pkg/Microsoft.NETCore.Platforms/runtime.json -@@ -55,6 +55,17 @@ - "alpine.3.12-x64" - ] - }, -+ "alpine.3.14": { -+ "#import": [ -+ "alpine.3.13" -+ ] -+ }, -+ "alpine.3.14-x64": { -+ "#import": [ -+ "alpine.3.14", -+ "alpine.3.13-x64" -+ ] -+ }, - "alpine.3.6": { - "#import": [ - "alpine" -@@ -286,6 +297,41 @@ - "debian-x86" - ] - }, -+ "debian.11": { -+ "#import": [ -+ "debian" -+ ] -+ }, -+ "debian.11-arm": { -+ "#import": [ -+ "debian.11", -+ "debian-arm" -+ ] -+ }, -+ "debian.11-arm64": { -+ "#import": [ -+ "debian.11", -+ "debian-arm64" -+ ] -+ }, -+ "debian.11-armel": { -+ "#import": [ -+ "debian.11", -+ "debian-armel" -+ ] -+ }, -+ "debian.11-x64": { -+ "#import": [ -+ "debian.11", -+ "debian-x64" -+ ] -+ }, -+ "debian.11-x86": { -+ "#import": [ -+ "debian.11", -+ "debian-x86" -+ ] -+ }, - "debian.8": { - "#import": [ - "debian" -@@ -1428,6 +1474,57 @@ - "rhel-x64" - ] - }, -+ "rosa": { -+ "#import": [ -+ "linux" -+ ] -+ }, -+ "rosa-arm64": { -+ "#import": [ -+ "rosa", -+ "linux-arm64" -+ ] -+ }, -+ "rosa-x64": { -+ "#import": [ -+ "rosa", -+ "linux-x64" -+ ] -+ }, -+ "rosa.2019.05": { -+ "#import": [ -+ "rosa" -+ ] -+ }, -+ "rosa.2019.05-arm64": { -+ "#import": [ -+ "rosa.2019.05", -+ "rosa-arm64" -+ ] -+ }, -+ "rosa.2019.05-x64": { -+ "#import": [ -+ "rosa.2019.05", -+ "rosa-x64" -+ ] -+ }, -+ "rosa.2021.1": { -+ "#import": [ -+ "rosa" -+ ] -+ }, -+ "rosa.2021.1-arm64": { -+ "#import": [ -+ "rosa.2021.1", -+ "rosa-arm64" -+ ] -+ }, -+ "rosa.2021.1-x64": { -+ "#import": [ -+ "rosa.2021.1", -+ "rosa-x64" -+ ] -+ }, - "sles": { - "#import": [ - "linux" -diff --git a/pkg/Microsoft.NETCore.Platforms/runtimeGroups.props b/pkg/Microsoft.NETCore.Platforms/runtimeGroups.props -index 0e8d06d..846a80d 100644 ---- a/pkg/Microsoft.NETCore.Platforms/runtimeGroups.props -+++ b/pkg/Microsoft.NETCore.Platforms/runtimeGroups.props -@@ -16,7 +16,7 @@ - - linux-musl - x64 -- 3.6;3.7;3.8;3.9;3.10;3.11;3.12;3.13 -+ 3.6;3.7;3.8;3.9;3.10;3.11;3.12;3.13;3.14 - - - -@@ -43,7 +43,7 @@ - - linux - x64;x86;arm;armel;arm64 -- 8;9;10 -+ 8;9;10;11 - false - - -@@ -137,6 +137,13 @@ - 9 - - -+ -+ linux -+ x64;arm64 -+ 2021.1;2019.05 -+ false -+ -+ - - linux - x64 diff --git a/corefx-optflags-support.patch b/corefx-optflags-support.patch deleted file mode 100644 index 9b08f1f..0000000 --- a/corefx-optflags-support.patch +++ /dev/null @@ -1,40 +0,0 @@ -diff --git a/src/Native/Unix/CMakeLists.txt b/src/Native/Unix/CMakeLists.txt -index 7d804a1e54..717c2718d7 100644 ---- a/src/Native/Unix/CMakeLists.txt -+++ b/src/Native/Unix/CMakeLists.txt -@@ -25,7 +25,7 @@ add_compile_options(-fPIC) - add_compile_options(-Wthread-safety) - add_compile_options(-Wno-thread-safety-analysis) -+ add_compile_options(-Wno-alloca) - endif() --add_compile_options(-Werror) - - if(CMAKE_SYSTEM_NAME STREQUAL Emscripten) - set(CLR_CMAKE_PLATFORM_WASM 1) -diff --git a/src/Native/Unix/configure.cmake b/src/Native/Unix/configure.cmake -index f4a30ad6cb..f2db68402a 100644 ---- a/src/Native/Unix/configure.cmake -+++ b/src/Native/Unix/configure.cmake -@@ -27,6 +27,12 @@ else () - message(FATAL_ERROR "Unknown platform. Cannot define PAL_UNIX_NAME, used by RuntimeInformation.") - endif () - -+ -+set (PREVIOUS_CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) -+set (CMAKE_CXX_FLAGS "-D_GNU_SOURCE") -+set (PREVIOUS_CMAKE_C_FLAGS ${CMAKE_C_FLAGS}) -+set (CMAKE_C_FLAGS "-D_GNU_SOURCE") -+ - # We compile with -Werror, so we need to make sure these code fragments compile without warnings. - # Older CMake versions (3.8) do not assign the result of their tests, causing unused-value errors - # which are not distinguished from the test failing. So no error for that one. -@@ -698,6 +704,9 @@ endif() - - set (CMAKE_REQUIRED_LIBRARIES) - -+set (CMAKE_CXX_FLAGS "${PREVIOUS_CMAKE_CXX_FLAGS}") -+set (CMAKE_C_FLAGS "${PREVIOUS_CMAKE_C_FLAGS}") -+ - check_c_source_compiles( - " - #include diff --git a/disable-aspnetcore-targetingpackoverride.patch b/disable-aspnetcore-targetingpackoverride.patch deleted file mode 100644 index 2788348..0000000 --- a/disable-aspnetcore-targetingpackoverride.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- Directory.Build.props 2020-06-04 17:54:26.587622453 -0500 -+++ Directory.Build.props 2020-06-04 17:54:43.948536557 -0500 -@@ -145,8 +145,6 @@ - - - $(RepoRoot).dotnet\ -- -- $(LocalDotNetRoot)packs\ - - - diff --git a/dotnet3.1.spec b/dotnet3.1.spec deleted file mode 100644 index d0cff9f..0000000 --- a/dotnet3.1.spec +++ /dev/null @@ -1,567 +0,0 @@ -%bcond_with bootstrap -%define _build_pkgcheck_set %{nil} -%define _build_pkgcheck_srpm %{nil} - -%if %{mdvver} == 201905 -%define __python_3 %{__python38} -%else -%define __python_3 %{__python3} -%endif - -# Avoid provides/requires from private libraries -%global privlibs libhostfxr -%global privlibs %{privlibs}|libclrjit -%global privlibs %{privlibs}|libcoreclr -%global privlibs %{privlibs}|libcoreclrtraceptprovider -%global privlibs %{privlibs}|libdbgshim -%global privlibs %{privlibs}|libhostpolicy -%global privlibs %{privlibs}|libmscordaccore -%global privlibs %{privlibs}|libmscordbi -%global privlibs %{privlibs}|libsos -%global privlibs %{privlibs}|libsosplugin -%global __provides_exclude ^(%{privlibs})\\.so -%global __requires_exclude ^(%{privlibs})\\.so - -# LTO triggers a compilation error for a source level issue. Given that LTO should not -# change the validity of any given source and the nature of the error (undefined enum), I -# suspect a generator program is mis-behaving in some way. This needs further debugging, -# until that's done, disable LTO. This has to happen before setting the flags below. -%define _lto_cflags %{nil} - - -%global host_version 3.1.18 -%global runtime_version 3.1.18 -%global aspnetcore_runtime_version %{runtime_version} -%global sdk_version 3.1.118 -# upstream can update releases without revving the SDK version so these don't always match -%global src_version %{sdk_version} -%global templates_version %(echo %{runtime_version} | awk 'BEGIN { FS="."; OFS="." } {print $1, $2, $3+1 }') - -%global host_rpm_version %{host_version} -%global aspnetcore_runtime_rpm_version %{aspnetcore_runtime_version} -%global runtime_rpm_version %{runtime_version} -%global sdk_rpm_version %{sdk_version} - -%if 0%{?fedora} || 0%{?rhel} < 8 -%global use_bundled_libunwind 0 -%else -%global use_bundled_libunwind 1 -%endif - -%ifarch aarch64 -%global use_bundled_libunwind 1 -%endif - -%ifarch x86_64 -%global runtime_arch x64 -%endif -%ifarch aarch64 -%global runtime_arch arm64 -%endif - -%global runtime_id %{distsuffix}.%{rosa_release}*-%{runtime_arch} -%bcond_with identifier_platform_rosa - -Name: dotnet3.1 -Version: %{sdk_rpm_version} -Release: 3 -Summary: .NET Core Runtime and SDK -Group: Development/Other -License: MIT and ASL 2.0 and BSD and LGPLv2+ and CC-BY and CC0 and MS-PL and EPL-1.0 and GPL+ and GPLv2 and ISC and OFL and zlib -URL: https://github.com/dotnet/ - -# The source is generated on a Fedora box via: -# ./build-dotnet-tarball v%%{src_version}-SDK -Source0: dotnet-v%{src_version}-SDK%{?_with_bootstrap:-original}.tar.gz -Source1: check-debug-symbols.py -Source2: dotnet.sh.in - -Patch1: source-build-warnings-are-not-errors.patch - -# Fix building with our additional CFLAGS/CXXFLAGS/LDFLAGS -Patch100: corefx-optflags-support.patch -#Add some support for cgroupv2 in corefx -# All these patches are upstreamed for 5.0 -Patch101: corefx-39686-cgroupv2-01.patch -Patch102: corefx-39686-cgroupv2-02.patch -Patch103: corefx-39633-cgroupv2-mountpoints.patch -# Adding Rosalinux to the group to generate RID -# https://github.com/dotnet/source-build/issues/2095 -Patch104: corefx-Rosalinux-groups.patch - -# Fix build with clang 10; Already applied at tarball-build time -# Patch201: coreclr-clang10.patch -# Fix build on recent versions of gcc/clang -# https://github.com/libunwind/libunwind/pull/166 -# Already applied -#Patch202: coreclr-libunwind-fno-common.patch - -# Disable telemetry by default; make it opt-in -Patch500: cli-telemetry-optout.patch -# fix RID bootstrap, do it once -Patch501: RuntimeIdentifierGraph-Rosa.patch - -ExclusiveArch: x86_64 - -BuildRequires: clang -BuildRequires: cmake -BuildRequires: coreutils -%if %{without bootstrap} -BuildRequires: dotnet-build-reference-packages -BuildRequires: dotnet-sdk-3.1 -BuildRequires: dotnet-sdk-3.1-source-built-artifacts -%endif -BuildRequires: findutils -BuildRequires: git -BuildRequires: locales-en -BuildRequires: hostname -BuildRequires: krb5-devel -BuildRequires: pkgconfig(libcurl) -BuildRequires: icu-devel -%if ! %{use_bundled_libunwind} -BuildRequires: libunwind-devel -%endif -BuildRequires: %{_lib}lldb-devel -BuildRequires: llvm -BuildRequires: lttng-ust-devel -BuildRequires: make -BuildRequires: openssl-devel -BuildRequires: python3 -BuildRequires: systemtap-sdt-devel -BuildRequires: tar -BuildRequires: zlib-devel -BuildRequires: which -ExcludeArch: %{armx} - -%description -.NET Core is a fast, lightweight and modular platform for creating -cross platform applications that work on Linux, macOS and Windows. - -It particularly focuses on creating console applications, web -applications and micro-services. - -.NET Core contains a runtime conforming to .NET Standards a set of -framework libraries, an SDK containing compilers and a 'dotnet' -application to drive everything. - - -%package -n dotnet - -Version: %{sdk_rpm_version} -Summary: .NET Core CLI tools and runtime - -Requires: dotnet-sdk-3.1 >= %{sdk_rpm_version}-%{release} - -%description -n dotnet -.NET Core is a fast, lightweight and modular platform for creating -cross platform applications that work on Linux, macOS and Windows. - -It particularly focuses on creating console applications, web -applications and micro-services. - -.NET Core contains a runtime conforming to .NET Standards a set of -framework libraries, an SDK containing compilers and a 'dotnet' -application to drive everything. - - -%package -n dotnet-host - -Version: %{host_rpm_version} -Summary: .NET command line launcher - -%description -n dotnet-host -The .NET Core host is a command line program that runs a standalone -.NET core application or launches the SDK. - -.NET Core is a fast, lightweight and modular platform for creating -cross platform applications that work on Linux, Mac and Windows. - -It particularly focuses on creating console applications, web -applications and micro-services. - - -%package -n dotnet-hostfxr-3.1 - -Version: %{host_rpm_version} -Summary: .NET Core command line host resolver - -# Theoretically any version of the host should work. But lets aim for the one -# provided by this package, or from a newer version of .NET Core -Requires: dotnet-host >= %{host_rpm_version}-%{release} - -%description -n dotnet-hostfxr-3.1 -The .NET Core host resolver contains the logic to resolve and select -the right version of the .NET Core SDK or runtime to use. - -.NET Core is a fast, lightweight and modular platform for creating -cross platform applications that work on Linux, Mac and Windows. - -It particularly focuses on creating console applications, web -applications and micro-services. - - -%package -n dotnet-runtime-3.1 - -Version: %{runtime_rpm_version} -Summary: NET Core 3.1 runtime - -Requires: dotnet-hostfxr-3.1 >= %{host_rpm_version}-%{release} - -# remove development tools -%if 0 -# libicu is dlopen()ed -Requires: %{_lib}icu-devel -%endif - -%if %{use_bundled_libunwind} -Provides: bundled(libunwind) = 1.3 -%endif - -%description -n dotnet-runtime-3.1 -The .NET Core runtime contains everything needed to run .NET Core applications. -It includes a high performance Virtual Machine as well as the framework -libraries used by .NET Core applications. - -.NET Core is a fast, lightweight and modular platform for creating -cross platform applications that work on Linux, Mac and Windows. - -It particularly focuses on creating console applications, web -applications and micro-services. - - -%package -n aspnetcore-runtime-3.1 - -Version: %{aspnetcore_runtime_rpm_version} -Summary: ASP.NET Core 3.1 runtime - -Requires: dotnet-runtime-3.1 >= %{runtime_rpm_version}-%{release} - -%description -n aspnetcore-runtime-3.1 -The ASP.NET Core runtime contains everything needed to run .NET Core -web applications. It includes a high performance Virtual Machine as -well as the framework libraries used by .NET Core applications. - -ASP.NET Core is a fast, lightweight and modular platform for creating -cross platform web applications that work on Linux, Mac and Windows. - -It particularly focuses on creating console applications, web -applications and micro-services. - - -%package -n dotnet-templates-3.1 - -Version: %{sdk_rpm_version} -Summary: .NET Core 3.1 templates - -# Theoretically any version of the host should work. But lets aim for the one -# provided by this package, or from a newer version of .NET Core -Requires: dotnet-host >= %{host_rpm_version}-%{release} - -%description -n dotnet-templates-3.1 -This package contains templates used by the .NET Core SDK. - -ASP.NET Core is a fast, lightweight and modular platform for creating -cross platform web applications that work on Linux, Mac and Windows. - -It particularly focuses on creating console applications, web -applications and micro-services. - - -%package -n dotnet-sdk-3.1 - -Version: %{sdk_rpm_version} -Summary: .NET Core 3.1 Software Development Kit - -Provides: bundled(js-jquery) -Provides: bundled(npm) - -Requires: dotnet-runtime-3.1 >= %{runtime_rpm_version}-%{release} -Requires: aspnetcore-runtime-3.1 >= %{aspnetcore_runtime_rpm_version}-%{release} - -Requires: dotnet-apphost-pack-3.1 >= %{runtime_rpm_version}-%{release} -Requires: dotnet-targeting-pack-3.1 >= %{runtime_rpm_version}-%{release} -Requires: aspnetcore-targeting-pack-3.1 >= %{aspnetcore_runtime_rpm_version}-%{release} -Requires: netstandard-targeting-pack-2.1 >= %{sdk_rpm_version}-%{release} - -Requires: dotnet-templates-3.1 >= %{sdk_rpm_version}-%{release} - -%description -n dotnet-sdk-3.1 -The .NET Core SDK is a collection of command line applications to -create, build, publish and run .NET Core applications. - -.NET Core is a fast, lightweight and modular platform for creating -cross platform applications that work on Linux, Mac and Windows. - -It particularly focuses on creating console applications, web -applications and micro-services. - - -%global dotnet_targeting_pack() %{expand: -%package -n %{1} - -Version: %{2} -Summary: Targeting Pack for %{3} %{4} - -Requires: dotnet-host - -%description -n %{1} -This package provides a targeting pack for %{3} %{4} -that allows developers to compile against and target %{3} %{4} -applications using the .NET Core SDK. - -%files -n %{1} -%dir %{_libdir}/dotnet/packs -%{_libdir}/dotnet/packs/%{5} -} - -%dotnet_targeting_pack dotnet-apphost-pack-3.1 %{runtime_rpm_version} Microsoft.NETCore.App 3.1 Microsoft.NETCore.App.Host.%{runtime_id} -%dotnet_targeting_pack dotnet-targeting-pack-3.1 %{runtime_rpm_version} Microsoft.NETCore.App 3.1 Microsoft.NETCore.App.Ref -%dotnet_targeting_pack aspnetcore-targeting-pack-3.1 %{aspnetcore_runtime_rpm_version} Microsoft.AspNetCore.App 3.1 Microsoft.AspNetCore.App.Ref -%dotnet_targeting_pack netstandard-targeting-pack-2.1 %{sdk_rpm_version} NETStandard.Library 2.1 NETStandard.Library.Ref - - -%package -n dotnet-sdk-3.1-source-built-artifacts - -Version: %{sdk_rpm_version} -Summary: Internal package for building .NET Core 3.1 Software Development Kit - -%description -n dotnet-sdk-3.1-source-built-artifacts -The .NET Core source-built archive is a collection of packages needed -to build the .NET Core SDK itself. - -These are not meant for general use. - - -%prep -%setup -q -n dotnet-v%{src_version}-SDK%{?_with_bootstrap:-original} - -# https://github.com/dotnet/source-build/issues/1689 -find . -type f -exec touch {} + - -%if %{without bootstrap} -# Remove all prebuilts -find -iname '*.dll' -type f -delete -find -iname '*.so' -type f -delete -find -iname '*.tar.gz' -type f -delete -find -iname '*.nupkg' -type f -delete -find -iname '*.zip' -type f -delete -rm -rf .dotnet/ -rm -rf packages/source-built -%endif - -%if %{without bootstrap} -sed -i -e 's|3.1.100-preview1-014459|3.1.103|' global.json -mkdir -p packages/archive -ln -s %{_libdir}/dotnet/source-built-artifacts/*.tar.gz packages/archive/ -ln -s %{_libdir}/dotnet/reference-packages/Private.SourceBuild.ReferencePackages*.tar.gz packages/archive -%endif - -# Fix bad hardcoded path in build -sed -i 's|/usr/share/dotnet|%{_libdir}/dotnet|' src/core-setup.*/src/corehost/common/pal.unix.cpp - -# Disable warnings -sed -i 's|skiptests|skiptests ignorewarnings|' repos/coreclr.proj - -%patch1 -p1 - -pushd src/corefx.* -%patch100 -p1 -%patch101 -p1 -%patch102 -p1 -%patch103 -p1 -%if %{with identifier_platform_rosa} -%patch104 -p1 -%endif -popd - -pushd src/coreclr.* -#%%patch201 -p1 -#%%patch202 -p1 -popd - -pushd src/core-setup.* -popd - -pushd src/cli.* -%patch500 -p1 -popd - -# If CLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE is misisng, add it back -grep CLR_CMAKE_USE_SYSTEM_LIBUNWIND repos/coreclr.common.props || \ - sed -i 's|\$(BuildArguments) |$(BuildArguments) cmakeargs -DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE|' repos/coreclr.common.props - -%if %{use_bundled_libunwind} -sed -i 's|-DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE|-DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=FALSE|' repos/coreclr.common.props -%endif - -%ifnarch x86_64 -mkdir -p artifacts/obj/%{runtime_arch}/Release -cp artifacts/obj/x64/Release/PackageVersions.props artifacts/obj/%{runtime_arch}/Release/PackageVersions.props -%endif - -cat source-build-info.txt - -find -iname 'nuget.config' -exec echo {}: \; -exec cat {} \; -exec echo \; - - -%build -cat /etc/os-release - -%if %{without bootstrap} -# We need to create a copy because we will mutate this -cp -a %{_libdir}/dotnet previously-built-dotnet -pushd previously-built-dotnet -patch -p1 < %{P:501} -popd -%endif - -%if 0%{?fedora} > 32 || 0%{?rhel} > 8 -# Setting this macro ensures that only clang supported options will be -# added to ldflags and cflags. -%global toolchain clang -%set_build_flags -%else -# Filter flags not supported by clang -# -specs= -%global dotnet_cflags %(echo %optflags | sed -re 's/-specs=[^ ]*//g') -%global dotnet_ldflags %(echo %{__global_ldflags} | sed -re 's/-specs=[^ ]*//g') -ldl -pthread -lm -export CFLAGS="%{dotnet_cflags}" -export CXXFLAGS="%{dotnet_cflags}" -export LDFLAGS="%{dotnet_ldflags}" -%endif - -%ifarch aarch64 -# mbranch-protection=standard breaks unwinding in CoreCLR through libunwind -CFLAGS=$(echo $CFLAGS | sed -e 's/-mbranch-protection=standard //') -CXXFLAGS=$(echo $CXXFLAGS | sed -e 's/-mbranch-protection=standard //') -%endif - -# fstack-clash-protection breaks CoreCLR -CFLAGS=$(echo $CFLAGS | sed -e 's/-fstack-clash-protection//' ) -CXXFLAGS=$(echo $CXXFLAGS | sed -e 's/-fstack-clash-protection//' ) - -echo $CFLAGS -echo $CXXFLAGS -echo $LDFLAGS - -#%%if %%{without bootstrap} -# --with-ref-packages %%{_libdir}/dotnet/reference-packages/ \ -# --with-packages %%{_libdir}/dotnet/source-built-artifacts/*.tar.gz \ -# --with-sdk %%{_libdir}/dotnet \ -#%%endif - -VERBOSE=1 ./build.sh \ -%if %{without bootstrap} - --with-sdk previously-built-dotnet \ -%endif - -- \ - /v:n \ - /p:SkipPortableRuntimeBuild=true \ - /p:LogVerbosity=n \ - /p:MinimalConsoleLogOutput=false \ - /p:ContinueOnPrebuiltBaselineError=true - - -sed -e 's|[@]LIBDIR[@]|%{_libdir}|g' %{SOURCE2} > dotnet.sh - - -%install -install -dm 0755 %{buildroot}%{_libdir}/dotnet -ls artifacts/%{runtime_arch}/Release -tar xf artifacts/%{runtime_arch}/Release/dotnet-sdk-%{sdk_version}-%{runtime_id}.tar.gz -C %{buildroot}%{_libdir}/dotnet/ - -# Install managed symbols -tar xf artifacts/%{runtime_arch}/Release/runtime/dotnet-runtime-symbols-%{runtime_version}-%{runtime_id}.tar.gz \ - -C %{buildroot}/%{_libdir}/dotnet/shared/Microsoft.NETCore.App/%{runtime_version}/ - -# Fix executable permissions on files -find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.dll' -exec chmod -x {} \; -find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.pdb' -exec chmod -x {} \; -find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.props' -exec chmod -x {} \; -find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.pubxml' -exec chmod -x {} \; -find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.targets' -exec chmod -x {} \; -chmod 0755 %{buildroot}/%{_libdir}/dotnet/sdk/%{sdk_version}/AppHostTemplate/apphost -chmod 0755 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Host.%{runtime_id}/%{runtime_version}/runtimes/%{runtime_id}/native/libnethost.so -chmod 0755 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Host.%{runtime_id}/%{runtime_version}/runtimes/%{runtime_id}/native/apphost -chmod 0644 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Host.%{runtime_id}/%{runtime_version}/runtimes/%{runtime_id}/native/nethost.h - -install -dm 0755 %{buildroot}%{_sysconfdir}/profile.d/ -install dotnet.sh %{buildroot}%{_sysconfdir}/profile.d/ - -install -dm 0755 %{buildroot}/%{_datadir}/bash-completion/completions -# dynamic completion needs the file to be named the same as the base command -install src/cli.*/scripts/register-completions.bash %{buildroot}/%{_datadir}/bash-completion/completions/dotnet - -# TODO: the zsh completion script needs to be ported to use #compdef -#install -dm 755 %%{buildroot}/%%{_datadir}/zsh/site-functions -#install src/cli/scripts/register-completions.zsh %%{buildroot}/%%{_datadir}/zsh/site-functions/_dotnet - -install -dm 0755 %{buildroot}%{_bindir} -ln -s ../../%{_libdir}/dotnet/dotnet %{buildroot}%{_bindir}/ - -install -dm 0755 %{buildroot}%{_mandir}/man1/ -find -iname 'dotnet*.1' -type f -exec cp {} %{buildroot}%{_mandir}/man1/ \; - -echo "%{_libdir}/dotnet" >> install_location -install -dm 0755 %{buildroot}%{_sysconfdir}/dotnet -install install_location %{buildroot}%{_sysconfdir}/dotnet/ - -install -dm 0755 %{buildroot}%{_libdir}/dotnet/source-built-artifacts -install artifacts/%{runtime_arch}/Release/Private.SourceBuilt.Artifacts.*.tar.gz %{buildroot}/%{_libdir}/dotnet/source-built-artifacts/ - -# Check debug symbols in all elf objects. This is not in %%check -# because native binaries are stripped by rpm-build after %%install. -# So we need to do this check earlier. -echo "Testing build results for debug symbols..." -%{__python_3} %{SOURCE1} -v %{buildroot}%{_libdir}/dotnet/ - -%check -%{buildroot}%{_libdir}/dotnet/dotnet --info - - -%files -n dotnet -# empty package useful for dependencies - -%files -n dotnet-host -%dir %{_libdir}/dotnet -%{_libdir}/dotnet/dotnet -%dir %{_libdir}/dotnet/host -%dir %{_libdir}/dotnet/host/fxr -%{_bindir}/dotnet -%license %{_libdir}/dotnet/LICENSE.txt -%license %{_libdir}/dotnet/ThirdPartyNotices.txt -%doc %{_mandir}/man1/dotnet*.1.xz -%{_sysconfdir}/profile.d/dotnet.sh -%{_sysconfdir}/dotnet -%dir %{_datadir}/bash-completion -%dir %{_datadir}/bash-completion/completions -%{_datadir}/bash-completion/completions/dotnet - -%files -n dotnet-hostfxr-3.1 -%dir %{_libdir}/dotnet/host/fxr -%{_libdir}/dotnet/host/fxr/%{host_version} - -%files -n dotnet-runtime-3.1 -%dir %{_libdir}/dotnet/shared -%dir %{_libdir}/dotnet/shared/Microsoft.NETCore.App -%{_libdir}/dotnet/shared/Microsoft.NETCore.App/%{runtime_version} - -%files -n aspnetcore-runtime-3.1 -%dir %{_libdir}/dotnet/shared -%dir %{_libdir}/dotnet/shared/Microsoft.AspNetCore.App -%{_libdir}/dotnet/shared/Microsoft.AspNetCore.App/%{aspnetcore_runtime_version} - -%files -n dotnet-templates-3.1 -%dir %{_libdir}/dotnet/templates -%{_libdir}/dotnet/templates/%{templates_version} - -%files -n dotnet-sdk-3.1 -%dir %{_libdir}/dotnet/sdk -%{_libdir}/dotnet/sdk/%{sdk_version} -%dir %{_libdir}/dotnet/packs - -%files -n dotnet-sdk-3.1-source-built-artifacts -%dir %{_libdir}/dotnet -%{_libdir}/dotnet/source-built-artifacts - - diff --git a/dotnet6.0.rpmlintrc b/dotnet6.0.rpmlintrc new file mode 100644 index 0000000..1396c43 --- /dev/null +++ b/dotnet6.0.rpmlintrc @@ -0,0 +1,35 @@ +# Tarball is generated, no upstream URL +addFilter("W:.*invalid-url Source0: dotnet-.*tar.gz") + +# macOS is the correct name +addFilter("W: spelling-error %description -l en_US macOS ->.*") +# The name of the nuget package includes NETCore +addFilter("W: spelling-error .* NETCore -> Net Core.*") + +# Upstream really has no README or documentation files. They suggest using online resources. +addFilter("W: no-documentation") + +# This is a script that we run; it's expected to have execute permissions +addFilter("W: strange-permission check-debug-symbols.py") + +# libicu is a required dependency, but it's used via a dlopen() +addFilter("E: explicit-lib-dependency libicu") + +# There's no devel package for us to place .h files +addFilter("W: devel-file-in-non-devel-package /usr/lib64/dotnet/.*\.h") +addFilter("W: devel-file-in-non-devel-package /usr/lib64/dotnet/.*\.a") + +# These paths are non-standard, so we need $ORIGIN to find these libraries +addFilter("E: binary-or-shlib-defines-rpath /usr/lib64/dotnet/.*\['\$ORIGIN/netcoredeps'\]") +addFilter("E: binary-or-shlib-defines-rpath /usr/lib64/dotnet/.*\['\$ORIGIN'\]") + +# We put dll files in /usr/lib/dotnet, but rpmlint somehow doesn't see it as a binary? +addFilter("W: only-non-binary-in-usr-lib") + +# We use a number of zero-length files, including _._ +addFilter("E: zero-length /usr/lib64/dotnet/.*/_\._") + +# Upstream uses hidden files, even though we ask them not to, as much as possible +addFilter("W: hidden-file-or-dir /usr/lib64/dotnet/.*/\.version") +addFilter("W: hidden-file-or-dir /usr/lib64/dotnet/.*/\.toolsetversion") + diff --git a/dotnet6.0.spec b/dotnet6.0.spec new file mode 100644 index 0000000..da3dad6 --- /dev/null +++ b/dotnet6.0.spec @@ -0,0 +1,593 @@ +%bcond_with bootstrap + +# Avoid provides/requires from private libraries +%global privlibs libhostfxr +%global privlibs %{privlibs}|libclrjit +%global privlibs %{privlibs}|libcoreclr +%global privlibs %{privlibs}|libcoreclrtraceptprovider +%global privlibs %{privlibs}|libdbgshim +%global privlibs %{privlibs}|libhostpolicy +%global privlibs %{privlibs}|libmscordaccore +%global privlibs %{privlibs}|libmscordbi +%global privlibs %{privlibs}|libsos +%global privlibs %{privlibs}|libsosplugin +%global __provides_exclude ^(%{privlibs})\\.so +%global __requires_exclude ^(%{privlibs})\\.so + +# LTO triggers a compilation error for a source level issue. Given that LTO should not +# change the validity of any given source and the nature of the error (undefined enum), I +# suspect a generator program is mis-behaving in some way. This needs further debugging, +# until that's done, disable LTO. This has to happen before setting the flags below. +%define _lto_cflags %{nil} + +%global host_version 6.0.6 +%global runtime_version 6.0.6 +%global aspnetcore_runtime_version %{runtime_version} +%global sdk_version 6.0.106 +%global sdk_feature_band_version %(echo %{sdk_version} | sed -e 's|[[:digit:]][[:digit:]]$|00|') +%global templates_version %{runtime_version} +#%%global templates_version %%(echo %%{runtime_version} | awk 'BEGIN { FS="."; OFS="." } {print $1, $2, $3+1 }') + +%global host_rpm_version %{host_version} +%global runtime_rpm_version %{runtime_version} +%global aspnetcore_runtime_rpm_version %{aspnetcore_runtime_version} +%global sdk_rpm_version %{sdk_version} + +# upstream can update releases without revving the SDK version so these don't always match +%global upstream_tag v%{sdk_version} + +%global use_bundled_libunwind 1 + +%ifarch x86_64 +%global runtime_arch x64 +%endif + +%global runtime_id %{distsuffix}.%{rosa_release}*-%{runtime_arch} + +Name: dotnet6.0 +Version: %{sdk_rpm_version} +Release: 1 +Summary: .NET Runtime and SDK +Group: Development/Other +License: MIT and ASL 2.0 and BSD and LGPLv2+ and CC-BY and CC0 and MS-PL and EPL-1.0 and GPL+ and GPLv2 and ISC and OFL and zlib +URL: https://github.com/dotnet/ + +# The source is generated on a Fedora box via: +# ./build-dotnet-tarball %%{upstream_tag} +Source0: dotnet-%{upstream_tag}.tar.gz +# The source is generated on a Fedora box via: +# ./build-dotnet-tarball --bootstrap %%{upstream_tag} +Source1: dotnet-%{upstream_tag}-x64-bootstrap.tar.xz +Source10: check-debug-symbols.py +Source11: dotnet.sh.in +Patch0: runtime-ROSA-rid.patch +# Fix using lld on Fedora +Patch100: runtime-arm64-lld-fix.patch +# Mono still has a dependency on (now unbuildable) ILStrip which was removed from CoreCLR: https://github.com/dotnet/runtime/pull/60315 +Patch101: runtime-mono-remove-ilstrip.patch +# https://github.com/dotnet/runtime/pull/65392 +Patch102: runtime-fedora-37-rid.patch +# https://github.com/dotnet/runtime/pull/66594 +Patch103: runtime-66594-s390x-debuginfo.patch + +# https://github.com/dotnet/command-line-api/pull/1401 +Patch300: command-line-api-use-work-tree-with-git-apply.patch + +# https://github.com/microsoft/vstest/pull/3046 +Patch400: vstest-use-work-tree-with-git-apply.patch + +# Disable apphost, needed for s390x +Patch500: fsharp-no-apphost.patch + +# This is the suggestion from https://github.com/dotnet/source-build/pull/2450, applied +Patch600: xliff-tasks-use-work-tree-with-git-apply.patch + +# Disable apphost, needed for s390x +Patch700: arcade-no-apphost.patch + +# Named mutex fix for mono, needed for s390x. https://github.com/dotnet/roslyn/pull/57003 +Patch800: roslyn-57003-mono-named-mutex.patch +# Disable apphost, needed for s390x +Patch801: roslyn-no-apphost.patch + +# Disable apphost, needed for s390x +Patch900: roslyn-analyzers-no-apphost.patch + +# Fix mono-specific runtime crashes running msbuild. CoreCLR does not +# load types that are not actually used/invoked at runtime, while mono +# does. System.Configuration and System.Security are missing in +# source-build builds, which breaks msbuild. +Patch1000: msbuild-no-systemsecurity.patch +Patch1001: msbuild-no-systemconfiguration.patch + +# Disable telemetry by default; make it opt-in +Patch1500: sdk-telemetry-optout.patch +# https://github.com/dotnet/sdk/pull/22373 +Patch1501: sdk-22373-portablerid.patch + +# https://github.com/dotnet/installer/pull/12516 +Patch1600: installer-12516-portablerid.patch + +ExclusiveArch: x86_64 + +BuildRequires: clang +BuildRequires: cmake +BuildRequires: coreutils +%if %{without bootstrap} +BuildRequires: dotnet-sdk-6.0 +BuildRequires: dotnet-sdk-6.0-source-built-artifacts +%endif +BuildRequires: findutils +BuildRequires: git +BuildRequires: locales-en +BuildRequires: hostname +BuildRequires: krb5-devel +BuildRequires: pkgconfig(libcurl) +BuildRequires: icu-devel +%if ! %{use_bundled_libunwind} +BuildRequires: libunwind-devel +%endif +BuildRequires: %{_lib}lldb-devel +BuildRequires: llvm +BuildRequires: lttng-ust-devel +BuildRequires: make +BuildRequires: openssl-devel +BuildRequires: python3 +BuildRequires: systemtap-sdt-devel +BuildRequires: tar +BuildRequires: zlib-devel +BuildRequires: which + +%description +.NET is a fast, lightweight and modular platform for creating +cross platform applications that work on Linux, macOS and Windows. + +It particularly focuses on creating console applications, web +applications and micro-services. + +.NET contains a runtime conforming to .NET Standards a set of +framework libraries, an SDK containing compilers and a 'dotnet' +application to drive everything. + + +%package -n dotnet + +Version: %{sdk_rpm_version} +Summary: .NET CLI tools and runtime + +Requires: dotnet-sdk-6.0 >= %{sdk_rpm_version}-%{release} + +%description -n dotnet +.NET is a fast, lightweight and modular platform for creating +cross platform applications that work on Linux, macOS and Windows. + +It particularly focuses on creating console applications, web +applications and micro-services. + +.NET contains a runtime conforming to .NET Standards a set of +framework libraries, an SDK containing compilers and a 'dotnet' +application to drive everything. + + +%package -n dotnet-host + +Version: %{host_rpm_version} +Summary: .NET command line launcher + +%description -n dotnet-host +The .NET host is a command line program that runs a standalone +.NET application or launches the SDK. + +.NET is a fast, lightweight and modular platform for creating +cross platform applications that work on Linux, Mac and Windows. + +It particularly focuses on creating console applications, web +applications and micro-services. + + +%package -n dotnet-hostfxr-6.0 + +Version: %{host_rpm_version} +Summary: .NET command line host resolver + +# Theoretically any version of the host should work. But lets aim for the one +# provided by this package, or from a newer version of .NET +Requires: dotnet-host >= %{host_rpm_version}-%{release} + +%description -n dotnet-hostfxr-6.0 +The .NET host resolver contains the logic to resolve and select +the right version of the .NET SDK or runtime to use. + +.NET is a fast, lightweight and modular platform for creating +cross platform applications that work on Linux, Mac and Windows. + +It particularly focuses on creating console applications, web +applications and micro-services. + + +%package -n dotnet-runtime-6.0 + +Version: %{runtime_rpm_version} +Summary: NET 6.0 runtime + +Requires: dotnet-hostfxr-6.0 >= %{host_rpm_version}-%{release} + +# libicu is dlopen()ed +Requires: icu-devel + +# See src/runtime/src/libraries/Native/AnyOS/brotli-version.txt +Provides: bundled(libbrotli) = 1.0.9 +%if %{use_bundled_libunwind} +# See src/runtime/src/coreclr/pal/src/libunwind/libunwind-version.txt +Provides: bundled(libunwind) = 1.5.rc1.28.g9165d2a1 +%endif + +%description -n dotnet-runtime-6.0 +The .NET runtime contains everything needed to run .NET applications. +It includes a high performance Virtual Machine as well as the framework +libraries used by .NET applications. + +.NET is a fast, lightweight and modular platform for creating +cross platform applications that work on Linux, Mac and Windows. + +It particularly focuses on creating console applications, web +applications and micro-services. + + +%package -n aspnetcore-runtime-6.0 + +Version: %{aspnetcore_runtime_rpm_version} +Summary: ASP.NET Core 6.0 runtime + +Requires: dotnet-runtime-6.0 >= %{runtime_rpm_version}-%{release} + +%description -n aspnetcore-runtime-6.0 +The ASP.NET Core runtime contains everything needed to run .NET +web applications. It includes a high performance Virtual Machine as +well as the framework libraries used by .NET applications. + +ASP.NET Core is a fast, lightweight and modular platform for creating +cross platform web applications that work on Linux, Mac and Windows. + +It particularly focuses on creating console applications, web +applications and micro-services. + + +%package -n dotnet-templates-6.0 + +Version: %{sdk_rpm_version} +Summary: .NET 6.0 templates + +# Theoretically any version of the host should work. But lets aim for the one +# provided by this package, or from a newer version of .NET +Requires: dotnet-host >= %{host_rpm_version}-%{release} + +%description -n dotnet-templates-6.0 +This package contains templates used by the .NET SDK. + +.NET is a fast, lightweight and modular platform for creating +cross platform applications that work on Linux, Mac and Windows. + +It particularly focuses on creating console applications, web +applications and micro-services. + + +%package -n dotnet-sdk-6.0 + +Version: %{sdk_rpm_version} +Summary: .NET 6.0 Software Development Kit + +Provides: bundled(js-jquery) + +Requires: dotnet-runtime-6.0 >= %{runtime_rpm_version}-%{release} +Requires: aspnetcore-runtime-6.0 >= %{aspnetcore_runtime_rpm_version}-%{release} + +Requires: dotnet-apphost-pack-6.0 >= %{runtime_rpm_version}-%{release} +Requires: dotnet-targeting-pack-6.0 >= %{runtime_rpm_version}-%{release} +Requires: aspnetcore-targeting-pack-6.0 >= %{aspnetcore_runtime_rpm_version}-%{release} +Requires: netstandard-targeting-pack-2.1 >= %{sdk_rpm_version}-%{release} + +Requires: dotnet-templates-6.0 >= %{sdk_rpm_version}-%{release} + +%description -n dotnet-sdk-6.0 +The .NET SDK is a collection of command line applications to +create, build, publish and run .NET applications. + +.NET is a fast, lightweight and modular platform for creating +cross platform applications that work on Linux, Mac and Windows. + +It particularly focuses on creating console applications, web +applications and micro-services. + + +%global dotnet_targeting_pack() %{expand: +%package -n %{1} + +Version: %{2} +Summary: Targeting Pack for %{3} %{4} + +Requires: dotnet-host + +%description -n %{1} +This package provides a targeting pack for %{3} %{4} +that allows developers to compile against and target %{3} %{4} +applications using the .NET SDK. + +%files -n %{1} +%dir %{_libdir}/dotnet/packs +%{_libdir}/dotnet/packs/%{5} +} + +%dotnet_targeting_pack dotnet-apphost-pack-6.0 %{runtime_rpm_version} Microsoft.NETCore.App 6.0 Microsoft.NETCore.App.Host.%{runtime_id} +%dotnet_targeting_pack dotnet-targeting-pack-6.0 %{runtime_rpm_version} Microsoft.NETCore.App 6.0 Microsoft.NETCore.App.Ref +%dotnet_targeting_pack aspnetcore-targeting-pack-6.0 %{aspnetcore_runtime_rpm_version} Microsoft.AspNetCore.App 6.0 Microsoft.AspNetCore.App.Ref +%dotnet_targeting_pack netstandard-targeting-pack-2.1 %{sdk_rpm_version} NETStandard.Library 2.1 NETStandard.Library.Ref + + +%package -n dotnet-sdk-6.0-source-built-artifacts + +Version: %{sdk_rpm_version} +Summary: Internal package for building .NET 6.0 Software Development Kit + +%description -n dotnet-sdk-6.0-source-built-artifacts +The .NET source-built archive is a collection of packages needed +to build the .NET SDK itself. + +These are not meant for general use. + + +%prep +%if %{without bootstrap} +%setup -q -n dotnet-%{upstream_tag} +%else +tar xf %{S:1} -C $PWD +pushd dotnet-%{upstream_tag}-x64-bootstrap +%endif + +%if %{without bootstrap} +# Remove all prebuilts +find -iname '*.dll' -type f -delete +find -iname '*.so' -type f -delete +find -iname '*.tar.gz' -type f -delete +find -iname '*.nupkg' -type f -delete +find -iname '*.zip' -type f -delete +rm -rf .dotnet/ +rm -rf packages/source-built + +mkdir -p packages/archive +ln -s %{_libdir}/dotnet/source-built-artifacts/Private.SourceBuilt.Artifacts.*.tar.gz packages/archive/ +ln -s %{_libdir}/dotnet/reference-packages/Private.SourceBuild.ReferencePackages*.tar.gz packages/archive/ +%endif + +# Fix bad hardcoded path in build +sed -i 's|/usr/share/dotnet|%{_libdir}/dotnet|' src/runtime/src/native/corehost/hostmisc/pal.unix.cpp + +pushd src/runtime +%patch0 -p2 +%patch100 -p1 +%patch101 -p1 +%patch102 -p1 +%patch103 -p1 +popd + +pushd src/command-line-api +%patch300 -p1 +popd + +pushd src/vstest +%patch400 -p1 +popd + + +pushd src/fsharp +%patch500 -p1 +popd + +pushd src/xliff-tasks +%patch600 -p1 +popd + +pushd src/arcade +%patch700 -p1 +popd + +pushd src/roslyn +%patch800 -p3 +%patch801 -p1 +popd + +pushd src/roslyn-analyzers +%patch900 -p1 +popd + +pushd src/sdk +%patch1500 -p1 +%patch1501 -p1 +popd + +pushd src/installer +%patch1600 -p1 +popd + + +%if ! %{use_bundled_libunwind} +sed -i -E 's|( /p:BuildDebPackage=false)|\1 --cmakeargs -DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE|' src/runtime/eng/SourceBuild.props +%endif + +%build + +%if %{with bootstrap} +pushd dotnet-%{upstream_tag}-x64-bootstrap +%endif + +cat /etc/os-release + +%if %{without bootstrap} +# We need to create a copy because we will mutate this +cp -a %{_libdir}/dotnet previously-built-dotnet +find previously-built-dotnet +%endif + +# Filter flags not supported by clang +%global dotnet_cflags %(echo %optflags | sed -re 's/-specs=[^ ]*//g') +%global dotnet_ldflags %(echo %{__global_ldflags} | sed -re 's/-specs=[^ ]*//g') +export CFLAGS="%{dotnet_cflags}" +export CXXFLAGS="%{dotnet_cflags}" +export LDFLAGS="%{dotnet_ldflags}" + +# -fstack-clash-protection breaks CoreCLR +CFLAGS=$(echo $CFLAGS | sed -e 's/-fstack-clash-protection//' ) +CXXFLAGS=$(echo $CXXFLAGS | sed -e 's/-fstack-clash-protection//' ) + +export EXTRA_CFLAGS="$CFLAGS" +export EXTRA_CXXFLAGS="$CXXFLAGS" +export EXTRA_LDFLAGS="$LDFLAGS" + +# Disable tracing, which is incompatible with certain versions of +# lttng See https://github.com/dotnet/runtime/issues/57784. The +# suggested compile-time change doesn't work, unfortunately. +export COMPlus_LTTng=0 + +VERBOSE=1 ./build.sh \ +%if %{without bootstrap} + --with-sdk previously-built-dotnet \ +%endif + -- \ + +echo \ + /v:n \ + /p:SkipPortableRuntimeBuild=true \ + /p:LogVerbosity=n \ + /p:MinimalConsoleLogOutput=false \ + /p:ContinueOnPrebuiltBaselineError=true \ + + +sed -e 's|[@]LIBDIR[@]|%{_libdir}|g' %{SOURCE11} > dotnet.sh + + +%install + +%if %{with bootstrap} +pushd dotnet-%{upstream_tag}-x64-bootstrap +%endif + +install -dm 0755 %{buildroot}%{_libdir}/dotnet +ls artifacts/%{runtime_arch}/Release +tar xf artifacts/%{runtime_arch}/Release/dotnet-sdk-%{sdk_version}-%{runtime_id}.tar.gz -C %{buildroot}%{_libdir}/dotnet/ + +# See https://github.com/dotnet/source-build/issues/2579 +find %{buildroot}%{_libdir}/dotnet/ -type f -name 'testhost.x86' -delete +find %{buildroot}%{_libdir}/dotnet/ -type f -name 'vstest.console' -delete + +# Install managed symbols: disabled because they don't contain sources +# but point to the paths the sources would have been at in the build +# servers. The end user experience is pretty bad atm. +# tar xf artifacts/%%{runtime_arch}/Release/runtime/dotnet-runtime-symbols-%%{runtime_id}-%%{runtime_version}.tar.gz \ +# -C %%{buildroot}/%%{_libdir}/dotnet/shared/Microsoft.NETCore.App/%%{runtime_version}/ + +# Fix executable permissions on files +find %{buildroot}%{_libdir}/dotnet/ -type f -name 'apphost' -exec chmod +x {} \; +find %{buildroot}%{_libdir}/dotnet/ -type f -name 'singlefilehost' -exec chmod +x {} \; +find %{buildroot}%{_libdir}/dotnet/ -type f -name 'lib*so' -exec chmod +x {} \; +find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.a' -exec chmod -x {} \; +find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.dll' -exec chmod -x {} \; +find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.h' -exec chmod 0644 {} \; +find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.json' -exec chmod -x {} \; +find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.pdb' -exec chmod -x {} \; +find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.props' -exec chmod -x {} \; +find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.pubxml' -exec chmod -x {} \; +find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.targets' -exec chmod -x {} \; +find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.txt' -exec chmod -x {} \; +find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.xml' -exec chmod -x {} \; + +install -dm 0755 %{buildroot}%{_sysconfdir}/profile.d/ +install dotnet.sh %{buildroot}%{_sysconfdir}/profile.d/ + +install -dm 0755 %{buildroot}/%{_datadir}/bash-completion/completions +# dynamic completion needs the file to be named the same as the base command +install src/sdk/scripts/register-completions.bash %{buildroot}/%{_datadir}/bash-completion/completions/dotnet + +# TODO: the zsh completion script needs to be ported to use #compdef +#install -dm 755 %%{buildroot}/%%{_datadir}/zsh/site-functions +#install src/cli/scripts/register-completions.zsh %%{buildroot}/%%{_datadir}/zsh/site-functions/_dotnet + +install -dm 0755 %{buildroot}%{_bindir} +ln -s ../../%{_libdir}/dotnet/dotnet %{buildroot}%{_bindir}/ + +install -dm 0755 %{buildroot}%{_mandir}/man1/ +find -iname 'dotnet*.1' -type f -exec cp {} %{buildroot}%{_mandir}/man1/ \; + +install -dm 0755 %{buildroot}%{_sysconfdir}/dotnet +echo "%{_libdir}/dotnet" >> install_location +install install_location %{buildroot}%{_sysconfdir}/dotnet/ +echo "%{_libdir}/dotnet" >> install_location_%{runtime_arch} +install install_location_%{runtime_arch} %{buildroot}%{_sysconfdir}/dotnet/ + +install -dm 0755 %{buildroot}%{_libdir}/dotnet/source-built-artifacts +install -m 0644 artifacts/%{runtime_arch}/Release/Private.SourceBuilt.Artifacts.*.tar.gz %{buildroot}/%{_libdir}/dotnet/source-built-artifacts/ + + +# Quick and dirty check for https://github.com/dotnet/source-build/issues/2731 +test -f %{buildroot}%{_libdir}/dotnet/sdk/%{sdk_version}/Sdks/Microsoft.NET.Sdk/Sdk/Sdk.props + +# Check debug symbols in all elf objects. This is not in %%check +# because native binaries are stripped by rpm-build after %%install. +# So we need to do this check earlier. +echo "Testing build results for debug symbols..." +%{__python3} %{SOURCE10} -v %{buildroot}%{_libdir}/dotnet/ + +%check +%{buildroot}%{_libdir}/dotnet/dotnet --info +%{buildroot}%{_libdir}/dotnet/dotnet --version + + +%files -n dotnet +# empty package useful for dependencies + +%files -n dotnet-host +%dir %{_libdir}/dotnet +%{_libdir}/dotnet/dotnet +%dir %{_libdir}/dotnet/host +%dir %{_libdir}/dotnet/host/fxr +%{_bindir}/dotnet +%license %{_libdir}/dotnet/LICENSE.txt +%license %{_libdir}/dotnet/ThirdPartyNotices.txt +%doc %{_mandir}/man?/dotnet*.?.* +%config(noreplace) %{_sysconfdir}/profile.d/dotnet.sh +%config(noreplace) %{_sysconfdir}/dotnet +%dir %{_datadir}/bash-completion +%dir %{_datadir}/bash-completion/completions +%{_datadir}/bash-completion/completions/dotnet + +%files -n dotnet-hostfxr-6.0 +%dir %{_libdir}/dotnet/host/fxr +%{_libdir}/dotnet/host/fxr/%{host_version} + +%files -n dotnet-runtime-6.0 +%dir %{_libdir}/dotnet/shared +%dir %{_libdir}/dotnet/shared/Microsoft.NETCore.App +%{_libdir}/dotnet/shared/Microsoft.NETCore.App/%{runtime_version} + +%files -n aspnetcore-runtime-6.0 +%dir %{_libdir}/dotnet/shared +%dir %{_libdir}/dotnet/shared/Microsoft.AspNetCore.App +%{_libdir}/dotnet/shared/Microsoft.AspNetCore.App/%{aspnetcore_runtime_version} + +%files -n dotnet-templates-6.0 +%dir %{_libdir}/dotnet/templates +%{_libdir}/dotnet/templates/%{templates_version} + +%files -n dotnet-sdk-6.0 +%dir %{_libdir}/dotnet/sdk +%{_libdir}/dotnet/sdk/%{sdk_version} +%dir %{_libdir}/dotnet/sdk-manifests +%{_libdir}/dotnet/sdk-manifests/%{sdk_feature_band_version} +%{_libdir}/dotnet/metadata +%dir %{_libdir}/dotnet/packs + +%files -n dotnet-sdk-6.0-source-built-artifacts +%dir %{_libdir}/dotnet +%{_libdir}/dotnet/source-built-artifacts + + + diff --git a/fsharp-no-apphost.patch b/fsharp-no-apphost.patch new file mode 100644 index 0000000..1534888 --- /dev/null +++ b/fsharp-no-apphost.patch @@ -0,0 +1,21 @@ +--- a/tests/benchmarks/MicroPerf/MicroPerf.fsproj ++++ b/tests/benchmarks/MicroPerf/MicroPerf.fsproj +@@ -9,6 +9,7 @@ + $(OtherFlags) --nowarn:57 + $(OtherFlags) --langversion:preview + $(OtherFlags) --define:PREVIEW ++ false + + + + $(OtherFlags) --nowarn:1204 + + diff --git a/fsharp-use-work-tree-with-git-apply.patch b/fsharp-use-work-tree-with-git-apply.patch new file mode 100644 index 0000000..810cf67 --- /dev/null +++ b/fsharp-use-work-tree-with-git-apply.patch @@ -0,0 +1,11 @@ +--- a/eng/SourceBuild.props ++++ b/eng/SourceBuild.props +@@ -15,7 +15,7 @@ + + + + diff --git a/installer-12516-portablerid.patch b/installer-12516-portablerid.patch new file mode 100644 index 0000000..4cb4ab6 --- /dev/null +++ b/installer-12516-portablerid.patch @@ -0,0 +1,23 @@ +From 892222071f73062f969f4f6ed1df8f759b9327b7 Mon Sep 17 00:00:00 2001 +From: Tom Deseyn +Date: Wed, 3 Nov 2021 15:12:59 +0100 +Subject: [PATCH] GetRuntimeInformation.targets: determine + PortableProductMonikerRid based on HostOSName and Architecture. + +--- + src/redist/targets/GetRuntimeInformation.targets | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/redist/targets/GetRuntimeInformation.targets b/src/redist/targets/GetRuntimeInformation.targets +index 5133c3a3841..01f704c7d8e 100644 +--- a/src/redist/targets/GetRuntimeInformation.targets ++++ b/src/redist/targets/GetRuntimeInformation.targets +@@ -28,6 +28,8 @@ + '$(Rid)' == 'linux-musl-x64' ">$(Rid) + $(OSName)-$(Architecture) + ++ $(HostOSName)-$(Architecture) ++ + dotnet-sdk-internal$(PgoTerm) + dotnet-sdk$(PgoTerm) + diff --git a/msbuild-no-systemconfiguration.patch b/msbuild-no-systemconfiguration.patch new file mode 100644 index 0000000..537470d --- /dev/null +++ b/msbuild-no-systemconfiguration.patch @@ -0,0 +1,46 @@ +--- a/src/Build/Definition/ProjectCollection.cs ++++ b/src/Build/Definition/ProjectCollection.cs +@@ -1754,7 +1754,11 @@ namespace Microsoft.Build.Evaluation + #if FEATURE_WIN32_REGISTRY + ToolsetRegistryReader registryReader = null, + #endif ++#if FEATURE_SYSTEM_CONFIGURATION + ToolsetConfigurationReader configReader = null ++#else ++ object configReader = null ++#endif + ) + { + _toolsets = new Dictionary(StringComparer.OrdinalIgnoreCase); +--- a/src/Build/Definition/ToolsetReader.cs ++++ b/src/Build/Definition/ToolsetReader.cs +@@ -101,7 +101,11 @@ namespace Microsoft.Build.Evaluation + #if FEATURE_WIN32_REGISTRY + ToolsetRegistryReader registryReader, + #endif ++#if FEATURE_SYSTEM_CONFIGURATION + ToolsetConfigurationReader configurationReader, ++#else ++ object _configurationReader, ++#endif + PropertyDictionary environmentProperties, + PropertyDictionary globalProperties, + ToolsetDefinitionLocations locations +@@ -120,6 +124,7 @@ namespace Microsoft.Build.Evaluation + + if ((locations & ToolsetDefinitionLocations.ConfigurationFile) == ToolsetDefinitionLocations.ConfigurationFile) + { ++#if FEATURE_SYSTEM_CONFIGURATION + if (configurationReader == null) + { + configurationReader = new ToolsetConfigurationReader(environmentProperties, globalProperties); +@@ -129,6 +134,9 @@ namespace Microsoft.Build.Evaluation + defaultToolsVersionFromConfiguration = configurationReader.ReadToolsets(toolsets, globalProperties, + initialProperties, true /* accumulate properties */, out overrideTasksPathFromConfiguration, + out defaultOverrideToolsVersionFromConfiguration); ++#else ++ throw new InvalidOperationException("ToolsetDefinitionLocations.ConfigurationFile not supported"); ++#endif + } + + string defaultToolsVersionFromRegistry = null; diff --git a/msbuild-no-systemsecurity.patch b/msbuild-no-systemsecurity.patch new file mode 100644 index 0000000..dcf6809 --- /dev/null +++ b/msbuild-no-systemsecurity.patch @@ -0,0 +1,12 @@ +--- a/src/Shared/ExceptionHandling.cs ++++ b/src/Shared/ExceptionHandling.cs +@@ -153,7 +153,9 @@ namespace Microsoft.Build.Shared + internal static bool IsXmlException(Exception e) + { + return e is XmlException ++#if FEATURE_SECURITY_PERMISSIONS + || e is XmlSyntaxException ++#endif + || e is XmlSchemaException + || e is UriFormatException; // XmlTextReader for example uses this under the covers + } diff --git a/rename-tarball b/rename-tarball new file mode 100755 index 0000000..ea7e65c --- /dev/null +++ b/rename-tarball @@ -0,0 +1,51 @@ +#!/bin/bash + +# Usage: +# ./rename-tarball original-name.tar.gz new-name.tar.gz + +set -euo pipefail +IFS=$'\n\t' + +positional_args=() +while [[ "$#" -gt 0 ]]; do + arg="${1}" + case "${arg}" in + -h|--help) + print_usage + exit 0 + ;; + *) + positional_args+=("$1") + shift + ;; + esac +done + +if [[ -z "${positional_args[0]:-}" ]]; then + echo "error: missing original tarball name" + exit 1 +fi + +original_path=$(readlink -f "${positional_args[0]:-}") +original_name=$(basename "$original_path") + +new_name=${positional_args[1]:-} +if [[ -z ${new_name} ]]; then + echo "error: missing new tarball name" + exit 1 +fi + +original_name=${original_name/%.tar.gz} +new_name=${new_name/.tar.gz} + +echo "Original: ${original_name}.tar.gz" +echo "New name: ${new_name}.tar.gz" + +mkdir "temp-${new_name}" +pushd "temp-${new_name}" +tar xf "${original_path}" +mv -- * "${new_name}" +tar czf ../"${new_name}.tar.gz" "${new_name}" +rm -rf "${new_name}" +popd +rmdir "temp-${new_name}" diff --git a/roslyn-57003-mono-named-mutex.patch b/roslyn-57003-mono-named-mutex.patch new file mode 100644 index 0000000..c264bff --- /dev/null +++ b/roslyn-57003-mono-named-mutex.patch @@ -0,0 +1,453 @@ +Index: tarball.6.0.1-rc2-6.0.100-rc2/src/roslyn.8e1779e16298415843e85029d8b52a1ae9bb4c30/src/Compilers/Core/Portable/InternalUtilities/PlatformInformation.cs +=================================================================== +--- tarball.6.0.1-rc2-6.0.100-rc2.orig/src/roslyn.8e1779e16298415843e85029d8b52a1ae9bb4c30/src/Compilers/Core/Portable/InternalUtilities/PlatformInformation.cs ++++ tarball.6.0.1-rc2-6.0.100-rc2/src/roslyn.8e1779e16298415843e85029d8b52a1ae9bb4c30/src/Compilers/Core/Portable/InternalUtilities/PlatformInformation.cs +@@ -31,5 +31,24 @@ namespace Roslyn.Utilities + } + } + } ++ /// ++ /// Are we running on .NET 5 or later using the Mono runtime? ++ /// Will also return true when running on Mono itself; if necessary ++ /// we can use IsRunningOnMono to distinguish. ++ /// ++ public static bool IsUsingMonoRuntime ++ { ++ get ++ { ++ try ++ { ++ return !(Type.GetType("Mono.RuntimeStructs", throwOnError: false) is null); ++ } ++ catch ++ { ++ return false; ++ } ++ } ++ } + } + } +Index: tarball.6.0.1-rc2-6.0.100-rc2/src/roslyn.8e1779e16298415843e85029d8b52a1ae9bb4c30/src/Compilers/Server/VBCSCompilerTests/BuildClientTests.cs +=================================================================== +--- tarball.6.0.1-rc2-6.0.100-rc2.orig/src/roslyn.8e1779e16298415843e85029d8b52a1ae9bb4c30/src/Compilers/Server/VBCSCompilerTests/BuildClientTests.cs ++++ tarball.6.0.1-rc2-6.0.100-rc2/src/roslyn.8e1779e16298415843e85029d8b52a1ae9bb4c30/src/Compilers/Server/VBCSCompilerTests/BuildClientTests.cs +@@ -79,7 +79,7 @@ namespace Microsoft.CodeAnalysis.Compile + // to connect. When it fails it should fall back to in-proc + // compilation. + bool holdsMutex; +- using (var serverMutex = new Mutex(initiallyOwned: true, ++ using (var serverMutex = BuildServerConnection.OpenOrCreateMutex( + name: BuildServerConnection.GetServerMutexName(_pipeName), + createdNew: out holdsMutex)) + { +Index: tarball.6.0.1-rc2-6.0.100-rc2/src/roslyn.8e1779e16298415843e85029d8b52a1ae9bb4c30/src/Compilers/Server/VBCSCompilerTests/CompilerServerApiTest.cs +=================================================================== +--- tarball.6.0.1-rc2-6.0.100-rc2.orig/src/roslyn.8e1779e16298415843e85029d8b52a1ae9bb4c30/src/Compilers/Server/VBCSCompilerTests/CompilerServerApiTest.cs ++++ tarball.6.0.1-rc2-6.0.100-rc2/src/roslyn.8e1779e16298415843e85029d8b52a1ae9bb4c30/src/Compilers/Server/VBCSCompilerTests/CompilerServerApiTest.cs +@@ -103,7 +103,7 @@ class Hello + var mutexName = BuildServerConnection.GetServerMutexName(pipeName); + + bool holdsMutex; +- using (var mutex = new Mutex(initiallyOwned: true, ++ using (var mutex = BuildServerConnection.OpenOrCreateMutex( + name: mutexName, + createdNew: out holdsMutex)) + { +@@ -119,7 +119,7 @@ class Hello + } + finally + { +- mutex.ReleaseMutex(); ++ mutex.Dispose(); + } + } + } +Index: tarball.6.0.1-rc2-6.0.100-rc2/src/roslyn.8e1779e16298415843e85029d8b52a1ae9bb4c30/src/Compilers/Server/VBCSCompilerTests/CompilerServerTests.cs +=================================================================== +--- tarball.6.0.1-rc2-6.0.100-rc2.orig/src/roslyn.8e1779e16298415843e85029d8b52a1ae9bb4c30/src/Compilers/Server/VBCSCompilerTests/CompilerServerTests.cs ++++ tarball.6.0.1-rc2-6.0.100-rc2/src/roslyn.8e1779e16298415843e85029d8b52a1ae9bb4c30/src/Compilers/Server/VBCSCompilerTests/CompilerServerTests.cs +@@ -304,7 +304,7 @@ End Module") + var newTempDir = _tempDirectory.CreateDirectory(new string('a', 100 - _tempDirectory.Path.Length)); + await ApplyEnvironmentVariables( + new[] { new KeyValuePair("TMPDIR", newTempDir.Path) }, +- async () => ++ async () => await Task.Run(async () => + { + using var serverData = await ServerUtil.CreateServer(_logger); + var result = RunCommandLineCompiler( +@@ -317,7 +317,7 @@ End Module") + + var listener = await serverData.Complete(); + Assert.Equal(CompletionData.RequestCompleted, listener.CompletionDataList.Single()); +- }); ++ })); + } + + [Fact] +Index: tarball.6.0.1-rc2-6.0.100-rc2/src/roslyn.8e1779e16298415843e85029d8b52a1ae9bb4c30/src/Compilers/Server/VBCSCompilerTests/VBCSCompilerServerTests.cs +=================================================================== +--- tarball.6.0.1-rc2-6.0.100-rc2.orig/src/roslyn.8e1779e16298415843e85029d8b52a1ae9bb4c30/src/Compilers/Server/VBCSCompilerTests/VBCSCompilerServerTests.cs ++++ tarball.6.0.1-rc2-6.0.100-rc2/src/roslyn.8e1779e16298415843e85029d8b52a1ae9bb4c30/src/Compilers/Server/VBCSCompilerTests/VBCSCompilerServerTests.cs +@@ -101,7 +101,7 @@ namespace Microsoft.CodeAnalysis.Compile + + var thread = new Thread(() => + { +- using (var mutex = new Mutex(initiallyOwned: true, name: mutexName, createdNew: out created)) ++ using (var mutex = BuildServerConnection.OpenOrCreateMutex(name: mutexName, createdNew: out created)) + using (var stream = NamedPipeUtil.CreateServer(pipeName)) + { + readyMre.Set(); +@@ -112,7 +112,7 @@ namespace Microsoft.CodeAnalysis.Compile + stream.Close(); + + doneMre.WaitOne(); +- mutex.ReleaseMutex(); ++ mutex.Dispose(); + } + }); + +@@ -153,7 +153,7 @@ namespace Microsoft.CodeAnalysis.Compile + { + using (var stream = NamedPipeUtil.CreateServer(pipeName)) + { +- var mutex = new Mutex(initiallyOwned: true, name: mutexName, createdNew: out created); ++ var mutex = BuildServerConnection.OpenOrCreateMutex(name: mutexName, createdNew: out created); + readyMre.Set(); + + stream.WaitForConnection(); +@@ -161,7 +161,6 @@ namespace Microsoft.CodeAnalysis.Compile + + // Client is waiting for a response. Close the mutex now. Then close the connection + // so the client gets an error. +- mutex.ReleaseMutex(); + mutex.Dispose(); + stream.Close(); + +Index: tarball.6.0.1-rc2-6.0.100-rc2/src/roslyn.8e1779e16298415843e85029d8b52a1ae9bb4c30/src/Compilers/Shared/BuildServerConnection.cs +=================================================================== +--- tarball.6.0.1-rc2-6.0.100-rc2.orig/src/roslyn.8e1779e16298415843e85029d8b52a1ae9bb4c30/src/Compilers/Shared/BuildServerConnection.cs ++++ tarball.6.0.1-rc2-6.0.100-rc2/src/roslyn.8e1779e16298415843e85029d8b52a1ae9bb4c30/src/Compilers/Shared/BuildServerConnection.cs +@@ -543,19 +543,10 @@ namespace Microsoft.CodeAnalysis.Command + { + try + { +- if (PlatformInformation.IsRunningOnMono) ++ if (PlatformInformation.IsUsingMonoRuntime) + { +- IServerMutex? mutex = null; +- bool createdNew = false; +- try +- { +- mutex = new ServerFileMutexPair(mutexName, false, out createdNew); +- return !createdNew; +- } +- finally +- { +- mutex?.Dispose(); +- } ++ using var mutex = new ServerFileMutex(mutexName); ++ return !mutex.CouldLock(); + } + else + { +@@ -572,9 +563,11 @@ namespace Microsoft.CodeAnalysis.Command + + internal static IServerMutex OpenOrCreateMutex(string name, out bool createdNew) + { +- if (PlatformInformation.IsRunningOnMono) ++ if (PlatformInformation.IsUsingMonoRuntime) + { +- return new ServerFileMutexPair(name, initiallyOwned: true, out createdNew); ++ var mutex = new ServerFileMutex(name); ++ createdNew = mutex.TryLock(0); ++ return mutex; + } + else + { +@@ -648,19 +641,22 @@ namespace Microsoft.CodeAnalysis.Command + } + + /// +- /// An interprocess mutex abstraction based on OS advisory locking (FileStream.Lock/Unlock). ++ /// An interprocess mutex abstraction based on file sharing permission (FileShare.None). + /// If multiple processes running as the same user create FileMutex instances with the same name, + /// those instances will all point to the same file somewhere in a selected temporary directory. +- /// The TryLock method can be used to attempt to acquire the mutex, with Unlock or Dispose used to release. ++ /// The TryLock method can be used to attempt to acquire the mutex, with Dispose used to release. ++ /// The CouldLock method can be used to check whether an attempt to acquire the mutex would have ++ /// succeeded at the current time, without actually acquiring it. + /// Unlike Win32 named mutexes, there is no mechanism for detecting an abandoned mutex. The file + /// will simply revert to being unlocked but remain where it is. + /// +- internal sealed class FileMutex : IDisposable ++ internal sealed class ServerFileMutex : IServerMutex + { +- public readonly FileStream Stream; ++ public FileStream? Stream; + public readonly string FilePath; ++ public readonly string GuardPath; + +- public bool IsLocked { get; private set; } ++ public bool IsDisposed { get; private set; } + + internal static string GetMutexDirectory() + { +@@ -670,61 +666,176 @@ namespace Microsoft.CodeAnalysis.Command + return result; + } + +- public FileMutex(string name) ++ public ServerFileMutex(string name) + { +- FilePath = Path.Combine(GetMutexDirectory(), name); +- Stream = new FileStream(FilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); ++ var mutexDirectory = GetMutexDirectory(); ++ FilePath = Path.Combine(mutexDirectory, name); ++ GuardPath = Path.Combine(mutexDirectory, ".guard"); + } + +- public bool TryLock(int timeoutMs) ++ /// ++ /// Acquire the guard by opening the guard file with FileShare.None. The guard must only ever ++ /// be held for very brief amounts of time, so we can simply spin until it is acquired. The ++ /// guard must be released by disposing the FileStream returned from this routine. Note the ++ /// guard file is never deleted; this is a leak, but only of a single file. ++ /// ++ internal FileStream LockGuard() + { +- if (IsLocked) +- throw new InvalidOperationException("Lock already held"); +- +- var sw = Stopwatch.StartNew(); +- do ++ // We should be able to acquire the guard quickly. Limit the number of retries anyway ++ // by some arbitrary bound to avoid getting hung up in a possibly infinite loop. ++ for (var i = 0; i < 100; i++) + { + try + { +- Stream.Lock(0, 0); +- IsLocked = true; +- return true; ++ return new FileStream(GuardPath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); + } + catch (IOException) + { +- // Lock currently held by someone else. ++ // Guard currently held by someone else. + // We want to sleep for a short period of time to ensure that other processes + // have an opportunity to finish their work and relinquish the lock. + // Spinning here (via Yield) would work but risks creating a priority + // inversion if the lock is held by a lower-priority process. + Thread.Sleep(1); + } ++ } ++ // Handle unexpected failure to acquire guard as error. ++ throw new InvalidOperationException("Unable to acquire guard"); ++ } ++ ++ /// ++ /// Attempt to acquire the lock by opening the lock file with FileShare.None. Sets "Stream" ++ /// and returns true if successful, returns false if the lock is already held by another ++ /// thread or process. Guard must be held when calling this routine. ++ /// ++ internal bool TryLockFile() ++ { ++ Debug.Assert(Stream is null); ++ FileStream? stream = null; ++ try ++ { ++ stream = new FileStream(FilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); ++ // On some targets, the file locking used to implement FileShare.None may not be ++ // atomic with opening/creating the file. This creates a race window when another ++ // thread holds the lock and is just about to unlock: we may be able to open the ++ // file here, then the other thread unlocks and deletes the file, and then we ++ // acquire the lock on our file handle - but the actual file is already deleted. ++ // To close this race, we verify that the file does in fact still exist now that ++ // we have successfull acquired the locked FileStream. (Note that this check is ++ // safe because we cannot race with an other attempt to create the file since we ++ // hold the guard, and after the FileStream constructor returned we can no race ++ // with file deletion because we hold the lock.) ++ if (!File.Exists(FilePath)) ++ { ++ // To simplify the logic, we treat this case as "unable to acquire the lock" ++ // because it we caught another process while it owned the lock and was just ++ // giving it up. If the caller retries, we'll likely acquire the lock then. ++ stream.Dispose(); ++ return false; ++ } ++ } ++ catch (Exception) ++ { ++ stream?.Dispose(); ++ return false; ++ } ++ Stream = stream; ++ return true; ++ } ++ ++ /// ++ /// Release the lock by deleting the lock file and disposing "Stream". ++ /// ++ internal void UnlockFile() ++ { ++ Debug.Assert(Stream is not null); ++ try ++ { ++ // Delete the lock file while the stream is not yet disposed ++ // and we therefore still hold the FileShare.None exclusion. ++ // There may still be a race with another thread attempting a ++ // TryLockFile in parallel, but that is safely handled there. ++ File.Delete(FilePath); ++ } ++ finally ++ { ++ Stream.Dispose(); ++ Stream = null; ++ } ++ } ++ ++ public bool TryLock(int timeoutMs) ++ { ++ if (IsDisposed) ++ throw new ObjectDisposedException("Mutex"); ++ if (Stream is not null) ++ throw new InvalidOperationException("Lock already held"); ++ ++ var sw = Stopwatch.StartNew(); ++ do ++ { ++ try ++ { ++ // Attempt to acquire lock while holding guard. ++ using var guard = LockGuard(); ++ if (TryLockFile()) ++ return true; ++ } + catch (Exception) + { +- // Something else went wrong. + return false; + } ++ ++ // See comment in LockGuard. ++ Thread.Sleep(1); + } while (sw.ElapsedMilliseconds < timeoutMs); + + return false; + } + +- public void Unlock() ++ public bool CouldLock() + { +- if (!IsLocked) +- return; +- Stream.Unlock(0, 0); +- IsLocked = false; ++ if (IsDisposed) ++ return false; ++ if (Stream is not null) ++ return false; ++ ++ try ++ { ++ // Attempt to acquire lock while holding guard, and if successful ++ // immediately unlock again while still holding guard. This ensures ++ // no other thread will spuriously observe the lock as held due to ++ // the lock attempt here. ++ using var guard = LockGuard(); ++ if (TryLockFile()) ++ { ++ UnlockFile(); ++ return true; ++ } ++ } ++ catch (Exception) ++ { ++ return false; ++ } ++ ++ return false; + } + + public void Dispose() + { +- var wasLocked = IsLocked; +- if (wasLocked) +- Unlock(); +- Stream.Dispose(); +- // We do not delete the lock file here because there is no reliable way to perform a +- // 'delete if no one has the file open' operation atomically on *nix. This is a leak. ++ if (IsDisposed) ++ return; ++ IsDisposed = true; ++ if (Stream is not null) ++ { ++ try ++ { ++ UnlockFile(); ++ } ++ catch (Exception) ++ { ++ } ++ } + } + } + +@@ -792,56 +903,4 @@ namespace Microsoft.CodeAnalysis.Command + } + } + } +- +- /// +- /// Approximates a named mutex with 'locked', 'unlocked' and 'abandoned' states. +- /// There is no reliable way to detect whether a mutex has been abandoned on some target platforms, +- /// so we use the AliveMutex to manually track whether the creator of a mutex is still running, +- /// while the HeldMutex represents the actual lock state of the mutex. +- /// +- internal sealed class ServerFileMutexPair : IServerMutex +- { +- public readonly FileMutex AliveMutex; +- public readonly FileMutex HeldMutex; +- +- public bool IsDisposed { get; private set; } +- +- public ServerFileMutexPair(string mutexName, bool initiallyOwned, out bool createdNew) +- { +- AliveMutex = new FileMutex(mutexName + "-alive"); +- HeldMutex = new FileMutex(mutexName + "-held"); +- createdNew = AliveMutex.TryLock(0); +- if (initiallyOwned && createdNew) +- { +- if (!TryLock(0)) +- throw new Exception("Failed to lock mutex after creating it"); +- } +- } +- +- public bool TryLock(int timeoutMs) +- { +- if (IsDisposed) +- throw new ObjectDisposedException("Mutex"); +- return HeldMutex.TryLock(timeoutMs); +- } +- +- public void Dispose() +- { +- if (IsDisposed) +- return; +- IsDisposed = true; +- +- try +- { +- HeldMutex.Unlock(); +- AliveMutex.Unlock(); +- } +- finally +- { +- AliveMutex.Dispose(); +- HeldMutex.Dispose(); +- } +- } +- } +- + } diff --git a/roslyn-analyzers-no-apphost.patch b/roslyn-analyzers-no-apphost.patch new file mode 100644 index 0000000..c1fc3dd --- /dev/null +++ b/roslyn-analyzers-no-apphost.patch @@ -0,0 +1,10 @@ +--- a/src/Tools/ReleaseNotesUtil/ReleaseNotesUtil.csproj ++++ b/src/Tools/ReleaseNotesUtil/ReleaseNotesUtil.csproj +@@ -4,6 +4,7 @@ + netcoreapp3.1 + true + true ++ false + + + diff --git a/roslyn-no-apphost.patch b/roslyn-no-apphost.patch new file mode 100644 index 0000000..f1767c7 --- /dev/null +++ b/roslyn-no-apphost.patch @@ -0,0 +1,10 @@ +--- a/src/Workspaces/Remote/ServiceHub.CoreComponents/Microsoft.CodeAnalysis.Remote.ServiceHub.CoreComponents.csproj ++++ b/src/Workspaces/Remote/ServiceHub.CoreComponents/Microsoft.CodeAnalysis.Remote.ServiceHub.CoreComponents.csproj +@@ -5,6 +5,7 @@ + Exe + netcoreapp3.1 + ++ false + false + + diff --git a/runtime-66594-s390x-debuginfo.patch b/runtime-66594-s390x-debuginfo.patch new file mode 100644 index 0000000..5637645 --- /dev/null +++ b/runtime-66594-s390x-debuginfo.patch @@ -0,0 +1,29 @@ +diff --git a/src/mono/mono.proj b/src/mono/mono.proj +index fb98ffc1896..d6a0c9a8ec2 100644 +--- a/src/mono/mono.proj ++++ b/src/mono/mono.proj +@@ -519,17 +519,17 @@ + + <_Objcopy Condition="'$(_ObjcopyFound)' != '0'">objcopy + +- ++ + + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + + + diff --git a/runtime-ROSA-rid.patch b/runtime-ROSA-rid.patch new file mode 100644 index 0000000..2a16e74 --- /dev/null +++ b/runtime-ROSA-rid.patch @@ -0,0 +1,191 @@ +--- src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/runtime.json 2022-07-01 07:47:48.852264765 +0300 ++++ src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/runtime.json-diff 2022-07-01 08:35:27.637855488 +0300 +@@ -2408,6 +2408,57 @@ + "rhel-x64" + ] + }, ++ "rosa": { ++ "#import": [ ++ "linux" ++ ] ++ }, ++ "rosa-arm64": { ++ "#import": [ ++ "rosa", ++ "linux-arm64" ++ ] ++ }, ++ "rosa-x64": { ++ "#import": [ ++ "rosa", ++ "linux-x64" ++ ] ++ }, ++ "rosa.2019.05": { ++ "#import": [ ++ "rosa" ++ ] ++ }, ++ "rosa.2019.05-arm64": { ++ "#import": [ ++ "rosa.2019.05", ++ "rosa-arm64" ++ ] ++ }, ++ "rosa.2019.05-x64": { ++ "#import": [ ++ "rosa.2019.05", ++ "rosa-x64" ++ ] ++ }, ++ "rosa.2021.1": { ++ "#import": [ ++ "rosa" ++ ] ++ }, ++ "rosa.2021.1-arm64": { ++ "#import": [ ++ "rosa.2021.1", ++ "rosa-arm64" ++ ] ++ }, ++ "rosa.2021.1-x64": { ++ "#import": [ ++ "rosa.2021.1", ++ "rosa-x64" ++ ] ++ }, + "sles": { + "#import": [ + "linux" +@@ -3766,4 +3817,4 @@ + ] + } + } +-} +\ В конце файла нет новой строки ++} +--- src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/runtimeGroups.props 2022-07-01 07:47:48.854264756 +0300 ++++ src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/runtimeGroups.props-diff 2022-07-01 08:31:12.759936289 +0300 +@@ -215,6 +215,13 @@ + 9 + + ++ ++ linux ++ x64;arm64 ++ 2021.1;2019.05 ++ false ++ ++ + + linux + x64 +--- src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/runtime.compatibility.json 2022-07-01 07:47:48.852264765 +0300 ++++ src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/runtime.compatibility.json-diff 2022-07-01 08:40:44.789733576 +0300 +@@ -6020,6 +6020,98 @@ + "any", + "base" + ], ++ ++ "rosa": [ ++ "rosa", ++ "linux", ++ "unix", ++ "any", ++ "base" ++ ], ++ "rosa-arm64": [ ++ "rosa-arm64", ++ "rosa", ++ "linux-arm64", ++ "linux", ++ "unix-arm64", ++ "unix", ++ "any", ++ "base" ++ ], ++ "rosa-x64": [ ++ "rosa-x64", ++ "rosa", ++ "linux-x64", ++ "linux", ++ "unix-x64", ++ "unix", ++ "any", ++ "base" ++ ], ++ "rosa.2019.05": [ ++ "rosa.2019.05", ++ "rosa", ++ "linux", ++ "unix", ++ "any", ++ "base" ++ ], ++ "rosa.2019.05-arm64": [ ++ "rosa.2019.05-arm64", ++ "rosa.2019.05", ++ "rosa-arm64", ++ "rosa", ++ "linux-arm64", ++ "linux", ++ "unix-arm64", ++ "unix", ++ "any", ++ "base" ++ ], ++ "rosa.2019.05-x64": [ ++ "rosa.2019.05-x64", ++ "rosa.2019.05", ++ "rosa-x64", ++ "rosa", ++ "linux-x64", ++ "linux", ++ "unix-x64", ++ "unix", ++ "any", ++ "base" ++ ], ++ "rosa.2021.1": [ ++ "rosa.2021.1", ++ "rosa", ++ "linux", ++ "unix", ++ "any", ++ "base" ++ ], ++ "rosa.2021.1-arm64": [ ++ "rosa.2021.1-arm64", ++ "rosa.2021.1", ++ "rosa-arm64", ++ "rosa", ++ "linux-arm64", ++ "linux", ++ "unix-arm64", ++ "unix", ++ "any", ++ "base" ++ ], ++ "rosa.2021.1-x64": [ ++ "rosa.2021.1-x64", ++ "rosa.2021.1", ++ "rosa-x64", ++ "rosa", ++ "linux-x64", ++ "linux", ++ "unix-x64", ++ "unix", ++ "any", ++ "base" ++ ], + "sles": [ + "sles", + "linux", +@@ -8921,4 +9013,4 @@ + "any", + "base" + ] +-} +\ В конце файла нет новой строки ++} diff --git a/runtime-Rosalinux-groups.patch b/runtime-Rosalinux-groups.patch new file mode 100644 index 0000000..89ee090 --- /dev/null +++ b/runtime-Rosalinux-groups.patch @@ -0,0 +1,196 @@ +diff --git a/dotnet-v5.0.209.1-SDK/src/runtime.7211aa01b34bb55ca67bdddd6e80ce23ee201bd2/src/libraries/pkg/Microsoft.NETCore.Platforms/runtime.compatibility.json b/dotnet-v5.0.209.1-SDK-diff/src/runtime.7211aa01b34bb55ca67bdddd6e80ce23ee201bd2/src/libraries/pkg/Microsoft.NETCore.Platforms/runtime.compatibility.json +index 844590f..35d11f8 100644 +--- a/src/libraries/pkg/Microsoft.NETCore.Platforms/runtime.compatibility.json ++++ b/src/libraries/pkg/Microsoft.NETCore.Platforms/runtime.compatibility.json +@@ -4808,6 +4808,97 @@ + "any", + "base" + ], ++ "rosa": [ ++ "rosa", ++ "linux", ++ "unix", ++ "any", ++ "base" ++ ], ++ "rosa-arm64": [ ++ "rosa-arm64", ++ "rosa", ++ "linux-arm64", ++ "linux", ++ "unix-arm64", ++ "unix", ++ "any", ++ "base" ++ ], ++ "rosa-x64": [ ++ "rosa-x64", ++ "rosa", ++ "linux-x64", ++ "linux", ++ "unix-x64", ++ "unix", ++ "any", ++ "base" ++ ], ++ "rosa.2019.05": [ ++ "rosa.2019.05", ++ "rosa", ++ "linux", ++ "unix", ++ "any", ++ "base" ++ ], ++ "rosa.2019.05-arm64": [ ++ "rosa.2019.05-arm64", ++ "rosa.2019.05", ++ "rosa-arm64", ++ "rosa", ++ "linux-arm64", ++ "linux", ++ "unix-arm64", ++ "unix", ++ "any", ++ "base" ++ ], ++ "rosa.2019.05-x64": [ ++ "rosa.2019.05-x64", ++ "rosa.2019.05", ++ "rosa-x64", ++ "rosa", ++ "linux-x64", ++ "linux", ++ "unix-x64", ++ "unix", ++ "any", ++ "base" ++ ], ++ "rosa.2021.1": [ ++ "rosa.2021.1", ++ "rosa", ++ "linux", ++ "unix", ++ "any", ++ "base" ++ ], ++ "rosa.2021.1-arm64": [ ++ "rosa.2021.1-arm64", ++ "rosa.2021.1", ++ "rosa-arm64", ++ "rosa", ++ "linux-arm64", ++ "linux", ++ "unix-arm64", ++ "unix", ++ "any", ++ "base" ++ ], ++ "rosa.2021.1-x64": [ ++ "rosa.2021.1-x64", ++ "rosa.2021.1", ++ "rosa-x64", ++ "rosa", ++ "linux-x64", ++ "linux", ++ "unix-x64", ++ "unix", ++ "any", ++ "base" ++ ], + "sles": [ + "sles", + "linux", +@@ -7239,4 +7330,4 @@ + "any", + "base" + ] +-} +\ No newline at end of file ++} +diff --git a/dotnet-v5.0.209.1-SDK/src/runtime.7211aa01b34bb55ca67bdddd6e80ce23ee201bd2/src/libraries/pkg/Microsoft.NETCore.Platforms/runtime.json b/dotnet-v5.0.209.1-SDK-diff/src/runtime.7211aa01b34bb55ca67bdddd6e80ce23ee201bd2/src/libraries/pkg/Microsoft.NETCore.Platforms/runtime.json +index 7d6aa10..9c56b1b 100644 +--- a/src/libraries/pkg/Microsoft.NETCore.Platforms/runtime.json ++++ b/src/libraries/pkg/Microsoft.NETCore.Platforms/runtime.json +@@ -2030,6 +2030,57 @@ + "rhel-x64" + ] + }, ++ "rosa": { ++ "#import": [ ++ "linux" ++ ] ++ }, ++ "rosa-arm64": { ++ "#import": [ ++ "rosa", ++ "linux-arm64" ++ ] ++ }, ++ "rosa-x64": { ++ "#import": [ ++ "rosa", ++ "linux-x64" ++ ] ++ }, ++ "rosa.2019.05": { ++ "#import": [ ++ "rosa" ++ ] ++ }, ++ "rosa.2019.05-arm64": { ++ "#import": [ ++ "rosa.2019.05", ++ "rosa-arm64" ++ ] ++ }, ++ "rosa.2019.05-x64": { ++ "#import": [ ++ "rosa.2019.05", ++ "rosa-x64" ++ ] ++ }, ++ "rosa.2021.1": { ++ "#import": [ ++ "rosa" ++ ] ++ }, ++ "rosa.2021.1-arm64": { ++ "#import": [ ++ "rosa.2021.1", ++ "rosa-arm64" ++ ] ++ }, ++ "rosa.2021.1-x64": { ++ "#import": [ ++ "rosa.2021.1", ++ "rosa-x64" ++ ] ++ }, + "sles": { + "#import": [ + "linux" +@@ -3196,4 +3247,4 @@ + ] + } + } +-} +\ No newline at end of file ++} +diff --git a/dotnet-v5.0.209.1-SDK/src/runtime.7211aa01b34bb55ca67bdddd6e80ce23ee201bd2/src/libraries/pkg/Microsoft.NETCore.Platforms/runtimeGroups.props b/dotnet-v5.0.209.1-SDK-diff/src/runtime.7211aa01b34bb55ca67bdddd6e80ce23ee201bd2/src/libraries/pkg/Microsoft.NETCore.Platforms/runtimeGroups.props +index 3cb3d2d..9bc7f0d 100644 +--- a/src/libraries/pkg/Microsoft.NETCore.Platforms/runtimeGroups.props ++++ b/src/libraries/pkg/Microsoft.NETCore.Platforms/runtimeGroups.props +@@ -187,6 +187,13 @@ + 9 + + ++ ++ linux ++ x64;arm64 ++ 2021.1;2019.05 ++ false ++ ++ + + linux + x64 diff --git a/runtime-arm64-lld-fix.patch b/runtime-arm64-lld-fix.patch new file mode 100644 index 0000000..db6f520 --- /dev/null +++ b/runtime-arm64-lld-fix.patch @@ -0,0 +1,18 @@ +diff --git a/eng/native/init-compiler.sh b/eng/native/init-compiler.sh +index 567d18da474..927b3071e92 100755 +--- a/eng/native/init-compiler.sh ++++ b/eng/native/init-compiler.sh +@@ -108,11 +108,8 @@ + fi + + if [[ "$compiler" == "clang" ]]; then +- if command -v "lld$desired_version" > /dev/null; then +- # Only lld version >= 9 can be considered stable +- if [[ "$majorVersion" -ge 9 ]]; then +- LDFLAGS="-fuse-ld=lld" +- fi ++ if "$CC" -fuse-ld=lld -Wl,--version >/dev/null 2>&1; then ++ LDFLAGS="-fuse-ld=lld" + fi + fi + diff --git a/runtime-fedora-37-rid.patch b/runtime-fedora-37-rid.patch new file mode 100644 index 0000000..720fdcb --- /dev/null +++ b/runtime-fedora-37-rid.patch @@ -0,0 +1,84 @@ +diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/runtime.compatibility.json b/src/libraries/Microsoft.NETCore.Platforms/src/runtime.compatibility.json +index bf6dfc3c1a1..1de4979b8ee 100644 +--- a/src/libraries/Microsoft.NETCore.Platforms/src/runtime.compatibility.json ++++ b/src/libraries/Microsoft.NETCore.Platforms/src/runtime.compatibility.json +@@ -3029,6 +3029,38 @@ + "any", + "base" + ], ++ "fedora.37": [ ++ "fedora.37", ++ "fedora", ++ "linux", ++ "unix", ++ "any", ++ "base" ++ ], ++ "fedora.37-arm64": [ ++ "fedora.37-arm64", ++ "fedora.37", ++ "fedora-arm64", ++ "fedora", ++ "linux-arm64", ++ "linux", ++ "unix-arm64", ++ "unix", ++ "any", ++ "base" ++ ], ++ "fedora.37-x64": [ ++ "fedora.37-x64", ++ "fedora.37", ++ "fedora-x64", ++ "fedora", ++ "linux-x64", ++ "linux", ++ "unix-x64", ++ "unix", ++ "any", ++ "base" ++ ], + "freebsd": [ + "freebsd", + "unix", +diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/runtime.json b/src/libraries/Microsoft.NETCore.Platforms/src/runtime.json +index 2e6ec616b74..70a1582ba64 100644 +--- a/src/libraries/Microsoft.NETCore.Platforms/src/runtime.json ++++ b/src/libraries/Microsoft.NETCore.Platforms/src/runtime.json +@@ -1146,6 +1146,23 @@ + "fedora-x64" + ] + }, ++ "fedora.37": { ++ "#import": [ ++ "fedora" ++ ] ++ }, ++ "fedora.37-arm64": { ++ "#import": [ ++ "fedora.37", ++ "fedora-arm64" ++ ] ++ }, ++ "fedora.37-x64": { ++ "#import": [ ++ "fedora.37", ++ "fedora-x64" ++ ] ++ }, + "freebsd": { + "#import": [ + "unix" +diff --git a/src/libraries/Microsoft.NETCore.Platforms/src/runtimeGroups.props b/src/libraries/Microsoft.NETCore.Platforms/src/runtimeGroups.props +index 1945bb9af0e..75c6d28a30f 100644 +--- a/src/libraries/Microsoft.NETCore.Platforms/src/runtimeGroups.props ++++ b/src/libraries/Microsoft.NETCore.Platforms/src/runtimeGroups.props +@@ -71,7 +71,7 @@ + + linux + x64;arm64 +- 23;24;25;26;27;28;29;30;31;32;33;34;35;36 ++ 23;24;25;26;27;28;29;30;31;32;33;34;35;36;37 + false + + diff --git a/runtime-mono-remove-ilstrip.patch b/runtime-mono-remove-ilstrip.patch new file mode 100644 index 0000000..9a711f8 --- /dev/null +++ b/runtime-mono-remove-ilstrip.patch @@ -0,0 +1,33 @@ +diff --git a/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Microsoft.NET.Runtime.MonoTargets.Sdk.pkgproj b/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Microsoft.NET.Runtime.MonoTargets.Sdk.pkgproj +index 724b704f864..3dabdc81dae 100644 +--- a/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Microsoft.NET.Runtime.MonoTargets.Sdk.pkgproj ++++ b/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Microsoft.NET.Runtime.MonoTargets.Sdk.pkgproj +@@ -6,7 +6,7 @@ + + + +- ++ + + + +@@ -15,7 +15,7 @@ + + + +- ++ + + + +diff --git a/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/Sdk.props b/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/Sdk.props +index 8a7ede79242..cfd515eeca9 100644 +--- a/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/Sdk.props ++++ b/src/mono/nuget/Microsoft.NET.Runtime.MonoTargets.Sdk/Sdk/Sdk.props +@@ -1,5 +1,5 @@ + +- ++ + + + diff --git a/sdk-22373-portablerid.patch b/sdk-22373-portablerid.patch new file mode 100644 index 0000000..8b39eb3 --- /dev/null +++ b/sdk-22373-portablerid.patch @@ -0,0 +1,22 @@ +From 499fcf6e3b0e4b01a9c340a06f00cfc3e1fcc5d2 Mon Sep 17 00:00:00 2001 +From: Tom Deseyn +Date: Tue, 5 Oct 2021 09:04:14 +0200 +Subject: [PATCH] Use the portable rid for --use-current-runtime. + +--- + .../targets/Microsoft.NET.RuntimeIdentifierInference.targets | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.RuntimeIdentifierInference.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.RuntimeIdentifierInference.targets +index 17308aa9160..e764b2d9845 100644 +--- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.RuntimeIdentifierInference.targets ++++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.RuntimeIdentifierInference.targets +@@ -62,7 +62,7 @@ Copyright (c) .NET Foundation. All rights reserved. + + + +- $(NETCoreSdkRuntimeIdentifier) ++ $(NETCoreSdkPortableRuntimeIdentifier) + + + diff --git a/cli-telemetry-optout.patch b/sdk-telemetry-optout.patch similarity index 72% rename from cli-telemetry-optout.patch rename to sdk-telemetry-optout.patch index 9b01f13..d6e6464 100644 --- a/cli-telemetry-optout.patch +++ b/sdk-telemetry-optout.patch @@ -1,7 +1,7 @@ -diff --git a/src/dotnet/Program.cs b/src/dotnet/Program.cs +diff --git a/src/Cli/dotnet/Program.cs b/src/Cli/dotnet/Program.cs index de1ebb9e6..6bbf479de 100644 ---- a/src/dotnet/Program.cs -+++ b/src/dotnet/Program.cs +--- a/src/Cli/dotnet/Program.cs ++++ b/src/Cli/dotnet/Program.cs @@ -28,6 +28,13 @@ public class Program public static int Main(string[] args) @@ -15,4 +15,4 @@ index de1ebb9e6..6bbf479de 100644 + DebugHelper.HandleDebugSwitch(ref args); - new MulticoreJitActivator().TryActivateMulticoreJit(); + // Capture the current timestamp to calculate the host overhead. diff --git a/source-build-warnings-are-not-errors.patch b/source-build-warnings-are-not-errors.patch deleted file mode 100644 index 4f75cfd..0000000 --- a/source-build-warnings-are-not-errors.patch +++ /dev/null @@ -1,21 +0,0 @@ -From c82976fd5eb4cbcf67faaba62f0bc59634d30338 Mon Sep 17 00:00:00 2001 -From: Chris Rummel -Date: Fri, 14 Aug 2020 15:34:07 -0500 -Subject: [PATCH] Disable XLiff warning as error - ---- - repos/xliff-tasks.proj | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/repos/xliff-tasks.proj b/repos/xliff-tasks.proj -index da2ae79c5b..9b86754018 100644 ---- a/repos/xliff-tasks.proj -+++ b/repos/xliff-tasks.proj -@@ -7,6 +7,7 @@ - $(BuildCommandArgs) /v:$(LogVerbosity) - $(BuildCommandArgs) /flp:Verbosity=Diag - $(BuildCommandArgs) /bl -+ $(BuildCommandArgs) /p:TreatWarningsAsErrors=false - $(BuildCommandArgs) $(RedirectRepoOutputToLog) - - $(DotnetToolCommand) $(BuildCommandArgs) diff --git a/update-release b/update-release new file mode 100755 index 0000000..3aa2df3 --- /dev/null +++ b/update-release @@ -0,0 +1,95 @@ +#!/bin/bash + +# Usage: +# ./update-release sdk-version runtime-version [--bug bug-id] [--tarball tarball-name] + +set -euo pipefail +IFS=$'\n\t' + +print_usage() { + echo " Usage:" + echo " ./update-release sdk-version runtime-version [--bug bug-id] [--tarball tarball-name]" +} + +user_provided_tarball_name="" + +positional_args=() +bug_ids=() +while [[ "$#" -gt 0 ]]; do + arg="$1" + case "${arg}" in + --bug) + bug_ids+=("$2") + shift; + shift; + ;; + -h|--help) + print_usage + exit 0 + ;; + --tarball) + user_provided_tarball_name="$2" + shift; + shift; + ;; + *) + positional_args+=("$1") + shift + ;; + esac +done + +spec_files=( ./*.spec ) +spec_file="${spec_files[0]}" + +sdk_version=${positional_args[0]:-} +if [[ -z ${sdk_version} ]]; then + echo "error: missing sdk version" + exit 1 +fi + +runtime_version=${positional_args[1]:-} +if [[ -z ${runtime_version} ]]; then + echo "error: missing runtime version" + exit 1 +fi + +host_version="$runtime_version" + +tag=v${sdk_version} + +if [[ -f "dotnet-${tag}-original.tar.gz" ]]; then + echo "dotnet-${tag}-original.tar.gz alredy exists, not rebuilding tarball" +else + if [[ -n "${user_provided_tarball_name}" ]]; then + ./rename-tarball "$user_provided_tarball_name" "dotnet-${tag}-original.tar.gz" + elif [[ -f "dotnet-${sdk_version}.tar.gz" ]]; then + ./rename-tarball "dotnet-${sdk_version}.tar.gz" "dotnet-${tag}-original.tar.gz" + elif [[ -f "dotnet-${runtime_version}.tar.gz" ]]; then + ./rename-tarball "dotnet-${runtime_version}.tar.gz" "dotnet-${tag}-original.tar.gz" + fi +fi + +if [[ ! -f "dotnet-${tag}.tar.gz" ]]; then + ./build-dotnet-tarball "${tag}" +fi + +set -x + +sed -i -E "s|^%global host_version [[:digit:]]\.[[:digit:]]\.[[:digit:]]+|%global host_version ${host_version}|" "$spec_file" +sed -i -E "s|^%global runtime_version [[:digit:]]\.[[:digit:]]\.[[:digit:]]+|%global runtime_version ${runtime_version}|" "$spec_file" +sed -i -E "s|^%global sdk_version [[:digit:]]\.[[:digit:]]\.[[:digit:]][[:digit:]][[:digit:]]|%global sdk_version ${sdk_version}|" "$spec_file" + +comment="Update to .NET SDK ${sdk_version} and Runtime ${runtime_version}" +for bug_id in "${bug_ids[@]}"; do + comment="$comment +- Resolves: RHBZ#$bug_id" +done + +rpmdev-bumpspec --comment="$comment" "$spec_file" + +# Reset release to 1 in 'Release' tag +sed -i -E 's|^Release: [[:digit:]]+%|Release: 1%|' "$spec_file" +# Reset Release in changelog comment +# See https://stackoverflow.com/questions/18620153/find-matching-text-and-replace-next-line +sed -i -E '/^%changelog$/!b;n;s/-[[:digit:]]+$/-1/' "$spec_file" diff --git a/vstest-use-work-tree-with-git-apply.patch b/vstest-use-work-tree-with-git-apply.patch new file mode 100644 index 0000000..58c139f --- /dev/null +++ b/vstest-use-work-tree-with-git-apply.patch @@ -0,0 +1,33 @@ +From b2c4b2427d8c1a2410c4210789caccf1ec87e64a Mon Sep 17 00:00:00 2001 +From: Omair Majid +Date: Thu, 9 Sep 2021 13:21:51 -0400 +Subject: [PATCH] [ArPow] Use --work-tree with git apply + +This makes things work better in a source-tarball build, where there may +be a .git directory somewhere in our parent directories but it's for a +different repo than vstest. In a situation like that a plain `git apply` +will (silently!) ignore patches because they wont apply to the unrelated +repository. That will (eventually) make the source-build fail. +`--work-tree` makes git directly use the directory that we care about. + +See https://github.com/dotnet/source-build/issues/2445 for more details. +--- + eng/SourceBuild.props | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/eng/SourceBuild.props b/eng/SourceBuild.props +index b365645c..68f82592 100644 +--- a/eng/SourceBuild.props ++++ b/eng/SourceBuild.props +@@ -24,7 +24,7 @@ + + + + +-- +2.31.1 + diff --git a/xliff-tasks-use-work-tree-with-git-apply.patch b/xliff-tasks-use-work-tree-with-git-apply.patch new file mode 100644 index 0000000..810cf67 --- /dev/null +++ b/xliff-tasks-use-work-tree-with-git-apply.patch @@ -0,0 +1,11 @@ +--- a/eng/SourceBuild.props ++++ b/eng/SourceBuild.props +@@ -15,7 +15,7 @@ + + + +