Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
fa59f6d
Use Wasm runtime pack for building wasm in ILCompiler.ReadyToRun.Tests
jtschuster Jul 19, 2026
4f17299
Clean up ILCompiler.ReadyToRun.Tests.csproj
jtschuster Jul 19, 2026
03717e7
Merge branch 'main' of https://github.com/dotnet/runtime into jtschus…
jtschuster Jul 19, 2026
898d14b
Cleanup
jtschuster Jul 19, 2026
08fc40a
Address copilot feedback
jtschuster Jul 20, 2026
7e40733
Check runtime pack dir exists before enumerating
jtschuster Jul 20, 2026
7838070
Merge branch 'main' of https://github.com/dotnet/runtime into jtschus…
jtschuster Jul 22, 2026
fd66c73
Download built arm64 and wasm runtime packs for new clr.r2rtests subset
jtschuster Jul 23, 2026
6b3b3d1
Revert change to remove static libs from wasm runtime pack, fix test …
jtschuster Jul 24, 2026
6302dd3
Compile R2R tests for the build's own target, one CI leg per target
jtschuster Jul 28, 2026
a40e9a7
Give the R2R tests a per-target output directory
jtschuster Jul 28, 2026
cfd0352
Key the R2R test output directory on the target RID
jtschuster Jul 28, 2026
72aae64
Make r2rtests build for a specific target without requiring host-mach…
jtschuster Jul 28, 2026
08c53f5
Merge branch 'main' of https://github.com/dotnet/runtime into jtschus…
jtschuster Jul 28, 2026
443385c
Add an ios-arm64 R2R test leg
jtschuster Jul 29, 2026
b90057a
Address review feedback: gate --pdb tests on the host, add a Windows leg
jtschuster Jul 29, 2026
c586d57
Restrict WasmArgumentLayoutTests to wasm targets
jtschuster Jul 29, 2026
8e7f2ec
Merge branch 'main' of https://github.com/dotnet/runtime into jtschus…
jtschuster Jul 29, 2026
af17aab
Pass the R2R test target via _osParameter/_archParameter instead of b…
jtschuster Jul 30, 2026
c8fafdb
Use OutputPath for copying crossgen2_inbuild output items
jtschuster Jul 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions eng/Subsets.props
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@

<!-- Define AllSubsets to include all available subsets including OnDemand ones -->
<AllSubsetsExpansion>clr.nativeprereqs+clr.iltools+clr.runtime+clr.native+clr.aot+clr.nativeaotlibs+clr.nativeaotruntime+clr.crossarchtools</AllSubsetsExpansion>
<AllSubsetsExpansion>$(AllSubsetsExpansion)+clr.paltests+clr.paltestlist+clr.hosts+clr.jit+clr.alljits+clr.alljitscommunity+clr.spmi+clr.corelib+clr.nativecorelib+clr.tools+clr.toolstests+clr.packages</AllSubsetsExpansion>
<AllSubsetsExpansion>$(AllSubsetsExpansion)+clr.paltests+clr.paltestlist+clr.hosts+clr.jit+clr.alljits+clr.alljitscommunity+clr.spmi+clr.corelib+clr.nativecorelib+clr.tools+clr.toolstests+clr.r2rtests+clr.packages</AllSubsetsExpansion>
<AllSubsetsExpansion Condition="$([MSBuild]::IsOsPlatform(Windows))">$(AllSubsetsExpansion)+linuxdac+alpinedac</AllSubsetsExpansion>
<AllSubsetsExpansion>$(AllSubsetsExpansion)+mono.runtime+provision.emsdk+mono.aotcross+mono.corelib+mono.manifests+mono.packages+mono.tools+mono.wasmruntime+mono.wasiruntime+mono.wasmworkload+mono.mscordbi+mono.workloads</AllSubsetsExpansion>
<AllSubsetsExpansion>$(AllSubsetsExpansion)+tools.illink+tools.cdac+tools.illinktests+tools.cdactests+tools.cdacdumptests</AllSubsetsExpansion>
Expand Down Expand Up @@ -232,6 +232,7 @@
<SubsetName Include="Clr.NativeCoreLib" Description="Run crossgen on System.Private.CoreLib library for CoreCLR." />
<SubsetName Include="Clr.Tools" Description="Managed tools that support CoreCLR development and testing." />
<SubsetName Include="Clr.ToolsTests" OnDemand="true" Description="Unit tests for the clr.tools subset." />
<SubsetName Include="Clr.R2RTests" OnDemand="true" Description="Unit tests for crossgen2 (ReadyToRun compiler)." />
<SubsetName Include="Clr.Packages" Description="The projects that produce NuGet packages for the CoreCLR runtime, crossgen, and IL tools." />
<SubsetName Include="LinuxDac" Condition="$([MSBuild]::IsOsPlatform(Windows))" OnDemand="true" Description="The cross-OS Windows->libc-based Linux DAC. Skipped on x86." />
<SubsetName Include="AlpineDac" Condition="$([MSBuild]::IsOsPlatform(Windows))" OnDemand="true" Description="The cross-OS Windows->musl-libc-based Linux DAC. Skipped on x86" />
Expand Down Expand Up @@ -392,7 +393,6 @@

<ItemGroup>
<!-- crossgen2/ILC have dependencies on the JITs, so build them if the cross component includes crossgen2/ILC. -->
<_CrossToolSubset Condition="'$(_BuildCrossComponents)' == 'true' and '$(TargetArchitecture)' != 'wasm' and $(_subset.Contains('+clr.toolstests+'))" Include="ClrAllJitsSubset=true" />
<_CrossToolSubset Condition="'$(_BuildCrossComponents)' == 'true' and '$(TargetArchitecture)' != 'wasm' and ($(_subset.Contains('+clr.tools+')) or $(_subset.Contains('+clr.nativecorelib+')) or $(_subset.Contains('+clr.crossarchtools+')))" Include="ClrJitSubset=true" />
<!-- When targeting WebAssembly, only build the wasm JIT for the cross component. -->
<_CrossToolSubset Condition="'$(_BuildCrossComponents)' == 'true' and '$(TargetArchitecture)' == 'wasm' and ($(_subset.Contains('+clr.tools+')) or $(_subset.Contains('+clr.nativecorelib+')) or $(_subset.Contains('+clr.crossarchtools+')))" Include="ClrWasmJitSubset=true" />
Expand Down Expand Up @@ -518,14 +518,17 @@
Test="true" Category="clr" Condition="'$(DotNetBuildSourceOnly)' != 'true' and '$(NativeAotSupported)' == 'true'"/>
<ProjectToBuild Include="$(CoreClrProjectRoot)tools\aot\ILCompiler.Trimming.Tests\ILCompiler.Trimming.Tests.csproj"
Test="true" Category="clr" Condition="'$(DotNetBuildSourceOnly)' != 'true' and '$(NativeAotSupported)' == 'true'"/>
<ProjectToBuild Include="$(CoreClrProjectRoot)tools\aot\ILCompiler.ReadyToRun.Tests\ILCompiler.ReadyToRun.Tests.csproj"
Test="true" Category="clr" Condition="'$(DotNetBuildSourceOnly)' != 'true' and '$(NativeAotSupported)' == 'true'"/>
<ProjectToBuild Include="$(CoreClrProjectRoot)tools\ILVerification.Tests\ILVerification.Tests.csproj"
Test="true" Category="clr" Condition="'$(DotNetBuildSourceOnly)' != 'true'"/>
<ProjectToBuild Include="$(CoreClrProjectRoot)tools\ILTrim.Tests\ILTrim.Tests.csproj"
Test="true" Category="clr" Condition="'$(DotNetBuildSourceOnly)' != 'true'"/>
</ItemGroup>

<ItemGroup Condition="$(_subset.Contains('+clr.r2rtests+'))">
<ProjectToBuild Include="$(CoreClrProjectRoot)tools\aot\ILCompiler.ReadyToRun.Tests\ILCompiler.ReadyToRun.Tests.csproj"
Test="true" Category="clr" Condition="'$(DotNetBuildSourceOnly)' != 'true'"/>
</ItemGroup>

<PropertyGroup Condition="$(_subset.Contains('+tools.cdac+'))">
<_CDacToolsBuilt Condition="'$(_CDacToolsBuilt)' != 'true'">true</_CDacToolsBuilt>
</PropertyGroup>
Expand Down
161 changes: 161 additions & 0 deletions eng/pipelines/runtime.yml
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,7 @@ extends:
eq(variables['wasmDarcDependenciesChanged'], true),
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_tools_illink.containsChange'], true),
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_wasm_coreclr_runtimetests.containsChange'], true),
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_coreclr.containsChange'], true),
eq(variables['isRollingBuild'], true))

- template: /eng/pipelines/common/platform-matrix.yml
Expand Down Expand Up @@ -880,6 +881,166 @@ extends:
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_tools_illink.containsChange'], true),
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_tools_cdac.containsChange'], true),
eq(variables['isRollingBuild'], true))

# The R2R test suite compiles for one target per run: the test assembly itself always runs on
# the build machine, while crossgen2 and the shared framework it compiles against are staged
# for whatever the build targets. Each leg therefore needs only its own target's artifacts,
# and test cases the target cannot compile are skipped rather than failed.
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/common/global-build-job.yml
buildConfig: checked
platforms:
- linux_x64
jobParameters:
dependsOn:
- build_linux_x64_checked_CoreCLR_ReleaseLibraries
timeoutInMinutes: 120
nameSuffix: CLR_R2R_Tests_linux_x64
buildArgs: -s clr.r2rtests -lc Release -c $(_BuildConfig) -test
enablePublishTestResults: true
testResultsFormat: 'xunit'
preBuildSteps:
- template: /eng/pipelines/common/download-artifact-step.yml
parameters:
artifactName: CoreCLR_ReleaseLibraries_BuildArtifacts_linux_x64_Checked
artifactFileName: CoreCLR_ReleaseLibraries_BuildArtifacts_linux_x64_Checked$(archiveExtension)
unpackFolder: $(Build.SourcesDirectory)/artifacts/bin
cleanUnpackFolder: false
overwriteExistingFiles: true
displayName: Download linux-x64 artifacts
condition: >-
or(
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_coreclr.containsChange'], true),
eq(variables['isRollingBuild'], true))

- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/common/global-build-job.yml
buildConfig: checked
platforms:
- linux_x64
variables:
- name: _osParameter
value: -os browser
- name: _archParameter
value: -arch wasm
jobParameters:
dependsOn:
- build_browser_wasm_linux_checked_CoreCLR_ReleaseLibraries
timeoutInMinutes: 120
nameSuffix: CLR_R2R_Tests_browser_wasm
buildArgs: -s clr.r2rtests -lc Release -c $(_BuildConfig) -test
enablePublishTestResults: true
testResultsFormat: 'xunit'
preBuildSteps:
- template: /eng/pipelines/common/download-artifact-step.yml
parameters:
artifactName: CoreCLR_ReleaseLibraries_BuildArtifacts_browser_wasm_linux_Checked
artifactFileName: CoreCLR_ReleaseLibraries_BuildArtifacts_browser_wasm_linux_Checked$(archiveExtension)
unpackFolder: $(Build.SourcesDirectory)/artifacts/bin
cleanUnpackFolder: false
overwriteExistingFiles: true
displayName: Download browser-wasm artifacts
condition: >-
or(
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_coreclr.containsChange'], true),
eq(variables['isRollingBuild'], true))

- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/common/global-build-job.yml
buildConfig: checked
platforms:
- linux_x64
variables:
- name: _archParameter
value: -arch arm
jobParameters:
dependsOn:
- build_linux_arm_checked_CoreCLR_ReleaseLibraries
timeoutInMinutes: 120
nameSuffix: CLR_R2R_Tests_linux_arm
buildArgs: -s clr.r2rtests -lc Release -c $(_BuildConfig) -test
enablePublishTestResults: true
testResultsFormat: 'xunit'
preBuildSteps:
- template: /eng/pipelines/common/download-artifact-step.yml
parameters:
artifactName: CoreCLR_ReleaseLibraries_BuildArtifacts_linux_arm_Checked
artifactFileName: CoreCLR_ReleaseLibraries_BuildArtifacts_linux_arm_Checked$(archiveExtension)
unpackFolder: $(Build.SourcesDirectory)/artifacts/bin
cleanUnpackFolder: false
overwriteExistingFiles: true
displayName: Download linux-arm artifacts
condition: >-
or(
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_coreclr.containsChange'], true),
eq(variables['isRollingBuild'], true))

- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/common/global-build-job.yml
buildConfig: checked
platforms:
- linux_x64
variables:
- name: _osParameter
value: -os ios
- name: _archParameter
value: -arch arm64
jobParameters:
timeoutInMinutes: 120
nameSuffix: CLR_R2R_Tests_ios_arm64
# No prebuilt artifact can supply this leg: the iOS jobs run on macOS, so their cross
# components are Mach-O and unusable here. The cross components are built from source
# instead - they target the build host (linux-x64), not iOS, so no Apple SDK is needed.
# libs.sfx rather than libs, because libs.native does require the Apple SDK.
buildArgs: -s clr.crossarchtools+clr.corelib+libs.sfx -rf CoreCLR -lc Release -c $(_BuildConfig)
enablePublishTestResults: true
testResultsFormat: 'xunit'
postBuildSteps:
# A separate invocation because clr.r2rtests is ordered ahead of libs.sfx in
# Subsets.props, so a single build would run the tests before their inputs exist.
- template: /eng/pipelines/common/templates/global-build-step.yml
parameters:
buildArgs: -s clr.r2rtests -rf CoreCLR -lc Release -c $(_BuildConfig) -test
displayName: Build and run R2R tests
condition: >-
or(
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_coreclr.containsChange'], true),
eq(variables['isRollingBuild'], true))

# The only leg with a Windows host, which the two --pdb test cases require: crossgen2 writes
# Windows PDBs through Microsoft.DiaSymReader.Native, which is restored for Windows only.
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/common/global-build-job.yml
buildConfig: checked
platforms:
- windows_x64
jobParameters:
dependsOn:
- build_windows_x64_checked_CoreCLR_ReleaseLibraries
timeoutInMinutes: 120
nameSuffix: CLR_R2R_Tests_windows_x64
buildArgs: -s clr.r2rtests -lc Release -c $(_BuildConfig) -test
enablePublishTestResults: true
testResultsFormat: 'xunit'
preBuildSteps:
- template: /eng/pipelines/common/download-artifact-step.yml
parameters:
artifactName: CoreCLR_ReleaseLibraries_BuildArtifacts_windows_x64_Checked
artifactFileName: CoreCLR_ReleaseLibraries_BuildArtifacts_windows_x64_Checked$(archiveExtension)
unpackFolder: $(Build.SourcesDirectory)/artifacts/bin
cleanUnpackFolder: false
overwriteExistingFiles: true
displayName: Download windows-x64 artifacts
condition: >-
or(
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_coreclr.containsChange'], true),
eq(variables['isRollingBuild'], true))

#
# Build CrossDacs
#
Expand Down
Loading