Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .cirrus.yml
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ task:
cd $ENGINE_PATH/src
./flutter/tools/fuchsia/build_fuchsia_artifacts.py --engine-version HEAD --runtime-mode debug --no-lto --archs x64
cd $ENGINE_PATH/src/flutter
./ci/build_flutter_runner_tests.sh

# WINDOWS
task:
Expand Down
17 changes: 17 additions & 0 deletions ci/build_flutter_runner_tests.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/bin/bash
set -ex

PATH="$HOME/depot_tools:$PATH"
cd ..

# Build the flutter runner tests far directory
flutter/tools/gn --fuchsia --no-lto --runtime-mode debug
ninja -C out/fuchsia_debug_x64 flutter/shell/platform/fuchsia/flutter:flutter_runner_tests

# Generate the far package
flutter/tools/fuchsia/gen_package.py\
--pm-bin $PWD/fuchsia/sdk/linux/tools/pm\
--package-dir $PWD/out/fuchsia_debug_x64/flutter_runner_tests_far\
--signing-key $PWD/flutter/tools/fuchsia/development.key\
--far-name flutter_runner_tests

7 changes: 2 additions & 5 deletions shell/platform/fuchsia/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,20 @@ import("//build/fuchsia/sdk.gni")
import("$flutter_root/common/config.gni")

if (using_fuchsia_sdk) {
testonly = true

product_suffix = ""

if (flutter_runtime_mode == "release") {
product_suffix = "product_"
}

flutter_runner_target = "flutter_jit_${product_suffix}runner"
dart_runner_target = "dart_jit_${product_suffix}runner"

group("fuchsia") {
deps = [
"dart:kernel_compiler",
"dart_runner:$dart_runner_target",
"flutter:flutter_aot_${product_suffix}runner",
"flutter:flutter_jit_${product_suffix}runner",
"flutter:flutter_runner_tests",
"flutter:$flutter_runner_target",
]
}
}
4 changes: 2 additions & 2 deletions shell/platform/fuchsia/dart_runner/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import("//build/fuchsia/sdk.gni")
import("$flutter_root/common/fuchsia_config.gni")
import("$flutter_root/tools/fuchsia/common_libs.gni")
import("$flutter_root/tools/fuchsia/dart.gni")
import("$flutter_root/tools/fuchsia/fuchsia_archive.gni")
import("$flutter_root/tools/fuchsia/package_dir.gni")

template("runner") {
assert(defined(invoker.product), "The parameter 'product' must be defined")
Expand Down Expand Up @@ -100,7 +100,7 @@ template("jit_runner_package") {
product_suffix = "_product"
}

fuchsia_archive(target_name) {
package_dir(target_name) {
deps = [
":dart_jit${product_suffix}_runner_bin",
"kernel:kernel_core_snapshot${product_suffix}",
Expand Down
10 changes: 5 additions & 5 deletions shell/platform/fuchsia/flutter/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import("$flutter_root/common/config.gni")
import("$flutter_root/shell/gpu/gpu.gni")
import("$flutter_root/tools/fuchsia/common_libs.gni")
import("$flutter_root/tools/fuchsia/dart.gni")
import("$flutter_root/tools/fuchsia/fuchsia_archive.gni")
import("$flutter_root/tools/fuchsia/package_dir.gni")
import("engine_flutter_runner.gni")

shell_gpu_configuration("fuchsia_gpu_configuration") {
Expand Down Expand Up @@ -89,7 +89,7 @@ template("jit_runner") {
product_suffix = "_product"
}

fuchsia_archive(target_name) {
package_dir(target_name) {
snapshot_label = "kernel:kernel_core_snapshot${product_suffix}"
snapshot_gen_dir = get_label_info(snapshot_label, "target_gen_dir")

Expand Down Expand Up @@ -174,7 +174,7 @@ template("aot_runner") {
product_suffix = "_product"
}

fuchsia_archive(target_name) {
package_dir(target_name) {
deps = [
":aot${product_suffix}",
]
Expand Down Expand Up @@ -258,7 +258,7 @@ executable("flutter_runner_unittests") {
]
}

fuchsia_archive("flutter_runner_tests") {
package_dir("flutter_runner_tests") {
testonly = true

deps = [
Expand All @@ -273,7 +273,7 @@ fuchsia_archive("flutter_runner_tests") {

meta = [
{
path = rebase_path("meta/$target_name.cmx")
path = "meta/$target_name.cmx"
dest = "$target_name.cmx"
},
]
Expand Down
34 changes: 30 additions & 4 deletions tools/fuchsia/build_fuchsia_artifacts.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@
import sys
import tempfile

from gather_flutter_runner_artifacts import CopyPath
from gather_flutter_runner_artifacts import CreateMetaPackage, CopyPath
from gen_package import CreateFarPackage

_script_dir = os.path.abspath(os.path.join(os.path.realpath(__file__), '..'))
_src_root_dir = os.path.join(_script_dir, '..', '..', '..')
Expand All @@ -24,6 +25,28 @@
_fuchsia_base = 'flutter/shell/platform/fuchsia'


def IsLinux():
return platform.system() == 'Linux'


def IsMac():
return platform.system() == 'Darwin'


def GetPMBinPath():
# host_os references the gn host_os
# https://gn.googlesource.com/gn/+/master/docs/reference.md#var_host_os
host_os = ''
if IsLinux():
host_os = 'linux'
elif IsMac():
host_os = 'mac'
else:
host_os = 'windows'

return os.path.join(_src_root_dir, 'fuchsia', 'sdk', host_os, 'tools', 'pm')


def RunExecutable(command):
subprocess.check_call(command, cwd=_src_root_dir)

Expand Down Expand Up @@ -93,15 +116,18 @@ def CopyToBucketWithMode(source, destination, aot, product, runner_type):
mode = 'aot' if aot else 'jit'
product_suff = '_product' if product else ''
runner_name = '%s_%s%s_runner' % (runner_type, mode, product_suff)
far_dir_name = '%s_far' % runner_name
source_root = os.path.join(_out_dir, source)
far_base = os.path.join(source_root, far_dir_name)
CreateMetaPackage(far_base, runner_name)
pm_bin = GetPMBinPath()
key_path = os.path.join(_script_dir, 'development.key')

destination = os.path.join(_bucket_directory, destination, mode)
CreateFarPackage(pm_bin, far_base, key_path, destination)
patched_sdk_dirname = '%s_runner_patched_sdk' % runner_type
patched_sdk_dir = os.path.join(source_root, patched_sdk_dirname)
dest_sdk_path = os.path.join(destination, patched_sdk_dirname)
far_name = '%s-0.far' % runner_name
far_file = os.path.join(source_root, far_name)
CopyPath(far_file, os.path.join(destination, far_name))
if not os.path.exists(dest_sdk_path):
CopyPath(patched_sdk_dir, dest_sdk_path)
CopyGenSnapshotIfExists(source_root, destination)
Expand Down
17 changes: 16 additions & 1 deletion tools/fuchsia/gather_flutter_runner_artifacts.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,19 @@ def CopyPath(src, dst):
raise


def GatherArtifacts(src_root, dst_root):
def CreateMetaPackage(dst_root, far_name):
meta = os.path.join(dst_root, 'meta')
if not os.path.isdir(meta):
os.makedirs(meta)
content = {}
content['name'] = far_name
content['version'] = '0'
package = os.path.join(meta, 'package')
with open(package, 'w') as out_file:
json.dump(content, out_file)


def GatherArtifacts(src_root, dst_root, create_meta_package=True):
if not os.path.exists(dst_root):
os.makedirs(dst_root)
else:
Expand All @@ -54,6 +66,9 @@ def GatherArtifacts(src_root, dst_root):
sys.exit(1)
CopyPath(src_full, dst_full)

if create_meta_package:
CreateMetaPackage(dst_root, 'flutter_runner')


def main():
parser = argparse.ArgumentParser()
Expand Down
17 changes: 6 additions & 11 deletions tools/fuchsia/gen_package.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
import subprocess
import sys

from gather_flutter_runner_artifacts import CreateMetaPackage


# Generates the manifest and returns the file.
def GenerateManifest(package_dir):
Expand Down Expand Up @@ -40,18 +42,11 @@ def CreateFarPackage(pm_bin, package_dir, signing_key, dst_dir):
]

# Build the package
try:
subprocess.check_output(pm_command_base + ['build'])
except subprocess.CalledProcessError as e:
print("pm output: " + e.output)
raise
subprocess.check_call(pm_command_base + ['build'])

# Archive the package
try:
subprocess.check_output(pm_command_base + ['archive'])
except subprocess.CalledProcessError as e:
print("pm output: " + e.output)
raise
subprocess.check_call(pm_command_base + ['archive'])

return 0


Expand All @@ -76,7 +71,7 @@ def main():

pkg_dir = args.package_dir
if not os.path.exists(os.path.join(pkg_dir, 'meta', 'package')):
raise Exception('Expected to find meta/package directory!')
CreateMetaPackage(pkg_dir, args.far_name)

manifest_file = None
if args.manifest_file is not None:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Creates a Fuchsia archive (.far) file using PM from the Fuchsia SDK.
template("fuchsia_archive") {
# Creates a package dir that we will them use pm to package.
#
# This currently ignores the CMX files and does minimal validation.
template("package_dir") {
assert(defined(invoker.binary), "package must define binary")
assert(defined(invoker.meta_dir), "package must define meta_dir")

Expand Down Expand Up @@ -65,42 +67,12 @@ template("fuchsia_archive") {
]
}

write_file("${far_base_dir}/meta/package",
{
name = pkg.package_name
version = pkg.package_version
},
"json")

pkg_dir_deps = pkg.deps + [ ":$cmx_target" ]

action("${target_name}_dir") {
action(target_name) {
script = "$flutter_root/tools/fuchsia/copy_path.py"
response_file_contents = rebase_path(copy_sources + copy_outputs)
deps = pkg_dir_deps
deps = pkg.deps + [ ":$cmx_target" ]
args = [ "--file-list={{response_file_name}}" ]
outputs = copy_outputs
testonly = pkg_testonly
}

action(target_name) {
script = "$flutter_root/tools/fuchsia/gen_package.py"
deps = pkg_dir_deps + [ ":${target_name}_dir" ]
sources = copy_outputs
args = [
"--pm-bin",
rebase_path("//fuchsia/sdk/$host_os/tools/pm"),
"--package-dir",
rebase_path(far_base_dir),
"--signing-key",
rebase_path("//flutter/tools/fuchsia/development.key"),
"--far-name",
target_name,
]
outputs = [
"${far_base_dir}.manifest",
"$root_out_dir/${target_name}.far",
]
testonly = pkg_testonly
}
}