diff --git a/.gitlab/bin/build.sh b/.gitlab/bin/build.sh index 48885cd..1840f9f 100755 --- a/.gitlab/bin/build.sh +++ b/.gitlab/bin/build.sh @@ -207,6 +207,7 @@ build_start=$CI_ALPINE_BUILD_OFFSET build_limit=$CI_ALPINE_BUILD_LIMIT for repo in $(changed_repos); do + mkdir -p "$APORTSDIR"/logs "$APORTSDIR"/packages "$APORTSDIR"/keys set_repositories_for "$repo" built_aports=0 changed_aports_in_repo=$(changed_aports "$repo") diff --git a/user/dotnet8-build/APKBUILD b/user/dotnet8-build/APKBUILD new file mode 100644 index 0000000..992081e --- /dev/null +++ b/user/dotnet8-build/APKBUILD @@ -0,0 +1,522 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=dotnet8-build +pkgver=8.0.100_pre1 +pkgrel=0 +_gittag=v8.0.100-preview.1 +_giturl="https://github.com/dotnet/dotnet" +_testtag=16c3c04f3ae6620a474fa0474e8b298190e506c1 +_bunnytag=v12 +_patches=" + build_enable-timestamps.patch + check_rid-alpine-generation.diff + roslyn-analyzer_disable-apphost.patch + runtime_enable-system-libunwind.diff + runtime_mono-thread-coop-undefine-fortify-source.patch + sdk_14239-add-zsh-compdef-completion-script.patch + sdk_dotnet-watch-nowarn-ad0001.patch + " + +_pkgver_macro=${pkgver%.*} +_pkgver_prior=${pkgver%.*.*} +_pkgver_name=${_pkgver_macro//[.0]} +pkgdesc="The .NET $_pkgver_macro bootstrap" +# x86: blocked by https://github.com/dotnet/runtime/issues/77667 +# armhf: blocked by https://github.com/dotnet/runtime/issues/77663 +# riscv64: port WIP https://github.com/dotnet/runtime/issues/36748 +# s390x / ppc64le: no bootstrap crossbuilt yet +arch="all !x86 !armhf !riscv64 !s390x !ppc64le" +url=https://dotnet.microsoft.com +license="MIT" +# hack for dotnetx-build to be able to pull itself for bootstrapping +provides="dotnet$_pkgver_name-bootstrap" +provider_priority=$_pkgver_prior +checkdepends=" + babeltrace + binutils + coreutils + file + gawk + jq + lttng-tools + npm + procps + sed + strace + util-linux-misc + which + " +# For now package is not tested to build on itself +# To test: replace 'dotnet-stage0-bootstrap' with 'dotnet-bootstrap' +# and 'dotnet-stage0-artifacts' with 'dotnet-bootstrap-artifacts' +makedepends=" + bash + clang + cmake + dotnet$_pkgver_name-stage0-bootstrap + dotnet$_pkgver_name-stage0-artifacts + dotnet$_pkgver_name-stage0 + findutils + git + grep + icu-data-full + icu-dev + inetutils-syslogd + krb5-dev + libgit2-dev + libintl + libucontext-dev + libunwind-dev + libxml2-dev + libxml2-utils + linux-headers + lldb-dev + llvm-dev + lttng-ust-dev + nodejs + numactl-dev + openssl-dev + pigz + rsync + samurai + tar + xz + zlib-dev + " +case $CARCH in + s390x|x86) ;; + *) makedepends="$makedepends lld-dev";; +esac + +subpackages=" + dotnet$_pkgver_name-artifacts:artifacts:noarch + dotnet$_pkgver_name-sdk + dotnet$_pkgver_name-templates:templates:noarch + dotnet-zsh-completion:zshcomp:noarch + dotnet-bash-completion:bashcomp:noarch + dotnet-doc + netstandard21-targeting-pack:netstandard_targeting_pack:noarch + " +source=" + https://lab.ilot.io/dotnet/dotnet/-/releases/$_gittag/downloads/tarball/dotnet-$_gittag.tar.xz + dotnet-testsuite-$_testtag.tar.gz::https://github.com/redhat-developer/dotnet-regular-tests/archive/$_testtag.tar.gz + dotnet-bunny-$_bunnytag.tar.gz::https://github.com/redhat-developer/dotnet-bunny/archive/$_bunnytag.tar.gz + $_patches + " +builddir="$srcdir"/dotnet-$_gittag +_checkdir="$srcdir"/dotnet-bunny-${_bunnytag/v} +_testdir="$srcdir"/dotnet-regular-tests-$_testtag +_cli_root="$srcdir"/bootstrap +_libdir="/usr/lib" +# if true, then within pipeline environment, in which case send logs there +# to be scooped +if [ -d "$APORTSDIR/logs" ]; then + _logdir="$APORTSDIR"/logs/$pkgname +else + _logdir="$srcdir"/logs +fi + +case $CARCH in + x86_64) _dotnet_arch="x64";; + aarch64) _dotnet_arch="arm64";; + armv7) _dotnet_arch="arm";; + armhf) _dotnet_arch="armv6";; + *) _dotnet_arch="$CARCH";; +esac + +# Build doesn't set all the right executable bits for the right file types +_fix_executable() { + # add executable bit + find "$1" -type f \( \ + -name 'apphost' -o \ + -name 'singlefilehost' -o \ + -name 'lib*so' \ + \) \ + -exec chmod +x '{}' \; + + # remove executable bit + find "$1" -type f \( \ + -name '*.a' -o \ + -name '*.dll' -o \ + -name '*.h' -o \ + -name '*.json' -o \ + -name '*.pdb' -o \ + -name '*.props' -o \ + -name '*.pubxml' -o \ + -name '*.targets' -o \ + -name '*.txt' -o \ + -name '*.xml' \ + \) \ + -exec chmod -x '{}' \; +} + +# generates tarball containing all components built by dotnet +snapshot() { + local _pkg="$srcdir"/${builddir##*/}.tar + ulimit -n 4096 + if [ -d "$srcdir" ]; then + cd "$srcdir" + else + mkdir -p "$srcdir" && cd "$srcdir" + fi + if [ -d "installer" ]; then + cd "$srcdir"/installer + else + git clone $_giturl --branch $_gittag && cd "$srcdir"/installer + fi + + sed 's||' -i src/SourceBuild/Arcade/tools/SourceBuildArcadeTarball.targets + + if [ -d "$_libdir/dotnet/bootstrap" ]; then + local _cli_root="$(find $_libdir/dotnet/bootstrap/${_pkgver_macro}* -maxdepth 0 -type d | sort -r | head -n 1)" + else + local _cli_root="" + fi + + _InitializeDotNetCli="$_cli_root" DOTNET_INSTALL_DIR="$_cli_root" DotNetBuildFromSource=true ./build.sh \ + /p:ArcadeBuildTarball=true \ + /p:TarballDir=$builddir \ + /p:TarballFilePath=$_pkg + + msg "Compressing ${builddir##*/}.tar to $SRCDEST" + xz -T0 -9 -vv -e -c > "$SRCDEST"/${builddir##*/}.tar.xz < "$_pkg" + + cd "$startdir" + abuild checksum +} + +prepare() { + default_prepare + + # check patches + msg "check_rid-alpine-generation.diff" + patch -p1 -d "$_testdir" -i "$srcdir"/check_rid-alpine-generation.diff + + # Parallel restore is broken on mono-based builds since dotnet7 + # see https://github.com/dotnet/runtime/issues/77364 + # A workaround via runtime_enable-runtime-marshalling.diff + case $CARCH in + s390x|ppc64le) + msg "runtime_enable-runtime-marshalling.diff" + patch -p1 -i "$srcdir"/runtime_enable-runtime-marshalling.diff + ;; + esac + + # Using system libunwind is broken on aarch64|armv7, and unused on mono-based builds + # see https://github.com/dotnet/source-build/issues/2408, + case $CARCH in + aarch64|armv7) msg "Using bundled libunwind";; + armhf|s390x|ppc64le) msg "No libunwind used";; + *) + msg "Using system libunwind" + patch -p1 -i "$srcdir"/runtime_enable-system-libunwind.diff + ;; + esac + + # ensure that dotnet does not download artifacts provided by dotnet-artifacts + rm -rf "$builddir"/packages/archive + + # links logfiles to pipeline logs for easy pickup in pipelines + mkdir -p "$_logdir" "$builddir"/artifacts + ln -s "$_logdir" "$builddir"/artifacts/logs + ln -s "$_logdir" "$builddir"/artifacts/log + for i in "$builddir"/src/*; do + if [ -f "$i" ]; then + continue + fi + mkdir -p "$_logdir"/${i##*\/} "$builddir"/src/${i##*\/}/artifacts + ln -s "$_logdir"/${i##*\/} "$builddir"/src/${i##*\/}/artifacts/log + done + + # dotnet requires its bootstrap to be in a writable dir + msg "Setting up bootstrap" + local _bootstrapdir=$(find $_libdir/dotnet/bootstrap/$_pkgver_macro* -maxdepth 0 | sort -r | head -n 1) + if [ ! -d "$_cli_root" ]; then + cp -r "$_bootstrapdir" "$_cli_root" + fi +} + +build() { + msg "Building $pkgname-$pkgver" + + ulimit -n 4096 + + # Disable use of LTTng as tracing on lttng <=2,13,0 is broken + # See https://github.com/dotnet/runtime/issues/57784. + if [ -f "/usr/lib/liblttng-ust.so.1 " ]; then + export DOTNET_LTTng=0 + fi + + # looks for most recent recent version of _artifactsdir + local _artifactsdir=$(find $_libdir/dotnet/artifacts/$_pkgver_macro* -maxdepth 0 | sort -r | head -n 1) + + # ci args, else the output is forwarded to log files which isn't ideal in a + # pipeline environment, and build by defaults uses lots of space + local args=" + /v:minimal + /p:LogVerbosity=minimal + /p:MinimalConsoleLogOutput=true + /p:CleanWhileBuilding=true + " + + # part of https://github.com/dotnet/installer/pull/14792 that sets this flag + # was not integrated in 7.0.1xx yet + case $CARCH in + s390x|ppc64le) local args="$args /p:SourceBuildUseMonoRuntime=true";; + esac + + # Sets TargetRid manually as dotnet cannot be trusted to reliably compute + # the machine's runtime ID between releases. + # shellcheck disable=SC2034 + . /etc/os-release + local VERSION_ID_DOT="${VERSION_ID//[^.]}" + while [ ${#VERSION_ID_DOT} -gt 1 ]; do + local VERSION_ID="${VERSION_ID%.*}" + local VERSION_ID_DOT="${VERSION_ID//[^.]}" + done + local VERSION_ID_DASH="${VERSION_ID//[^_]}" + while [ ${#VERSION_ID_DASH} -ge 1 ]; do + local VERSION_ID="${VERSION_ID%_*}" + local VERSION_ID_DASH="${VERSION_ID//[^_]}" + done + local args="$args /p:TargetRid=$ID.$VERSION_ID-$_dotnet_arch" + + ./build.sh \ + --with-sdk "$_cli_root" \ + --with-packages "$_artifactsdir" \ + -- $args +} + +check() { + ulimit -n 4096 + # Tests timeout (in seconds) + local _tests_timeout=1000 + # Test suite disable flags + # following tests can only work after packaging step + local _disabled_tests="man-pages distribution-package bash-completion install-location release-version-sane" + # test broken: permission issue on lxc / pipelines + local _disabled_tests="$_disabled_tests createdump-aspnet workload" + # liblttng-ust_sys-sdt.h: no 'NT_STAPSDT' on Alpine's lttng-ust package + # lttng: known issue, see https://github.com/dotnet/runtime/issues/57784 + local _disabled_tests="$_disabled_tests liblttng-ust_sys-sdt.h lttng" + # {bundled,system}-libunwind: use system version on all but aarch64/armv7, as broken + # see https://github.com/redhat-developer/dotnet-regular-tests/issues/113 + # disable on mono-flavored runtime as mono does not use libunwind + case $CARCH in + armv7|aarch64) local _disabled_tests="$_disabled_tests system-libunwind";; + s390x|ppc64le|armhf) local _disabled_tests="$_disabled_tests bundled-libunwind system-libunwind";; + *) local _disabled_tests="$_disabled_tests bundled-libunwind";; + esac + # test unit broken currently + _disabled_tests="$_disabled_tests system-libunwind" + # nativeaot is not supported on armv7 + case $CARCH in + armv7) local _disabled_tests="$_disabled_tests nativeaot" + esac + + msg "Unpacking produced dotnet" + export DOTNET_ROOT="$_checkdir/release" + if [ ! -d "$DOTNET_ROOT" ]; then + mkdir -p "$DOTNET_ROOT" + tar --use-compress-program="pigz" \ + -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ + -C "$DOTNET_ROOT" \ + --no-same-owner + fi + export PATH="$DOTNET_ROOT:$PATH" + # some files either should or should not have executable bits + # (done again during packaging - this is for tests) + _fix_executable "$DOTNET_ROOT" + + msg "Building turkey test suite" + if [ ! -d "$_logdir/check" ]; then + mkdir -p "$_logdir"/check + fi + if [ ! -d "$_checkdir"/turkey ]; then + cd "$_checkdir"/Turkey + dotnet publish -bl:"$_logdir"/check/turkey.binlog -f netcoreapp3.1 -c Release -p:VersionPrefix=1 -p:VersionSuffix="$(git rev-parse --short HEAD)" -o "$_checkdir"/turkey + fi + + msg "Running test suite" + cd "$_testdir" + for i in $_disabled_tests; do + if [ -d "$i" ]; then + sed -i 's|"enabled": true|"enabled": false|' $i/test.json + fi + done + dotnet "$_checkdir"/turkey/Turkey.dll -t $_tests_timeout -l "$_logdir"/check || local ERROR=true + if [ $ERROR ]; then + msg "Check error reported, please check logs" + fi +} + +package() { + # directory creation + install -dm 755 \ + "$pkgdir"/$_libdir/dotnet/bootstrap/$pkgver \ + "$pkgdir"/usr/share/man/man1 \ + "$pkgdir"/$_libdir/dotnet/artifacts/$pkgver + + # unpack sdk to bootstrap + tar --use-compress-program="pigz" \ + -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ + -C "$pkgdir"/$_libdir/dotnet/bootstrap/$pkgver/ \ + --no-same-owner + + # extract arch-specific artifacts to artifacts dir for use by future dotnet builds + tar --use-compress-program="pigz" \ + -xf "$builddir"/artifacts/$_dotnet_arch/Release/Private.SourceBuilt.Artifacts.*.tar.gz \ + -C "$pkgdir"/$_libdir/dotnet/artifacts/$pkgver/ \ + --no-same-owner \ + --wildcards \ + '*alpine*' + + # assemble docs + find "$builddir" -iname 'dotnet*.1' -type f -exec cp '{}' "$pkgdir"/usr/share/man/man1/. \; + + # some files either should or should not have executable bits + _fix_executable "$pkgdir" + + # Disable use of LTTng as tracing on lttng <=2,13,0 is broken + # See https://github.com/dotnet/runtime/issues/57784. + if [ -f "/usr/lib/liblttng-ust.so.1 " ]; then + rm "$pkgdir"/$_libdir/dotnet/bootstrap/*/shared/Microsoft.NETCore.App/*/libcoreclrtraceptprovider.so + fi +} + +sdk() { + pkgdesc="The .NET $_pkgver_macro SDK" + # libucontext isn't automatically detected on all platforms + depends=" + aspnetcore$_pkgver_name-runtime + aspnetcore$_pkgver_name-targeting-pack + dotnet$_pkgver_name-apphost-pack + dotnet$_pkgver_name-targeting-pack + dotnet$_pkgver_name-templates + netstandard21-targeting-pack + libucontext + " + provides=" + dotnet-sdk-$_pkgver_macro=$pkgver-r$pkgrel + dotnet$_pkgver_name-dev=$pkgver-r$pkgrel + " + + install -dm 755 "$subpkgdir"/$_libdir/dotnet + + # sdk + tar --use-compress-program="pigz" \ + -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ + -C "$subpkgdir"/$_libdir/dotnet/ \ + --no-same-owner \ + ./sdk ./sdk-manifests + + # some files either should or should not have executable bits + _fix_executable "$subpkgdir" + + # See https://github.com/dotnet/source-build/issues/2579 + find "$subpkgdir" -type f -name 'testhost.x86' -delete + find "$subpkgdir" -type f -name 'vstest.console' -delete +} + +netstandard_targeting_pack() { + pkgdesc="The .NET 2.1 Standard targeting pack" + depends="dotnet-host" + provides="netstandard-targeting-pack-2.1=$pkgver-r$pkgrel" + + install -dm 755 "$subpkgdir"/$_libdir/dotnet/packs + tar --use-compress-program="pigz" \ + -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ + -C "$subpkgdir"/$_libdir/dotnet/ \ + --no-same-owner \ + ./packs/NETStandard.Library.Ref + + # some files either should or should not have executable bits + _fix_executable "$subpkgdir" +} + +templates() { + pkgdesc="The .NET $_pkgver_macro templates" + depends="dotnet-host" + provides="dotnet-templates-$_pkgver_macro=$pkgver-r$pkgrel" + + install -dm 755 "$subpkgdir"/$_libdir/dotnet + tar --use-compress-program="pigz" \ + -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ + -C "$subpkgdir"/$_libdir/dotnet/ \ + --no-same-owner \ + ./templates + + # some files either should or should not have executable bits + _fix_executable "$subpkgdir" +} + +artifacts() { + pkgdesc="Internal package for building .NET $_pkgver_macro Software Development Kit" + # hack to allow artifacts to pull itself + provides="dotnet$_pkgver_name-bootstrap-artifacts" + provider_priority=$_pkgver_prior + + # directory creation + install -dm 755 \ + "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver \ + "$subpkgdir"/usr/share/licenses + + # extract arch-agnostic artifacts to artifacts dir for use by future dotnet builds + tar --use-compress-program="pigz" \ + -xf "$builddir"/artifacts/$_dotnet_arch/Release/Private.SourceBuilt.Artifacts.*.tar.gz \ + -C "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/ \ + --no-same-owner \ + --exclude '*Intermediate*' \ + --exclude '*alpine*' +} + +zshcomp() { + depends="" + pkgdesc="zsh completion for .NET" + # netstandard21-targeting-pack will always be pulled by any dotnetx-sdk + # thus pulling this with it for sdk + install_if="netstandard21-targeting-pack zsh" + depends="dotnet-host" + + install -dm 755 "$subpkgdir"/usr/share/zsh/site-functions + install -m 755 "$builddir"/src/sdk/scripts/register-completions.zsh "$subpkgdir"/usr/share/zsh/site-functions/_dotnet +} + +bashcomp() { + depends="" + pkgdesc="bash completion for .NET" + # netstandard21-targeting-pack will always be pulled by any dotnetx-sdk + # thus pulling this with it for sdk + install_if="netstandard21-targeting-pack bash-completion" + depends="dotnet-host" + + install -dm 755 "$subpkgdir"/usr/share/bash-completion/completions + install -m 755 "$builddir"/src/sdk/scripts/register-completions.bash "$subpkgdir"/usr/share/bash-completion/completions/_dotnet +} + +doc() { + default_doc + pkgdesc="Docs for .NET" + + # licenses + install -dm 755 "$subpkgdir"/usr/share/licenses/dotnet + tar --use-compress-program="pigz" \ + -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ + -C "$subpkgdir"/usr/share/licenses/dotnet/ \ + --no-same-owner \ + ./LICENSE.txt ./ThirdPartyNotices.txt +} + +sha512sums=" +f48d4168f526aade888bbd17f2da87f721dabc8ae004707ef9195b6359b79b871115a686678c87542ba74e1d86e5485df13d77ef4d3f4001c0804426aebaf92c dotnet-v8.0.100-preview.1.tar.xz +81428356e4b9691c54cacd242368a42d3939732918a608c2a5ae3f23fff45af2d9e981ead70a977f34f4e498c422f708e523bfbbf590cfdafb5c16ef1f0fed8a dotnet-testsuite-16c3c04f3ae6620a474fa0474e8b298190e506c1.tar.gz +0028d5d97b814b122d73137b4e0d64ca5d788aa0ae5fde500de722e23522827f2538f06e75acb17cc39b8917961ee78d1f0bbc84b2b624ae0e9bf88adca2ba6f dotnet-bunny-v12.tar.gz +eed7a7481a967f6938de956a6df485efa6dd61bf36ae4a768493cb1f7da0296dc91e0f2f89f7c302083ba9cf0c778e28228ec1b52e902077a00072d7d9957ef3 build_enable-timestamps.patch +941b430b55e323f723bbc5160447f060f40d18ce32e5803ab7dda16bfc60a0f5ec1dccd246e68475d7115ee265a9433824d8a5d997c302531311194a90deeca9 check_rid-alpine-generation.diff +4ac92d2d9190a55ee20d3e145a28a6953c98d3eb838c8acfb808b8839316443cb64da4a2c5787df0171fce7ef96ff6381043085ed90c23ec09ce9ac81571e675 roslyn-analyzer_disable-apphost.patch +293742ab307bef459a21deadcc4ad7c7996cc4b490910a36c2763b8ad25cc8a91c4e03b6290567cd1030f69638d0156c5b6970887858fb091f8482b67356065d runtime_enable-system-libunwind.diff +d732df247c721c9f677baabdd7f36dbf4b564814ff64164361065bb1c196b767494a1d39f634eadf01a23032c7b3e64102614b7213065c81096bbf3f8022e6a0 runtime_mono-thread-coop-undefine-fortify-source.patch +d1b4ebcbb1a6815fc0ce4c471485c232618e60968a879309fb8336821a9351d2e0028d9f7726c0c041c750b497a0baa47400c78c9ceff550b91b4a6c2816fc41 sdk_14239-add-zsh-compdef-completion-script.patch +89d008944bf0ba16250ff078e650619b2087654d98b4f7dd614b8197774236e946d92ea17d81d037251ab16880e7bb8f74dbd8a244ca713ecd3efbea17e09318 sdk_dotnet-watch-nowarn-ad0001.patch +" diff --git a/user/dotnet8-build/README.md b/user/dotnet8-build/README.md new file mode 100644 index 0000000..4c2c6df --- /dev/null +++ b/user/dotnet8-build/README.md @@ -0,0 +1,145 @@ +# dotnet7-build + +This is the .NET 7.0 package for Alpine Linux. + +Please report any issues [using Gitlab](https://gitlab.alpinelinux.org/alpine/aports/-/issues/new) and tag @ayakael + +# Building info + +## Generated packages +* `dotnet7-build` (aimed for internal use as bootstrap) +* `dotnet7-build-artifacts` (aimed for internal use as bootstrap) +* `dotnet7-sdk` +* `dotnet7-templates` (required by sdk) +* `dotnet-zsh-completion` +* `dotnet-bash-completion` +* `dotnet-doc` +* `netstandard21-targeting-pack` + +## How to build dotnet7 on Alpine +As dotnet is a self-hosting compiler (thus it compiles using itself), it +requires a bootstrap for the initial build. To solve this problem, this package +follows the `stage0` proposal outlined [here](https://lists.alpinelinux.org/~alpine/devel/%3C33KG0XO61I4IL.2Z7RTAZ5J3SY6%408pit.net%3E) + +The goal of `stage0` is to bootstrap dotnet with as little intervention as +possible, thus allowing seamless Alpine upgrades. Unfortunately, upstream only +builds bootstraps for Alpine on `x86_64`, `aarch64`, and `armv7`. Thus, `stage0` +has also been designed to be crossbuild aware, allowing bootstrapping to other +platforms. + +In summary, dotnet7 is built using three different aports. + +* `community/dotnet7-stage0` +Builds minimum components for full build of dotnet7, and packages these in an initial +`dotnet7-stage0-bootstrap` package that `dotnet7-build` pulls. +* `community/dotnet7-build` +Builds full and packages dotnet7 fully using either stage0 or previoulsy built +dotnet7 build. +* `community/dotnet7-runtime` +As abuild does not allow different versions for subpackages, a different aport +is required to package runtime bits from dotnet7-build. + +## Crossbuilding with `stage0` +Crossbuilding `stage0` is a three step process: +1. Build sysroot for target platform by using `scripts/bootstrap.sh` in aports repo: +``` +./bootstrap.sh $CTARGET_ARCH +``` +2. Although not necessary, it is recommended to add Alpine repositories to + `$HOME/sysroot-$CTARGET_ARCH/etc/apk/repositories`, making sure to add required + keys. This makes it so that whatever package is not built in step 1 will + be pulled from package repos +3. Crossbuild `dotnet7-stage0` via: +``` +CHOST=$CTARGET_ARCH abuild -r +``` + +# Specification + +This package follows [package naming and contents suggested by upstream](https://docs.microsoft.com/en-us/dotnet/core/build/distribution-packaging), +with two exceptions. It installs dotnet to `/usr/lib/dotnet` (aka `$_libdir`). +In addition, the package is named `dotnet7` as opposed to `dotnet-7.0` +to match Alpine Linux naming conventions for packages with many installable versions + +# Contributing + +The steps below are for the final package. Please only contribute to a +pre-release version if you know what you are doing. Original instructions +follow. + +## General Changes + +1. Fork the main aports repo. + +2. Checkout the forked repository. + + - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` + - `cd community/dotnet7-build` + +3. Make your changes. Don't forget to add a changelog. + +4. Do local builds. + + - `abuild -r` + +5. Fix any errors that come up and rebuild until it works locally. + +6. Commit the changes to the git repo in a git branch + + - `git checkout -b dotnet7/` + - `git add` any new patches + - `git remove` any now-unnecessary patches + - `git commit -m 'community/dotnet7-build: descriptive description'` + - `git push` + +7. Create a merge request with your changes, tagging @ayakael for review. + +8. Once the tests in the merge-request pass, and reviewers are happy, your changes + will be merged. + +## Updating to an new upstream release + +1. Fork the main aports repo. + +2. Checkout the forked repository. + + - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` + - `cd community/dotnet7-build` + + +3. Build the new upstream source tarball. Update the versions in the + APKBUILD file, and then create a snapshot. After build, update checksum. + + - `abuild snapshot` + - `abuild checksum` + +4. Do local builds. + + - `abuild -r` + +5. Fix any errors that come up and rebuild until it works locally. Any + patches that are needed at this point should be added to the APKBUILD file + in `_patches` variable. + +6. Upload the source archive to a remote location, and update `source` variable. + +7. Commit the changes to the git repo in a git branch. + + - `git checkout -b dotnet7/` + - `git add` any new patches + - `git remove` any now-unnecessary patches + - `git commit -m 'community/dotnet7-build: upgrade to ` + - `git push` + +8. Create a merge request with your changes, tagging @ayakael for review. + +9. Once the tests in the merge-request pass, and reviewers are happy, your changes + will be merged. + +# Testing + +This package uses CI tests as defined in `check()` function. Creating a +merge-request or running a build will fire off tests and flag any issues. + +The tests themselves are contained in this external repository: +https://github.com/redhat-developer/dotnet-regular-tests/ diff --git a/user/dotnet8-build/build_enable-timestamps.patch b/user/dotnet8-build/build_enable-timestamps.patch new file mode 100644 index 0000000..5977a41 --- /dev/null +++ b/user/dotnet8-build/build_enable-timestamps.patch @@ -0,0 +1,40 @@ +diff --git a/repo-projects/Directory.Build.props b/repo-projects/Directory.Build.props +index b70a3161fef..d57f9393299 100644 +--- a/repo-projects/Directory.Build.props ++++ b/repo-projects/Directory.Build.props +@@ -134,6 +134,7 @@ + $(StandardSourceBuildArgs) $(FlagParameterPrefix)pack + $(StandardSourceBuildArgs) $(FlagParameterPrefix)publish + $(StandardSourceBuildArgs) -bl ++ $(StandardSourceBuildArgs) /consoleLoggerParameters:ShowTimestamp + + $(StandardSourceBuildArgs) /p:ArcadeBuildFromSource=true + $(StandardSourceBuildArgs) /p:CopyWipIntoInnerSourceBuildRepo=true + $(StandardSourceBuildArgs) /p:DotNetBuildOffline=true + +diff --git a/src/fsharp/eng/build.sh b/src/fsharp/eng/build.sh +index fff8414b3ef..d470fc6ed56 100755 +--- a/src/fsharp/eng/build.sh ++++ b/src/fsharp/eng/build.sh +@@ -144,7 +144,7 @@ while [[ $# > 0 ]]; do + --sourcebuild) + source_build=true + ;; +- /p:*) ++ /*) + properties="$properties $1" + ;; + *) +diff --git a/src/roslyn/eng/build.sh b/src/roslyn/eng/build.sh +index a08cbea099d..d3ec235732f 100755 +--- a/src/roslyn/eng/build.sh ++++ b/src/roslyn/eng/build.sh +@@ -167,7 +167,7 @@ while [[ $# > 0 ]]; do + args="$args $1" + shift + ;; +- /p:*) ++ /*) + properties="$properties $1" + ;; + *) diff --git a/user/dotnet8-build/check_rid-alpine-generation.diff b/user/dotnet8-build/check_rid-alpine-generation.diff new file mode 100644 index 0000000..ee389e9 --- /dev/null +++ b/user/dotnet8-build/check_rid-alpine-generation.diff @@ -0,0 +1,42 @@ +From 5bbd0366f3caa6281fbafb49882a226453371b6a Mon Sep 17 00:00:00 2001 +From: Antoine Martin (ayakael) +Date: Wed, 10 Aug 2022 00:57:30 +0000 +Subject: [PATCH 1/1] fix-runtme-id + +General fix for RID normalisation in testing suite + +--- + runtime-id | 19 +++++++++++-------- + 1 file changed, 11 insertions(+), 8 deletions(-) + +diff --git a/runtime-id b/runtime-id +index 5673bba..7369776 100755 +--- a/runtime-id ++++ b/runtime-id +@@ -44,12 +44,15 @@ if [[ ${portable_rid} == 1 ]]; then + echo "linux-${arch}" + fi + else +- case "${ID}" in +- # Remove the minor version +- alpine|ol|rhel|rocky) rid_version=${VERSION_ID%.*} ;; +- +- *) rid_version=${VERSION_ID} ;; +- esac +- +- echo "${ID}.${rid_version}-${arch}" ++ VERSION_ID_DOT="${VERSION_ID//[^.]}" ++ while [[ ${#VERSION_ID_DOT} -gt 1 ]]; do ++ VERSION_ID="${VERSION_ID%.*}" ++ VERSION_ID_DOT="${VERSION_ID//[^.]}" ++ done ++ VERSION_ID_DASH="${VERSION_ID//[^_]}" ++ while [[ ${#VERSION_ID_DASH} -ge 1 ]]; do ++ VERSION_ID="${VERSION_ID%_*}" ++ VERSION_ID_DASH="${VERSION_ID//[^_]}" ++ done ++ echo "${ID}.${VERSION_ID}-${arch}" + fi +-- +2.37.1 + diff --git a/user/dotnet8-build/roslyn-analyzer_disable-apphost.patch b/user/dotnet8-build/roslyn-analyzer_disable-apphost.patch new file mode 100644 index 0000000..7ebf967 --- /dev/null +++ b/user/dotnet8-build/roslyn-analyzer_disable-apphost.patch @@ -0,0 +1,28 @@ +From 79f02a53316f90543d60269d7c06727c376f423b Mon Sep 17 00:00:00 2001 +From: Antoine Martin +Date: Wed, 24 Aug 2022 18:41:08 +0000 +Subject: [PATCH 1/1] disable apphost usage + +Roslyn-analyzer can't seem to find apphost produced by runtime build on ppc64le +This disables its use as it isn't necessary + +--- +diff --git a/src/roslyn-analyzers/src/PerformanceTests/Tests/PerformanceTests.csproj b/src/roslyn-analyzers/src/PerformanceTests/Tests/PerformanceTests.csproj +index 044a2aba46..3d37e147b3 100644 +--- a/src/roslyn-analyzers/src/PerformanceTests/Tests/PerformanceTests.csproj ++++ b/src/roslyn-analyzers/src/PerformanceTests/Tests/PerformanceTests.csproj +@@ -15,6 +15,7 @@ + Release + false + true ++ false + + + +@@ -27,4 +28,4 @@ + + + +- +\ No newline at end of file ++ diff --git a/user/dotnet8-build/runtime_76500-mono-musl-support.patch b/user/dotnet8-build/runtime_76500-mono-musl-support.patch new file mode 100644 index 0000000..6f4a121 --- /dev/null +++ b/user/dotnet8-build/runtime_76500-mono-musl-support.patch @@ -0,0 +1,326 @@ +From 98054ea87ce70247bb09ceafd2ad1a0b36d2fef4 Mon Sep 17 00:00:00 2001 +Patch-Source: https://github.com/dotnet/runtime/pull/76500 +From: Antoine Martin +Date: Sat, 1 Oct 2022 09:21:58 -0400 +Subject: [PATCH] Mono musl support + +--- + Directory.Build.props | 1 + + eng/common/cross/toolchain.cmake | 38 +++++++++++++++++++----- + eng/native/configurecompiler.cmake | 7 +++++ + eng/native/tryrun.cmake | 6 +++- + src/coreclr/pal/src/CMakeLists.txt | 5 ++++ + src/coreclr/pal/src/misc/perfjitdump.cpp | 2 +- + src/coreclr/vm/i386/cgenx86.cpp | 4 +++ + src/mono/CMakeLists.txt | 33 ++++++++++++++++++++ + src/mono/mono.proj | 32 +++++++++++++------- + src/mono/mono/mini/mini-runtime.c | 29 ++++++++++++++++++ + src/mono/mono/utils/mono-context.h | 8 +++++ + 11 files changed, 146 insertions(+), 19 deletions(-) + +diff --git a/src/runtime/Directory.Build.props b/src/runtime/Directory.Build.props +index 6f9b97c0a9c..4298a6df1d3 100644 +--- a/src/runtime/Directory.Build.props ++++ b/src/runtime/Directory.Build.props +@@ -22,7 +22,6 @@ + $(_hostOS) + true + true +- true + + + +@@ -154,7 +154,7 @@ + <_runtimeOS Condition="'$(TargetsMobile)' == 'true'">$(TargetOS.ToLowerInvariant()) + + <_portableOS>linux +- <_portableOS Condition="'$(_runtimeOS)' == 'linux-musl'">linux-musl ++ <_portableOS Condition="'$(_runtimeOS)' == 'linux-musl' or $(_runtimeOS.StartsWith('alpine'))">linux-musl + <_portableOS Condition="'$(_runtimeOS)' == 'linux-bionic'">linux-bionic + <_portableOS Condition="'$(_hostOS)' == 'OSX'">osx + <_portableOS Condition="'$(_runtimeOS)' == 'win' or '$(TargetOS)' == 'windows'">win + +@@ -200,6 +199,9 @@ + + $(PackageRID) + $(_portableOS)-$(TargetArchitecture) ++ ++ true ++ true + + + +diff --git a/src/runtime/eng/native/tryrun.cmake b/src/runtime/eng/native/tryrun.cmake +index 6355b0988f7..056c6606b17 100644 +--- a/src/runtime/eng/native/tryrun.cmake ++++ b/src/runtime/eng/native/tryrun.cmake +@@ -8,7 +8,11 @@ endmacro() + + if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/armv7-alpine-linux-musleabihf OR + EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/armv6-alpine-linux-musleabihf OR +- EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/aarch64-alpine-linux-musl) ++ EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/aarch64-alpine-linux-musl OR ++ EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/s390x-alpine-linux-musl OR ++ EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/ppc64le-alpine-linux-musl OR ++ EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/i586-alpine-linux-musl OR ++ EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/riscv64-alpine-linux-musl) + + set(ALPINE_LINUX 1) + elseif(EXISTS ${CROSS_ROOTFS}/bin/freebsd-version) +diff --git a/src/runtime/src/coreclr/pal/src/CMakeLists.txt b/src/runtime/src/coreclr/pal/src/CMakeLists.txt +index d9726460ccf..c28563f8619 100644 +--- a/src/runtime/src/coreclr/pal/src/CMakeLists.txt ++++ b/src/runtime/src/coreclr/pal/src/CMakeLists.txt +@@ -315,6 +315,11 @@ if(CLR_CMAKE_TARGET_LINUX) + target_link_libraries(coreclrpal ${UNWIND_LIBS}) + endif(CLR_CMAKE_USE_SYSTEM_LIBUNWIND) + ++ # bundled libunwind requires using libucontext on alpine and x86 and ppc64le ++ if(CLR_CMAKE_TARGET_ALPINE_LINUX AND (CLR_CMAKE_TARGET_ARCH_I386 OR CLR_CMAKE_TARGET_ARCH_POWERPC64)) ++ target_link_libraries(coreclrpal ucontext) ++ endif(CLR_CMAKE_TARGET_ALPINE_LINUX AND (CLR_CMAKE_TARGET_ARCH_I386 OR CLR_CMAKE_TARGET_ARCH_POWERPC64)) ++ + endif(CLR_CMAKE_TARGET_LINUX) + + if(CLR_CMAKE_TARGET_NETBSD) +diff --git a/src/runtime/src/coreclr/pal/src/misc/perfjitdump.cpp b/src/runtime/src/coreclr/pal/src/misc/perfjitdump.cpp +index 8d7f79ed3f0..043939ad2da 100644 +--- a/src/runtime/src/coreclr/pal/src/misc/perfjitdump.cpp ++++ b/src/runtime/src/coreclr/pal/src/misc/perfjitdump.cpp +@@ -25,7 +25,7 @@ + #include + #include + #include +-#include ++#include + + #include "../inc/llvm/ELF.h" + +diff --git a/src/runtime/src/coreclr/vm/i386/cgenx86.cpp b/src/runtime/src/coreclr/vm/i386/cgenx86.cpp +index 811c84a140d..4e958a44b30 100644 +--- a/src/runtime/src/coreclr/vm/i386/cgenx86.cpp ++++ b/src/runtime/src/coreclr/vm/i386/cgenx86.cpp +@@ -1133,6 +1133,7 @@ extern "C" DWORD __stdcall avx512StateSupport() + + #else // !TARGET_UNIX + ++#if !__has_builtin(__cpuid) + void __cpuid(int cpuInfo[4], int function_id) + { + // Based on the Clang implementation provided in cpuid.h: +@@ -1143,7 +1144,9 @@ void __cpuid(int cpuInfo[4], int function_id) + : "0"(function_id) + ); + } ++#endif + ++#if !__has_builtin(__cpuidex) + void __cpuidex(int cpuInfo[4], int function_id, int subFunction_id) + { + // Based on the Clang implementation provided in cpuid.h: +@@ -1154,6 +1157,7 @@ void __cpuidex(int cpuInfo[4], int function_id, int subFunction_id) + : "0"(function_id), "2"(subFunction_id) + ); + } ++#endif + + extern "C" DWORD __stdcall xmmYmmStateSupport() + { +diff --git a/src/runtime/src/mono/CMakeLists.txt b/src/runtime/src/mono/CMakeLists.txt +index cdff32677c0..08a82cd7e83 100644 +--- a/src/runtime/src/mono/CMakeLists.txt ++++ b/src/runtime/src/mono/CMakeLists.txt +@@ -216,6 +216,35 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") + # Enable the "full RELRO" options (RELRO & BIND_NOW) at link time + add_link_options(-Wl,-z,relro) + add_link_options(-Wl,-z,now) ++ # Detect Linux ID ++ # TODO: Eventually merge with eng/native/configureplatform.cmake ++ set(LINUX_ID_FILE "/etc/os-release") ++ if(CMAKE_CROSSCOMPILING) ++ set(LINUX_ID_FILE "${CMAKE_SYSROOT}${LINUX_ID_FILE}") ++ endif() ++ ++ if(EXISTS ${LINUX_ID_FILE}) ++ execute_process( ++ COMMAND bash -c "source ${LINUX_ID_FILE} && echo \$ID" ++ OUTPUT_VARIABLE CLR_CMAKE_LINUX_ID ++ OUTPUT_STRIP_TRAILING_WHITESPACE) ++ ++ execute_process( ++ COMMAND bash -c "if strings \"${CMAKE_SYSROOT}/usr/bin/ldd\" 2>&1 | grep -q musl; then echo musl; fi" ++ OUTPUT_VARIABLE CLR_CMAKE_LINUX_MUSL ++ OUTPUT_STRIP_TRAILING_WHITESPACE) ++ endif() ++ ++ if(DEFINED CLR_CMAKE_LINUX_ID) ++ if(CLR_CMAKE_LINUX_ID STREQUAL alpine) ++ set(CLR_CMAKE_HOST_ALPINE_LINUX 1) ++ set(CLR_CMAKE_HOST_OS ${CLR_CMAKE_LINUX_ID}) ++ endif() ++ ++ if(CLR_CMAKE_LINUX_MUSL STREQUAL musl) ++ set(CLR_CMAKE_HOST_LINUX_MUSL 1) ++ endif() ++ endif(DEFINED CLR_CMAKE_LINUX_ID) + elseif(CMAKE_SYSTEM_NAME STREQUAL "Android") + set(HOST_LINUX 1) + add_definitions(-D_GNU_SOURCE -D_REENTRANT) +@@ -893,6 +922,12 @@ if(HOST_IOS OR HOST_ANDROID OR HOST_MACCAT) + else() + set(DISABLE_DLLMAP 1) + endif() ++ ++if(CLR_CMAKE_HOST_ALPINE_LINUX) ++ # On Alpine Linux, we need to ensure that the reported stack range for the primary thread is ++ # larger than the initial committed stack size. ++ add_definitions(-DENSURE_PRIMARY_STACK_SIZE) ++endif() + ### End of OS specific checks + + include_directories("${CLR_SRC_NATIVE_DIR}") +diff --git a/src/runtime/src/mono/mono.proj b/src/runtime/src/mono/mono.proj +index 59fea4a2f72..5bac7fdf1c6 100644 +--- a/src/runtime/src/mono/mono.proj ++++ b/src/runtime/src/mono/mono.proj +@@ -554,19 +560,21 @@ + darwin-x86_64 + windows-x86_64 + <_MonoRuntimeFilePath>$(MonoObjDir)out\lib\$(MonoFileName) +- <_LinuxAbi Condition="'$(TargetsAndroid)' != 'true' and '$(TargetsLinuxBionic)' != 'true'">gnu +- <_LinuxAbi Condition="'$(TargetsAndroid)' == 'true' or '$(TargetsLinuxBionic)' == 'true'">android ++ <_LinuxAbi Condition="'$(TargetsAndroid)' != 'true' and '$(TargetsLinuxBionic)' != 'true' and '$(TargetsLinuxMusl)' != 'true'">linux-gnu ++ <_LinuxAbi Condition="'$(TargetsAndroid)' != 'true' and '$(TargetsLinuxBionic)' != 'true' and '$(TargetsLinuxMusl)' == 'true'">alpine-linux-musl ++ <_LinuxAbi Condition="'$(TargetsAndroid)' == 'true' or '$(TargetsLinuxBionic)' == 'true'">linux-android + <_LinuxFloatAbi Condition="'$(TargetsAndroid)' != 'true' and '$(TargetsLinuxBionic)' != 'true'">hf + <_Objcopy>objcopy +- <_Objcopy Condition="'$(Platform)' == 'arm'">arm-linux-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy) +- <_Objcopy Condition="'$(Platform)' == 'armv6'">arm-linux-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy) +- <_Objcopy Condition="'$(Platform)' == 'arm64'">aarch64-linux-$(_LinuxAbi)-$(_Objcopy) +- <_Objcopy Condition="'$(Platform)' == 'riscv64'">riscv64-linux-$(_LinuxAbi)-$(_Objcopy) +- <_Objcopy Condition="'$(Platform)' == 's390x'">s390x-linux-$(_LinuxAbi)-$(_Objcopy) +- <_Objcopy Condition="'$(Platform)' == 'ppc64le'">powerpc64le-linux-$(_LinuxAbi)-$(_Objcopy) +- <_Objcopy Condition="'$(Platform)' == 'x64'">x86_64-linux-$(_LinuxAbi)-$(_Objcopy) +- <_Objcopy Condition="'$(Platform)' == 'x86'">i686-linux-$(_LinuxAbi)-$(_Objcopy) ++ <_Objcopy Condition="'$(Platform)' == 'arm'">arm-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy) ++ <_Objcopy Condition="'$(Platform)' == 'armv6'">arm-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy) ++ <_Objcopy Condition="'$(Platform)' == 'arm64'">aarch64-$(_LinuxAbi)-$(_Objcopy) ++ <_Objcopy Condition="'$(Platform)' == 'riscv64'">riscv64-$(_LinuxAbi)-$(_Objcopy) ++ <_Objcopy Condition="'$(Platform)' == 's390x'">s390x-$(_LinuxAbi)-$(_Objcopy) ++ <_Objcopy Condition="'$(Platform)' == 'ppc64le'">powerpc64le-$(_LinuxAbi)-$(_Objcopy) ++ <_Objcopy Condition="'$(Platform)' == 'x64'">x86_64-$(_LinuxAbi)-$(_Objcopy) ++ <_Objcopy Condition="'$(Platform)' == 'x86'">i686-$(_LinuxAbi)-$(_Objcopy) + <_Objcopy Condition="'$(TargetsAndroid)' == 'true' or '$(TargetsLinuxBionic)' == 'true'">$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/$(MonoToolchainPrebuiltOS)/bin/llvm-objcopy ++ <_Objcopy Condition="'$(TargetsLinuxMusl)' == 'true' and '$(CrossBuild)' != 'true'">objcopy + + <_ObjcopyPrefix Condition="'$(MonoCrossDir)' != '' and '$(Platform)' == 'riscv64'">llvm-objcopy- + +diff --git a/src/runtime/src/mono/mono/mini/CMakeLists.txt b/src/runtime/src/mono/mono/mini/CMakeLists.txt +index 30df4bac1f7..8698fd81206 100644 +--- a/src/runtime/src/mono/mono/mini/CMakeLists.txt ++++ b/src/runtime/src/mono/mono/mini/CMakeLists.txt +@@ -368,6 +368,11 @@ if(NOT DISABLE_SHARED_LIBS) + target_sources(monosgen-shared PRIVATE $) + set_target_properties(monosgen-shared PROPERTIES OUTPUT_NAME ${MONO_SHARED_LIB_NAME}) + target_link_libraries (monosgen-shared PRIVATE monoapi) ++ # Alpine Linux implements ucontext in a different library ++ if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) ++ target_link_libraries(monosgen-shared PRIVATE ucontext) ++ endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) ++ + target_include_directories (monosgen-shared PRIVATE monoapi) + if(TARGET_WIN32) + # on Windows the import library for the shared mono library will have the same name as the static library, +@@ -527,6 +532,10 @@ if(NOT DISABLE_EXECUTABLES) + set_target_properties(mono-sgen PROPERTIES OUTPUT_NAME mono-aot-cross) + endif() + target_link_libraries(mono-sgen PRIVATE monoapi monosgen-static ${OS_LIBS} ${LLVM_LIBS} ${ICU_LIBS} ${Z_LIBS}) ++ # Alpine Linux implements ucontext in a different library ++ if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) ++ target_link_libraries(mono-sgen PRIVATE ucontext) ++ endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) + if(NOT DISABLE_COMPONENTS AND STATIC_COMPONENTS AND NOT DISABLE_LINK_STATIC_COMPONENTS) + # if components are built statically, link them into runtime. + target_sources(mono-sgen PRIVATE "${mono-components-objects}") +diff --git a/src/runtime/src/mono/mono/mini/mini-runtime.c b/src/runtime/src/mono/mono/mini/mini-runtime.c +index c481f69adc8..4db6c9a0ae7 100644 +--- a/src/runtime/src/mono/mono/mini/mini-runtime.c ++++ b/src/runtime/src/mono/mono/mini/mini-runtime.c +@@ -4383,6 +4383,30 @@ mini_llvm_init (void) + #endif + } + ++#ifdef ENSURE_PRIMARY_STACK_SIZE ++/*++ ++ Function: ++ EnsureStackSize ++ ++ Abstract: ++ This fixes a problem on MUSL where the initial stack size reported by the ++ pthread_attr_getstack is about 128kB, but this limit is not fixed and ++ the stack can grow dynamically. The problem is that it makes the ++ functions ReflectionInvocation::[Try]EnsureSufficientExecutionStack ++ to fail for real life scenarios like e.g. compilation of corefx. ++ Since there is no real fixed limit for the stack, the code below ++ ensures moving the stack limit to a value that makes reasonable ++ real life scenarios work. ++ ++ --*/ ++static MONO_NO_OPTIMIZATION MONO_NEVER_INLINE void ++ensure_stack_size (size_t size) ++{ ++ volatile uint8_t *s = (uint8_t *)g_alloca(size); ++ *s = 0; ++} ++#endif // ENSURE_PRIMARY_STACK_SIZE ++ + void + mini_add_profiler_argument (const char *desc) + { +@@ -4544,6 +4568,11 @@ mini_init (const char *filename) + mono_w32handle_init (); + #endif + ++#ifdef ENSURE_PRIMARY_STACK_SIZE ++ // TODO: https://github.com/dotnet/runtime/issues/72920 ++ ensure_stack_size (5 * 1024 * 1024); ++#endif // ENSURE_PRIMARY_STACK_SIZE ++ + mono_thread_info_runtime_init (&ticallbacks); + + if (g_hasenv ("MONO_DEBUG")) { +diff --git a/src/runtime/src/mono/mono/utils/mono-context.h b/src/runtime/src/mono/mono/utils/mono-context.h +index a1f0fe6f68e..a9db2d336ca 100644 +--- a/src/runtime/src/mono/mono/utils/mono-context.h ++++ b/src/runtime/src/mono/mono/utils/mono-context.h +@@ -11,6 +11,14 @@ + #ifndef __MONO_MONO_CONTEXT_H__ + #define __MONO_MONO_CONTEXT_H__ + ++/* ++ * Handle non-gnu libc versions with nothing in features.h ++ * We have no idea what they're compatible with, so always fail. ++ */ ++#ifndef __GLIBC_PREREQ ++# define __GLIBC_PREREQ(x,y) 0 ++#endif ++ + #include "mono-compiler.h" + #include "mono-sigcontext.h" + #include "mono-machine.h" +diff --git a/src/runtime/src/native/libs/System.Native/pal_io.c b/src/runtime/src/native/libs/System.Native/pal_io.c +index 0929a0b49ec..86311e19507 100644 +--- a/src/runtime/src/native/libs/System.Native/pal_io.c ++++ b/src/runtime/src/native/libs/System.Native/pal_io.c +@@ -1267,7 +1267,7 @@ int32_t SystemNative_CopyFile(intptr_t sourceFd, intptr_t destinationFd, int64_t + // Try copying data using a copy-on-write clone. This shares storage between the files. + if (sourceLength != 0) + { +- while ((ret = ioctl(outFd, FICLONE, inFd)) < 0 && errno == EINTR); ++ while ((ret = ioctl(outFd, (int)FICLONE, inFd)) < 0 && errno == EINTR); + copied = ret == 0; + } + #endif +-- +2.36.3 + diff --git a/user/dotnet8-build/runtime_enable-system-libunwind.diff b/user/dotnet8-build/runtime_enable-system-libunwind.diff new file mode 100644 index 0000000..69045ad --- /dev/null +++ b/user/dotnet8-build/runtime_enable-system-libunwind.diff @@ -0,0 +1,12 @@ +diff --git a/src/runtime/eng/SourceBuild.props b/src/runtime/eng/SourceBuild.props +index 32e6d9c0ba..8e2a7f9931 100644 +--- a/src/runtime/eng/SourceBuild.props ++++ b/src/runtime/eng/SourceBuild.props +@@ -51,6 +51,7 @@ + $(InnerBuildArgs) /p:DisableSourceLink=false + $(InnerBuildArgs) /p:AdditionalRuntimeIdentifierParent=$(BaseOS) + $(InnerBuildArgs) /p:PrimaryRuntimeFlavor=Mono /p:RuntimeFlavor=Mono ++ $(InnerBuildArgs) --cmakeargs -DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE + + + diff --git a/user/dotnet8-build/runtime_mono-thread-coop-undefine-fortify-source.patch b/user/dotnet8-build/runtime_mono-thread-coop-undefine-fortify-source.patch new file mode 100644 index 0000000..d4cbe4d --- /dev/null +++ b/user/dotnet8-build/runtime_mono-thread-coop-undefine-fortify-source.patch @@ -0,0 +1,25 @@ +From 98054ea87ce70247bb09ceafd2ad1a0b36d2fef4 Mon Sep 17 00:00:00 2001 +Patch-Source: https://github.com/dotnet/runtime/issues/82269 +From: Antoine Martin +Date: Sat, 1 Oct 2022 09:21:58 -0400 +Subject: [PATCH] Undefine fortify-source on mono-thread-coop + +When _FORTIFY_SOURCE=2, there is a bug relating to memcpy that expresses itself. +See: https://gitlab.alpinelinux.org/alpine/aports/-/issues/14105. Alpine Linux +now sets this by default since https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/43463, +which makes mono-flavored runtime dump its core. This patch offers a workaround +by undefining _FORTIFY_SOURCE in the problematic file. + +--- +diff --git a/src/runtime/src/mono/mono/utils/mono-threads-coop.c b/src/runtime/src/mono/mono/utils/mono-threads-coop.c +index 4ed659d6605..34bb5785fba 100644 +--- a/src/runtime/src/mono/mono/utils/mono-threads-coop.c ++++ b/src/runtime/src/mono/mono/utils/mono-threads-coop.c +@@ -15,6 +15,7 @@ + #ifdef TARGET_MACH + #define _DARWIN_C_SOURCE + #endif ++#undef _FORTIFY_SOURCE + + #include + #include diff --git a/user/dotnet8-build/sdk_14239-add-zsh-compdef-completion-script.patch b/user/dotnet8-build/sdk_14239-add-zsh-compdef-completion-script.patch new file mode 100644 index 0000000..bdb120b --- /dev/null +++ b/user/dotnet8-build/sdk_14239-add-zsh-compdef-completion-script.patch @@ -0,0 +1,35 @@ +From 4c74721e1f5da9642adab03075dda2f55719ac7b Mon Sep 17 00:00:00 2001 +Patch-Source: https://github.com/dotnet/sdk/pull/14239 +From: Esgariot +Date: Mon, 19 Oct 2020 23:42:37 +0200 +Subject: [PATCH 1/1] Add zsh compdef completion script. + +Continuing off of PR 13384 in upstream. +This commit is ready to be rebased to include appropriate co-authors +before merging PR. + +--- + scripts/register-completions.zsh | 13 +++---------- + 1 file changed, 3 insertions(+), 10 deletions(-) + +diff --git a/src/sdk/scripts/register-completions.zsh b/src/sdk/scripts/register-completions.zsh +index 8eebe9a867..faa32fef71 100644 +--- a/src/sdk/scripts/register-completions.zsh ++++ b/src/sdk/scripts/register-completions.zsh +@@ -1,10 +1,3 @@ +-# zsh parameter completion for the dotnet CLI +- +-_dotnet_zsh_complete() +-{ +- local completions=("$(dotnet complete "$words")") +- +- reply=( "${(ps:\n:)completions}" ) +-} +- +-compctl -K _dotnet_zsh_complete dotnet ++#compdef dotnet ++local completions=("$(dotnet complete "$words")") ++[[ -n "$completions" ]] && compadd -- "${(ps:\n:)completions}" +-- +2.34.1 + diff --git a/user/dotnet8-build/sdk_dotnet-watch-nowarn-ad0001.patch b/user/dotnet8-build/sdk_dotnet-watch-nowarn-ad0001.patch new file mode 100644 index 0000000..3987891 --- /dev/null +++ b/user/dotnet8-build/sdk_dotnet-watch-nowarn-ad0001.patch @@ -0,0 +1,24 @@ +From 8f8fa898b907192462834cced1bc39bca8ade9f7 Mon Sep 17 00:00:00 2001 +From: Antoine Martin +Date: Tue, 21 Feb 2023 19:14:55 -0500 +Subject: [PATCH 1/1] sdk_dotnet-watch-nowarn-ad0001 + +--- + src/sdk/src/BuiltInTools/dotnet-watch/dotnet-watch.csproj | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/sdk/src/BuiltInTools/dotnet-watch/dotnet-watch.csproj b/src/sdk/src/BuiltInTools/dotnet-watch/dotnet-watch.csproj +index 0e8811a7b..a359ae5e8 100644 +--- a/src/sdk/src/BuiltInTools/dotnet-watch/dotnet-watch.csproj ++++ b/src/sdk/src/BuiltInTools/dotnet-watch/dotnet-watch.csproj +@@ -9,6 +9,7 @@ + MicrosoftAspNetCore + false + ++ AD0001 + + + +-- +2.38.2 + diff --git a/user/dotnet8-runtime/APKBUILD b/user/dotnet8-runtime/APKBUILD new file mode 100644 index 0000000..6f03318 --- /dev/null +++ b/user/dotnet8-runtime/APKBUILD @@ -0,0 +1,125 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=dotnet8-runtime +pkgver=8.0.1_pre1 +_bldver=8.0.100_pre1-r0 +pkgrel=0 + +# Following for dotnet build version 6.0 and up +_pkgver_macro=${pkgver%.*} +_pkgver_name=${_pkgver_macro//[.0]} +_bldver_ver=${_bldver%%-*} +pkgdesc="The .NET $_pkgver_macro Core runtime" +# x86: blocked by https://github.com/dotnet/runtime/issues/77667 +# armhf: blocked by https://github.com/dotnet/runtime/issues/77663 +# riscv64: port WIP https://github.com/dotnet/runtime/issues/36748 +# s390x / ppc64le: no bootstrap crossbuilt yet +arch="all !x86 !armhf !riscv64 !s390x !ppc64le" +url=https://dotnet.microsoft.com +license="MIT" +depends=" + dotnet$_pkgver_name-hostfxr + icu-data-full + icu-libs + " +makedepends="dotnet$_pkgver_name-build=$_bldver" +subpackages=" + aspnetcore$_pkgver_name-runtime:aspnetcore_runtime:noarch + aspnetcore$_pkgver_name-targeting-pack:aspnetcore_targeting_pack:noarch + dotnet$_pkgver_name-apphost-pack:apphost_pack + dotnet$_pkgver_name-hostfxr + dotnet$_pkgver_name-targeting-pack:targeting_pack:noarch + dotnet-host:host + " +provides="dotnet$_pkgver_name=$pkgver-r$pkgrel" +options="!check" # No test suite +source="dotnet.sh.in" +builddir="$srcdir" +_libdir="/usr/lib" + +case $CARCH in + x86_64) _dotnet_arch="x64";; + aarch64) _dotnet_arch="arm64";; + armv7) _dotnet_arch="arm";; + armhf) _dotnet_arch="armv6";; + *) _dotnet_arch="$CARCH";; +esac + +build() { + sed "s|%LIBDIR%|$_libdir/dotnet|" "$srcdir"/dotnet.sh.in > "$srcdir"/dotnet.sh +} + +package() { + install -dm 755 "$pkgdir"/$_libdir/dotnet/shared + + cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/shared/Microsoft.NETCore.App "$pkgdir"/$_libdir/dotnet/shared/. +} + +host() { + pkgdesc="A generic driver for the .NET Core Command Line Interface" + depends="" + + install -dm 755 \ + "$subpkgdir"/etc/profile.d \ + "$subpkgdir"/etc/dotnet \ + "$subpkgdir"/usr/bin \ + "$subpkgdir"/$_libdir/dotnet + + cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/dotnet "$subpkgdir"/$_libdir/dotnet/. + ln -s $_libdir/dotnet/dotnet "$subpkgdir"/usr/bin/dotnet + echo "$_libdir/dotnet" > "$subpkgdir"/etc/dotnet/install_location + echo "$_libdir/dotnet" > "$subpkgdir"/etc/dotnet/install_location_$_dotnet_arch + install -Dm 644 "$srcdir"/dotnet.sh -t "$subpkgdir"/etc/profile.d/ +} + +hostfxr() { + pkgdesc="The .NET host resolver contains the logic to resolve and select the right version of the .NET SDK or runtime to use." + depends="dotnet-host" + provides="dotnet-hostfxr-$_pkgver_macro=$pkgver-r$pkgrel" + + install -dm 755 "$subpkgdir"/$_libdir/dotnet + + cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/host "$subpkgdir"/$_libdir/dotnet/. +} + +aspnetcore_runtime() { + pkgdesc="The ASP.NET $_pkgver_macro Core runtime" + depends="dotnet$_pkgver_name-runtime" + provides="aspnetcore-runtime-$_pkgver_macro=$pkgver-r$pkgrel" + + install -dm 755 "$subpkgdir"/$_libdir/dotnet/shared + + cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/shared/Microsoft.AspNetCore.App "$subpkgdir"/$_libdir/dotnet/shared/. +} + +apphost_pack() { + pkgdesc="The .NET $_pkgver_macro Core apphost pack" + provides="dotnet-apphost-pack-$_pkgver_macro=$pkgver-r$pkgrel" + + install -dm 755 "$subpkgdir"/$_libdir/dotnet/packs + + cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/packs/Microsoft.NETCore.App.Host.* "$subpkgdir"/$_libdir/dotnet/packs/. +} + +targeting_pack() { + pkgdesc="The .NET $_pkgver_macro Core targeting pack" + provides="dotnet-targeting-pack-$_pkgver_macro=$pkgver-r$pkgrel" + + install -dm 755 "$subpkgdir"/$_libdir/dotnet/packs + + cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/packs/Microsoft.NETCore.App.Ref "$subpkgdir"/$_libdir/dotnet/packs/. +} + +aspnetcore_targeting_pack() { + pkgdesc="The ASP.NET $_pkgver_macro Core targeting pack" + provides="aspnetcore-targeting-pack-$_pkgver_macro=$pkgver-r$pkgrel" + + install -dm 755 "$subpkgdir"/$_libdir/dotnet/packs + + cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/packs/Microsoft.AspNetCore.App.Ref "$subpkgdir"/$_libdir/dotnet/packs/. +} + +sha512sums=" +c3f31956976b77198e72a3fef3427338b6b2961f8c121416040c1105de0ce8073e46f4c2e9ef22a001aee69cbe39621c2ddac988522693110071dfae42f2e2b7 dotnet.sh.in +" diff --git a/user/dotnet8-runtime/README.md b/user/dotnet8-runtime/README.md new file mode 100644 index 0000000..3ad31c7 --- /dev/null +++ b/user/dotnet8-runtime/README.md @@ -0,0 +1,144 @@ +# dotnet7-runtime + +This is the .NET 7.0 package for Alpine Linux. + +Please report any issues [using Gitlab](https://gitlab.alpinelinux.org/alpine/aports/-/issues/new) and tag @ayakael + +# Building info + +## Generated packages +* `aspnetcore7-runtime` +* `aspnetcore7-targeting-pack` +* `dotnet7-apphost-pack` (used by dotnet7-runtime) +* `dotnet7-hostfxr` (used by dotnet-host) +* `dotnet7-runtime` +* `dotnet7-targeting-pack` +* `dotnet-host` + +## How to build dotnet7 on Alpine +As dotnet is a self-hosting compiler (thus it compiles using itself), it +requires a bootstrap for the initial build. To solve this problem, this package +follows the `stage0` proposal outlined [here](https://lists.alpinelinux.org/~alpine/devel/%3C33KG0XO61I4IL.2Z7RTAZ5J3SY6%408pit.net%3E) + +The goal of `stage0` is to bootstrap dotnet with as little intervention as +possible, thus allowing seamless Alpine upgrades. Unfortunately, upstream only +builds bootstraps for Alpine on `x86_64`, `aarch64`, and `armv7`. Thus, `stage0` +has also been designed to be crossbuild aware, allowing bootstrapping to other +platforms. + +In summary, dotnet7 is built using three different aports. + +* `community/dotnet7-stage0` +Builds minimum components for full build of dotnet7, and packages these in an initial +`dotnet7-stage0-bootstrap` package that `dotnet7-build` pulls. +* `community/dotnet7-build` +Builds full and packages dotnet7 fully using either stage0 or previoulsy built +dotnet7 build. +* `community/dotnet7-runtime` +As abuild does not allow different versions for subpackages, a different aport +is required to package runtime bits from dotnet7-build. + +## Crossbuilding with `stage0` +Crossbuilding `stage0` is a three step process: +1. Build sysroot for target platform by using `scripts/bootstrap.sh` in aports repo: +``` +./bootstrap.sh $CTARGET_ARCH +``` +2. Although not necessary, it is recommended to add Alpine repositories to + `$HOME/sysroot-$CTARGET_ARCH/etc/apk/repositories`, making sure to add required + keys. This makes it so that whatever package is not built in step 1 will + be pulled from package repos +3. Crossbuild `dotnet7-stage0` via: +``` +CHOST=$CTARGET_ARCH abuild -r +``` + +# Specification + +This package follows [package naming and contents suggested by upstream](https://docs.microsoft.com/en-us/dotnet/core/build/distribution-packaging), +with two exceptions. It installs dotnet to `/usr/lib/dotnet` (aka `$_libdir`). +In addition, the package is named `dotnet7` as opposed to `dotnet-7.0` +to match Alpine Linux naming conventions for packages with many installable versions + +# Contributing + +The steps below are for the final package. Please only contribute to a +pre-release version if you know what you are doing. Original instructions +follow. + +## General Changes + +1. Fork the main aports repo. + +2. Checkout the forked repository. + + - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` + - `cd community/dotnet7-build` + +3. Make your changes. Don't forget to add a changelog. + +4. Do local builds. + + - `abuild -r` + +5. Fix any errors that come up and rebuild until it works locally. + +6. Commit the changes to the git repo in a git branch + + - `git checkout -b dotnet7/` + - `git add` any new patches + - `git remove` any now-unnecessary patches + - `git commit -m 'community/dotnet7-build: descriptive description'` + - `git push` + +7. Create a merge request with your changes, tagging @ayakael for review. + +8. Once the tests in the pull-request pass, and reviewers are happy, your changes + will be merged. + +## Updating to an new upstream release + +1. Fork the main aports repo. + +2. Checkout the forked repository. + + - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` + - `cd community/dotnet7-build` + + +3. Build the new upstream source tarball. Update the versions in the + APKBUILD file, and then create a snapshot. After build, update checksum. + + - `abuild snapshot` + - `abuild checksum` + +4. Do local builds. + + - `abuild -r` + +5. Fix any errors that come up and rebuild until it works locally. Any + patches that are needed at this point should be added to the APKBUILD file + in `_patches` variable. + +6. Upload the source archive to a remote location, and update `source` variable. + +7. Commit the changes to the git repo in a git branch. + + - `git checkout -b dotnet7/` + - `git add` any new patches + - `git remove` any now-unnecessary patches + - `git commit -m 'community/dotnet7-build: upgrade to ` + - `git push` + +8. Create a merge request with your changes, tagging @ayakael for review. + +9. Once the tests in the pull-request pass, and reviewers are happy, your changes + will be merged. + +# Testing + +This package uses CI tests as defined in `check()` function. Creating a +merge-request or running a build will fire off tests and flag any issues. + +The tests themselves are contained in this external repository: +https://github.com/redhat-developer/dotnet-regular-tests/ diff --git a/user/dotnet8-runtime/dotnet.sh.in b/user/dotnet8-runtime/dotnet.sh.in new file mode 100644 index 0000000..f85eb29 --- /dev/null +++ b/user/dotnet8-runtime/dotnet.sh.in @@ -0,0 +1,12 @@ +# Set location for AppHost lookup +[ -z "$DOTNET_ROOT" ] && export DOTNET_ROOT=%LIBDIR% + +# Add dotnet tools directory to PATH +DOTNET_TOOLS_PATH="$HOME/.dotnet/tools" +case "$PATH" in + *"$DOTNET_TOOLS_PATH"* ) true ;; + * ) PATH="$PATH:$DOTNET_TOOLS_PATH" ;; +esac + +# Extract self-contained executables under HOME to avoid multi-user issues from using the default '/var/tmp' +[ -z "$DOTNET_BUNDLE_EXTRACT_BASE_DIR" ] && export DOTNET_BUNDLE_EXTRACT_BASE_DIR="${XDG_CACHE_HOME:-"$HOME"/.cache}/dotnet_bundle_extract" diff --git a/user/dotnet8-stage0/APKBUILD b/user/dotnet8-stage0/APKBUILD new file mode 100644 index 0000000..2c0bb85 --- /dev/null +++ b/user/dotnet8-stage0/APKBUILD @@ -0,0 +1,527 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=dotnet8-stage0 +pkgver=8.0.100_pre1 +pkgrel=0 + +[ "$CBUILD" != "$CHOST" ] && _cross="-$CARCH" || _cross="" + +# Tag of tarball generator. +_gittag=v8.0.100-preview.1 + +# Versions of prebuilt artifacts and bootstrap tar +_artifactsver=0.1.0-8.0.100-5.centos.8-x64 +_prebuiltsver=0.1.0-8.0.100-4.centos.8-x64 +_bootstrapver="8.0.100-preview.1.23115.2" +_installerver=$_bootstrapver + +# Version of packages that aren't defined in git-info or badly defined +_iltoolsver=8.0.0-alpha.1.23076.9 + +# Patches to be used. String before '_' refers to repo to patch +# Look for patch notes within each patch for what they fix / where they come from +# build_* patches applies directly to $builddir +_patches=" + aspnetcore_use-linux-musl-crossgen-on-non-x64.patch + build_set-local-repo.patch + installer_runtimepacks.patch + roslyn_allow-extra-params.patch + runtime_76500-properly-set-toolchain-for-alpine.patch + runtime_make-lld-use-depend-on-existing-on-target.patch + runtime_mono-thread-coop-undefine-fortify-source.patch + runtime_no-additional-runtime-id.patch + sdk_dotnet-watch-nowarn-ad0001.patch + sdk_dummyshim-fix.patch + sdk_fix-sdk-download.patch + " +_extra_nupkgs=" + https://globalcdn.nuget.org/packages/microsoft.netcore.app.host.linux-musl-x64.7.0.2.nupkg + https://globalcdn.nuget.org/packages/microsoft.netcore.app.host.linux-musl-arm64.7.0.2.nupkg + https://globalcdn.nuget.org/packages/microsoft.netcore.app.host.linux-musl-arm.7.0.2.nupkg + " + +_pkgver_macro=${pkgver%.*} +_pkgver_prior=1 +_pkgver_name="${_pkgver_macro//[.0]}" +pkgdesc="The .NET Core stage0 bits for dotnet build" +# x86: blocked by https://github.com/dotnet/runtime/issues/77667 +# armhf: blocked by https://github.com/dotnet/runtime/issues/77663 +# riscv64: port WIP https://github.com/dotnet/runtime/issues/36748 +# s390x / ppc64le: no bootstrap crossbuilt yet +arch="all !x86 !armhf !riscv64 !s390x !ppc64le" +url=https://dotnet.microsoft.com +license="MIT" +options="!check" # Testsuite in main -build aport +subpackages=" + dotnet$_pkgver_name-stage0-artifacts:artifacts:noarch + dotnet$_pkgver_name-stage0-bootstrap + " +source=" + https://lab.ilot.io/dotnet/dotnet/-/releases/$_gittag/downloads/tarball/dotnet-$_gittag.tar.xz + dotnet-sdk-$_bootstrapver-linux.musl.x64.noextract::https://dotnetbuilds.azureedge.net/public/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-x64.tar.gz + dotnet-sdk-$_bootstrapver-linux.musl.arm64.noextract::https://dotnetbuilds.azureedge.net/public/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-arm64.tar.gz + dotnet-sdk-$_bootstrapver-linux.musl.arm.noextract::https://dotnetbuilds.azureedge.net/public/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-arm.tar.gz + Private.SourceBuilt.Artifacts.$_artifactsver.noextract::https://dotnetcli.azureedge.net/source-built-artifacts/assets/Private.SourceBuilt.Artifacts.$_artifactsver.tar.gz + Private.SourceBuilt.Prebuilts.$_prebuiltsver.noextract::https://dotnetcli.azureedge.net/source-built-artifacts/assets/Private.SourceBuilt.Prebuilts.$_prebuiltsver.tar.gz + $_extra_nupkgs + $_patches + " + +makedepends_host=" + alpine-release + autoconf + automake + bash + binutils + clang + cmake + findutils + g++ + gcc + grep + icu-dev + krb5-dev + libintl + libstdc++ + libucontext-dev + libunwind-dev + libxml2-dev + libxml2-utils + linux-headers + lttng-ust-dev + musl-dev + musl-utils + openssl-dev + pigz + unzip + zip + zlib-dev + " +case $CARCH in + s390x|x86) ;; + *) makedepends_host="$makedepends_host lld-dev";; +esac +makedepends_build=" + $makedepends_host + binutils$_cross + git + gcc$_cross + jq + llvm + llvm-dev + python3 + sed + xz + " +case $CBUILD_ARCH in + x86_64) _dotnet_arch="x64";; + aarch64) _dotnet_arch="arm64";; + armv7|armhf) _dotnet_arch="arm";; + i586) _dotnet_arch="x86";; + *) _dotnet_arch=$CBUILD_ARCH;; +esac +case $CTARGET_ARCH in + x86_64) _dotnet_target="x64";; + aarch64) _dotnet_target="arm64";; + armv7|armhf) _dotnet_target="arm";; + i586) _dotnet_target="x86";; + *) _dotnet_target=$CTARGET_ARCH;; +esac + +builddir="$srcdir"/dotnet-${_gittag/release\/} +_packagesdir="$srcdir"/local-packages +_libdir="/usr/lib" +_nugetdir="$srcdir"/nuget +_downloaddir="$srcdir"/local-downloads +_cli_root="$srcdir"/bootstrap +_nuget="$_cli_root/dotnet nuget" +_outputdir="$srcdir"/artifacts +# if true, then within pipeline environment, in which case send logs there +# to be scooped +if [ -d "$APORTSDIR/logs" ]; then + _logdir="$APORTSDIR"/logs/$pkgname +else + _logdir="$srcdir"/logs +fi + +# generates tarball containing all components built by dotnet +snapshot() { + local _pkg="$srcdir"/${builddir##*/}.tar + ulimit -n 4096 + if [ -d "$srcdir" ]; then + cd "$srcdir" + else + mkdir -p "$srcdir" && cd "$srcdir" + fi + if [ -d "installer" ]; then + cd "$srcdir"/installer + else + git clone https://github.com/dotnet/installer && cd "$srcdir"/installer + fi + git checkout $_gittag + + sed 's|/src/installer||' "$startdir"/installer_2780-reprodicible-tarball.patch | patch -Np1 || true + sed 's|/src/installer||' "$startdir"/installer_fix-version.patch | patch -Np1 || true + if [ ! -d "$_cli_root" ]; then + local _cli_root= + fi + + _InitializeDotNetCli="$_cli_root" DOTNET_INSTALL_DIR="$_cli_root" DotNetBuildFromSource=true ./build.sh \ + /p:ArcadeBuildTarball=true \ + /p:TarballDir=$builddir \ + /p:TarballFilePath=$_pkg + + msg "Compressing ${builddir##*/}.tar to $SRCDEST" + xz -T0 -9 -vv -e -c > "$SRCDEST"/${builddir##*/}.tar.xz < "$_pkg" + + cd "$startdir" + abuild checksum +} + +prepare() { + default_prepare + + # Parallel restore is broken on mono-based builds since dotnet7 + # see https://github.com/dotnet/runtime/issues/77364 + # A workaround via runtime_enable-runtime-marshalling.diff + case $CARCH in + s390x|ppc64le) + msg "runtime_enable-runtime-marshalling.diff" + patch -p1 -i "$srcdir"/runtime_enable-runtime-marshalling.diff + ;; + esac + + # adjusts sdk version and packagedir to expected + for i in runtime sdk installer aspnetcore roslyn; do + sed "s|@@PACKAGESDIR@@|$_packagesdir|" -i "$builddir"/src/$i/NuGet.config + tmp=$(mktemp) + jq ".sdk.version = \"$_bootstrapver\"" "$builddir"/src/$i/global.json > $tmp && mv $tmp "$builddir"/src/$i/global.json + done + + mkdir -p "$_cli_root" + mkdir -p $_packagesdir $_downloaddir $_outputdir $_nugetdir $_logdir + + # links logfiles to pipeline logs for easy pickup in pipelines + mkdir -p "$_logdir" "$builddir"/artifacts + ln -s "$_logdir" "$builddir"/artifacts/logs + ln -s "$_logdir" "$builddir"/artifacts/log + for i in "$builddir"/src/*; do + if [ -f "$i" ]; then + continue + fi + mkdir -p "$_logdir"/${i##*\/} "$builddir"/src/${i##*\/}/artifacts + ln -s "$_logdir"/${i##*\/} "$builddir"/src/${i##*\/}/artifacts/log + done + + tar --use-compress-program="pigz" -xf "$srcdir"/dotnet-sdk-$_pkgver_macro*$_dotnet_arch.noextract -C "$_cli_root" --no-same-owner + + for i in $_extra_nupkgs; do + $_nuget push "$srcdir"/${i##*/} --source="$_packagesdir" + done +} + +_runtime() { + "$_cli_root"/dotnet build-server shutdown + if [ -z "${_runtimever+x}" ]; then + local _runtimever=$(grep OutputPackageVersion "$builddir"/prereqs/git-info/runtime.props | sed -E 's|||g' | tr -d ' ') + fi + 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}') + + msg "[$(date)] Building runtime version $_runtimever" + cd "$builddir"/src/runtime + + local args=" + -c Release + -bl + -clang + -arch $_dotnet_target + /consoleLoggerParameters:ShowTimestamp + /p:NoPgoOptimize=true + /p:EnableNgenOptimization=false + /p:ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch=none + /p:GitCommitHash=$(grep GitCommitHash "$builddir"/prereqs/git-info/runtime.props | sed -E 's|||g' | tr -d ' ') + " + if [ "$CBUILD" != "$CHOST" ]; then + local args="$args -cross" + fi + if [ "$_runtimever" != "${_runtimever##*-}" ]; then + local args="$args /p:VersionSuffix=${_runtimever##*-}" + fi + ROOTFS_DIR="$CBUILDROOT" ./build.sh $args + + for i in artifacts/packages/*/*/*.nupkg; do + $_nuget push $i --source="$_packagesdir" + done + mkdir -p "$_downloaddir"/Runtime/$_runtimever_ns + cp artifacts/packages/*/*/dotnet-runtime-*-*.tar.gz $_downloaddir/Runtime/$_runtimever_ns +} + +_roslyn() { + "$_cli_root"/dotnet build-server shutdown + if [ -z "${_roslynver+x}" ]; then + local _roslynver=$(grep OutputPackageVersion "$builddir"/prereqs/git-info/roslyn.props | sed -E 's|||g' | tr -d ' ') + fi + local _roslynver_ns=$(awk '{if($2 == "Name=\"Microsoft.Net.Compilers.Toolset\""){print $3}}' "$builddir"/src/installer/eng/Version.Details.xml | awk -F '"' '{print $2}') + + msg "[$(date)] Building roslyn version $_roslynver" + cd "$builddir"/src/roslyn + + local args=" + -c Release + -bl + /consoleLoggerParameters:ShowTimestamp + /p:GitCommitHash=$(grep GitCommitHash "$builddir"/prereqs/git-info/roslyn.props | sed -E 's|||g' | tr -d ' ') + " + if [ "$_roslynver" != "${_roslynver##*-}" ]; then + local args="$args /p:VersionSuffix=${_roslynver##*-}" + fi + DotNetBuildFromSource=false ./eng/build.sh --restore $args /p:UseAppHost=false + ./eng/build.sh --restore --build --pack $args + for i in artifacts/packages/*/*/*.nupkg; do + $_nuget push $i --source="$_packagesdir" + done +} + +_sdk() { + "$_cli_root"/dotnet build-server shutdown + if [ -z "${_sdkver+x}" ]; then + local _sdkver=$(grep OutputPackageVersion "$builddir"/prereqs/git-info/sdk.props | sed -E 's|||g' | tr -d ' ') + fi + local _sdkver_ns=$(awk '{if($2 == "Name=\"Microsoft.NET.Sdk\""){print $3}}' "$builddir"/src/installer/eng/Version.Details.xml | awk -F '"' '{print $2}') + + msg "[$(date)] Building sdk version $_sdkver" + cd "$builddir"/src/sdk + + local args=" + -c Release + -bl + /consoleLoggerParameters:ShowTimestamp + /p:GitCommitHash=$(grep GitCommitHash "$builddir"/prereqs/git-info/sdk.props | sed -E 's|||g' | tr -d ' ') + /p:Architecture=$_dotnet_target + " + if [ "$_sdkver" != "${_sdkver##*-}" ]; then + local args="$args /p:VersionSuffix=${_sdkver##*-}" + fi + + # ArgumentsReflector doesn't build correctly when built from source + DotNetBuildFromSource=false dotnet build src/Tests/ArgumentsReflector/ArgumentsReflector.csproj $args + ./build.sh --pack $args + + for i in artifacts/packages/*/*/*.nupkg; do + $_nuget push $i --source="$_packagesdir" + done + mkdir -p "$_downloaddir"/Sdk/$_sdkver_ns + cp artifacts/packages/*/*/dotnet-toolset-internal-*.zip "$_downloaddir"/Sdk/$_sdkver_ns +} + +_aspnetcore() { + "$_cli_root"/dotnet build-server shutdown + if [ -z "${_aspnetver+x}" ]; then + local _aspnetver=$(grep OutputPackageVersion "$builddir"/prereqs/git-info/aspnetcore.props | sed -E 's|||g' | tr -d ' ') + fi + 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}') + + msg "[$(date)] Build aspnetcore version $_aspnetver" + cd "$builddir"/src/aspnetcore + local args=" + -c Release + -bl + --os-name linux-musl + -arch $_dotnet_target + -no-build-nodejs + /consoleLoggerParameters:ShowTimestamp + /p:BuildNodeJs=false + /p:GitCommitHash=$(grep GitCommitHash "$builddir"/prereqs/git-info/aspnetcore.props | sed -E 's|||g' | tr -d ' ') + /p:DotNetAssetRootUrl=file://$_downloaddir/ + /p:EnablePackageValidation=false + " + if [ "$_dotnet_target" = "x86" ] || [ "$_dotnet_target" = "ppc64le" ]; then + local args="$args /p:CrossgenOutput=false" + fi + if [ "$_aspnetver" != "${_aspnetver##*-}" ]; then + local args="$args /p:VersionSuffix=${_aspnetver##*-}" + fi + ./eng/build.sh --pack $args + + for i in artifacts/packages/*/*/*.nupkg; do + $_nuget push $i --source="$_packagesdir" + done + mkdir -p "$_downloaddir"/aspnetcore/Runtime/$_aspnetver_ns + cp artifacts/installers/*/aspnetcore-runtime-*-linux-musl-$_dotnet_target.tar.gz "$_downloaddir"/aspnetcore/Runtime/$_aspnetver_ns + cp artifacts/installers/*/aspnetcore_base_runtime.version "$_downloaddir"/aspnetcore/Runtime/$_aspnetver_ns +} + +_installer() { + "$_cli_root"/dotnet build-server shutdown + msg "[$(date)] Building installer version $_installerver" + cd "$builddir"/src/installer + + local args=" + -c Release + -bl + /consoleLoggerParameters:ShowTimestamp + /p:OSName=linux-musl + /p:HostOSName=linux-musl + /p:Architecture=$_dotnet_target + /p:CoreSetupBlobRootUrl=file://$_downloaddir/ + /p:DotnetToolsetBlobRootUrl=file://$_downloaddir/ + /p:GitCommitHash=$(grep GitCommitHash "$builddir"/prereqs/git-info/installer.props | sed -E 's|||g' | tr -d ' ') + /p:GitCommitCount=1 + /p:PublicBaseURL=file://$_downloaddir/ + " + if [ "$_installerver" != "${_installerver##*-}" ]; then + local args="$args /p:VersionSuffix=${_installerver##*-}" + fi + if [ "$_dotnet_target" = "x86" ]; then + local args="$args /p:DISABLE_CROSSGEN=True" + fi + ./build.sh $args + + mkdir -p "$_downloaddir"/installer/$_installerver + cp artifacts/packages/*/*/dotnet-sdk-$_pkgver_macro*.tar.gz "$_downloaddir"/installer/$_installerver +} + +build() { + export _InitializeDotNetCli=$_cli_root + export DOTNET_INSTALL_DIR=$_cli_root + export PATH="$_cli_root:$PATH" + export NUGET_PACKAGES=$_nugetdir + export DotNetBuildFromSource=true + export DOTNET_CLI_TELEMETRY_OPTOUT=true + export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true + export SHELL=/bin/bash + export EXTRA_CPPFLAGS="${CPPFLAGS/--sysroot=$CBUILDROOT}" + export EXTRA_CXXFLAGS="${CXXFLAGS/--sysroot=$CBUILDROOT}" + export EXTRA_CFLAGS="${CFLAGS/--sysroot=$CBUILDROOT}" + export EXTRA_LDFLAGS="$LDFLAGS" + unset CXXFLAGS CFLAGS LDFLAGS CPPFLAGS + + ulimit -n 4096 + + _runtime + _roslyn + _sdk + _aspnetcore + _installer +} + +package() { + # lua-aports / buildrepo doesn't know to always build stage0 first when dealing + # with virtual packages. Thus, we need to depend on an empty stage0 pkg that + # dotnetx-build will pull, thus forcing build of stage0 first + mkdir -p "$pkgdir" +} + +bootstrap() { + # allows stage0 to be pulled by dotnetx-build if first build of dotnetx + provides="dotnet$_pkgver_name-bootstrap" + provider_priority=$_pkgver_prior + + install -dm 755 \ + "$subpkgdir"/$_libdir/dotnet/bootstrap/$pkgver/docs \ + "$subpkgdir"/$_libdir/dotnet/bootstrap/$pkgver/comp \ + "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver + + # unpack build artifacts to bootstrap subdir for use by future builds + tar --use-compress-program="pigz" \ + -xf "$_downloaddir"/installer/$_installerver/dotnet-sdk-$_pkgver_macro*.tar.gz \ + -C "$subpkgdir"/$_libdir/dotnet/bootstrap/$pkgver/ \ + --no-same-owner + + local _iltoolsArray=" + runtime.*.Microsoft.NETCore.TestHost.*.nupkg + runtime.*.Microsoft.NETCore.ILAsm.*.nupkg + runtime.*.Microsoft.NETCore.ILDAsm.*.nupkg + " + + local _nupkgsArray=" + $_iltoolsArray + Microsoft.NETCore.App.Host.*.*.nupkg + Microsoft.NETCore.App.Runtime.*.*.nupkg + Microsoft.NETCore.App.Crossgen2.*.*.nupkg + runtime.*.Microsoft.NETCore.DotNetHost.*.nupkg + runtime.*.Microsoft.NETCore.DotNetHostPolicy.*.nupkg + runtime.*.Microsoft.NETCore.DotNetHostResolver.*.nupkg + runtime.*.Microsoft.NETCore.DotNetAppHost.*.nupkg + Microsoft.AspNetCore.App.Runtime.linux-musl-*.*.nupkg + " + + # copies artifacts to artifacts dir for use by future dotnet builds + for i in $_nupkgsArray; do install -Dm644 "$_packagesdir"/$i "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/ || true; done + for i in $_extra_nupkgs; do install -Dm644 "$srcdir"/${i##*/} "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/; done + + msg "Changing iltools version to $_iltoolsver" + # source-build expects a certain version of ilasm, ildasm and testhost + # following adjusts version + for i in $_iltoolsArray; do + local nupath="$subpkgdir"$_libdir/dotnet/artifacts/$pkgver/$i + local nupath=$(find $nupath || true) + local nupkg="${nupath##*/}" + local nuname="${nupkg/.nupkg}" + if [ -z "${nuname/*rtm*}" ] || [ -z "${nuname/*servicing*}" ] || [ -z "${nuname/*preview*}" ]; then + nuname=${nuname%-*} + fi + local nuname="${nuname%.*.*.*}" + local nuver="${nupkg/$nuname.}" + local nuver="${nuver/.nupkg}" + local nuspec="$nuname.nuspec" + if [ ! "$nupath" ] || [ "$nupath" = "${nupath/$nuver/$_iltoolsver}" ]; then + continue + fi + # shellcheck disable=SC2094 + unzip -p "$nupath" $nuspec | sed "s|$nuver|$_iltoolsver|" > "$srcdir"/$nuspec + cd "$srcdir" + zip -u "$nupath" $nuspec + mv "$nupath" "${nupath/$nuver/$_iltoolsver}" + done +} + +# build relies on a plethora of nupkgs which are provided by this Artifacts file. +# stage0 sources these from Microsoft, which then allows bootstrap to build +# locally hosted versions. The following unpacks built tarball into directory +# for use by future builds. +artifacts() { + pkgdesc="Internal package for building .NET $_pkgver_macro Software Development Kit" + # hack to allow artifacts to pull itself + provides="dotnet$_pkgver_name-bootstrap-artifacts" + provider_priority=$_pkgver_prior + + # directory creation + install -dm 755 \ + "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver \ + "$subpkgdir"/usr/share/licenses + + # extract artifacts to artifacts dir for use by future dotnet builds + tar --use-compress-program="pigz" \ + -xf "$srcdir"/Private.SourceBuilt.Artifacts.*.noextract \ + -C "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/ \ + --no-same-owner + tar --use-compress-program="pigz" \ + -xf "$srcdir"/Private.SourceBuilt.Prebuilts.*.noextract \ + -C "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/ \ + --no-same-owner +} + +sha512sums=" +f48d4168f526aade888bbd17f2da87f721dabc8ae004707ef9195b6359b79b871115a686678c87542ba74e1d86e5485df13d77ef4d3f4001c0804426aebaf92c dotnet-v8.0.100-preview.1.tar.xz +120048fce7c455cb2f98cbdda6b7f789f210d9e7e0b48304f8fdc8b4838c705c6af18b2b4c375b57aa48e0e5084e60ecefad0edc09c19aca166855b3dd3fb539 dotnet-sdk-8.0.100-preview.1.23115.2-linux.musl.x64.noextract +bf985c3b9c1f6f09f46f88527c54445c502e7c75dcbc004dccfb5339d0b5766290ff183abe3808919137ebc5a50c91cbd58a56ec31ad50a5e39a26671e990c61 dotnet-sdk-8.0.100-preview.1.23115.2-linux.musl.arm64.noextract +461094d1f53067c2b496ec25b1bf7686aee3a75f0de5a139bb29a3ac989cdb824367165c8385b78185414430f0579bbba8c94be6d511d793a16746dc018f232f dotnet-sdk-8.0.100-preview.1.23115.2-linux.musl.arm.noextract +bb40f2fcd6f51e908e68fce740400345f2b3ee9c66c1cc69116b4188a19bb0f510e96c8ddcf99e03ee35d16f95ac0b918f940317cb7a5dd858682c4483d3c93b Private.SourceBuilt.Artifacts.0.1.0-8.0.100-5.centos.8-x64.noextract +f20d22a4d069c3647433def852dba50e803a494f4a9f455c24baff8e259896ec709ebcd2a80a1716a9b582ad0d36cd4be98ee4918b0349cca46cea0643a1a9d8 Private.SourceBuilt.Prebuilts.0.1.0-8.0.100-4.centos.8-x64.noextract +5c1fd9e250e7f08d996b7b335134973624a8d1afc331f7fda3a81eee7d2170e39905be20b8786e99078892b21d1582092aeee45d49c5feae3b2bd5374c306fec microsoft.netcore.app.host.linux-musl-x64.7.0.2.nupkg +c5bb986179b4789a24cc4552fa33bee2015acba1c9775ff8fe2295797dd7114f244df2c133e8cee8a3de392c5c47530ba9ef87939cc55660f8c937146b98e1fb microsoft.netcore.app.host.linux-musl-arm64.7.0.2.nupkg +2f35742d74255dd6e7a39e48f29e01cead2b410dabd9e4192d724186a8bd2e04f970b5015229045c732e6c7bcd89a8e9787d19fc50f09fcaab8cd94516f5a0ce microsoft.netcore.app.host.linux-musl-arm.7.0.2.nupkg +9c2f5410c2983ae1d073a5efb78afa56b212165a18252400a42696e10d8cb6016fde5941d1f453eb5332a77f5e209bcb5d40b8ee142609232be95b0cdca1e060 aspnetcore_use-linux-musl-crossgen-on-non-x64.patch +ead38430e54530819ecdb7ab5b087707eee97c4e77b5011a42758352e8265417c65f07b4eec2488708d932de240877695b474e07b8984d34086ef539d5022830 build_set-local-repo.patch +9fe4494b291128469874147e5f28f8fbd023b014114f0aa151fa5cf57821318fa88b834a131eeb77478c8c87adca8c1c0ff3e8c59264c7394fd0621a520eb014 installer_runtimepacks.patch +d1811c1364d9ce4d180d61adf8a9074cf71cf854776959a6db98740f17ed75beec8536602cfb335f534a703d3917e43c3cd91f0f6aed68b5d40c1c80396f5908 roslyn_allow-extra-params.patch +ba9c66b5bb8b8d2de87922717b8a7a6f880eed2a38b5208a554ebd64841c6053658692463471a26442c85cb9adb94043a9d91190786d46c0f45ff4e7cc9c707e runtime_76500-properly-set-toolchain-for-alpine.patch +946f7ddc979bced4e2991f0fe768476b537c97d864362d105fcaec9e6f9f312a798e5e19312966f29fdd80593aa88870be5747b74172d9a70bb1b173c3c75a43 runtime_make-lld-use-depend-on-existing-on-target.patch +d732df247c721c9f677baabdd7f36dbf4b564814ff64164361065bb1c196b767494a1d39f634eadf01a23032c7b3e64102614b7213065c81096bbf3f8022e6a0 runtime_mono-thread-coop-undefine-fortify-source.patch +1de4459522525e1d570e219c9ef067fbbf8745ad369602a006ea62cbafa0f64d2b01b63e00147cf8fed0ea9764373fb4c66aae2323b43a34447990a24f9f29c3 runtime_no-additional-runtime-id.patch +89d008944bf0ba16250ff078e650619b2087654d98b4f7dd614b8197774236e946d92ea17d81d037251ab16880e7bb8f74dbd8a244ca713ecd3efbea17e09318 sdk_dotnet-watch-nowarn-ad0001.patch +f8cdeb30e4b9d4ebf40ded00614813c1afb5d560c0969edc9be2bd594238152a8a932121a4c88c3deca813cc4a62bac96c12c0d7a0c57191911c15eef728c96b sdk_dummyshim-fix.patch +b456f28045ac7c71b3f8ceb0d1836a0290c6527375cd84116c8f259de59434340e259695d7d728d2e0ab6eb4758d7ef14328c50529fad3fe38a5f15262b2a366 sdk_fix-sdk-download.patch +" diff --git a/user/dotnet8-stage0/README.md b/user/dotnet8-stage0/README.md new file mode 100644 index 0000000..9bce6c4 --- /dev/null +++ b/user/dotnet8-stage0/README.md @@ -0,0 +1,140 @@ +# dotnet7-stage0 + +This is the .NET 7.0 package for Alpine Linux. + +Please report any issues [using Gitlab](https://gitlab.alpinelinux.org/alpine/aports/-/issues/new) and tag @ayakael + +# Building info + +## Generated packages +* `dotnet7` (empty package to go around `buildrepo` build ordering bug) +* `dotnet7-stage0-bootstrap` (packages binary bootstrap artifacts) +* `dotnet7-stage0-artifacts` (packages non-binary bootstrap artifacts) + +## How to build dotnet7 on Alpine +As dotnet is a self-hosting compiler (thus it compiles using itself), it +requires a bootstrap for the initial build. To solve this problem, this package +follows the `stage0` proposal outlined [here](https://lists.alpinelinux.org/~alpine/devel/%3C33KG0XO61I4IL.2Z7RTAZ5J3SY6%408pit.net%3E) + +The goal of `stage0` is to bootstrap dotnet with as little intervention as +possible, thus allowing seamless Alpine upgrades. Unfortunately, upstream only +builds bootstraps for Alpine on `x86_64`, `aarch64`, and `armv7`. Thus, `stage0` +has also been designed to be crossbuild aware, allowing bootstrapping to other +platforms. + +In summary, dotnet7 is built using three different aports. + +* `community/dotnet7-stage0` +Builds minimum components for full build of dotnet7, and packages these in an initial +`dotnet7-stage0-bootstrap` package that `dotnet7-build` pulls. +* `community/dotnet7-build` +Builds full and packages dotnet7 fully using either stage0 or previoulsy built +dotnet7 build. +* `community/dotnet7-runtime` +As abuild does not allow different versions for subpackages, a different aport +is required to package runtime bits from dotnet7-build. + +## Crossbuilding with `stage0` +Crossbuilding `stage0` is a three step process: +1. Build sysroot for target platform by using `scripts/bootstrap.sh` in aports repo: +``` +./bootstrap.sh $CTARGET_ARCH +``` +2. Although not necessary, it is recommended to add Alpine repositories to + `$HOME/sysroot-$CTARGET_ARCH/etc/apk/repositories`, making sure to add required + keys. This makes it so that whatever package is not built in step 1 will + be pulled from package repos +3. Crossbuild `dotnet7-stage0` via: +``` +CHOST=$CTARGET_ARCH abuild -r +``` + +# Specification + +This package follows [package naming and contents suggested by upstream](https://docs.microsoft.com/en-us/dotnet/core/build/distribution-packaging), +with two exceptions. It installs dotnet to `/usr/lib/dotnet` (aka `$_libdir`). +In addition, the package is named `dotnet7` as opposed to `dotnet-7.0` +to match Alpine Linux naming conventions for packages with many installable versions + +# Contributing + +The steps below are for the final package. Please only contribute to a +pre-release version if you know what you are doing. Original instructions +follow. + +## General Changes + +1. Fork the main aports repo. + +2. Checkout the forked repository. + + - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` + - `cd community/dotnet7-build` + +3. Make your changes. Don't forget to add a changelog. + +4. Do local builds. + + - `abuild -r` + +5. Fix any errors that come up and rebuild until it works locally. + +6. Commit the changes to the git repo in a git branch + + - `git checkout -b dotnet7/` + - `git add` any new patches + - `git remove` any now-unnecessary patches + - `git commit -m 'community/dotnet7-build: descriptive description'` + - `git push` + +7. Create a merge request with your changes, tagging @ayakael for review. + +8. Once the tests in the pull-request pass, and reviewers are happy, your changes + will be merged. + +## Updating to an new upstream release + +1. Fork the main aports repo. + +2. Checkout the forked repository. + + - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` + - `cd community/dotnet7-build` + + +3. Build the new upstream source tarball. Update the versions in the + APKBUILD file, and then create a snapshot. After build, update checksum. + + - `abuild snapshot` + - `abuild checksum` + +4. Do local builds. + + - `abuild -r` + +5. Fix any errors that come up and rebuild until it works locally. Any + patches that are needed at this point should be added to the APKBUILD file + in `_patches` variable. + +6. Upload the source archive to a remote location, and update `source` variable. + +7. Commit the changes to the git repo in a git branch. + + - `git checkout -b dotnet7/` + - `git add` any new patches + - `git remove` any now-unnecessary patches + - `git commit -m 'community/dotnet7-build: upgrade to ` + - `git push` + +8. Create a merge request with your changes, tagging @ayakael for review. + +9. Once the tests in the pull-request pass, and reviewers are happy, your changes + will be merged. + +# Testing + +This package uses CI tests as defined in `check()` function. Creating a +merge-request or running a build will fire off tests and flag any issues. + +The tests themselves are contained in this external repository: +https://github.com/redhat-developer/dotnet-regular-tests/ diff --git a/user/dotnet8-stage0/aspnetcore_use-linux-musl-crossgen-on-non-x64.patch b/user/dotnet8-stage0/aspnetcore_use-linux-musl-crossgen-on-non-x64.patch new file mode 100644 index 0000000..ddd8920 --- /dev/null +++ b/user/dotnet8-stage0/aspnetcore_use-linux-musl-crossgen-on-non-x64.patch @@ -0,0 +1,26 @@ +From 65613dc9cf76432dcbde3db3db1005c2aa902fee Mon Sep 17 00:00:00 2001 +From: Antoine Martin +Date: Tue, 21 Feb 2023 15:51:31 -0500 +Subject: [PATCH 09/15] aspnetcore_use-linux-musl-crossgen + +Line causes build of aspnetcore on arm to look for linux version of +CrossGen2 rather than linux-musl. This removes the line so that +BuildOsName is pulled from TargetOsName as expected +--- + .../App.Runtime/src/Microsoft.AspNetCore.App.Runtime.csproj | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/aspnetcore/src/Framework/App.Runtime/src/Microsoft.AspNetCore.App.Runtime.csproj b/src/aspnetcore/src/Framework/App.Runtime/src/Microsoft.AspNetCore.App.Runtime.csproj +index 326968018..fa1f72e62 100644 +--- a/src/aspnetcore/src/Framework/App.Runtime/src/Microsoft.AspNetCore.App.Runtime.csproj ++++ b/src/aspnetcore/src/Framework/App.Runtime/src/Microsoft.AspNetCore.App.Runtime.csproj +@@ -103,7 +103,6 @@ This package is an internal implementation of the .NET Core SDK and is not meant + Special case the crossgen2 package reference on Windows to avoid the x86 package when building in Visual Studio. + --> + $(TargetOsName) +- linux + $(TargetRuntimeIdentifier.Substring(0,$(TargetRuntimeIdentifier.IndexOf('-')))) + x64 + $(BuildArchitecture) +-- +2.38.2 diff --git a/user/dotnet8-stage0/build_set-local-repo.patch b/user/dotnet8-stage0/build_set-local-repo.patch new file mode 100644 index 0000000..ddc55ae --- /dev/null +++ b/user/dotnet8-stage0/build_set-local-repo.patch @@ -0,0 +1,80 @@ +From b5b7fda232e513a04879d82e4035ce548cb8bb34 Mon Sep 17 00:00:00 2001 +From: Antoine Martin +Date: Tue, 21 Feb 2023 15:50:19 -0500 +Subject: [PATCH 08/15] build_set-local-repo + +Patch necessary for stage0, as each component requires the artifacts +from previously built component. This patch (along with a prepare step +in aport) adds a "local" nupkg repository that artifacts are pushed to +at end of component build +--- + src/aspnetcore/NuGet.config | 1 + + src/installer/NuGet.config | 1 + + src/roslyn/NuGet.config | 1 + + src/runtime/NuGet.config | 1 + + src/sdk/NuGet.config | 1 + + 5 files changed, 5 insertions(+) + +diff --git a/src/aspnetcore/NuGet.config b/src/aspnetcore/NuGet.config +index 50e58d647..b30b2cdbc 100644 +--- a/src/aspnetcore/NuGet.config ++++ b/src/aspnetcore/NuGet.config +@@ -2,6 +2,7 @@ + + + ++ + + + +diff --git a/src/installer/NuGet.config b/src/installer/NuGet.config +index 77050d5f1..6ee3c6ecb 100644 +--- a/src/installer/NuGet.config ++++ b/src/installer/NuGet.config +@@ -5,6 +5,7 @@ + + + ++ + + + +diff --git a/src/roslyn/NuGet.config b/src/roslyn/NuGet.config +index 1aafa4f96..87d12ccde 100644 +--- a/src/roslyn/NuGet.config ++++ b/src/roslyn/NuGet.config +@@ -3,6 +3,7 @@ + + + ++ + + + +diff --git a/src/runtime/NuGet.config b/src/runtime/NuGet.config +index 33b098b12..85a58caeb 100644 +--- a/src/runtime/NuGet.config ++++ b/src/runtime/NuGet.config +@@ -7,6 +7,7 @@ + + + ++ + + + +-- +2.38.2 + diff --git a/user/dotnet8-stage0/installer_runtimepacks.patch b/user/dotnet8-stage0/installer_runtimepacks.patch new file mode 100644 index 0000000..03f9980 --- /dev/null +++ b/user/dotnet8-stage0/installer_runtimepacks.patch @@ -0,0 +1,45 @@ +From 96cdd52ef27bff89ae167e6b13fcb8d82da14a69 Mon Sep 17 00:00:00 2001 +From: Antoine Martin +Date: Tue, 21 Feb 2023 15:53:24 -0500 +Subject: [PATCH 10/15] installer_runtimepacks + +Necessary for stage0, as installer doesn't pull runtime packs. +--- + .../src/redist/targets/GenerateLayout.targets | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/src/installer/src/redist/targets/GenerateLayout.targets b/src/installer/src/redist/targets/GenerateLayout.targets +index a27834f85..ca86967df 100644 +--- a/src/installer/src/redist/targets/GenerateLayout.targets ++++ b/src/installer/src/redist/targets/GenerateLayout.targets +@@ -143,6 +143,13 @@ + packs/%(PackageName)/%(PackageVersion) + + ++ ++ Microsoft.NETCore.App.Runtime.$(SharedFrameworkRid) ++ $(MicrosoftNETCoreAppRefPackageVersion) ++ $(TargetFramework) ++ packs/%(PackageName)/%(PackageVersion) ++ ++ + + NETStandard.Library.Ref + $(NETStandardLibraryRefPackageVersion) +@@ -157,6 +164,13 @@ + packs/%(PackageName)/%(PackageVersion) + + ++ ++ Microsoft.AspNetCore.App.Runtime.$(SharedFrameworkRid) ++ $(MicrosoftAspNetCoreAppRefPackageVersion) ++ $(TargetFramework) ++ packs/%(PackageName)/%(PackageVersion) ++ ++ + + Microsoft.NETCore.App.Host.$(SharedFrameworkRid) + $(MicrosoftNETCoreAppHostPackageVersion) +-- +2.38.2 + diff --git a/user/dotnet8-stage0/roslyn_allow-extra-params.patch b/user/dotnet8-stage0/roslyn_allow-extra-params.patch new file mode 100644 index 0000000..b6b628f --- /dev/null +++ b/user/dotnet8-stage0/roslyn_allow-extra-params.patch @@ -0,0 +1,26 @@ +From 84191e5b729198f92152b6ca27129cbcd5b7cd88 Mon Sep 17 00:00:00 2001 +From: Antoine Martin +Date: Tue, 21 Feb 2023 15:54:08 -0500 +Subject: [PATCH 11/15] roslyn_allow-extra-params + +Necessary as to allow manually setting binlog location +--- + src/roslyn/eng/build.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/roslyn/eng/build.sh b/src/roslyn/eng/build.sh +index d49ebf7de..bd9564244 100755 +--- a/src/roslyn/eng/build.sh ++++ b/src/roslyn/eng/build.sh +@@ -167,7 +167,7 @@ while [[ $# > 0 ]]; do + args="$args $1" + shift + ;; +- /p:*) ++ /*) + properties="$properties $1" + ;; + *) +-- +2.38.2 + diff --git a/user/dotnet8-stage0/runtime_76500-properly-set-toolchain-for-alpine.patch b/user/dotnet8-stage0/runtime_76500-properly-set-toolchain-for-alpine.patch new file mode 100644 index 0000000..5bb027c --- /dev/null +++ b/user/dotnet8-stage0/runtime_76500-properly-set-toolchain-for-alpine.patch @@ -0,0 +1,86 @@ +From bf9063bfad5856a2541fbab692197bafc5a4412a Mon Sep 17 00:00:00 2001 +From: Antoine Martin +Date: Tue, 21 Feb 2023 15:55:33 -0500 +Subject: [PATCH 12/15] runtime_76500-properly-set-toolchain-for-alpine + +--- + src/runtime/eng/common/cross/toolchain.cmake | 38 ++++++++++++++++---- + 1 file changed, 31 insertions(+), 7 deletions(-) + +diff --git a/src/runtime/eng/common/cross/toolchain.cmake b/src/runtime/eng/common/cross/toolchain.cmake +index ccfb9951a..2bb1e0845 100644 +--- a/src/runtime/eng/common/cross/toolchain.cmake ++++ b/src/runtime/eng/common/cross/toolchain.cmake +@@ -67,13 +67,25 @@ elseif(TARGET_ARCH_NAME STREQUAL "armv6") + endif() + elseif(TARGET_ARCH_NAME STREQUAL "ppc64le") + set(CMAKE_SYSTEM_PROCESSOR ppc64le) +- set(TOOLCHAIN "powerpc64le-linux-gnu") ++ if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/powerpc64le-alpine-linux-musl) ++ set(TOOLCHAIN "powerpc64le-alpine-linux-musl") ++ else() ++ set(TOOLCHAIN "powerpc64le-linux-gnu") ++ endif() + elseif(TARGET_ARCH_NAME STREQUAL "riscv64") + set(CMAKE_SYSTEM_PROCESSOR riscv64) +- set(TOOLCHAIN "riscv64-linux-gnu") ++ if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/riscv64-alpine-linux-musl) ++ set(TOOLCHAIN "riscv64-alpine-linux-musl") ++ else() ++ set(TOOLCHAIN "riscv64-linux-gnu") ++ endif() + elseif(TARGET_ARCH_NAME STREQUAL "s390x") + set(CMAKE_SYSTEM_PROCESSOR s390x) +- set(TOOLCHAIN "s390x-linux-gnu") ++ if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/s390x-alpine-linux-musl) ++ set(TOOLCHAIN "s390x-alpine-linux-musl") ++ else() ++ set(TOOLCHAIN "s390x-linux-gnu") ++ endif() + elseif(TARGET_ARCH_NAME STREQUAL "x64") + set(CMAKE_SYSTEM_PROCESSOR x86_64) + if(LINUX) +@@ -90,7 +102,11 @@ elseif(TARGET_ARCH_NAME STREQUAL "x64") + endif() + elseif(TARGET_ARCH_NAME STREQUAL "x86") + set(CMAKE_SYSTEM_PROCESSOR i686) +- set(TOOLCHAIN "i686-linux-gnu") ++ if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/i586-alpine-linux-musl) ++ set(TOOLCHAIN "i586-alpine-linux-musl") ++ else() ++ set(TOOLCHAIN "i686-linux-gnu") ++ endif() + if(TIZEN) + set(TIZEN_TOOLCHAIN "i586-tizen-linux-gnu/9.2.0") + endif() +@@ -264,8 +280,12 @@ elseif(TARGET_ARCH_NAME MATCHES "^(arm64|x64)$") + add_toolchain_linker_flag("-Wl,--rpath-link=${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}") + endif() + elseif(TARGET_ARCH_NAME STREQUAL "x86") +- add_toolchain_linker_flag(-m32) +- ++ if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/i586-alpine-linux-musl) ++ add_toolchain_linker_flag("--target=${TOOLCHAIN}") ++ add_toolchain_linker_flag("-Wl,--rpath-link=${CROSS_ROOTFS}/usr/lib/gcc/${TOOLCHAIN}") ++ else() ++ add_toolchain_linker_flag(-m32) ++ endif() + if(TIZEN) + add_toolchain_linker_flag("-B${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}") + add_toolchain_linker_flag("-L${CROSS_ROOTFS}/lib") +@@ -302,7 +322,11 @@ if(TARGET_ARCH_NAME MATCHES "^(arm|armel)$") + add_compile_options(-mfloat-abi=softfp) + endif() + elseif(TARGET_ARCH_NAME STREQUAL "x86") +- add_compile_options(-m32) ++ if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/i586-alpine-linux-musl) ++ add_compile_options(--target=${TOOLCHAIN}) ++ else() ++ add_compile_options(-m32) ++ endif() + add_compile_options(-Wno-error=unused-command-line-argument) + endif() + +-- +2.38.2 + diff --git a/user/dotnet8-stage0/runtime_make-lld-use-depend-on-existing-on-target.patch b/user/dotnet8-stage0/runtime_make-lld-use-depend-on-existing-on-target.patch new file mode 100644 index 0000000..da3f05e --- /dev/null +++ b/user/dotnet8-stage0/runtime_make-lld-use-depend-on-existing-on-target.patch @@ -0,0 +1,25 @@ +From fed0cbcfd1db11cc913d4dbb0e577172471eec50 Mon Sep 17 00:00:00 2001 +From: Antoine Martin +Date: Tue, 21 Feb 2023 15:57:02 -0500 +Subject: [PATCH 13/15] runtime_make-lld-us-depend-on-existing-on-target + +--- + src/runtime/eng/common/native/init-compiler.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/runtime/eng/common/native/init-compiler.sh b/src/runtime/eng/common/native/init-compiler.sh +index c670cb796..a7bfef593 100644 +--- a/src/runtime/eng/common/native/init-compiler.sh ++++ b/src/runtime/eng/common/native/init-compiler.sh +@@ -128,7 +128,7 @@ fi + # Only lld version >= 9 can be considered stable. lld doesn't support s390x. + if [ "$compiler" = "clang" ] && [ -n "$majorVersion" ] && [ "$majorVersion" -ge 9 ] && [ "$build_arch" != "s390x" ]; then + if "$CC" -fuse-ld=lld -Wl,--version >/dev/null 2>&1; then +- LDFLAGS="-fuse-ld=lld" ++ [ -f "$ROOTFS_DIR/usr/bin/lld" ] && LDFLAGS="-fuse-ld=lld" + fi + fi + +-- +2.38.2 + diff --git a/user/dotnet8-stage0/runtime_mono-thread-coop-undefine-fortify-source.patch b/user/dotnet8-stage0/runtime_mono-thread-coop-undefine-fortify-source.patch new file mode 100644 index 0000000..d4cbe4d --- /dev/null +++ b/user/dotnet8-stage0/runtime_mono-thread-coop-undefine-fortify-source.patch @@ -0,0 +1,25 @@ +From 98054ea87ce70247bb09ceafd2ad1a0b36d2fef4 Mon Sep 17 00:00:00 2001 +Patch-Source: https://github.com/dotnet/runtime/issues/82269 +From: Antoine Martin +Date: Sat, 1 Oct 2022 09:21:58 -0400 +Subject: [PATCH] Undefine fortify-source on mono-thread-coop + +When _FORTIFY_SOURCE=2, there is a bug relating to memcpy that expresses itself. +See: https://gitlab.alpinelinux.org/alpine/aports/-/issues/14105. Alpine Linux +now sets this by default since https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/43463, +which makes mono-flavored runtime dump its core. This patch offers a workaround +by undefining _FORTIFY_SOURCE in the problematic file. + +--- +diff --git a/src/runtime/src/mono/mono/utils/mono-threads-coop.c b/src/runtime/src/mono/mono/utils/mono-threads-coop.c +index 4ed659d6605..34bb5785fba 100644 +--- a/src/runtime/src/mono/mono/utils/mono-threads-coop.c ++++ b/src/runtime/src/mono/mono/utils/mono-threads-coop.c +@@ -15,6 +15,7 @@ + #ifdef TARGET_MACH + #define _DARWIN_C_SOURCE + #endif ++#undef _FORTIFY_SOURCE + + #include + #include diff --git a/user/dotnet8-stage0/runtime_no-additional-runtime-id.patch b/user/dotnet8-stage0/runtime_no-additional-runtime-id.patch new file mode 100644 index 0000000..c1dc571 --- /dev/null +++ b/user/dotnet8-stage0/runtime_no-additional-runtime-id.patch @@ -0,0 +1,27 @@ +From b5bd27a369f9e4786c9c540a7fd96c766b4dca0a Mon Sep 17 00:00:00 2001 +From: Antoine Martin +Date: Tue, 21 Feb 2023 17:06:45 -0500 +Subject: [PATCH 1/1] runtime_no-additional-runtime-id + +For some reason, AdditionalRuntimeIdentifiers gets set as '$arch' rather than 'linux-musl-$arch' +Since we know our portable RID exists, just skip ensuring RID existence +--- + .../src/Microsoft.NETCore.Platforms.csproj | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/Microsoft.NETCore.Platforms.csproj b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/Microsoft.NETCore.Platforms.csproj +index 742f17881..81877a5e6 100644 +--- a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/Microsoft.NETCore.Platforms.csproj ++++ b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/Microsoft.NETCore.Platforms.csproj +@@ -21,8 +21,6 @@ + <_generateRuntimeGraphTargetFramework Condition="'$(MSBuildRuntimeType)' == 'core'">$(NetCoreAppToolCurrent) + <_generateRuntimeGraphTargetFramework Condition="'$(MSBuildRuntimeType)' != 'core'">net472 + <_generateRuntimeGraphTask>$([MSBuild]::NormalizePath('$(BaseOutputPath)', $(Configuration), '$(_generateRuntimeGraphTargetFramework)', '$(AssemblyName).dll')) +- +- $(AdditionalRuntimeIdentifiers);$(OutputRID) + + + +-- +2.38.2 + diff --git a/user/dotnet8-stage0/sdk_dotnet-watch-nowarn-ad0001.patch b/user/dotnet8-stage0/sdk_dotnet-watch-nowarn-ad0001.patch new file mode 100644 index 0000000..3987891 --- /dev/null +++ b/user/dotnet8-stage0/sdk_dotnet-watch-nowarn-ad0001.patch @@ -0,0 +1,24 @@ +From 8f8fa898b907192462834cced1bc39bca8ade9f7 Mon Sep 17 00:00:00 2001 +From: Antoine Martin +Date: Tue, 21 Feb 2023 19:14:55 -0500 +Subject: [PATCH 1/1] sdk_dotnet-watch-nowarn-ad0001 + +--- + src/sdk/src/BuiltInTools/dotnet-watch/dotnet-watch.csproj | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/sdk/src/BuiltInTools/dotnet-watch/dotnet-watch.csproj b/src/sdk/src/BuiltInTools/dotnet-watch/dotnet-watch.csproj +index 0e8811a7b..a359ae5e8 100644 +--- a/src/sdk/src/BuiltInTools/dotnet-watch/dotnet-watch.csproj ++++ b/src/sdk/src/BuiltInTools/dotnet-watch/dotnet-watch.csproj +@@ -9,6 +9,7 @@ + MicrosoftAspNetCore + false + ++ AD0001 + + + +-- +2.38.2 + diff --git a/user/dotnet8-stage0/sdk_dummyshim-fix.patch b/user/dotnet8-stage0/sdk_dummyshim-fix.patch new file mode 100644 index 0000000..c8facc9 --- /dev/null +++ b/user/dotnet8-stage0/sdk_dummyshim-fix.patch @@ -0,0 +1,53 @@ +From 16119e8a420ad8972693530de11697079f8bec51 Mon Sep 17 00:00:00 2001 +From: Antoine Martin +Date: Tue, 21 Feb 2023 15:59:54 -0500 +Subject: [PATCH 15/15] sdk_dummy-shim-fix + +Hack for building sdk within stage0, which expects to be built using the +whole stack. +--- + src/sdk/build/GenerateResxSource.targets | 1 - + .../Microsoft.DotNet.PackageInstall.Tests.csproj | 1 - + .../SampleGlobalToolWithShim/includepublish.nuspec | 2 -- + 3 files changed, 4 deletions(-) + +diff --git a/src/sdk/build/GenerateResxSource.targets b/src/sdk/build/GenerateResxSource.targets +index 239665655..b47510d90 100644 +--- a/src/sdk/build/GenerateResxSource.targets ++++ b/src/sdk/build/GenerateResxSource.targets +@@ -1,7 +1,6 @@ + + + + +diff --git a/src/sdk/src/Tests/Microsoft.DotNet.PackageInstall.Tests/Microsoft.DotNet.PackageInstall.Tests.csproj b/src/sdk/src/Tests/Microsoft.DotNet.PackageInstall.Tests/Microsoft.DotNet.PackageInstall.Tests.csproj +index c75bf86d3..a295df546 100644 +--- a/src/sdk/src/Tests/Microsoft.DotNet.PackageInstall.Tests/Microsoft.DotNet.PackageInstall.Tests.csproj ++++ b/src/sdk/src/Tests/Microsoft.DotNet.PackageInstall.Tests/Microsoft.DotNet.PackageInstall.Tests.csproj +@@ -104,7 +104,6 @@ + + + +- + + + +diff --git a/src/sdk/src/Tests/Microsoft.DotNet.PackageInstall.Tests/SampleGlobalToolWithShim/includepublish.nuspec b/src/sdk/src/Tests/Microsoft.DotNet.PackageInstall.Tests/SampleGlobalToolWithShim/includepublish.nuspec +index b2ed9d349..a93fb1f0d 100644 +--- a/src/sdk/src/Tests/Microsoft.DotNet.PackageInstall.Tests/SampleGlobalToolWithShim/includepublish.nuspec ++++ b/src/sdk/src/Tests/Microsoft.DotNet.PackageInstall.Tests/SampleGlobalToolWithShim/includepublish.nuspec +@@ -12,8 +12,6 @@ + + + +- +- + + + +-- +2.38.2 + diff --git a/user/dotnet8-stage0/sdk_fix-sdk-download.patch b/user/dotnet8-stage0/sdk_fix-sdk-download.patch new file mode 100644 index 0000000..9a390b2 --- /dev/null +++ b/user/dotnet8-stage0/sdk_fix-sdk-download.patch @@ -0,0 +1,25 @@ +From 1c330142683d6d398e38762f7f04f0918426d79d Mon Sep 17 00:00:00 2001 +From: Antoine Martin +Date: Tue, 21 Feb 2023 15:58:42 -0500 +Subject: [PATCH 14/15] sdk_fix-sdk-download + +--- + src/sdk/eng/restore-toolset.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/sdk/eng/restore-toolset.sh b/src/sdk/eng/restore-toolset.sh +index da38088d5..d5dd0956d 100644 +--- a/src/sdk/eng/restore-toolset.sh ++++ b/src/sdk/eng/restore-toolset.sh +@@ -7,7 +7,7 @@ function InitializeCustomSDKToolset { + + # The following frameworks and tools are used only for testing. + # Do not attempt to install them in source build. +- if [[ $properties == *"ArcadeBuildFromSource=true"* ]]; then ++ if [[ "${DotNetBuildFromSource:-}" == "true" ]]; then + return + fi + +-- +2.38.2 +