[embedder] Add script to update Fuchsia SDK.

Simplifies the workflow for updating the Fuchsia SDK to a newer version.

I moved common shell script helpers into a separate helper file.

Change-Id: Iff4a9fcd852bf96ac767eecd7ad3a5790520b116
6 files changed
tree: ad950dfd5b534bf4170c7bec2c78a8d4624916b5
  1. scripts/
  2. src/
  3. third_party/
  4. tools/
  5. .bazelrc
  6. .clang-format
  7. .editorconfig
  8. .gitignore
  9. .gitmodules
  10. AUTHORS
  11. CONTRIBUTING.md
  12. LICENSE
  13. OWNERS
  14. PATENTS
  15. README.md
  16. WORKSPACE.bazel
README.md

flutter-embedder.git

The Flutter Embedder for Fuchsia is a new in-progress runtime for Flutter apps on Fuchsia. This runtime is built on top of Flutter's embedder platform.

This repository is a work in progress and should be considered experimental.

Requirements

  1. Set $FUCHSIA_EMBEDDER_DIR to your flutter-embedder.git checkout location, for example ~/flutter-embedder.

  2. Make sure this repository has the required submodules:

    git submodule update --recursive --init
    
  3. Run $FUCHSIA_EMBEDDER_DIR/scripts/bootstrap.sh.

  4. Ensure that there are Fuchsia SSH keys in your host machine. You will need them for running the Fuchsia emulator.

     [[ -f "${HOME}/.ssh/fuchsia_ed25519" ]] || ssh-keygen -P "" -t ed25519 -f "${HOME}/.ssh/fuchsia_ed25519" -C "${USER}@$(hostname -f) Shared SSH Key for Fuchsia"
    
     [[ -f "${HOME}/.ssh/fuchsia_authorized_keys" ]] || ssh-keygen -y -f "${HOME}/.ssh/fuchsia_ed25519" > "${HOME}/.ssh/fuchsia_authorized_keys"
    

Build and package the sample

Now the repository is ready to build the sample.

  1. Fetch an emulator image:

    $FUCHSIA_EMBEDDER_DIR/tools/ffx product-bundle get workstation_eng.qemu-x64
    
  2. Start the emulator.

    If running in a graphical environment:

    $FUCHSIA_EMBEDDER_DIR/tools/ffx emu start workstation_eng.qemu-x64
    

    If running in a terminal environment:

    $FUCHSIA_EMBEDDER_DIR/tools/ffx emu start --headless workstation_eng.qemu-x64
    
    
  3. (optional) Watch the device log in a separate window:

    $FUCHSIA_EMBEDDER_DIR/tools/ffx log
    
  4. Run an example app:

    $FUCHSIA_EMBEDDER_DIR/scripts/build_and_run_example.sh hello_flutter
    

TODO(akbiggs): The app occasionally gets stuck on a loading screen instead of rendering. Re-running the app usually fixes it. We need to fix this.

Syncing engine artifacts

Occasionally you will need to update the Flutter Engine artifacts (embedder.h and libengine_flutter.so) that are used by the embedder to run Flutter apps. A script is provided for this workflow.

Requirements

  1. You will need to get the Flutter Engine source code. Note that this is not just cloning https://github.com/flutter/engine.
  2. Set $ENGINE_DIR to the src folder of your Flutter Engine checkout location, for example ~/engine/src.
  3. $FUCHSIA_EMBEDDER_DIR should be set to your flutter-embedder.git checkout location, for example ~/flutter-embedder.
  4. $DEPOT_TOOLS should be set to your depot_tools location, for example ~/depot_tools.
  5. You will need to git stash or git commit any local changes to the Flutter Engine or the script will fail.

Running the script

You can run the script with a flutter/engine Git commit to sync the Engine artifacts to that revision.

$FUCHSIA_EMBEDDER_DIR/scripts/sync_engine_artifacts_to_revision.sh <ENGINE_COMMIT_SHA>

A common workflow is to sync your Engine commit to the Flutter tool in this repository, for example when updating the Flutter tool to a new version. To do this:

$FUCHSIA_EMBEDDER_DIR/scripts/sync_engine_artifacts_to_revision.sh $(cat $FUCHSIA_EMBEDDER_DIR/third_party/dart-pkg/internal/flutter/flutter/bin/internal/engine.version)