Skip to content

[android] Enable CoreCLR runtime pack production for android-arm#127225

Merged
simonrozsival merged 4 commits intomainfrom
dev/simonrozsival/android-arm-runtimepack
Apr 28, 2026
Merged

[android] Enable CoreCLR runtime pack production for android-arm#127225
simonrozsival merged 4 commits intomainfrom
dev/simonrozsival/android-arm-runtimepack

Conversation

@simonrozsival
Copy link
Copy Markdown
Member

Note

This PR was created with the assistance of GitHub Copilot.

Summary

Enable the CoreCLR runtime pack for android-arm (armeabi-v7a) by removing the ARM architecture restriction and adding CI pipeline support.

Changes

What already works (no changes needed)

  • Platform matrix definition (android_arm already defined in platform-matrix.yml)
  • Native build tooling (NDK arm → armeabi-v7a mapping)
  • Packaging RIDs (linux-bionic-arm in netcoreappRIDs.props and KnownFrameworkReference)
  • Libraries Helix queues (already handle android_arm)
  • CoreCLR CMake/JIT (no ARM32+Android-specific blocks)

Dependencies

This PR depends on #126838 (raise AndroidApiLevelMin from 21 to 24) and should be merged after it.

Unblock the CoreCLR build for android-arm (armeabi-v7a) by removing
the arm architecture restriction in eng/Subsets.props. The restriction
was originally due to fseeko/ftello not being available below Android
API level 24 (#111665). With the minimum API level being
raised to 24, this blocker no longer applies.

Add android_arm to the CoreCLR CI pipeline platform lists in
runtime.yml and runtime-extra-platforms-android.yml, and add the
corresponding Helix queue mapping for CoreCLR android-arm tests.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@dotnet-policy-service
Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

Comment thread eng/Subsets.props Outdated
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Enables CoreCLR runtime pack production and CI coverage for android-arm (armeabi-v7a) by unblocking the architecture in build subsets and wiring android_arm into the Android CoreCLR pipeline/platform lists and Helix queue selection.

Changes:

  • Unblock CoreCLR support for Android arm by adjusting the Android architecture gating in eng/Subsets.props (while keeping x86 blocked).
  • Add android_arm to Android CoreCLR platform matrices in main and extra-platform pipelines.
  • Add Helix queue mapping for android_arm in the CoreCLR Helix queue setup template.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

File Description
eng/Subsets.props Updates CoreCLR support gating so Android arm32 is allowed (x86 remains blocked).
eng/pipelines/runtime.yml Adds android_arm to the CoreCLR Android CI platform list and updates the header comment.
eng/pipelines/extra-platforms/runtime-extra-platforms-android.yml Adds android_arm to the extra-platforms CoreCLR Android job platforms list.
eng/pipelines/coreclr/templates/helix-queues-setup.yml Adds Helix queue mapping for android_arm (aligned to android_arm64).

Comment thread eng/Subsets.props Outdated
@github-actions
Copy link
Copy Markdown
Contributor

🤖 Copilot Code Review — PR #127225

Note

This review was AI-generated by Copilot. Models contributing: Claude Opus 4.6 (primary), GPT-5.3-Codex, Claude Haiku 4.5.

Holistic Assessment

Motivation: Enabling CoreCLR for android-arm is a reasonable step toward full Android platform support. The PR is well-scoped to CI/build infrastructure changes only.

Approach: The changes are mechanical and consistent — unblocking the architecture in Subsets.props and wiring up the CI pipelines/Helix queues. The pattern matches sibling platforms (android_arm64).

Summary: ⚠️ Needs Human Review. The stated rationale ("minimum API level being raised to 24") is factually incorrect in the current codebase — AndroidApiLevelMin is still 21. However, investigation suggests the build likely succeeds anyway because CoreCLR and its native dependencies do not actually call fseeko/ftello. CI results will be the definitive answer. A maintainer (@jkotas) has already engaged with feedback.


Detailed Findings

⚠️ PR Rationale — API level has not been raised to 24 (flagged by all 3 models)

The PR description states: "With the minimum API level being raised to 24, this blocker no longer applies." However:

  • Directory.Build.props:42<AndroidApiLevelMin>21</AndroidApiLevelMin>
  • eng/native/build-commons.sh:104local ANDROID_API_LEVEL=21
  • eng/native/gen-buildsys.cmd:79set __ANDROID_API_LEVEL=21

The API level bump is in a separate draft PR (#126838). If this PR is intended to land before #126838, the commit message should be corrected to state the actual reason arm is being unblocked (e.g., that no CoreCLR code actually depends on fseeko/ftello). If it depends on #126838 landing first, that ordering dependency should be documented.

⚠️ Comment clarity — Why arm but not x86?

Both arm and x86 are 32-bit Android architectures equally affected by issue #111665 (fseeko/ftello unavailability below API 24). The updated comment says "Android x86 builds are still blocked by #111665" but does not explain why arm is exempt from the same blocker. This could confuse future readers. Note that @jkotas has already suggested removing the comment entirely since #126838 will resolve the underlying issue.

✅ CI pipeline configuration — Correct and consistent

The Helix queue mapping for android_arm in coreclr/templates/helix-queues-setup.yml correctly mirrors the android_arm64 pattern (Windows.11.Amd64.Android.Open for public, Windows.11.Amd64.Android for internal). The platform is already defined in platform-matrix.yml (line 623) and the libraries Helix queue setup already handles android_arm, so only the CoreCLR-specific queue mapping was missing — which this PR adds.

✅ No public API changes

No changes to ref/ assemblies or public API surface. No API approval verification needed.

💡 Build validation — CI will be definitive

Investigation shows that neither CoreCLR native code nor its vendored dependencies (zlib-ng, zstd) actually call fseeko/ftello in compiled C/C++ sources. The zlib-ng.cmake wrapper hardcodes HAVE_FSEEKO=1 but the library does not use the function; zstd's cmake sets LIBC_NO_FSEEKO for API < 24 but also does not call the function. This suggests the original arm block was conservative and the build should succeed at API 21. CI results from this draft will confirm.

Generated by Code Review for issue #127225 ·

Co-authored-by: Jan Kotas <jkotas@microsoft.com>
Copilot AI review requested due to automatic review settings April 24, 2026 20:26
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Enables CoreCLR runtime pack production and CI coverage for android-arm (armeabi-v7a) by unblocking CoreCLR on Android arm32 and adding android_arm to relevant pipeline platform matrices / Helix queue mappings.

Changes:

  • Unblocks CoreCLR for Android arm32 by relaxing the architecture restriction in eng/Subsets.props.
  • Adds android_arm to CoreCLR Android CI matrices in eng/pipelines/runtime.yml and extra-platforms Android jobs.
  • Adds android_arm Helix queue mapping in CoreCLR Helix queue setup.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

File Description
eng/Subsets.props Allows CoreCLR builds for Android arm32 (blocks only x86).
eng/pipelines/runtime.yml Adds android_arm to CoreCLR Android device/emulator CI matrix.
eng/pipelines/extra-platforms/runtime-extra-platforms-android.yml Adds android_arm to extra-platforms CoreCLR Android job.
eng/pipelines/coreclr/templates/helix-queues-setup.yml Adds Helix queue mapping for android_arm (mirrors android_arm64).

Comment thread eng/Subsets.props
Comment thread eng/pipelines/runtime.yml
Comment thread eng/pipelines/extra-platforms/runtime-extra-platforms-android.yml
@steveisok
Copy link
Copy Markdown
Member

@simonrozsival I would also test this change in the VMR. That's where the packaging part will happen and you can tell if there are any shennanigans. If you need help, ping me and I can give you a hand.

Copilot AI review requested due to automatic review settings April 27, 2026 18:43
@simonrozsival
Copy link
Copy Markdown
Member Author

@steveisok validated here:

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request enables CoreCLR runtime pack production for android-arm (armeabi-v7a) by unblocking CoreCLR support for Android ARM32 in subset selection and expanding CI coverage to include the android_arm platform, including Helix queue mapping.

Changes:

  • Unblock CoreCLR support for Android arm by adjusting the _CoreCLRSupportedOS architecture gating (while still excluding x86).
  • Add android_arm to the CoreCLR Android platform lists in the main runtime pipeline and the extra-platforms Android pipeline.
  • Add a Helix queue mapping for android_arm in the CoreCLR Helix queues setup template, aligned with android_arm64.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

File Description
eng/Subsets.props Enables CoreCLR-supported Android builds for arm by loosening the Android architecture restriction (still blocks x86).
eng/pipelines/runtime.yml Adds android_arm to the CoreCLR Android platform matrix to build/test CoreCLR on ARM32 devices.
eng/pipelines/extra-platforms/runtime-extra-platforms-android.yml Adds android_arm to extra-platforms CoreCLR Android jobs for additional CI coverage.
eng/pipelines/coreclr/templates/helix-queues-setup.yml Introduces Helix queue mapping for android_arm mirroring the android_arm64 queue selection.

Comment thread eng/Subsets.props
@simonrozsival simonrozsival enabled auto-merge (squash) April 27, 2026 22:09
@simonrozsival simonrozsival merged commit 4fed13d into main Apr 28, 2026
174 of 184 checks passed
@simonrozsival simonrozsival deleted the dev/simonrozsival/android-arm-runtimepack branch April 28, 2026 00:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

5 participants