| #!/bin/bash |
| # |
| # Copyright 2022 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| # |
| # Syncs third_party/engine to the specified commit. Cherry-picks in several |
| # fixes that are necessary for the Fuchsia embedder to work currently. |
| # |
| # Usage: |
| # sync_engine_to_revision.sh <engine_commit> |
| # |
| # Requirements: |
| # 1. You don't have any uncommited changes to your Engine code. |
| # |
| # Arguments: |
| # The first argument is the Flutter Engine commit to sync to. |
| |
| set -e # Fail on any error. |
| source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/helpers.sh || exit $? |
| |
| ensure-embedder-dir |
| ensure-engine-dir |
| |
| engine_revision=$1 |
| |
| echo-info "Fetching 'upstream' for third_party/engine to ensure we have the commit..." |
| git -C "${embedder_engine_dir}"/flutter fetch upstream |
| |
| echo-info "Checking out third_party/engine/src/flutter at ${engine_revision}..." |
| git -C "${embedder_engine_dir}"/flutter checkout "${engine_revision}" |
| |
| echo-info "Updating third_party/engine/src/flutter's dependencies..." |
| pushd "${embedder_engine_dir}" |
| "${embedder_depot_tools}"/gclient sync -D |
| popd # "${embedder_engine_dir}" |
| |
| # There are several unsubmitted hack fixes that we rely on |
| # to make the Fuchsia embedder currently. |
| # We should land all of these fixes and remove this logic. |
| echo-info "Cherry-picking Flutter Engine hacks that are necessary for the embedder to work..." |
| pushd "${embedder_engine_dir}"/build |
| |
| buildroot_fix=c7deba3773ed645c29f4518cc3990bc02f0f53cd |
| if ! git merge-base --is-ancestor "${buildroot_fix}" HEAD |
| then |
| echo-info "... cherry-picking https://github.com/akbiggs/buildroot/commit/${buildroot_fix} into ${embedder_engine_dir}/build to fix embedder build for Fuchsia..." |
| |
| git remote add akbiggs https://github.com/akbiggs/buildroot || true # since this will error if the remote was already added |
| git fetch akbiggs |
| git cherry-pick -c "${buildroot_fix}" |
| fi |
| |
| popd # "${embedder_engine_dir}"/build |
| |
| function get_engine_fix() { |
| user=$1 |
| fix=$2 |
| reason=$3 |
| |
| if ! git merge-base --is-ancestor "${fix}" HEAD |
| then |
| echo-info "... cherry-picking https://github.com/$user/engine/commit/${fix} into ${embedder_engine_dir}/flutter ${reason}" |
| |
| git remote add "${user}" "https://github.com/${user}/engine" || true # since this will error if the remote was already added |
| git fetch "${user}" |
| git cherry-pick -c "${fix}" |
| fi |
| } |
| |
| pushd "${embedder_engine_dir}"/flutter |
| |
| inspect_node_fix=3cbcbb20321f6cda60d28ebc8c2e0b2da285a58d |
| get_engine_fix "akbiggs" "${inspect_node_fix}" "to set Dart VM inspect node for Fuchsia..." |
| |
| acquire_software_surface_fix=dadf7a7b06b60f36fdce66759bfd74c01d74e27b |
| get_engine_fix "akbiggs" "${acquire_software_surface_fix}" "to get API for acquiring software surface..." |
| |
| font_initialization_data_fix=cda78f5a1cc254f01494d11b01f86ab920cd918d |
| get_engine_fix "naudzghebre" "${font_initialization_data_fix}" "to get API change to embedder.h for setting font_initialization_data.." |
| |
| async_msg_loop_fix=1275e614f23b46b5a77f39563b73acd038309428 |
| get_engine_fix "bergkampben" "${async_msg_loop_fix}" "to get API change to fix the issue with multiple async::Loops for the main platform thread" |
| |
| popd # "${embedder_engine_dir}"/flutter |
| |
| echo "${engine_revision}" > "${FUCHSIA_EMBEDDER_DIR}"/src/embedder/engine/engine_revision |
| |
| echo-info "Engine synced to ${engine_revision}!" |
| echo-info "To run an example with the updated engine code, run:" |
| echo '$FUCHSIA_EMBEDDER_DIR/scripts/build_and_run_example.sh --with-engine' |