• Chris Bracken's avatar
    [macOS] Use arm64 snapshot in arm64 App.framework (#100504) · fd3c34c9
    Chris Bracken authored
    Previously, https://github.com/flutter/flutter/pull/100271 enabled
    building universal macOS binaries by default, but included a bug causing
    the arm64 App.framework to be built such that the TEXT section
    containing the app instructions built by gen_snapshot incorrectly
    contained x86_64 instructions rather than arm64 instructions.
    
    When building macOS (and iOS) apps, Flutter builds them in three
    components:
    * The Runner application: built by Xcode
    * The bundled App.framework: built from assembly code generated by
      gen_snapshot from the application's Dart sources.
    * The bundled FlutterMacOS.framework: built as part of the engine build
      and packaged by copying the distributed binary framework from our
      artifacts cache.
    
    Building App.framework consists of the following steps:
    * For each architecture, invoke gen_snapshot to generate
      architecture-specific assembly code, which is then built to object
      code and linked into an architecture-specific App.framework.
    * Use the `lipo` tool to generate a universal binary that includes both
      x86_64 and arm64 architectures.
    
    Previously, we were building architecture specific App.framework
    binaries. However, for all architectures we were (mistakenly) invoking
    the general `gen_snapshot` tool (which emitted x64 instructions, and
    which is now deprecated) instead of the architecture-specific
    `gen_snapshot_x86` and `gen_snapshot_arm64` builds which emit
    instructions for the correct architecture.
    
    This change introduces a small refactoring, which is to split the
    `getNameForDarwinArch` function into two functions:
    * `getDartNameForDarwinArch`: the name for the specified architecture as
      used in the Dart SDK, for example as the suffix of `gen_snapshot`.
    * `getNameForDarwinArch`: the name for the specified architecture
      as used in Apple tools, for example as an argument to `lipo`. For
      consistency, and to match developer expectations on Darwin platforms,
      this is also the name used in Flutter's build outputs.
    
    Issue: https://github.com/flutter/flutter/issues/100348
    fd3c34c9
Name
Last commit
Last update
..
commands.shard Loading commit data...
data Loading commit data...
general.shard Loading commit data...
integration.shard Loading commit data...
src Loading commit data...
web.shard Loading commit data...