projects/aports·blob master · refs

483 lines · 18.6 KiB

1# Contributor: Antoine Martin (ayakael) <[email protected]>
2# Maintainer: Antoine Martin (ayakael) <[email protected]>
3pkgname=dotnet8-stage0
4pkgver=8.0.132
5pkgrel=0
6
7[ "$CBUILD" != "$CHOST" ] && _cross="-$CARCH" || _cross=""
8
9# Tag of tarball generator.
10_gittag=v$pkgver
11
12# Versions of prebuilt artifacts and bootstrap tar
13# _artifactsver can be set using PrivateSourceBuiltArtifactsVersion
14# in `eng/Versions.props` keeping centos.9-x64
15_artifactsver="8.0.132-servicing.26505.1.centos.9-x64"
16_bootstrapver="8.0.132"
17_installerver=8.0.132
18_runtimever=8.0.132
19_aspnetver=8.0.132
20
21# Patches to be used. String before '_' refers to repo to patch
22# Look for patch notes within each patch for what they fix / where they come from
23# build_* patches applies directly to $builddir
24_patches="
25 installer_set-crossgen2rid-using-buildarchitecture.patch
26 runtime_82269-mono-thread-coop-undefine-fortify-source.patch
27 runtime_83682-specify-notext-on-linux-musl-x86.patch
28 runtime_90251-rename-mono-cmake-host-var.patch
29 runtime_100781-fix-mono-build-on-arm.patch
30 runtime_reverse-101869-transition-1es-template-work.patch
31 runtime_disable-crossgen-on-riscv64.patch
32 runtime_disable-local-exec-tls-riscv64.patch
33 runtime_clang-20.patch
34 "
35
36_pkgver_macro=${pkgver%.*}
37_pkgver_prior=1
38_pkgver_name="${_pkgver_macro//[.0]}"
39pkgdesc="The .NET Core stage0 bits for dotnet build"
40# x86: blocked by https://github.com/dotnet/runtime/issues/83509
41# armhf: blocked by https://github.com/dotnet/runtime/issues/77663
42# riscv64: port WIP https://github.com/dotnet/runtime/issues/84834
43# s390x | ppc64le: mono-based builds are not yet stable on musl
44# loongarch64: upstream code supported, blocked by binary tarball
45arch="all !x86 !armhf !riscv64 !s390x !ppc64le !loongarch64"
46_giturl=https://github.com/dotnet/dotnet
47url="https://dotnet.microsoft.com"
48license="MIT"
49options="!check net" # Testsuite in main runtime aport
50subpackages="
51 dotnet$_pkgver_name-stage0-artifacts:artifacts:noarch
52 dotnet$_pkgver_name-stage0-bootstrap
53 "
54source="
55 dotnet-tarball-$_gittag.tar.gz::https://github.com/dotnet/dotnet/archive/refs/tags/$_gittag.tar.gz
56 dotnet-release-$_gittag.json::https://github.com/dotnet/dotnet/releases/download/$_gittag/release.json
57 dotnet-sdk-$_bootstrapver-linux-musl-x64.noextract::https://dotnetcli.azureedge.net/dotnet/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-x64.tar.gz
58 dotnet-sdk-$_bootstrapver-linux-musl-arm64.noextract::https://dotnetcli.azureedge.net/dotnet/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-arm64.tar.gz
59 dotnet-sdk-$_bootstrapver-linux-musl-arm.noextract::https://dotnetcli.azureedge.net/dotnet/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-arm.tar.gz
60 Private.SourceBuilt.Artifacts.$_artifactsver.noextract::https://dotnetcli.azureedge.net/source-built-artifacts/assets/Private.SourceBuilt.Artifacts.$_artifactsver.tar.gz
61 $_patches
62 "
63
64_llvmver=20
65makedepends_host="
66 alpine-release
67 autoconf
68 automake
69 bash
70 binutils
71 clang$_llvmver
72 cmake
73 findutils
74 g++
75 gcc
76 grep
77 icu-dev
78 icu-data-full
79 krb5-dev
80 libintl
81 libstdc++
82 libucontext-dev
83 libunwind-dev
84 libxml2-dev
85 libxml2-utils
86 linux-headers
87 lttng-ust-dev
88 musl-dev
89 musl-utils
90 openssl-dev
91 pigz
92 samurai
93 unzip
94 zip
95 zlib-dev
96 "
97case $CARCH in
98 s390x) ;;
99 *) makedepends_host="$makedepends_host lld$_llvmver-dev";;
100esac
101makedepends_build="
102 $makedepends_host
103 binutils$_cross
104 git
105 gcc$_cross
106 jq
107 llvm$_llvmver
108 llvm$_llvmver-dev
109 patchelf
110 python3
111 sed
112 xz
113 "
114case $CBUILD_ARCH in
115 x86_64) _dotnet_arch="x64";;
116 aarch64) _dotnet_arch="arm64";;
117 armv7|armhf) _dotnet_arch="arm";;
118 i586) _dotnet_arch="x86";;
119 *) _dotnet_arch=$CBUILD_ARCH;;
120esac
121case $CTARGET_ARCH in
122 x86_64) _dotnet_target="x64";;
123 aarch64) _dotnet_target="arm64";;
124 armv7|armhf) _dotnet_target="arm";;
125 i586) _dotnet_target="x86";;
126 *) _dotnet_target=$CTARGET_ARCH;;
127esac
128
129builddir="$srcdir"/dotnet-${_gittag/v}
130_packagesdir="$srcdir"/local-packages
131_libdir="/usr/lib"
132_nugetdir="$srcdir"/nuget
133_downloaddir="$srcdir"/local-downloads
134_cli_root="$srcdir"/bootstrap
135_nuget="$_cli_root/dotnet nuget"
136_outputdir="$srcdir"/artifacts
137# if true, then within pipeline environment, in which case send logs there
138# to be scooped
139if [ -d "$APORTSDIR/logs" ]; then
140 _logdir="$APORTSDIR"/logs/$pkgname
141else
142 _logdir="$srcdir"/logs
143fi
144
145prepare() {
146 default_prepare
147
148 mkdir -p "$_cli_root"
149 mkdir -p $_packagesdir $_downloaddir $_outputdir $_nugetdir $_logdir
150
151 # sdk and installer insists on downloading its own dotnet unless ArcadeBuildFromSource
152 # is true, which opens up a can of worms
153 sed 's|ArcadeBuildFromSource=true|Architecture|' -i src/*/eng/restore-toolset.sh
154
155 # links logfiles to pipeline logs for easy pickup in pipelines
156 mkdir -p "$_logdir" "$builddir"/artifacts
157 ln -s "$_logdir" "$builddir"/artifacts/logs
158 ln -s "$_logdir" "$builddir"/artifacts/log
159 for i in "$builddir"/src/*; do
160 if [ -f "$i" ]; then
161 continue
162 fi
163 mkdir -p "$_logdir"/${i##*\/} "$builddir"/src/${i##*\/}/artifacts
164 ln -s "$_logdir"/${i##*\/} "$builddir"/src/${i##*\/}/artifacts/log
165 done
166
167 tar -xf "$srcdir"/dotnet-sdk-$_pkgver_macro*$_dotnet_arch.noextract -C "$_cli_root" --no-same-owner
168
169 local components="$(find "$builddir"/src -maxdepth 1 -mindepth 1 -type d -exec basename '{}' \;)"
170 for i in $components; do
171 if [ -f "$builddir/src/$i/NuGet.config" ]; then
172 $_nuget add source $_packagesdir --name local --configfile "$builddir"/src/$i/NuGet.config
173 fi
174 if [ -f "$builddir/src/$i/global.json" ]; then
175 tmp=$(mktemp)
176 jq ".tools.dotnet = \"$_bootstrapver\"" "$builddir"/src/$i/global.json > $tmp && mv $tmp "$builddir"/src/$i/global.json
177 jq 'del(.sdk.version)' "$builddir"/src/$i/global.json > $tmp && mv $tmp "$builddir"/src/$i/global.json
178 jq 'del(.tools.runtimes)' "$builddir"/src/$i/global.json > $tmp && mv $tmp "$builddir"/src/$i/global.json
179 fi
180 done
181
182 # extracting PackageVersions.props as some version information is there
183 tar -xzf "$srcdir"/Private.SourceBuilt.Artifacts.*.noextract PackageVersions.props
184
185 # sdk looks for TestCli at wrong place
186 sed '/<TestCliNuGetDirectoryTargetFramework/d' -i "$builddir"/src/sdk/src/Layout/redist/targets/GenerateLayout.targets
187}
188
189_init() {
190 export _InitializeDotNetCli=$_cli_root
191 export DOTNET_INSTALL_DIR=$_cli_root
192 export DOTNET_PATH=$_cli_root
193 export DotnetTool=$_cli_root/dotnet
194 export PATH="$_cli_root:/usr/lib/llvm$_llvmver/bin:$PATH"
195 export NUGET_PACKAGES=$_nugetdir
196 export DOTNET_CLI_TELEMETRY_OPTOUT=true
197 export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true
198 export SHELL=/bin/bash
199 export EXTRA_CPPFLAGS="${CPPFLAGS/--sysroot=$CBUILDROOT}"
200 export EXTRA_CXXFLAGS="${CXXFLAGS/--sysroot=$CBUILDROOT}"
201 export EXTRA_CFLAGS="${CFLAGS/--sysroot=$CBUILDROOT}"
202 export EXTRA_LDFLAGS="$LDFLAGS"
203 # sets LIBC_SO for /usr-merge setups
204 export EXTRA_CFLAGS="$EXTRA_CFLAGS -DLIBC_SO=\\\"libc.musl-$CARCH.so.1\\\""
205 unset CXXFLAGS CFLAGS LDFLAGS CPPFLAGS
206
207 ulimit -n 4096
208
209 "$_cli_root"/dotnet build-server shutdown
210}
211
212_runtime() {
213 _init
214 if [ -z "${_runtimever+x}" ]; then
215 local _runtimever=$(grep OutputPackageVersion "$builddir"/prereqs/git-info/runtime.props | sed -E 's|</?OutputPackageVersion>||g' | tr -d ' ')
216 fi
217 local _runtimever_ns=$(awk '{if($2 ~ "Name=\"VS.Redist.Common.NetCore.SharedFramework.x64.*\""){print $3}}' "$builddir"/src/installer/eng/Version.Details.xml | awk -F '"' '{print $2}')
218
219 msg "[$(date)] Building runtime version $_runtimever"
220 cd "$builddir"/src/runtime
221
222 local args="
223 -c Release
224 -bl
225 -clang
226 -arch $_dotnet_target
227 /consoleLoggerParameters:ShowTimestamp
228 /p:NoPgoOptimize=true
229 /p:EnableNgenOptimization=false
230 /p:ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch=none
231 /p:_toolsRID=linux-musl-$_dotnet_arch
232 /p:OutputRid=linux-musl-$_dotnet_target
233 /p:GitCommitHash=$(grep GitCommitHash "$builddir"/prereqs/git-info/runtime.props | sed -E 's|</?GitCommitHash>||g' | tr -d ' ')
234 "
235 if [ "$CBUILD" != "$CHOST" ]; then
236 local args="$args -cross"
237 # x86 build of mono broken, thus do not build mono
238 case $_dotnet_target in
239 x86) local args="$args /p:DefaultSubsets=clr+libs+host+packs";;
240 esac
241 fi
242 if [ "$_runtimever" != "${_runtimever##*-}" ]; then
243 local args="$args /p:VersionSuffix=${_runtimever##*-}"
244 fi
245 ROOTFS_DIR="$CBUILDROOT" ./build.sh $args
246
247 for i in artifacts/packages/*/*/*.nupkg; do
248 $_nuget push $i --source="$_packagesdir"
249 done
250 mkdir -p "$_downloaddir"/Runtime/$_runtimever_ns
251 cp artifacts/packages/*/*/dotnet-runtime-*-*.tar.gz $_downloaddir/Runtime/$_runtimever_ns
252}
253
254_sdk() {
255 _init
256 if [ -z "${_sdkver+x}" ]; then
257 local _sdkver=$(grep OutputPackageVersion "$builddir"/prereqs/git-info/sdk.props | sed -E 's|</?OutputPackageVersion>||g' | tr -d ' ')
258 fi
259 local _sdkver_ns=$(awk '{if($2 == "Name=\"Microsoft.NET.Sdk\""){print $3}}' "$builddir"/src/installer/eng/Version.Details.xml | awk -F '"' '{print $2}')
260
261 msg "[$(date)] Building sdk version $_sdkver"
262 cd "$builddir"/src/sdk
263
264 local args="
265 -c Release
266 -bl
267 /consoleLoggerParameters:ShowTimestamp
268 /p:GitCommitHash=$(grep GitCommitHash "$builddir"/prereqs/git-info/sdk.props | sed -E 's|</?GitCommitHash>||g' | tr -d ' ')
269 /p:Architecture=$_dotnet_target
270 /p:TestCliNuGetDirectoryTargetFramework=netcoreapp3.1
271 "
272 if [ "$_sdkver" != "${_sdkver##*-}" ]; then
273 local args="$args /p:VersionSuffix=${_sdkver##*-}"
274 fi
275 ./build.sh --pack /p:Projects=$builddir/src/sdk/source-build.slnf $args
276
277 for i in artifacts/packages/*/*/*.nupkg; do
278 $_nuget push $i --source="$_packagesdir"
279 done
280 mkdir -p "$_downloaddir"/Sdk/$_sdkver_ns
281 cp artifacts/packages/*/*/dotnet-toolset-internal-*.zip "$_downloaddir"/Sdk/$_sdkver_ns
282}
283
284_aspnetcore() {
285 _init
286 if [ -z "${_aspnetver+x}" ]; then
287 local _aspnetver=$(grep OutputPackageVersion "$builddir"/prereqs/git-info/aspnetcore.props | sed -E 's|</?OutputPackageVersion>||g' | tr -d ' ')
288 fi
289 local _aspnetver_ns=$(awk '{if($2 == "Name=\"Microsoft.AspNetCore.App.Ref.Internal\""){print $3}}' "$builddir"/src/installer/eng/Version.Details.xml | awk -F '"' '{print $2}')
290
291 msg "[$(date)] Build aspnetcore version $_aspnetver"
292 cd "$builddir"/src/aspnetcore
293 local args="
294 -c Release
295 -bl
296 --os-name linux-musl
297 -arch $_dotnet_target
298 -no-build-nodejs
299 /consoleLoggerParameters:ShowTimestamp
300 /p:BuildNodeJs=false
301 /p:BuildOSName=linux-musl
302 /p:GitCommitHash=$(grep GitCommitHash "$builddir"/prereqs/git-info/aspnetcore.props | sed -E 's|</?GitCommitHash>||g' | tr -d ' ')
303 /p:DotNetAssetRootUrl=file://$_downloaddir/
304 /p:EnablePackageValidation=false
305 "
306 if [ "$_aspnetver" != "${_aspnetver##*-}" ]; then
307 local args="$args /p:VersionSuffix=${_aspnetver##*-}"
308 fi
309
310 # aspnetcore can't find newly created Microsoft.NETCore.App.Runtime.linux-musl-x86 for some reason
311 case $_dotnet_target in
312 riscv64|x86) local args="$args /p:CrossgenOutput=false";;
313 esac
314
315 DotNetBuildFromSource=true ./eng/build.sh --pack $args
316
317 for i in artifacts/packages/*/*/*.nupkg; do
318 $_nuget push $i --source="$_packagesdir"
319 done
320
321 mkdir -p "$_downloaddir"/aspnetcore/Runtime/$_aspnetver_ns
322 cp artifacts/installers/*/aspnetcore-runtime-*-linux-musl-$_dotnet_target.tar.gz "$_downloaddir"/aspnetcore/Runtime/$_aspnetver_ns
323 cp artifacts/installers/*/aspnetcore_base_runtime.version "$_downloaddir"/aspnetcore/Runtime/$_aspnetver_ns
324}
325
326_installer() {
327 _init
328 msg "[$(date)] Building installer version $_installerver"
329 cd "$builddir"/src/installer
330
331 local args="
332 -c Release
333 -bl
334 /consoleLoggerParameters:ShowTimestamp
335 /p:EnableSourceLink=false
336 /p:OSName=linux-musl
337 /p:HostOSName=linux-musl
338 /p:Architecture=$_dotnet_target
339 /p:CoreSetupBlobRootUrl=file://$_downloaddir/
340 /p:DotnetToolsetBlobRootUrl=file://$_downloaddir/
341 /p:GitCommitHash=$(grep GitCommitHash "$builddir"/prereqs/git-info/installer.props | sed -E 's|</?GitCommitHash>||g' | tr -d ' ')
342 /p:GitCommitCount=1
343 /p:PublicBaseURL=file://$_downloaddir/
344 "
345 if [ "$_installerver" != "${_installerver##*-}" ]; then
346 local args="$args /p:VersionSuffix=${_installerver##*-}"
347 fi
348 # crossgen broken on x86
349 case $_dotnet_target in
350 riscv64|x86) local args="$args /p:DISABLE_CROSSGEN=True";;
351 esac
352
353 ./build.sh $args
354
355 mkdir -p "$_downloaddir"/installer/$_installerver
356 cp artifacts/packages/*/*/dotnet-sdk-$_pkgver_macro*.tar.gz "$_downloaddir"/installer/$_installerver
357}
358
359build() {
360 _runtime
361 _sdk
362 _aspnetcore
363 _installer
364}
365
366package() {
367 # lua-aports / buildrepo doesn't know to always build stage0 first when dealing
368 # with virtual packages. Thus, we need to depend on an empty stage0 pkg that
369 # dotnetx-build will pull, thus forcing build of stage0 first
370 mkdir -p "$pkgdir"
371}
372
373bootstrap() {
374 # allows stage0 to be pulled by dotnetx-build if first build of dotnetx
375 provides="dotnet$_pkgver_name-bootstrap"
376 provider_priority=$_pkgver_prior
377
378 local _iltoolsver=$(grep \<MicrosoftNETCoreILAsmVersion "$builddir"/PackageVersions.props | sed -E 's|</?MicrosoftNETCoreILAsmVersion>||g' | tr -d ' ')
379
380 install -dm 755 \
381 "$subpkgdir"/$_libdir/dotnet/bootstrap/$pkgver/docs \
382 "$subpkgdir"/$_libdir/dotnet/bootstrap/$pkgver/comp \
383 "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver
384
385 # unpack build artifacts to bootstrap subdir for use by future builds
386 tar --use-compress-program="pigz" \
387 -xf "$_downloaddir"/installer/$_installerver/dotnet-sdk-$_pkgver_macro*.tar.gz \
388 -C "$subpkgdir"/$_libdir/dotnet/bootstrap/$pkgver/ \
389 --no-same-owner
390
391 local _iltools_array="
392 runtime.*.Microsoft.NETCore.TestHost.*.nupkg
393 runtime.*.Microsoft.NETCore.ILAsm.*.nupkg
394 runtime.*.Microsoft.NETCore.ILDAsm.*.nupkg
395 "
396
397 local _nupkgs_array="
398 $_iltools_array
399 Microsoft.NETCore.App.Host.*.*.nupkg
400 Microsoft.NETCore.App.Runtime.*.*.nupkg
401 Microsoft.NETCore.App.Crossgen2.*.*.nupkg
402 runtime.*.Microsoft.NETCore.DotNetHost.*.nupkg
403 runtime.*.Microsoft.NETCore.DotNetHostPolicy.*.nupkg
404 runtime.*.Microsoft.NETCore.DotNetHostResolver.*.nupkg
405 runtime.*.Microsoft.NETCore.DotNetAppHost.*.nupkg
406 Microsoft.AspNetCore.App.Runtime.linux-musl-*.*.nupkg
407 "
408
409 # copies artifacts to artifacts dir for use by future dotnet builds
410 for i in $_nupkgs_array; do install -Dm644 "$_packagesdir"/$i "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/ || true; done
411
412 msg "Changing iltools version to $_iltoolsver"
413 # source-build expects a certain version of ilasm, ildasm and testhost
414 # following adjusts version
415 for i in $_iltools_array; do
416 local nupath="$subpkgdir"$_libdir/dotnet/artifacts/$pkgver/$i
417 local nupath=$(find $nupath || true)
418 local nupkg="${nupath##*/}"
419 local nuname="${nupkg/.nupkg}"
420 if [ -z "${nuname/*rtm*}" ] || [ -z "${nuname/*servicing*}" ] || [ -z "${nuname/*preview*}" ]; then
421 nuname=${nuname%-*}
422 fi
423 local nuname="${nuname%.*.*.*}"
424 local nuver="${nupkg/$nuname.}"
425 local nuver="${nuver/.nupkg}"
426 local nuspec="$nuname.nuspec"
427
428 if [ ! "$nupath" ] || [ "$nupath" = "${nupath/$nuver/$_iltoolsver}" ]; then
429 continue
430 fi
431 # shellcheck disable=SC2094
432 unzip -p "$nupath" $nuspec | sed "s|$nuver|$_iltoolsver|" > "$srcdir"/$nuspec
433 cd "$srcdir"
434 zip -u "$nupath" $nuspec
435 mv "$nupath" "${nupath/$nuver/$_iltoolsver}"
436 done
437
438 # make absolute rpath of libmscordbi.so to help abuild find libmscordaccore.so
439 local _libmscordbi_path="$(realpath "$subpkgdir"/usr/lib/dotnet/bootstrap/*/shared/Microsoft.NETCore.App/*/libmscordbi.so)"
440 local _libmscordbi_path="${_libmscordbi_path/$subpkgdir/}"
441 local _libmscordbi_path="${_libmscordbi_path%/*}"
442 patchelf $subpkgdir/usr/lib/dotnet/bootstrap/*/shared/Microsoft.NETCore.App/*/libmscordbi.so --set-rpath $_libmscordbi_path
443}
444
445# build relies on a plethora of nupkgs which are provided by this Artifacts file.
446# stage0 sources these from Microsoft, which then allows bootstrap to build
447# locally hosted versions. The following unpacks built tarball into directory
448# for use by future builds.
449artifacts() {
450 pkgdesc="Internal package for building .NET $_pkgver_macro Software Development Kit"
451 # hack to allow artifacts to pull itself
452 provides="dotnet$_pkgver_name-bootstrap-artifacts"
453 provider_priority=$_pkgver_prior
454
455 # directory creation
456 install -dm 755 \
457 "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver \
458 "$subpkgdir"/usr/share/licenses
459
460 # extract artifacts to artifacts dir for use by future dotnet builds
461 tar --use-compress-program="pigz" \
462 -xf "$srcdir"/Private.SourceBuilt.Artifacts.*.noextract \
463 -C "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/ \
464 --no-same-owner
465}
466
467sha512sums="
468acaa7ca6a414daeb113c2d2b7522a3a533f585db802a53c867873142dd2391a46760faea8f142ef68be0204b11d7b50cb6469301d54d756993d8105d63d8e668 dotnet-tarball-v8.0.132.tar.gz
469b369bffbbaa6e62df9d981fec0ad070021c2862779fd8efefa74897a0028b081fc167b1838c9fa41e1671354a667f1341c8ac61d33cffe37796c6b443b173138 dotnet-release-v8.0.132.json
470d201d23d068c5c320c3120c077438b5700ae1102e087209cee8caf370836709eabd3a80d1184bdd134b04175df3aad1233c7956e67bcc45fc644fc7acf95db77 dotnet-sdk-8.0.132-linux-musl-x64.noextract
4710af578cdbf3258c36bee35b8abf4f62d45380e199d76bf5c97910edd92fd073f383afd42df9115f68a4563e1e26a0b0ae2398dae1c1cc7a15fbd927e242e130e dotnet-sdk-8.0.132-linux-musl-arm64.noextract
4729b3e0cb267155d81f950d78bb6d60d7c7d179997d941d80762486b5d1983955341517053b659d64cdcb9e060860ee8806e5c18765f6a3fac8699af83ee2135dd dotnet-sdk-8.0.132-linux-musl-arm.noextract
47346ee04bede7a40b1d0ed402f6b184044870fd2eca22b7f1027055b9826c8410ce4210570e34f8d66edc1fff23326868b515e31d107845922c747892a7b8721e8 Private.SourceBuilt.Artifacts.8.0.132-servicing.26505.1.centos.9-x64.noextract
474b6a2dfeccac329546f87f1019c1f2cf07e2f294dd33914449ad08d92269c8713b6fa1e330ef257c24e189023fd0b824df97688b0ba6e578a6d0292b07a72b4c1 installer_set-crossgen2rid-using-buildarchitecture.patch
475d732df247c721c9f677baabdd7f36dbf4b564814ff64164361065bb1c196b767494a1d39f634eadf01a23032c7b3e64102614b7213065c81096bbf3f8022e6a0 runtime_82269-mono-thread-coop-undefine-fortify-source.patch
476c983a1ab7f06ac86691e0fa7a61fcad69a074d984ef4a4116bee43f20be918215963c7ec8ddd7edd70432b29b160ff78288183acc89fda15ce4a75bfdbf99ee3 runtime_83682-specify-notext-on-linux-musl-x86.patch
4773354fa721809f1b94c579408ee78004ff3ca2ba79212c1a0ecc424a9955bb5d5a80c115d4c30dd257526f356ea76f0562db6f83d8dd0b6135f8c689886b3348d runtime_90251-rename-mono-cmake-host-var.patch
478e748953eeeb13963f4e680fe6d38a5d0d1fc34b45fe9c62ba0b15ea647b23be826aaa7dd6466765c554bfed491b36c5822ac6f71b377dd95f31e16e6e75e0661 runtime_100781-fix-mono-build-on-arm.patch
4795b882e17c92a040a784742f637a19e7c09f10ed9e922436eaedaf0e2238e31fd67547821d073eaff6f7f61110be44af9d9e1786b6227659f72e8e1e549f6f540 runtime_reverse-101869-transition-1es-template-work.patch
4808348b51168709cd1f9e946dbfb02eaf3088d7c68e986390cf5fd861a057e188064013fbc008aa1e12d19d12b9ad7a4091732cd1b0fb8b629ef2a880718def5a7 runtime_disable-crossgen-on-riscv64.patch
48193454767eaa812ac39b38b04764bd41480fea9b5a78f32d2ea1baa072a20eb31d302c475e8737b0fb2a3b8a6f47567795ddd0a7603369e90e7c5944b11357b00 runtime_disable-local-exec-tls-riscv64.patch
482829f67ea6b3aae77a073a21ddc184f9751e44f3e721588907db9a6e00cd694a123a6e3866749aaee0e57290250ef3e67a8da8604f806e1d9a356fe9bc3fc9cdd runtime_clang-20.patch
483"