53 Commits

Author SHA1 Message Date
John "codefu" McDole
41a1df2a1b
fix: missing MSVC 2022 (#180661)
codefu wins the shamecube award for bad python.

Tested on windows 11 enterprise + vc 2022:

```shell
Searching for installed Visual Studio versions: 2019, 2017, 2022, 2026, 16.0, 15.0, 17.0, 18
vs_path = "C:\\Program Files/Microsoft Visual Studio/2022/Community"
sdk_path = "C:\\Program Files (x86)\\Windows Kits\\10"
vs_version = "2022"
wdk_dir = ""
runtime_dirs = "C:\\Windows\\System32;C:\\Windows\\SysWOW64;Arm64Unused"
```

fixes #180660
2026-01-08 00:15:02 +00:00
Slava Egorov
6acc84ee2c
Bump target Windows version to 10 (#180624)
Based on https://docs.flutter.dev/reference/supported-platforms Flutter
only supports Windows 10 or above.

This makes Flutter buildroot configuration match Dart's.
2026-01-07 16:52:26 +00:00
Gray Mackall
ef3dbceed2
Modify the create_cipd_packages.sh script to allow uploading multiple build-tools versions, and update to new bundle (#179963)
1. modifies the script slightly to allow passing in multiple versions
for a given element
2. updates to build tools 36.1.0, and adds 35.0.0 and 34.0.0
3. also adds cmake to the list, version 3.22.1, as that downloaded in
our ci currently
4. changes ci yaml and deps file accordingly

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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 `///`).
- [ ] 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].

**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
[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

---------

Co-authored-by: Gray Mackall <mackall@google.com>
2025-12-17 18:14:14 +00:00
Gray Mackall
91cc68f695
[Reland] Unmodified android sdk bundle (#179920)
Relands https://github.com/flutter/flutter/pull/179647

There were only two failing tests (there were also two bringup failures,
the `mac_arm64_mokey` versions of these)

https://ci.chromium.org/ui/p/flutter/builders/prod/Mac_mokey%20run_release_test/3866/overview

https://ci.chromium.org/ui/p/flutter/builders/prod/Mac_mokey%20run_debug_test_android/5454/overview

They failed with the same logs
```
Task result:
{
  "success": false,
  "reason": "Task failed: flutter run  had unexpected output on standard error."
}
```

The stderr in question:
```
[2025-12-15 14:06:56.311794] [STDOUT] run:stderr: - integration_test requires Android NDK 28.2.13676358
[2025-12-15 14:06:56.311989] [STDOUT] run:stderr: Fix this issue by using the highest Android NDK version (they are backward compatible).
[2025-12-15 14:06:56.312019] [STDOUT] run:stderr: Add the following to /opt/s/w/ir/x/w/rc/tmpr6kj09d_/flutter sdk/dev/integration_tests/ui/android/app/build.gradle:
[2025-12-15 14:06:56.312074] [STDOUT] run:stderr: 
[2025-12-15 14:06:56.312092] [STDOUT] run:stderr:     android {
[2025-12-15 14:06:56.312144] [STDOUT] run:stderr:         ndkVersion = "28.2.13676358"
[2025-12-15 14:06:56.312162] [STDOUT] run:stderr:         ...
[2025-12-15 14:06:56.312205] [STDOUT] run:stderr:     }
```

We can just set the ndk version to `flutter.ndkVersion`, which is this
value. It's also what is set in the templates, so it isn't a hack that
doesn't represent a real flutter app. Verified the tests pass now with
```
../../bin/cache/dart-sdk/bin/dart bin/test_runner.dart test -t run_release_test
../../bin/cache/dart-sdk/bin/dart bin/test_runner.dart test -t run_debug_test_android
```

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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].

**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
[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

---------

Co-authored-by: Gray Mackall <mackall@google.com>
2025-12-16 19:34:38 +00:00
auto-submit[bot]
8edbbb7391
Reverts "Unmodified android sdk bundle (#179647)" (#179904)
<!-- start_original_pr_link -->
Reverts: flutter/flutter#179647
<!-- end_original_pr_link -->
<!-- start_initiating_author -->
Initiated by: gmackall
<!-- end_initiating_author -->
<!-- start_revert_reason -->
Reason for reverting: Mac_mokey run_release_test failing
<!-- end_revert_reason -->
<!-- start_original_pr_author -->
Original PR Author: gmackall
<!-- end_original_pr_author -->

<!-- start_reviewers -->
Reviewed By: {reidbaker, jtmcdole}
<!-- end_reviewers -->

<!-- start_revert_body -->
This change reverts the following previous change:
Changes our cipd hosted android sdk+ndk bundle to no longer modify
directory structure from what Android directly provides, allowing AGP to
find the ndk automatically and preventing downloading.

1. Changes the `create_cipd_packages.sh` script so we don't move the ndk
2. Uses the new script to upload a
[36v4unmodified](https://chrome-infra-packages.appspot.com/p/flutter/android/sdk/all/linux-amd64/+/version:36v4unmodified)
bundle
3. Changes DEPS+ci.yaml to reference the new bundle
4. Changes GN build rules accordingly
5. Removes special config in existing build.gradle files to point at the
location of the ndk - agp should now know where it is without conig
6. For some tests, passes in an environment variable pointing to the ndk
location, to override the environment variable passed by the recipes.
This variable is respected by the tool, so the recipes passing it,
pointing to the wrong place, is problematic. After this change lands we
can stop passing it in the recipes, and then we can remove this special
config in the tests. But adding it temporarily allows us to make this
change without coordinating a recipes change at the same moment, and
probably breaking things out of band.

Logs from a random postsubmit run of `Mac
build_android_host_app_with_module_aar` on the tree currently:

https://logs.chromium.org/logs/flutter/buildbucket/cr-buildbucket/8695664517253382913/+/u/run_build_android_host_app_with_module_aar/stdout
We see 
> [2025-12-12 10:49:49.223087] [STDOUT] stdout: Checking the license for
package NDK (Side by side) 28.2.13676358 in
/Volumes/Work/s/w/ir/cache/android/sdk/licenses
[2025-12-12 10:49:49.223221] [STDOUT] stdout: License for package NDK
(Side by side) 28.2.13676358 accepted.
[2025-12-12 10:49:49.223268] [STDOUT] stdout: Preparing "Install NDK
(Side by side) 28.2.13676358 v.28.2.13676358".
[2025-12-12 10:50:14.093824] [STDOUT] stdout: "Install NDK (Side by
side) 28.2.13676358 v.28.2.13676358" ready.
[2025-12-12 10:50:14.093909] [STDOUT] stdout: Installing NDK (Side by
side) 28.2.13676358 in
/Volumes/Work/s/w/ir/cache/android/sdk/ndk/28.2.13676358
[2025-12-12 10:50:14.093947] [STDOUT] stdout: "Install NDK (Side by
side) 28.2.13676358 v.28.2.13676358" complete.
[2025-12-12 10:50:14.410724] [STDOUT] stdout: "Install NDK (Side by
side) 28.2.13676358 v.28.2.13676358" finished.

Example of no longer downloading:
Logs from a presubmit run:

https://logs.chromium.org/logs/flutter/buildbucket/cr-buildbucket/8695732180931529361/+/u/run_build_android_host_app_with_module_aar/stdout

We don't see these logs. We still see android build tools downloading -
we can probably tackle that in another pr.

## Pre-launch Checklist

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

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

**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
[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

<!-- end_revert_body -->

Co-authored-by: auto-submit[bot] <flutter-engprod-team@google.com>
2025-12-15 21:55:49 +00:00
Gray Mackall
c0b808c9ed
Unmodified android sdk bundle (#179647)
Changes our cipd hosted android sdk+ndk bundle to no longer modify
directory structure from what Android directly provides, allowing AGP to
find the ndk automatically and preventing downloading.

1. Changes the `create_cipd_packages.sh` script so we don't move the ndk
2. Uses the new script to upload a
[36v4unmodified](https://chrome-infra-packages.appspot.com/p/flutter/android/sdk/all/linux-amd64/+/version:36v4unmodified)
bundle
3. Changes DEPS+ci.yaml to reference the new bundle
4. Changes GN build rules accordingly
5. Removes special config in existing build.gradle files to point at the
location of the ndk - agp should now know where it is without conig
6. For some tests, passes in an environment variable pointing to the ndk
location, to override the environment variable passed by the recipes.
This variable is respected by the tool, so the recipes passing it,
pointing to the wrong place, is problematic. After this change lands we
can stop passing it in the recipes, and then we can remove this special
config in the tests. But adding it temporarily allows us to make this
change without coordinating a recipes change at the same moment, and
probably breaking things out of band.

Logs from a random postsubmit run of `Mac
build_android_host_app_with_module_aar` on the tree currently:

https://logs.chromium.org/logs/flutter/buildbucket/cr-buildbucket/8695664517253382913/+/u/run_build_android_host_app_with_module_aar/stdout
We see 
> [2025-12-12 10:49:49.223087] [STDOUT] stdout: Checking the license for
package NDK (Side by side) 28.2.13676358 in
/Volumes/Work/s/w/ir/cache/android/sdk/licenses
[2025-12-12 10:49:49.223221] [STDOUT] stdout: License for package NDK
(Side by side) 28.2.13676358 accepted.
[2025-12-12 10:49:49.223268] [STDOUT] stdout: Preparing "Install NDK
(Side by side) 28.2.13676358 v.28.2.13676358".
[2025-12-12 10:50:14.093824] [STDOUT] stdout: "Install NDK (Side by
side) 28.2.13676358 v.28.2.13676358" ready.
[2025-12-12 10:50:14.093909] [STDOUT] stdout: Installing NDK (Side by
side) 28.2.13676358 in
/Volumes/Work/s/w/ir/cache/android/sdk/ndk/28.2.13676358
[2025-12-12 10:50:14.093947] [STDOUT] stdout: "Install NDK (Side by
side) 28.2.13676358 v.28.2.13676358" complete.
[2025-12-12 10:50:14.410724] [STDOUT] stdout: "Install NDK (Side by
side) 28.2.13676358 v.28.2.13676358" finished.

Example of no longer downloading:
Logs from a presubmit run:

https://logs.chromium.org/logs/flutter/buildbucket/cr-buildbucket/8695732180931529361/+/u/run_build_android_host_app_with_module_aar/stdout

We don't see these logs. We still see android build tools downloading -
we can probably tackle that in another pr.

## Pre-launch Checklist

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

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

**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
[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

---------

Co-authored-by: DoLT <dolt@guide.inc>
Co-authored-by: Gray Mackall <mackall@google.com>
Co-authored-by: John "codefu" McDole <john@mcdole.org>
2025-12-15 20:18:31 +00:00
Mohellebi abdessalem
a588c85d8d
Bump minSdk to 24 in engine (#175508)
Relands #175278
this PR bumps used minSdk version in the `engine` to `24` .

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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] All existing and new tests are passing.
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [ ] I listed at least one issue that this PR fixes in the description
above.
- [ ] I updated/added relevant documentation (doc comments with `///`).
- [ ] I added new tests to check the change I am making, or this PR is
[test-exempt].

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

**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
[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

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: StepSecurity Bot <bot@stepsecurity.io>
Signed-off-by: jwlilly <lilly.john.w@gmail.com>
Signed-off-by: huycozy <huy@nevercode.io>
Co-authored-by: engine-flutter-autoroll <engine-flutter-autoroll@skia.org>
Co-authored-by: Matthew Kosarek <matt.kosarek@canonical.com>
Co-authored-by: Abdelaziz Mahdy <zezohassam@gmail.com>
Co-authored-by: Victoria Ashworth <15619084+vashworth@users.noreply.github.com>
Co-authored-by: Kate Lovett <katelovett@google.com>
Co-authored-by: Reid Baker <1063596+reidbaker@users.noreply.github.com>
Co-authored-by: Ben Konyi <bkonyi@google.com>
Co-authored-by: Flop <38378650+hgraceb@users.noreply.github.com>
Co-authored-by: Victor Sanni <victorsanniay@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: gaaclarke <30870216+gaaclarke@users.noreply.github.com>
Co-authored-by: Slava Egorov <vegorov@google.com>
Co-authored-by: Flutter GitHub Bot <fluttergithubbot@gmail.com>
Co-authored-by: Elijah Okoroh <okorohelijah@google.com>
Co-authored-by: Bruno Leroux <bruno.leroux@gmail.com>
Co-authored-by: LongCatIsLooong <31859944+LongCatIsLooong@users.noreply.github.com>
Co-authored-by: zhongliugo <zhongliu88889@gmail.com>
Co-authored-by: auto-submit[bot] <98614782+auto-submit[bot]@users.noreply.github.com>
Co-authored-by: auto-submit[bot] <flutter-engprod-team@google.com>
Co-authored-by: Loïc Sharma <737941+loic-sharma@users.noreply.github.com>
Co-authored-by: Felipe Peter <mr-peipei@web.de>
Co-authored-by: Daco Harkes <dacoharkes@google.com>
Co-authored-by: Ahmed Mohamed Sameh <ahmedsameha1@gmail.com>
Co-authored-by: Simon Binder <simon@journeyapps.com>
Co-authored-by: ANUJ KUMAR <77888283+shivanuj13@users.noreply.github.com>
Co-authored-by: anuj.kumar <anuj.kumar@powerup.money>
Co-authored-by: Michael Goderbauer <goderbauer@google.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Pierre <6655696+guidezpl@users.noreply.github.com>
Co-authored-by: StepSecurity Bot <bot@stepsecurity.io>
Co-authored-by: Pierre-Louis <plg@google.com>
Co-authored-by: Zachary Anderson <zanderso@users.noreply.github.com>
Co-authored-by: bungeman <bungeman@chromium.org>
Co-authored-by: jesswrd <jesswon@google.com>
Co-authored-by: John Lilly <31510811+jwlilly@users.noreply.github.com>
Co-authored-by: Camille Simon <43054281+camsim99@users.noreply.github.com>
Co-authored-by: b-luk <97480502+b-luk@users.noreply.github.com>
Co-authored-by: flutter-pub-roller-bot <137456488+flutter-pub-roller-bot@users.noreply.github.com>
Co-authored-by: Michel Feinstein <feinstein@users.noreply.github.com>
Co-authored-by: Matej Knopp <matej.knopp@gmail.com>
Co-authored-by: Tess Strickland <sstrickl@google.com>
Co-authored-by: Huy <huy@nevercode.io>
Co-authored-by: Kostia Sokolovskyi <sokolovskyi.konstantin@gmail.com>
Co-authored-by: LouiseHsu <louisehsu@google.com>
Co-authored-by: Mouad Debbar <mdebbar@google.com>
Co-authored-by: Tim Maffett <timmaffett@gmail.com>
Co-authored-by: Aaron Clarke <aaclarke@google.com>
Co-authored-by: Renzo Olivares <rmolivares@renzo-olivares.dev>
Co-authored-by: Renzo Olivares <roliv@google.com>
Co-authored-by: Nebojša Cvetković <nebkat@gmail.com>
Co-authored-by: Tirth <pateltirth454@gmail.com>
Co-authored-by: Ivan Inozemtsev <iinozemtsev@google.com>
Co-authored-by: Jason Simmons <jason-simmons@users.noreply.github.com>
Co-authored-by: Nicholas Shahan <nshahan@google.com>
Co-authored-by: Jon Ihlas <jon.i@hotmail.fr>
Co-authored-by: Robert Ancell <robert.ancell@canonical.com>
Co-authored-by: Harry Terkelsen <1961493+harryterkelsen@users.noreply.github.com>
Co-authored-by: Jackson Gardner <jacksongardner@google.com>
Co-authored-by: Jim Graham <flar@google.com>
Co-authored-by: DoLT <dolt@guide.inc>
Co-authored-by: Kevin Moore <kevmoo@users.noreply.github.com>
Co-authored-by: John "codefu" McDole <codefu@google.com>
Co-authored-by: Dev TtangKong <ttankkeo112@gmail.com>
Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
Co-authored-by: Matt Boetger <matt.boetger@gmail.com>
Co-authored-by: Kaylee Lubick <kjlubick@users.noreply.github.com>
Co-authored-by: Ramon Farizel <45459898+RamonFarizel@users.noreply.github.com>
Co-authored-by: chunhtai <47866232+chunhtai@users.noreply.github.com>
Co-authored-by: Lau Ching Jun <chingjun@google.com>
Co-authored-by: Rusino <Rusino@users.noreply.github.com>
Co-authored-by: Reid Baker <reidbaker@google.com>
2025-12-15 14:44:07 +00:00
John "codefu" McDole
00c4c2aeda
fix: fresh install of windows support (#179720)
- python 3.14 (pipes -> shlex)
- content_aware_hash.ps1 call from gn
- visual studio 2026 (MS changed directory naming)
2025-12-11 18:58:27 +00:00
Jackson Gardner
e0f544bf62
[wimp] Initial Impeller on Web implementation. (#175442)
This PR adds an initial implementation of a impeller-based version of
skwasm. As of right now, the main things that are missing are:
* Image support https://github.com/flutter/flutter/issues/175371
* Custom shader support https://github.com/flutter/flutter/issues/175431
* Turn on MSAA https://github.com/flutter/flutter/issues/175441
* Multithreading is turned off
https://github.com/flutter/flutter/issues/178749

I plan on implementing these in smaller followup PRs.

Towards https://github.com/flutter/flutter/issues/174980
2025-12-09 20:50:23 +00:00
bungeman
144af688e0
Move target_cpu into use_rbe block in Fuchsia build (#179458)
The `target_cpu` local is only used if `use_rbe` is true. Move its
definition into the `use_rbe` block to avoid local build issues like

```
$ ninja -C engine/src/out/ci/fuchsia_debug_arm64
ERROR at //build/toolchain/fuchsia/BUILD.gn:13:19: Assignment had no effect.
  target_triple = "aarch64-unknown-fuchsia"
                  ^------------------------
You set the variable "target_triple" here and it was unused before it went
out of scope.
```
2025-12-05 14:05:08 +00:00
Gray Mackall
0cc0f7744e
Fix no op host debug builds doing work (#178077)
Fixes https://github.com/flutter/flutter/issues/176667

I don't really know what I'm doing here, but as far as I can tell from:

https://github.com/swiftlang/swift/blob/main/docs/Driver.md#output-file-maps
the swift dependencies file is only output for incremental builds, not
builds with whole module optimization enabled.

> "swift-dependencies" entries are required to perform incremental
builds (see below).

This would align with the logs from that issue saying the file is
missing every time (because it is never output in the first place). So
try simply removing it? Fixes the issue for me locally

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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].
- [ ] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [ ] 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.
- [ ] All existing and new tests are passing.

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

**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
[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

---------

Co-authored-by: Gray Mackall <mackall@google.com>
2025-11-10 21:26:18 +00:00
Zachary Anderson
590a783995
[engine,build] Fix Fuchsia RBE build (#177865)
As in the Dart build here:


fc8b3d7927/build/toolchain/fuchsia/fuchsia_toolchain.gni (L24)

For unknown reasons, the `__config_site` file has to be explicitly
listed as an input to the build to ensure it is available in the RBE
workers.

This PR also cleans up unnecessary flags from the Fuchsia toolchain
definition. The target triple and sysroot flags are already injected
into the compiler flags by the Fuchsia build configs.

linux_fuchsia presub ran in 16 minutes.
2025-11-02 00:05:24 +00:00
Andrew Marshall
e0ff789894
add gn flag to optimize builds for size (#176835)
<!--
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
-->

Adds a `gn` flag to optimize builds for size over speed when
optimization is requested. The existing behaviour is that Windows,
Android and iOS builds are always optimized for size. This has not
changed.

The flag allows other builds to prefer size over speed.

Closes #176685 

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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 `///`).


<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[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
2025-10-27 21:47:02 +00:00
Jason Simmons
67068ee0fe
Roll Abseil to Chromium's 5b92b04a2e (based on Abseil commit fc4481e968) (#177059)
This also moves the Abseil sources from //flutter/third_party to
//third_party to allow use of Chromium's GN scripts without
modification.

See internal issue b/400498305
2025-10-24 14:22:29 +00:00
Jason Simmons
3f76120031
Move the Fuchsia SDK to //third_party/fuchsia-sdk (#177118)
The //third_party/fuchsia-sdk path is expected by the build scripts for
other packages in the Chromium tree such as Abseil.
2025-10-20 22:37:01 +00:00
Jason Simmons
55712c460f
Roll ANGLE to a branch based on d9fa255a5c22 (#176747)
See https://github.com/flutter/flutter/issues/174665
2025-10-14 16:15:12 +00:00
Jason Simmons
003eb6523c
Roll vulkan-deps to a9e2ca3b (#176322)
The build script for this version of the Vulkan headers defines
VK_USE_PLATFORM_XLIB_KHR. This brings in some X11 headers that define
macros with commonly used names.

Files that include Vulkan headers may need to undefine some of these
macros to prevent conflicts with other code that uses the same names.
2025-10-06 14:28:11 +00:00
markyang92
c088bcd17b
BUILD.gn: Support LTO build on Linux (#176191)
Add support for LTO builds on Linux.

<!--
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
-->

*Replace this paragraph with a description of what this PR is changing
or adding, and why. Consider including before/after screenshots.*

*List which issues are fixed by this PR. You must list at least one
issue. An issue is not required if the PR fixes something trivial like a
typo.*

*If you had to change anything in the [flutter/tests] repo, include a
link to the migration guide as per the [breaking change policy].*

## Pre-launch Checklist

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

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

**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
[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


---

- Enable LTO on Linux.
- Build test
  - I validated the build in the Yocto build system using meta-flutter

# Build before modification.
```bash
# clone poky
$ source oe-init-build-env
$ echo "MACHINE = \"genericarm64\"" >> build/conf/local.conf

# clone meta-flutter. 
$ git clone https://github.com/meta-flutter/meta-flutter.git
# Added meta-oe and meta-flutter to BBLAYERS in build/conf/bblayers.conf
$ bitbake flutter-engine

# Check whether LTO has been applied in compile_commands.json
$ cat build/tmp/work/armv8a-poky-linux/flutter-engine/3.32.8/sources/gn/engine/src/out/linux_debug_arm64/compile_commands.json | grep "\-flto"

..nothing
```

# Build after modification.
```
# checkout modified meta-flutter  a901568da3
$ cd meta-flutter
$ git remote add markyang92 https://github.com/markyang92/meta-flutter.git
$ git fetch markyang92 a901568da38de2ad3c8a176311b86d8e0f2bb1c1
$ git cherry-pick FETCH_HEAD
$ cd ..

$ bitbake flutter-engine

# Check whether LTO has been applied in compile_commands.json
$ cat build/tmp/work/armv8a-poky-linux/flutter-engine/3.32.8/sources/gn/engine/src/out/linux_debug_arm64/compile_commands.json | grep "\-flto"
    "command": ".....clang++ ... Omitted .. \
 -flto ..... \
-g0 -Wunreachable-code  -fvisibility-inlines-hidden -std=c++17 -fno-rtti -nostdinc++ -nostdinc++ -fvisibility=hidden -fno-exceptions   -c ../../flutter/fml/string_conversion.cc -o  clang_x64/obj/flutter/fml/string_conversion.string_conversion.o"
```
2025-09-29 21:04:58 +00:00
jesswrd
5d00bf8e6b
Update Engine CI to use NDK r28c (#175870)
After uploading a revision of Android 36 SDK (36v3) to CIPD, I am
updating Engine CI to test against 36v3.

super fun: There is a new Android header in 28rc ndk (a part of 36v3)
`AHARDWAREBUFFER_FORMAT_YCbCr_P210`
[here](https://cs.android.com/android/platform/superproject/main/+/main:frameworks/native/libs/nativewindow/include/android/hardware_buffer.h;l=178-183?q=libs%2Fnativewindow%2Finclude%2Fandroid%2Fhardware_buffer.h)
that did not exist in the 27 ndk version (a part of 36v2). Confirmed by
downloading both 36v2 and 36v3 from CIPD and checking
`hardware.buffer.h`.

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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.
- [ ] All existing and new tests are passing.

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

**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
[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
2025-09-29 17:09:04 +00:00
Ryan Macnak
ad354afb3a
Update Chromium sysroot to pick up RISC-V support. (#173671)
Bug: https://github.com/flutter/flutter/issues/99963
2025-09-15 19:18:16 +00:00
hellohuanlin
edbc5ca18e
[ios26]fix host engine compile error (#174723)
## What it does

This adds `-plugin-path` flag to `swiftc` cmd to fix a compile error
related to missing swift plugin. The plugin is under
`mac_host_toolchain_path`, which is only available on macs. However, we
only build mac host engine on macs, so we are good.

## About unit test

This swiftc.py file currently has no test coverage, but it should - I
filed https://github.com/flutter/flutter/issues/174843. However, given
there's a big fire (https://github.com/flutter/flutter/issues/174513)
going on, and we are approaching iOS 26 release, I have to prioritize
that one.

I will manually verify the solution. 

*List which issues are fixed by this PR. You must list at least one
issue. An issue is not required if the PR fixes something trivial like a
typo.*

Fixes https://github.com/flutter/flutter/issues/172155


*If you had to change anything in the [flutter/tests] repo, include a
link to the migration guide as per the [breaking change policy].*

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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.
- [ ] I updated/added relevant documentation (doc comments with `///`).
- [ ] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [ ] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [ ] All existing and new tests are passing.

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

**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
[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
2025-09-05 17:45:08 +00:00
Chinmay Garde
1091786642
Fixup formatting of gn files in the old buildroot. (#174852)
`git ls-files "*.gn*" | xargs ./flutter/third_party/gn/gn format`

We already seem to enforce GN format on pull-requests. These seem to old
files in the buildroot no one has touched in a while.
2025-09-03 17:36:06 +00:00
Chinmay Garde
c6f2de7aba
Build engine TUs with C++20. (#174471)
The changes:

* Creating a bit-mask with different enum values is now a warning. Fixed
offending instances.
* `char8_t` is a different type. Fixed those instances.
* Disabling modules in Objective-C requires bypassing the driver.
* Aggregate initialization fails when there are other constructors for
structs. Added explicit constructors.
* `gn format` doesn't seem to be run on erstwhile buildroot GN files.
Fixes the formatting. But can back this out since it is technically
unrelated to C++20.
2025-09-02 18:31:21 +00:00
Jackson Gardner
3340caed81
[skwasm] Port to DisplayList objects (#172314)
This PR refactors the skwasm renderer to use `DisplayList` objects as
its main model objects instead of using Skia objects directly. Then, at
render time, we dispatch the display list commands to the skia surface.
This is a preparatory step for impeller on web.
* Some build rules were reworked in order to allow `DisplayList` to
compile via emscripten
* Some pieces of the display list library were further refactored to
allow us to compile it without actually building and linking the
impeller shaders. The two major classes that needed to be separated out
were `DlRuntimeEffect` and the text drawing system.
* `SkPath` and `SkImage` are still used as the main model objects in
skwasm. As of right now, `DisplayList` just thinly wraps these objects,
so this is the minimal possible change for now. I will have to refactor
this somewhat further when preparing for actual impeller adoption.
* Several special cased code paths in skwasm were removed, as they are
taken care of by `DisplayList` itself. This includes shadow drawing,
determining when to enable dithering, and determining the right clamp
value for filters.
2025-08-25 16:08:33 +00:00
Ryan Macnak
00590369f7
Engine build setup for Android RISCV64. (#173672)
Bug: https://github.com/flutter/flutter/issues/117973
2025-08-20 21:50:51 +00:00
Jason Simmons
f45a8f8b71
Roll Clang to 8c7a2ce01a77c96028fe2c8566f65c45ad9408d3 (#173429)
This version is currently used by Dart.
2025-08-12 17:21:53 +00:00
gaaclarke
bd542bb687
licenses_cpp: reland switch 4 (#173139)
Let's give this one more go, otherwise we'll have to switch to
downloading a prebuilt binary.

## whats new since revert

I've added `is_minimal_linux` flag which removes targets that can't be
processed by GN on the autoroller image. The linux bot has been changed
to use that flag too.

## testing

I got access to the docker image of the autoroller bots and manually
tested that this works.

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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].

**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
[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

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-04 17:37:29 +00:00
Mohellebi abdessalem
9ba6aafb94
remove x86 in BUILD.gn (#170965)
based on [this
comment](https://github.com/flutter/flutter/pull/170191#pullrequestreview-2910139454)
Towards #170142

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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] All existing and new tests are passing.
- [ ] I updated/added relevant documentation (doc comments with `///`).
- [ ] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [ ] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.

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

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[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
2025-06-30 18:16:29 +00:00
Chinmay Garde
d2e4017f81
Add support for arm64 QNX toolchains. (#168699)
The pattern is similar to the recently added WASM (and previously NACL)
toolchains.

The major change is the engines use of functions that became constexpr
in C++26 (such as
[sqrt](https://en.cppreference.com/w/cpp/numeric/math/sqrt)) as if they
were already constexpr. I have attempted to keep the linkage the same
and am investigating how to enable this form of checking with our own
toolchain.
2025-06-03 16:13:12 +00:00
Emmanuel Ferdman
0bd6394025
Modernize system executable detection across components (#169018)
# PR Summary
This small PR resolves deprecation warnings caused by the use of
`distutils.spawn.find_executable`:
```python
DeprecationWarning: Use shutil.which instead of find_executable
```
Please note that `find_executable` is deprecated from Python 3.10 and
removed in 3.12. `shutil.which` available since Python 3.3.

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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].
- [ ] I listed at least one issue that this PR fixes in the description
above.
- [ ] I updated/added relevant documentation (doc comments with `///`).
- [ ] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [ ] 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].

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[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

Signed-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>
2025-05-19 18:03:16 +00:00
Chris Bracken
540d19c148
iOS,macOS: Migrate logging to Logger/FlutterLogger (#168568)
In new Swift code in the iOS/macOS embedder, we currently lack core
features currently provided by shared internal C++ library code in FML.
This provides a logging implementation that can be used across the
iOS/macOS embedders, whether in Swift, Objective-C, or C++ code, and
migrates the iOS and macOS embedders to use it.

This patch also introduces gn support for authoring [Swift Testing][]
tests.
* Introduces a `SwiftTestingRunner` class that launches the Swift
Testing test runner, which runs all tests annotated with `@Test` linked
into the current executable.
* Introduces a `SwiftTestingRunnerMain` class that implements a main
entrypoint that launches the `SwiftTestingRunner`.
* Introduces a `gn` `source_set` target
(`//flutter/shell/platform/darwin/common:swift_testing_main`) that
includes the Swift Testing main entrypoint, such that `executable`
targets can add it to their deps to automatically be built as a Swift
Testing runner.
* Adds a `framework_common_swift_unittests` executable target for the
common framework unit tests, and wires that into the build and
`run_tests.py` for macOS.

Issue: https://github.com/flutter/flutter/issues/168564
Issue: https://github.com/flutter/flutter/issues/144791

[Swift Testing]: https://developer.apple.com/xcode/swift-testing/


## Pre-launch Checklist

- [X] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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].

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[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
2025-05-15 04:52:35 +00:00
Chris Bracken
8e35392878
macOS,iOS: fix swift target triple (#168749)
While unifying iOS and macOS gn configuration in flutter/flutter#168517,
I failed to correctly merge the deployment target in the target triple,
resulting in it being incorrectly hardcoded to the macOS deployment
target. This corrects this to the correct value for the `target_os` of
the current compile.

Also gets rid of an unnecessary assertion; we already
`assert(is_mac || is_ios)` at the top of the file.

Issue: https://github.com/flutter/flutter/issues/167592

## Pre-launch Checklist

- [X] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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].

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[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
2025-05-14 15:56:52 +00:00
Chris Bracken
b0ad252b7a
Rename apple -> darwin across our buildroot (#168558)
As part of unifying our iOS and macOS build config, toolchain, and
scripts, I named some of these `apple_sdk.py`, `toolchain/apple`, etc.
for consistency with the chromium toolchain. This renames these `darwin`
for consistency with other parts of our build.

Issue: https://github.com/flutter/flutter/issues/167592

## Pre-launch Checklist

- [X] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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].

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[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
2025-05-08 20:52:08 +00:00
jesswrd
f8b544a7ff
Update Engine to Android 16 (API 36) (#166796)
Following the directions
[here](https://github.com/flutter/flutter/blob/main/docs/platforms/android/Upgrading-Engine's-Android-API-version.md)
to update engine to android 16.

1. Uploaded api 36 SDK to CIPD using the script from the above docs
2. Updates in Engine to use api 36
     - Updated buildroot
     - Updated SDK CIPD package in `DEPS`
     - Updated android build tools
     - Updated `targetsdk` and `compilesdk`
3. Confirm the engine sucessfully builds. I ran `et build -c
android_debug_unopt_arm64`
4. Bumped the gradle version in this PR due to seeing this warning
[here](https://github.com/flutter/flutter/blob/master/docs/platforms/android/New-Android-version.md#:~:text=Update%20Gradle/AGP%20support).

Note: Post mono-repo merge, we can now update buildroot and `DEPS` in
the same PR 🎊 !!! Also, updated the Clang path due to use of a new Clang
version in the bumped ndk.

Partially Addresses #166950

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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].

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[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
2025-05-08 19:46:59 +00:00
Chris Bracken
02d8c1aceb
iOS,macOS: Unify iOS,macOS build configs (#168517)
Merges:
* //build/config/ios:compiler
* //build/config/mac:compiler
Into:
* //build/config/apple:compiler

Merges:
* //flutter/shell/platform/darwin/ios:config_ios
* //flutter/shell/platform/darwin/mac:config_macos
Into:
* //flutter/shell/platform/darwin/common:config

Merges:
* //flutter/shell/platform/darwin/ios:config_ios_test
* //flutter/shell/platform/darwin/mac:config_macos_test
Into:
* //flutter/shell/platform/darwin/common:test_config

This avoids the duplication between iOS and macOS build configs used for
building Swift and Objective-C that depends on Swift, and avoids further
duplication when we add Swift to //flutter/shell/platform/darwin/common
in a followup patch.

Issue: https://github.com/flutter/flutter/issues/167592

## Pre-launch Checklist

- [X] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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].

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[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
2025-05-08 18:11:10 +00:00
Chris Bracken
e89c3927c2
iOS/macOS: Consistent Flutter copyright headers (#168390)
A long time ago, back after the fork from Chromium, we updated all
Chromium BSD copyright notices to Flutter. We did this in the engine,
but not in the buildroot. After the monorepo merge, we've now got a mix.
This corrects Chromium copyright notices for iOS/macOS files only, and
adds a missing copyright header.

No test changes since this touches only comments, and introduces no
functional changes.

## Pre-launch Checklist

- [X] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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].
- [ ] I listed at least one issue that this PR fixes in the description
above.
- [X] I updated/added relevant documentation (doc comments with `///`).
- [ ] 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].

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[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
2025-05-07 00:09:28 +00:00
Chris Bracken
2ae0dd195d
macOS: Support writing Swift in the macOS embedder (#168174)
Enables the `swift` tool in the gn mac toolchain and wires up support
for Swift `source_set` targets. Ports `FlutterRunLoop` to Swift.

* Adds `//flutter/build/config/mac:compiler` config that sets up
`swiftflags` for the `swift` tool in the toolchain for macOS, and adds
it to the default configs on `is_mac` builds.

* Adds `mac_swift_lib_paths` in
`engine/src/build/config/apple/apple_sdk.gni` which holds the path of
Swift shared libraries for macOS targets. This is within the appropriate
`macosx` SDK directory within Xcode.

Finally, this code adds Swift code to the embedder and embedder tests as
proof of concept and to prevent regressions. This ports `FlutterRunLoop`
to Swift in order to verify Objective-C imports of Swift via the
bridging header.

Issue: https://github.com/flutter/flutter/issues/144791

## Pre-launch Checklist

- [X] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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].

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[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
2025-05-05 21:19:24 +00:00
Jason Simmons
83a94d9055
Declare both Mac and iOS build arguments in apple_sdk.gni (#168025)
Without this the Flutter GN wrapper script warns about undeclared
variables.
2025-04-30 03:14:16 +00:00
Chris Bracken
34f8df3c84
iOS,macOS: Merge iOS, macOS config (#167945)
Merges iOS and macOS configuration and SDK finder scripts:

* //build/mac/find_sdk.py and //build/ios/config/ios_sdk.py merge to
  //build/mac/apple_sdk.py.

* //build/config/ios/ios_sdk.gni and //build/config/mac/mac_sdk.gni
  merge to //build/config/apple/apple_sdk.gni. gn args for macOS are
  available on all builds with `host_os == "mac"`. gn args for iOS are
  available on builds where `is_ios` is true (in place of the existing
  conditional import logic). Merging the two allows us to check all
  Apple SDK-related variable for anything missing and run `apple_sdk.py`
  a maximum of once across all Apple platforms.

* Adds `Platforms` directory to `//flutter/prebuilts`, which contains
  Apple platform symlinks for `iPhoneOS`, `iPhoneSimulator`, `MacOSX`.
  Adds `ios_device_platform_path`, `ios_simulator_platform_path`,
  `mac_platform_path` gn args to hold these paths. Adds logic to
  `//flutter/tools/gn` to locate these paths and prepopulate these args
  from them to avoid running the script as part of the build.

  These are used to link to Swift core libs for each platform where
  necessary, as well as (for tests) test frameworks and `.swiftmodule`s
  like XCTest.framework.

* Eliminates `Library/Frameworks` symlink from `//flutter/prebuilts`.
  This path is a subdirectory of each of the platform directories above.
  It was used to populate `platform_frameworks_path` in
  `//flutter/shell/platform/darwin/ios/BUILD.gn` using sort of sketchy
  relative-path logic.

  Further, the existing logic for greating the link was buggy for runs
  of `ios_sdk.py` where the `--sdk` option was not specified (i.e. all
  runs where `--as-gclient-hook` were specified). Without this option,
  we cycle through both `iphoneos` and `iphonesimulator` SDKs, and since
  this symlink was written on each iteration through the `SDKs` list, it
  was always linked to the `Library/Frameworks` directory for the last
  item in the list: `iPhoneSimulator.platform`. The platform arg for the
  current build is now resolved to `ios_platform_path` from which we
  resolve `$ios_platform_path/Developer/Library/Frameworks`.

A follow-up patch will refactor the iOS build file to extract an iOS
test config that eliminates some of the unnecessary duplication of
cc_flags, swiftflags, and ld_flags across targets.

Issue: https://github.com/flutter/flutter/issues/167592

## Pre-launch Checklist

- [X] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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].

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[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
2025-04-28 21:03:59 +00:00
Chinmay Garde
c37156e5cf
Forward mnemonics for compiled actions. (#167511)
Previously, mnemonics specified in templates that used compiled_action
and compiled_action_foreach would not be forwarded. This made actions
like ImpellerC invocation unable to tag themselves. As Ninja builds
progressed, only a mysterious ACTION label would be emitted for all
ImpellerC edges. Now, the edges tag themselves.
2025-04-28 18:19:20 +00:00
Chris Bracken
2ca6284ce3
iOS,macOS: delete run_command_with_retry (#167908)
`//build/mac/find_sdk.py` and `//build/config/ios/ios_sdk.py` contain a
copy-pasted function to run a given command with a specified number of
retries and a timeout. This code was added in
https://github.com/flutter/buildroot/pull/876 in response to timeouts on
the mac bots in relation to
https://github.com/flutter/flutter/issues/157636, and is no longer
necessary.

This is a pre-factoring patch to reduce the size of the upcoming merge
of iOS and macOS SDK config/resolving infrastructure.

No tests, since this is a refactor with no change in functionality.

Issue: https://github.com/flutter/flutter/issues/167592

## Pre-launch Checklist

- [X] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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].

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[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
2025-04-28 17:47:15 +00:00
Chris Bracken
dba788a63b
iOS: remove unused ios_sdk.gni import (#167909)
Neither `use_ios_simulator` nor any other variable from ios_sdk.gni is
used in //build/toolchain/clang.gni.

This is a pre-factoring patch to reduce the size of the upcoming merge
of iOS and macOS SDK config/resolving infrastructure.

Issue: https://github.com/flutter/flutter/issues/167592

## Pre-launch Checklist

- [X] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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].

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[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
2025-04-28 06:22:18 +00:00
Chris Bracken
45e7de58d0
macOS: remove unused mac_sdk_min (#167907)
This variable is no longer used in //build/mac/find_sdk.py or in our
build. It was removed in flutter/buildroot#912. Previously, we worked
out the SDK path from a list of available SDKs, and used mac_sdk_min as
a filter. We now use `xcrun --sdk macosx --show-sdk-path` to get the SDK
path and no longer need this variable.

This is a pre-factoring patch to reduce the size of the upcoming merge
of iOS and macOS SDK config/resolving infrastructure.

No test changes since this is dead code elimination.

Issue: https://github.com/flutter/flutter/issues/167592

## Pre-launch Checklist

- [X] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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].

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[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
2025-04-28 04:19:36 +00:00
Chris Bracken
769d6d41b8
Support Swift in the iOS embedder (#167530)
Adds a `swift` tool to the gn mac toolchain and wires up support for
Swift `source_set` targets. Ports `FlutterUIPressProxy` to Swift.

`gn` toolchain modifications include:
* Removes `//flutter/third_party/libcxx/include` and
`//flutter/third_party/libcxxabi/include` from the default
`include_dirs` on all `source_set` targets, and instead adds them via
`cflags` and `cflags_cc` so they continue to be picked up by C, C++,
Obj-C, Obj-C++ targets. Flutter's custom libc++ library headers should
be picked up by C, C++, Objective-C, and Objective-C++ targets, but not
Swift targets. Swift code does not use libc++ directly, but many Apple
core libraries such as Foundation.framework are implemented in
Objective-C/Objective-C++ and directly or indirectly rely on Apple's
libc++ implementation in System.framework. Because of this, and because
Swift compiles use Clang modules, we should ensure the correct (Apple)
libc++ is picked up from Swift targets by ensuring our own libc++ is
not.
* Adds a default empty list for `swiftflags` to `source_set` targets.
This list is used by for Swift `source_set` targets by the `swift` tool
in the gn toolchain.
* Adds a `//build/config/ios:compiler` config to
`engine/src/build/config/ios/BUILD.gn`. This sets default `swiftflags`
for iOS targets. This attribute is (only) used by the new `swift` tool
in the toolchain.
* Adds `-g` to `swiftflags` for debug (unopt) builds in
`engine/src/build/config/compiler/BUILD.gn`.
* Adds a `swift` tool to the gn toolchain that invokes `swiftc.py` to
perform compilation and generate a bridging header. This tool is invoked
automatically by gn for Swift `source_set` targets.
* Adds `//build/toolchain/apple/swiftc.py`, a wrapper script around
`swiftc` in Xcode's Swift toolchain. This script ensures builds are
invoked hermetically using a new build cache directory for the emitted
swiftmodule, precompiled header, and bridging header, for each compile.
The outputs are then copied into the gn output directory. Also adds
supporting script `//build/toolchain/apple/get_tool_mtime.py` and data
`//build/toolchain/apple/swift_const_gather_protocols.json`, both used
by `swiftc.py`.
* Adds a `cxx_module` tool to the gn toolchain that supports clang
module-based compiles. This is used for libc++ transitively via
System.framework and others that rely on it.

`gn` variable modifications include:
* Adds `apple_host_toolchain_path` variable in
`engine/src/build/config/apple/apple_sdk.gni`. This is set using
`//build/mac/find_sdk.py` to the path of Xcode's
`XcodeDefault.xctoolchain`. This is where Xcode's `swiftc` tool and some
Swift libraries are located. This will be used to create a symlink in
the `//flutter/prebuilts/SDKs` directory to locate Swift tooling during
builds.
* Updates `enging/src/tools/gn` to pre-populate that path as we do with
other Xcode SDK path symlinks, to improve performance.
* Adds `ios_swift_lib_paths` in
`engine/src/build/config/ios/ios_sdk.gni` which holds the path of Swift
shared libraries for either iOS physical device or simulator targets.
This is within the appropriate `iphone` or `iphonesimulator` SDK
directory within Xcode.

`verify_exported.dart` changes:
* Allow exported symbols that match regexp
`^_\$s\d+InternalFlutterSwift`. To allow Swift symbols to be exported in
an Objective-C bridging header, they must be `public` or `open`. We only
ever use these types internally within the framework and never publish
these types in a public header. Like `_InternalFlutter` Obj-C symbols,
we allow `InternalFlutterSwift` symbols, as they are clearly marked as
internal and an end user would need to reverse engineer out their own
header to use them.
* Allow Obj-C symbols in the `(__DATA,__data)` and
`(__DATA_CONST,__const)` in addition to the existing Mach-O sections, so
long as it matches the existing criteria.

Finally, this patch adds Swift code to the embedder and embedder tests
as proof of concept and to prevent regressions. This ports
`FlutterUIPressProxy` and its subclass `FakeUIPressProxy` to Swift in
order to verify both:
* Objective-C imports of Swift via a bridging header
* Swift imports of Swift via a bridging header

Issue: https://github.com/flutter/flutter/issues/144791

## Pre-launch Checklist

- [X] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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].

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[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
2025-04-26 18:59:22 +00:00
Chris Bracken
09d4dabd6d
iOS: Update minimum iOS version to 13.0 (#167737)
This updates the Flutter minimum iOS version from 12.0 to 13.0, adds a
migrator for existing apps, and updates our own examples, tests, and
benchmark apps to 13.0. A follow-up patch will drop iOS 13 `@available`
checks in the embedder.

This is required in order to use Swift in the embedder and not need to
bundle the Swift runtime libs in every app that uses Flutter. Swift
stable ABI

As of March 2025, usage of iOS is well below 1%, see example public
usage data here:
https://telemetrydeck.com/survey/apple/iOS/majorSystemVersions/

This patch makes the following changes:
1. Updates ios_deployment_target from 12.0 to 13.0.
2. Changes templates to `IPHONEOS_DEPLOYMENT_TARGET`,
`MinimumOSVersion`, and Podfile `platform :ios` to 12.0.
3. Adds migrator for Podfile part to migrate `platform :ios, '11.0'` ->
`platform :ios, '12.0'`
4. Compiles with `-miphoneos-version-min=12.0`
5. Runs the migrator on all example apps and integration tests.
6. Updates examples, tests to iOS 13 deployment target

It also updates `verify_exported.dart`:
* iOS 13 introduces stricter separation of const and non-const global
symbols. Previously, these were declared in the Mach-O `__DATA` section
which may be mapped read-write, but now they're in a dedicated
`__DATA_CONST` section which is mapped read-only. This adds
`(__DATA_CONST,__const)` to the allowlist with the same enforcement on
exported symbol naming as before.

See also (ios_deployment_target):
* https://github.com/flutter/buildroot/pull/808
* https://github.com/flutter/buildroot/pull/574

See also (template, migrator):
* https://github.com/flutter/flutter/pull/62902
* https://github.com/flutter/flutter/pull/85174
* https://github.com/flutter/flutter/pull/101963
* https://github.com/flutter/flutter/pull/140478

Issue: https://github.com/flutter/flutter/issues/167735

## Pre-launch Checklist

- [X] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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].

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[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
2025-04-24 20:15:13 +00:00
Ryan Macnak
ca758ac49b
Add buildroot compatibility for HWASAN. (#167133)
Needed to roll https://dart-review.googlesource.com/c/sdk/+/421180.
2025-04-15 00:56:07 +00:00
Jackson Gardner
34ea67bdbf
Reland "[skwasm] Dynamic Threading" (#166454)
This is a reland of https://github.com/flutter/flutter/pull/164748,
which was reverted here: https://github.com/flutter/flutter/pull/165350

It was reverted due to some issues in the flutter packages roller:
https://github.com/flutter/flutter/issues/165347

The unit test in flutter/packages was modified to be more deterministic
and less affected by minor timing differences:
https://github.com/flutter/packages/pull/8920

So this is basically being relanded without any significant changes,
since the downstream tests have been fixed.
2025-04-02 21:27:09 +00:00
Victoria Ashworth
975a677529
Make iOS Flutter framework extension-safe (#165346)
Our current
[adoption/documentation](https://docs.flutter.dev/platform-integration/ios/app-extensions)
for iOS Extensions does not currently work because it's disallowed to
nest bundles (see https://github.com/flutter/flutter/issues/142531).

As of [Xcode
13](https://developer.apple.com/documentation/xcode-release-notes/xcode-13-release-notes/#:~:text=Linking%20Swift%20packages%20from%20application%20extension%20targets%20or%20watchOS%20applications%20no%20longer%20emits%20unresolvable%20warnings%20about%20linking%20to%20libraries%20not%20safe%20for%20use%20in%20application%20extensions%2E),
linking to frameworks that contain non-extension-safe code no longer
gives warnings (or blocks from App Store it seems). Therefore, it has
become a runtime issue to ensure non-extension-safe code is not used.

Previously, we were building and shipping 2 separate
Flutter.xcframeworks. One that was extension-safe and one that was not.

This PR removes the "extension_safe" framework and instead makes the
entire framework extension-safe by annotating non-extension-safe code
with `NS_EXTENSION_UNAVAILABLE_IOS` and ensuring that code is not used
at runtime if the bundle is for an app extension.

This PR also disables wide gamut for app extensions to decrease the
chances of crashes (see
https://github.com/flutter/flutter/issues/165086).

Fixes https://github.com/flutter/flutter/issues/142531.
 
 ---
 
For reference:

App extensions were first evaluated in
https://flutter.dev/go/app-extensions. Here is the reasoning why neither
method described there is opportune.

Option 1 -
I did look into splitting the framework into 2 frameworks (one with all
extension-safe code and one with the non-extension-safe code). However,
the original idea was to use objc Categories/Extensions - this doesn’t
quite fit our needs. Categories/Extensions only allow you to add new
methods/properties, not override existing ones. We could hypothetically
add new methods, but that would require the user to change their code to
use the new methods.

I also looked into subclasses which does allow overrides, but it would
also require the user to change their code to use the new class.

We could do method swizzling, but opinion of that on the internet is
that it's not very safe.

I’m of the opinion that anything that requires the user to change code
isn’t super feasible due to plugins.

Option 2 -
We could still do the 2 frameworks but rename one to
`FlutterExtentionSafe`. This works without users needing to change any
code (including imports like `@import Flutter` / `#import
<Flutter/Flutter.h>`). I believe the reason this works is because at
compile time, it finds the `Flutter` framework on the framework search
path and it imports in the headers. Then at link time,
`FlutterExtentionSafe` is explicitly linked so it uses that framework
first when checking for symbols and since it finds all the symbols in
`FlutterExtentionSafe`, it doesn’t need/try to auto-link the `Flutter`
framework (despite `Flutter` being the framework imported).

This seems precarious to me since we’re relying on Xcode to not
auto-link the `Flutter` framework. If for some reason `Flutter`
framework did get auto-linked (such as the user using a symbol that’s
not in the `FlutterExtensionSafe` framework but is in the `Flutter`
framework - this is unlikely though), we’d get name collision issues

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [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].

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[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
2025-03-27 18:51:17 +00:00
Jackson Gardner
1d954f4e96
Revert "[skwasm] Dynamic Threading (#164748)" (#165350)
This reverts commit b2a4a05683b95e9c08efafb3a0f17193915897d5.

This has been causing issues when rolling to flutter/packages repo. See
https://github.com/flutter/flutter/issues/165347.
2025-03-17 23:40:59 +00:00
Jackson Gardner
b2a4a05683
[skwasm] Dynamic Threading (#164748)
This switches skwasm over from the emscripten pthreads implementation to
emscripten's "wasm workers" threading implementation. The pthreads
implementation simply will not run at all in a non-crossOriginIsolated
context, but the wasm workers implementation only fails if we actually
attempt to spawn a thread. This means we can actually choose whether to
use a single-threaded or multi-threaded strategy at runtime, which means
we don't have to build two variants of skwasm for single- vs
multi-threaded.
2025-03-10 21:23:29 +00:00