10 Commits

Author SHA1 Message Date
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
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
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
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
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
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
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
Jackson Gardner
bfe31d607c
Fix skwasm target in wasm_debug_unopt build. (#162100)
Fixes a couple issues in the skwasm build rules:
* `DEMANGLE_SUPPORT` is deprecated in emscripten, so just remove it.
* `sSHARED_MEMORY=1` needs to be added to the cflags so that emscripten
appends the proper feature flags (`-matomics` and `-mbulk-memory`) when
doing the compile so that the flags match the linking step.
2025-01-23 22:05:52 +00:00
John McDole
721b47e7e6 Merge flutter/engine into framework
Adds files from flutter/flaux which contain modifications for the engine
structure. The history for engine/ has been edited. Please see
flutter/engine for the original PRs.
2024-12-17 14:00:52 -08:00