Repository navigation
Description
Community platforms use cross-building through officially supported platforms to perform VMR end-to-end builds—e.g., freebsd-x64 cross-built on linux-x64. The most significant difference is that the dotnet/runtime build uses the --bootstrap flag for these platforms. This builds host tools in a first pass, then uses those live-built tools to fulfill requirements that typically come from nuget.org (see https://github.com/dotnet/dotnet/blob/0c4423f49f/src/runtime/docs/workflow/building/coreclr/cross-building.md#building-coreclr-with-bootstrapping).
This type of platform is not covered by the CI and runs into regressions from time to time: #398 (comment), #7596 etc. Once this "stage 0" SDK is built, we can perform a native build on the host machine using that stage 0 SDK. This is how the FreeBSD folks have been shipping for several years (cc @Thefrank).
The platforms which fall under this category are:
- freebsd-x64
- freebsd-arm64
- linux-loongarch64
- linux-riscv64
- illumos-x64
- solaris-x64
- haiku-x64
- openbsd-x64
Other platforms joining them in the near future are linux-s390x and linux-ppc64le (currently they are mono-only and coreclr work is in progress).
So we can see it is roughly a 50-50 split when it comes to officially-supported vs. community-supported platforms.
This is the generic build command for all of these platforms:
https://github.com/filipnavara/dotnet-riscv/blob/8abd76591d67cc23e77c6e01bf3a9b3cac207e90/.github/workflows/build.yml#L77-L80
It would be good to have one CI leg to exercise this use case using the same command, which takes 60-80 mins (well within the range of other CI builds). This is to prevent regressions earlier in the cycle. I recommend using freebsd-arm64 because:
- The FreeBSD OS is the oldest and most mature in this category (the port started in 2015, though its arm64 architecture was added later).
- It covers a "different OS" and "different arch" from the host OS (linux-x64); several conditions have had to be tweaked for them in the past.
MCR's docker tag for this one is azurelinux-3.0-net11.0-cross-freebsd-14-arm64 (soon it will be in azurelinux-4.0 as well: dotnet/dotnet-buildtools-prereqs-docker#1674).
Activity
[-]CI leg for communit platform to avoid regression[/-][+]CI leg for community platform to avoid regressions[/+]jkotas commentedon Jul 14, 2026
The default CI mix in dotnet/dotnet is intentionally very minimal to optimize for code flow velocity. For example, there is no CI verification by default for OSX. It is by design that regressions sneak through from time to time.