Skip to content

tools: Support FLUTTER_HOST_ARCH in update_dart_sdk scripts - #190421

Merged
cbracken merged 1 commit into
flutter:masterfrom
cbracken:migrate-arm64-update_dart_sdk
Aug 3, 2026
Merged

tools: Support FLUTTER_HOST_ARCH in update_dart_sdk scripts#190421
cbracken merged 1 commit into
flutter:masterfrom
cbracken:migrate-arm64-update_dart_sdk

Conversation

@cbracken

@cbracken cbracken commented Aug 3, 2026

Copy link
Copy Markdown
Member

Adds support for overriding the host CPU architecture via a FLUTTER_HOST_ARCH environment variable when pre-caching binaries. Updates update_dart_sdk.sh and update_dart_sdk.ps1, to make use of this to pull down the specified Dart SDK.

This is required to allow arm64 macOS CI hosts to download and cache the x64 Dart SDK when cross-packaging x64 Flutter SDK release archives in the packaging/packaging recipe in packaging.py.

See: https://flutter.googlesource.com/recipes/+/refs/heads/main/recipes/packaging/packaging.py

This is pre-factoring prior to updating the tool's precache code.

No test changes since by default, this behaves exactly as today and this is "tested" by the build itself on CI. The followup that updates the tool's precache code will exercise this and add tests for it.

Issue: #189144

Pre-launch Checklist

If you need help, consider asking for advice on the #hackers-new channel on Discord.

If this change needs to override an active code freeze, provide a comment explaining why. The code freeze workflow can be overridden by code reviewers. See pinned issues for any active code freezes with guidance.

Note: The Flutter team is currently trialing the use of Gemini Code Assist for GitHub. Comments from the gemini-code-assist bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed.

Adds support for overriding the host CPU architecture via a
`FLUTTER_HOST_ARCH` environment variable when pre-caching binaries.
Updates `update_dart_sdk.sh` and `update_dart_sdk.ps1`, to make use of
this to pull down the specified Dart SDK.

This is required to allow arm64 macOS CI hosts to download and cache the
x64 Dart SDK when cross-packaging x64 Flutter SDK release archives on an
arm64 host in the `packaging/packaging` recipe in `packaging.py`.

See: https://flutter.googlesource.com/recipes/+/refs/heads/main/recipes/packaging/packaging.py

This is pre-factoring prior to updating the tool's precache code.

No test changes since by default, this behaves exactly as today and this
is "tested" by the build itself on CI. The followup that updates the
tool's precache code will exercise this and add tests for it.

Issue: flutter#189144
@cbracken
cbracken requested a review from okorohelijah August 3, 2026 01:25
@cbracken
cbracken requested a review from jtmcdole as a code owner August 3, 2026 01:25
@flutter-dashboard flutter-dashboard Bot added the CICD Run CI/CD label Aug 3, 2026
@flutter-dashboard

Copy link
Copy Markdown

It looks like this pull request may not have tests. Please make sure to add tests or get an explicit test exemption before merging.

If you are not sure if you need tests, consider this rule of thumb: the purpose of a test is to make sure someone doesn't accidentally revert the fix. Ask yourself, is there anything in your PR that you feel it is important we not accidentally revert back to how it was before your fix?

Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing. If you believe this PR qualifies for a test exemption, contact "@test-exemption-reviewer" in the #hackers channel in Discord (don't just cc them here, they won't see it!). The test exemption team is a small volunteer group, so all reviewers should feel empowered to ask for tests, without delegating that responsibility entirely to the test exemption group.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request introduces the FLUTTER_HOST_ARCH environment variable to override host architecture detection in both the Windows PowerShell and Unix shell scripts for updating the Dart SDK. The review feedback suggests normalizing the architecture string to lowercase and mapping alternative architecture names (such as aarch64) to ensure robust and consistent architecture matching across different environments.

Comment thread bin/internal/update_dart_sdk.sh
Comment thread bin/internal/update_dart_sdk.ps1
@cbracken

cbracken commented Aug 3, 2026

Copy link
Copy Markdown
Member Author

@stuartmorgan-g

Copy link
Copy Markdown
Contributor

test-exempt: groundwork for follow-up containing tests.

@jtmcdole jtmcdole left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

video_1785183269211902_480

@cbracken
cbracken added this pull request to the merge queue Aug 3, 2026
Merged via the queue into flutter:master with commit 86abb60 Aug 3, 2026
22 checks passed
@cbracken
cbracken deleted the migrate-arm64-update_dart_sdk branch August 3, 2026 21:34
auto-submit Bot pushed a commit to flutter/packages that referenced this pull request Aug 10, 2026
…12406)

Manual roll Flutter from e52f01c920ad to b766512c65d8 (42 revisions)

Manual roll requested by stuartmorgan@google.com

flutter/flutter@e52f01c...b766512

2026-08-04 engine-flutter-autoroll@skia.org Roll Dart SDK from 2a799a2404e9 to 9859c0a39adb (4 revisions) (flutter/flutter#190521)
2026-08-04 154381524+flutteractionsbot@users.noreply.github.com Revert: iOS: Eliminate use of IOSContextNoop in platform view tests (flutter/flutter#190501)
2026-08-04 125822178+guszxtavo@users.noreply.github.com [Impeller] Enable ETC2/ASTC LDR/BC texture compression features at Vulkan device creation (flutter/flutter#189303)
2026-08-03 30870216+gaaclarke@users.noreply.github.com Remove openglessdf from impeller_unittests. (flutter/flutter#190469)
2026-08-03 1961493+harryterkelsen@users.noreply.github.com [web] Unify image decoding and codecs on CanvasKit and Skwasm (flutter/flutter#188573)
2026-08-03 chris@bracken.jp iOS: Eliminate use of IOSContextNoop in platform view tests (flutter/flutter#190419)
2026-08-03 evanwall@buffalo.edu Add path rendering benchmarks (flutter/flutter#188654)
2026-08-03 97480502+b-luk@users.noreply.github.com Add windows platform support for primitive_shape_test integration test (flutter/flutter#190464)
2026-08-03 engine-flutter-autoroll@skia.org Roll Skia from 958c1c1921a1 to a08d918ebd6a (3 revisions) (flutter/flutter#190467)
2026-08-03 chris@bracken.jp tests: add --ios-runtime param (flutter/flutter#190414)
2026-08-03 chris@bracken.jp iOS: Remove the synchronous first-frame wait (flutter/flutter#190432)
2026-08-03 chris@bracken.jp iOS: Eliminate the Impeller/Skia backend selection params (flutter/flutter#190416)
2026-08-03 chris@bracken.jp iOS,macOS: Use @autoclosure in Logger (flutter/flutter#190417)
2026-08-03 chris@bracken.jp tools: Support FLUTTER_HOST_ARCH in update_dart_sdk scripts (flutter/flutter#190421)
2026-08-03 chris@bracken.jp iOS: Hardcode rendering API to Metal in tests (no-op) (flutter/flutter#190422)
2026-08-03 chris@bracken.jp a11y: Map disabled/read-only semantics to AX node restriction (flutter/flutter#190353)
2026-08-03 kevmoo@users.noreply.github.com [Infra] Replace defunct umbrella template with Wasm issue form (flutter/flutter#190471)
2026-08-03 engine-flutter-autoroll@skia.org Roll Skia from abecb0dc02c1 to 958c1c1921a1 (4 revisions) (flutter/flutter#190459)
2026-08-03 engine-flutter-autoroll@skia.org Roll Dart SDK from 65b163be2485 to 2a799a2404e9 (3 revisions) (flutter/flutter#190454)
2026-08-03 engine-flutter-autoroll@skia.org Roll Skia from 68efb3f2ad16 to abecb0dc02c1 (1 revision) (flutter/flutter#190443)
2026-08-03 engine-flutter-autoroll@skia.org Roll Packages from 5351d8c to ac87e65 (4 revisions) (flutter/flutter#190441)
2026-08-03 engine-flutter-autoroll@skia.org Roll Skia from 5a761eb826c1 to 68efb3f2ad16 (1 revision) (flutter/flutter#190440)
2026-08-03 engine-flutter-autoroll@skia.org Roll Skia from 4c9f8b4805e2 to 5a761eb826c1 (1 revision) (flutter/flutter#190437)
2026-08-03 ellie@edencrew.com [macOS] Resume app lifecycle on becomeActive to avoid frozen UI after occlusion (flutter/flutter#188772)
2026-08-03 engine-flutter-autoroll@skia.org Roll Skia from 39cda9d6d7d2 to 4c9f8b4805e2 (6 revisions) (flutter/flutter#190426)
2026-08-03 engine-flutter-autoroll@skia.org Roll Skia from df13bfb5a54e to 39cda9d6d7d2 (2 revisions) (flutter/flutter#190425)
2026-08-02 chris@bracken.jp iOS: Serialise CADisplayLink access in VSyncClient tests (flutter/flutter#190335)
2026-08-02 engine-flutter-autoroll@skia.org Roll Skia from 32329e5643b5 to df13bfb5a54e (1 revision) (flutter/flutter#190394)
2026-08-02 bdero@google.com [Impeller] Skip binding dead-code-eliminated resources on Metal (flutter/flutter#190040)
2026-08-01 bdero@google.com [Flutter GPU] Raise Dart errors for invalid render pipelines and memoize per-draw pipeline state (flutter/flutter#189899)
2026-08-01 41930132+hellohuanlin@users.noreply.github.com Revert "Improve non rect platform view rendering  (#182662)" (flutter/flutter#190003)
2026-08-01 engine-flutter-autoroll@skia.org Roll Skia from ebf50520d720 to 32329e5643b5 (1 revision) (flutter/flutter#190389)
2026-08-01 engine-flutter-autoroll@skia.org Roll Skia from f73c4510d12d to ebf50520d720 (6 revisions) (flutter/flutter#190376)
2026-07-31 97480502+b-luk@users.noreply.github.com Primitive shape integration test (flutter/flutter#190368)
2026-07-31 97480502+b-luk@users.noreply.github.com Eliminate some early returns in uber_sdf.frag to fix broken UberSDF AA on Windows (flutter/flutter#190260)
2026-07-31 codefu@google.com chore: swiftshader mirrored + llvm16 (flutter/flutter#181225)
2026-07-31 1961493+harryterkelsen@users.noreply.github.com [web] Remove in-repo agent documentation (flutter/flutter#190326)
2026-07-31 30870216+gaaclarke@users.noreply.github.com [windows]: Uses offscreen MSAA when implicit msaa isn't available. (flutter/flutter#190256)
2026-07-31 srawlins@google.com flutter_tools: Use new FileSystemExtension from devtools (flutter/flutter#190360)
2026-07-31 engine-flutter-autoroll@skia.org Roll Dart SDK from c3acfc2479f6 to 65b163be2485 (1 revision) (flutter/flutter#190358)
2026-07-31 magder@google.com Use devicectl for screenshots on Xcode 27, remove idevicescreenshot artifact (flutter/flutter#189091)
2026-07-31 engine-flutter-autoroll@skia.org Roll Skia from 7ef86a5b0eb9 to f73c4510d12d (1 revision) (flutter/flutter#190352)

If this roll has caused a breakage, revert this CL and stop the roller
...
cbracken added a commit to cbracken/flutter that referenced this pull request Aug 11, 2026
Adds a `--target_arch=<x64|arm64>` option to
`dev/bots/prepare_package.dart` to support cross-packaging SDK archives
for a target architecture different from the host architecture.

When target arch is specified, we set `FLUTTER_HOST_ARCH` in the
environment of each subprocess spawned by the packaging script. This is
picked up by `update_dart_sdk.sh` and `update_dart_sdk.ps1` when
choosing which Dart SDK to download, and by
`OperatingSystemUtils.hostPlatform` when the tool picks which host
engine artifacts to cache. Those run from `bin/flutter` before the
flutter tool exists, so the environment is the only means we have to
pass this setting.

This patch allows arm64 macOS CI hosts to download and cache x64 host
engine artifacts when cross-packaging x64 Flutter SDK release archives
on an arm64 host (or theoretically vice-versa, but we'll never do that)
in the `packaging/packaging` recipe in `packaging.py`.

It's worth noting that the scripts and tool this drives are the ones in
the branch being packaged, not the ones this script was run from, so
`--target_arch` depends on that branch having cherry-picks to handle
both `FLUTTER_HOST_ARCH` support in
`bin/internal/update_dart_sdk.{sh,ps1}` (flutter#190421) and the `--host-arch`
option of `flutter precache` (flutter#190480).

See: https://flutter.googlesource.com/recipes/+/refs/heads/main/recipes/packaging/packaging.py

Issue: flutter#189144
pull Bot pushed a commit to ZainCheung/flutter that referenced this pull request Aug 12, 2026
)

Adds a `--target_arch=<x64|arm64>` option to
`dev/bots/prepare_package.dart` to support cross-packaging SDK archives
for a target architecture different from the host architecture.

When target arch is specified, we set `FLUTTER_HOST_ARCH` in the
environment of each subprocess spawned by the packaging script. This is
picked up by `update_dart_sdk.sh` and `update_dart_sdk.ps1` when
choosing which Dart SDK to download, and by
`OperatingSystemUtils.hostPlatform` when the tool picks which host
engine artifacts to cache. Those run from `bin/flutter` before the
flutter tool exists, so the environment is the only means we have to
pass this setting.

This patch allows arm64 macOS CI hosts to download and cache x64 host
engine artifacts when cross-packaging x64 Flutter SDK release archives
on an arm64 host (or theoretically vice-versa, but we'll never do that)
in the `packaging/packaging` recipe in `packaging.py`.

It's worth noting that the scripts and tool this drives are the ones in
the branch being packaged, not the ones this script was run from, so
`--target_arch` depends on that branch having cherry-picks to handle
both `FLUTTER_HOST_ARCH` support in
`bin/internal/update_dart_sdk.{sh,ps1}` (flutter#190421) and the `--host-arch`
option of `flutter precache` (flutter#190480).

See:
https://flutter.googlesource.com/recipes/+/refs/heads/main/recipes/packaging/packaging.py

Issue: flutter#189144

<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->

## Pre-launch Checklist

- [X] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [X] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [X] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [X] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [X] I signed the [CLA].
- [X] I listed at least one issue that this PR fixes in the description
above.
- [X] I updated/added relevant documentation (doc comments with `///`).
- [X] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [X] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [X] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

If this change needs to override an active code freeze, provide a
comment explaining why. The code freeze workflow can be overridden by
code reviewers. See pinned issues for any active code freezes with
guidance.

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CICD Run CI/CD

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants