[embedder] More bootstrapping.

- Add basic ViewProvider impl.
- Hack embedder platform to do inspect node logic.
- Move infra scripts to infra folder. They're still not connected.
- Break out a script to just build the engine artifacts without
  syncing them to a new git revision.

This enables us to run Dart apps from the session again using just
the workstation.qemu-x64 product bundle. I see
the "Hello from Dart!" log again.

Bug: 46971
Change-Id: I015642dbbd0624afb250204b897a5576da2478d8
18 files changed
tree: a8b8c7f608129290076c036ce07b847e20e2b351
  1. scripts/
  2. src/
  3. third_party/
  4. tools/
  5. .bazelrc
  6. .gitignore
  7. .gitmodules
  8. AUTHORS
  9. CONTRIBUTING.md
  10. LICENSE
  11. OWNERS
  12. PATENTS
  13. README.md
  14. 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. Install a Bazel version no older than the one defined in the WORKSPACE.bazel file, by following the instructions at https://bazel.build/install. In some Linux distributions, sudo apt-get install bazel should be enough.

  2. Make sure this repository has the required submodules:

    git submodule update --recursive --init
    
  3. 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 and start an emulator:

    tools/ffx product-bundle get workstation.qemu-x64
    tools/ffx emu start --headless workstation.qemu-x64
    
  2. (optional) Watch the device log in a separate window:

    tools/ffx log
    
  3. Run the sample app component:

    scripts/build_and_run_sample_app.sh
    

TODO(akbiggs): Currently the component crashes on startup with an ambient_mark_vmo_exec allowlist issue. We are talking to security to figure out how to handle 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.

Prerequisites

  1. You will need to get the Flutter Engine source code. Note that this is not just cloning https://github.com/flutter/engine.
  2. $ENGINE_DIR should be set to the src folder of your Flutter Engine checkout, for example ~/engine/src.
  3. $FUCHSIA_EMBEDDER_DIR should be set to your flutter-embedder.git checkout, 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.

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. To do this:

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