Improving support for AOT builds of Fuchsia packages
The integration test works in debug/jit mode only, and building in `profile` and `release` modes was not working, breaking some builders. The workaround was to disable the test. This PR will enable release/aot mode so it will build, and unblock both the debug-mode version of the test (tested by CI) and release mode builds of the repo. Due to the request to unblock, this PR does not yet build packages in `profile` mode that will run in Fuchsia, but it should at least build without errors. Ongoing work is in progress to also support running in release mode.
This commit is contained in:
committed by
David Worsham
parent
be6e1a27a9
commit
b4e2f34518
@@ -92,7 +92,7 @@ template("flutter_snapshot") {
|
||||
# Also, this define excludes debugging and profiling code from Flutter.
|
||||
args += [ "-Ddart.vm.product=true" ]
|
||||
} else {
|
||||
if (!is_debug) {
|
||||
if (flutter_runtime_mode == "profile") {
|
||||
# The following define excludes debugging code from Flutter.
|
||||
args += [ "-Ddart.vm.profile=true" ]
|
||||
}
|
||||
|
||||
@@ -4,6 +4,5 @@
|
||||
|
||||
group("integration_flutter_tests") {
|
||||
testonly = true
|
||||
# TODO(fxbug.dev/86055): re-enable
|
||||
# deps = [ "embedder:tests" ]
|
||||
deps = [ "embedder:tests" ]
|
||||
}
|
||||
|
||||
@@ -5,20 +5,19 @@
|
||||
import("//flutter/tools/fuchsia/dart/dart_build_config.gni")
|
||||
|
||||
declare_args() {
|
||||
# Forces all Dart apps to build in product mode which is a
|
||||
# stripped down version of the VM running in AOT mode.
|
||||
dart_force_product = false
|
||||
|
||||
# TODO(fxbug.dev/64153) renable aot builds
|
||||
# if (dart_force_product) {
|
||||
# Product AOT
|
||||
# dart_default_build_cfg = dart_release_build_cfg
|
||||
# } else if (is_debug) {
|
||||
# TODO(fxbug.dev/86941) enable dart_runner_integration_tests
|
||||
# TODO(fxbug.dev/64153) renable dart runner aot builds
|
||||
# if (flutter_runtime_mode == "release") {
|
||||
# # Product AOT
|
||||
# dart_default_build_cfg = dart_release_build_cfg
|
||||
# } else if (flutter_runtime_mode == "jit_release") {
|
||||
# # Product JIT
|
||||
# dart_default_build_cfg = dart_jit_release_build_cfg
|
||||
# } else if (flutter_runtime_mode == "debug") {
|
||||
# Non-product JIT
|
||||
dart_default_build_cfg = dart_debug_build_cfg
|
||||
|
||||
# } else {
|
||||
# Non-product AOT
|
||||
# dart_default_build_cfg = dart_profile_build_cfg
|
||||
# }
|
||||
# } else { # "profile"
|
||||
# # Non-product AOT
|
||||
# dart_default_build_cfg = dart_profile_build_cfg
|
||||
# }
|
||||
}
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
import("//flutter/common/config.gni")
|
||||
|
||||
# Builds the component in a non-product JIT build. This will
|
||||
# launch the vm service in the runner.
|
||||
dart_debug_build_cfg = {
|
||||
@@ -13,42 +15,52 @@ dart_debug_build_cfg = {
|
||||
enable_asserts = true
|
||||
}
|
||||
|
||||
# TODO(richkadel): Don't confuse these settings with those in dart_build_config.gni,
|
||||
# in fact, do I really need both? Can I drop flutter_build_config.gni?
|
||||
# Builds the component in a non-product AOT build. This will
|
||||
# launch the vm service in the runner.
|
||||
# This configuration is not compatible with a --release build since the
|
||||
# profile aot runner is built without asserts.
|
||||
dart_aot_debug_build_cfg = {
|
||||
runtime_meta = "//flutter/shell/platform/fuchsia/dart_runner/meta/aot_runtime"
|
||||
runner_dep = "//flutter/shell/platform/fuchsia/dart_runner:dart_aot_runner"
|
||||
platform_name = "dart_runner"
|
||||
is_aot = true
|
||||
is_product = false
|
||||
enable_asserts = true
|
||||
}
|
||||
|
||||
# # Builds the component in a non-product AOT build. This will
|
||||
# # launch the vm service in the runner.
|
||||
# # This configuration is not compatible with a --release build since the
|
||||
# # profile aot runner is built without asserts.
|
||||
# dart_aot_debug_build_cfg = {
|
||||
# runtime_meta = "//flutter/shell/platform/fuchsia/dart_runner/meta/aot_runtime"
|
||||
# runner_dep = "//flutter/shell/platform/fuchsia/dart_runner:dart_aot_runner"
|
||||
# platform_name = "dart_runner"
|
||||
# is_aot = true
|
||||
# is_product = false
|
||||
# enable_asserts = true
|
||||
# }
|
||||
# Builds the component in a non-product AOT build. This will
|
||||
# launch the vm service in the runner.
|
||||
dart_profile_build_cfg = {
|
||||
runtime_meta = "//flutter/shell/platform/fuchsia/dart_runner/meta/aot_runtime"
|
||||
runner_dep = "//flutter/shell/platform/fuchsia/dart_runner:dart_aot_runner"
|
||||
platform_name = "dart_runner"
|
||||
is_aot = true
|
||||
is_product = false
|
||||
enable_asserts = false
|
||||
}
|
||||
|
||||
# # Builds the component in a non-product AOT build. This will
|
||||
# # launch the vm service in the runner.
|
||||
# dart_profile_build_cfg = {
|
||||
# runtime_meta = "//flutter/shell/platform/fuchsia/dart_runner/meta/aot_runtime"
|
||||
# runner_dep = "//flutter/shell/platform/fuchsia/dart_runner:dart_aot_runner"
|
||||
# platform_name = "dart_runner"
|
||||
# is_aot = true
|
||||
# is_product = false
|
||||
# enable_asserts = false
|
||||
# }
|
||||
# Builds the component in a product JIT build. This will
|
||||
# not launch the vm service in the runner.
|
||||
dart_jit_release_build_cfg = {
|
||||
runtime_meta =
|
||||
"//flutter/shell/platform/fuchsia/dart_runner/meta/jit_product_runtime"
|
||||
runner_dep =
|
||||
"//flutter/shell/platform/fuchsia/dart_runner:dart_jit_product_runner"
|
||||
platform_name = "dart_runner"
|
||||
is_aot = true
|
||||
is_product = true
|
||||
enable_asserts = false
|
||||
}
|
||||
|
||||
# # Builds the component in a product AOT build. This will
|
||||
# # not launch the vm service in the runner.
|
||||
# dart_release_build_cfg = {
|
||||
# runtime_meta =
|
||||
# "//flutter/shell/platform/fuchsia/dart_runner/meta/aot_product_runtime"
|
||||
# runner_dep =
|
||||
# "//flutter/shell/platform/fuchsia/dart_runner:dart_aot_product_runner"
|
||||
# platform_name = "dart_runner"
|
||||
# is_aot = true
|
||||
# is_product = true
|
||||
# enable_asserts = false
|
||||
# }
|
||||
# Builds the component in a product AOT build. This will
|
||||
# not launch the vm service in the runner.
|
||||
dart_release_build_cfg = {
|
||||
runtime_meta =
|
||||
"//flutter/shell/platform/fuchsia/dart_runner/meta/aot_product_runtime"
|
||||
runner_dep =
|
||||
"//flutter/shell/platform/fuchsia/dart_runner:dart_aot_product_runner"
|
||||
platform_name = "dart_runner"
|
||||
is_aot = true
|
||||
is_product = true
|
||||
enable_asserts = false
|
||||
}
|
||||
|
||||
@@ -157,10 +157,9 @@ template("dart_kernel") {
|
||||
_kernel_deps += invoker.deps
|
||||
}
|
||||
|
||||
# TODO(richkadel): The manifest is currently used by flutter_dart_component, to populate the file
|
||||
# it calls `_convert_kernel_manifest_file`, so I can't make this conditional, right? Or is it
|
||||
# possible to build Dart AOT Fuchsia packages/components without the data in this file (in which
|
||||
# case I should make it conditional there as well)?
|
||||
# TODO(richkadel): The manifest (if not using AOT) is used by
|
||||
# flutter_dart_component, to populate the file it calls
|
||||
# `_convert_kernel_manifest_file`.
|
||||
_generate_manifest = false
|
||||
if (invoker.is_aot) {
|
||||
not_needed(invoker, [ "generate_manifest" ])
|
||||
@@ -291,17 +290,11 @@ template("dart_kernel") {
|
||||
]
|
||||
}
|
||||
|
||||
# TODO(richkadel): NEED TO VALIDATE AND/OR CLEAN UP `is_debug` and `is_aot`.
|
||||
# `is_debug` is set by the flutter `gn` script to true if --unoptimized,
|
||||
# but `--unoptimized` is broken for Fuchsia, according to an open bug in
|
||||
# github flutter/flutter issues. But I have a feeling `is_debug` from
|
||||
# Fuchsia scripts may have a different meaning for dart/flutter at least.
|
||||
# if (is_debug) {
|
||||
args += [ "--embed-sources" ]
|
||||
|
||||
# } else {
|
||||
# args += [ "--no-embed-sources" ]
|
||||
# }
|
||||
if (flutter_runtime_mode == "debug") {
|
||||
args += [ "--embed-sources" ]
|
||||
} else {
|
||||
args += [ "--no-embed-sources" ]
|
||||
}
|
||||
|
||||
if (invoker.is_aot) {
|
||||
args += [
|
||||
@@ -320,12 +313,10 @@ template("dart_kernel") {
|
||||
# This define excludes debugging and profiling code from Flutter.
|
||||
args += [ "-Ddart.vm.product=true" ]
|
||||
} else {
|
||||
# TODO(richkadel): I'm pretty sure we want to assume is_debug even if that's
|
||||
# not what's set by gn flags (--unoptimized = false because true is currentlyh broken for Fuchsia?)
|
||||
# if (!is_debug) {
|
||||
# # The following define excludes debugging code from Flutter.
|
||||
# args += [ "-Ddart.vm.profile=true" ]
|
||||
# }
|
||||
if (flutter_runtime_mode == "profile") {
|
||||
# The following define excludes debugging code from Flutter.
|
||||
args += [ "-Ddart.vm.profile=true" ]
|
||||
}
|
||||
}
|
||||
|
||||
if (defined(invoker.main_dart)) {
|
||||
|
||||
@@ -49,7 +49,7 @@ template("dart_kernel") {
|
||||
"--output=" + rebase_path(output),
|
||||
]
|
||||
|
||||
if (is_debug) {
|
||||
if (flutter_runtime_mode == "debug") {
|
||||
args += [ "--embed-sources" ]
|
||||
} else {
|
||||
args += [ "--no-embed-sources" ]
|
||||
@@ -75,7 +75,7 @@ template("dart_kernel") {
|
||||
# Also, this define excludes debugging and profiling code from Flutter.
|
||||
args += [ "-Ddart.vm.product=true" ]
|
||||
} else {
|
||||
if (!is_debug) {
|
||||
if (flutter_runtime_mode == "profile") {
|
||||
# The following define excludes debugging code from Flutter.
|
||||
args += [ "-Ddart.vm.profile=true" ]
|
||||
}
|
||||
|
||||
@@ -5,27 +5,17 @@
|
||||
import("//flutter/tools/fuchsia/flutter/flutter_build_config.gni")
|
||||
|
||||
declare_args() {
|
||||
# If set to true, will force the runners to be built in
|
||||
# product mode which means they will not have an exposed vm service
|
||||
flutter_force_product = false
|
||||
}
|
||||
|
||||
declare_args() {
|
||||
# TODO(richkadel): Make sure we're using 'debug' (non-aot) consistently,
|
||||
# across dart and flutter rules.
|
||||
# Since we're not REALLY building flutter apps, can I just git rid of this
|
||||
# setting, and the configs in flutter/tools/fuchsia/flutter/flutter_build_config.gni?
|
||||
# I think it's confusing to have both that one and .../dart/dart_build_config.gni.
|
||||
|
||||
# if (flutter_force_product) {
|
||||
# # Product AOT
|
||||
# flutter_default_build_cfg = flutter_release_build_cfg
|
||||
# } else if (is_debug) {
|
||||
# Non-product JIT
|
||||
flutter_default_build_cfg = flutter_debug_build_cfg
|
||||
|
||||
# } else {
|
||||
# # Non-product AOT
|
||||
# flutter_default_build_cfg = flutter_profile_build_cfg
|
||||
# }
|
||||
if (flutter_runtime_mode == "release") {
|
||||
# Product AOT
|
||||
flutter_default_build_cfg = flutter_release_build_cfg
|
||||
} else if (flutter_runtime_mode == "jit_release") {
|
||||
# Product JIT
|
||||
flutter_default_build_cfg = flutter_jit_release_build_cfg
|
||||
} else if (flutter_runtime_mode == "debug") {
|
||||
# Non-product JIT
|
||||
flutter_default_build_cfg = flutter_debug_build_cfg
|
||||
} else { # "profile"
|
||||
# Non-product AOT
|
||||
flutter_default_build_cfg = flutter_profile_build_cfg
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,8 +2,11 @@
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
import("//flutter/common/config.gni")
|
||||
|
||||
# Non-product JIT is "debug". It launches the vm service.
|
||||
# Non-product AOT is "profile". It also launches the vm service, but lacks tools that rely on JIT.
|
||||
# Product JIT is "release". It doesn't launch the vm service.
|
||||
# Product AOT is "release". It doesn't launch the vm service.
|
||||
|
||||
# Builds the component in a non-product JIT build. This will
|
||||
@@ -17,43 +20,54 @@ flutter_debug_build_cfg = {
|
||||
enable_asserts = true
|
||||
}
|
||||
|
||||
# TODO(richkadel): Don't confuse these settings with those in dart_build_config.gni,
|
||||
# in fact, do I really need both? Can we just use the settings in dart_build_config.gni?
|
||||
# Builds the component in a non-product AOT build. This will
|
||||
# launch the vm service in the runner.
|
||||
# This configuration is not compatible with a --release build since the
|
||||
# profile aot runner is built without asserts.
|
||||
flutter_aot_debug_build_cfg = {
|
||||
runtime_meta = "//flutter/shell/platform/fuchsia/flutter/meta/aot_runtime"
|
||||
runner_dep = "//flutter/shell/platform/fuchsia/flutter:flutter_aot_runner"
|
||||
platform_name = "flutter_runner"
|
||||
is_aot = true
|
||||
is_product = false
|
||||
enable_asserts = true
|
||||
}
|
||||
|
||||
# # Builds the component in a non-product AOT build. This will
|
||||
# # launch the vm service in the runner.
|
||||
# # This configuration is not compatible with a --release build since the
|
||||
# # profile aot runner is built without asserts.
|
||||
# flutter_aot_debug_build_cfg = {
|
||||
# runtime_meta = "//flutter/shell/platform/fuchsia/flutter/meta/aot_runtime"
|
||||
# runner_dep = "//flutter/shell/platform/fuchsia/flutter:flutter_aot_runner"
|
||||
# platform_name = "flutter_runner"
|
||||
# is_aot = true
|
||||
# is_product = false
|
||||
# enable_asserts = true
|
||||
# }
|
||||
# Builds the component in a non-product AOT build. This will
|
||||
# launch the vm service in the runner.
|
||||
flutter_profile_build_cfg = {
|
||||
runtime_meta =
|
||||
"//flutter/shell/platform/fuchsia/flutter/meta/aot_runtime" # profile
|
||||
# runner
|
||||
runner_dep = "//flutter/shell/platform/fuchsia/flutter:flutter_aot_runner"
|
||||
platform_name = "flutter_runner"
|
||||
is_aot = true
|
||||
is_product = false
|
||||
enable_asserts = false
|
||||
}
|
||||
|
||||
# # Builds the component in a non-product AOT build. This will
|
||||
# # launch the vm service in the runner.
|
||||
# flutter_profile_build_cfg = {
|
||||
# runtime_meta =
|
||||
# "//flutter/shell/platform/fuchsia/flutter/meta/aot_runtime" # profile
|
||||
# # runner
|
||||
# runner_dep = "//flutter/shell/platform/fuchsia/flutter:flutter_aot_runner"
|
||||
# platform_name = "flutter_runner"
|
||||
# is_aot = true
|
||||
# is_product = false
|
||||
# enable_asserts = false
|
||||
# }
|
||||
# Builds the component in a product JIT build. This will
|
||||
# not launch the vm service in the runner.
|
||||
flutter_jit_release_build_cfg = {
|
||||
runtime_meta =
|
||||
"//flutter/shell/platform/fuchsia/flutter/meta/jit_product_runtime"
|
||||
runner_dep =
|
||||
"//flutter/shell/platform/fuchsia/flutter:flutter_jit_product_runner"
|
||||
platform_name = "flutter_runner"
|
||||
is_aot = false
|
||||
is_product = true
|
||||
enable_asserts = false
|
||||
}
|
||||
|
||||
# # Builds the component in a product AOT build. This will
|
||||
# # not launch the vm service in the runner.
|
||||
# flutter_release_build_cfg = {
|
||||
# runtime_meta =
|
||||
# "//flutter/shell/platform/fuchsia/flutter/meta/aot_product_runtime"
|
||||
# runner_dep = "//flutter/shell/platform/fuchsia/flutter:flutter_aot_product_runner"
|
||||
# platform_name = "flutter_runner"
|
||||
# is_aot = true
|
||||
# is_product = true
|
||||
# enable_asserts = false
|
||||
# }
|
||||
# Builds the component in a product AOT build. This will
|
||||
# not launch the vm service in the runner.
|
||||
flutter_release_build_cfg = {
|
||||
runtime_meta =
|
||||
"//flutter/shell/platform/fuchsia/flutter/meta/aot_product_runtime"
|
||||
runner_dep =
|
||||
"//flutter/shell/platform/fuchsia/flutter:flutter_aot_product_runner"
|
||||
platform_name = "flutter_runner"
|
||||
is_aot = true
|
||||
is_product = true
|
||||
enable_asserts = false
|
||||
}
|
||||
|
||||
@@ -154,11 +154,6 @@ template("flutter_dart_component") {
|
||||
# the kernel will ignore this variable.
|
||||
generate_manifest = true
|
||||
|
||||
# TODO(richkadel): verify the above statement about aot is true (AOT builds,
|
||||
# using these new scripts derived from Fuchsia, have not been tested yet);
|
||||
# because as of now, the Fuchsia package/component appears to require data
|
||||
# from `_convert_kernel_manifest`.
|
||||
|
||||
platform_name = build_cfg.platform_name
|
||||
product = build_cfg.is_product
|
||||
is_aot = build_cfg.is_aot
|
||||
@@ -230,7 +225,6 @@ template("flutter_dart_component") {
|
||||
# No asserts in debug or release product.
|
||||
# No asserts in non-product release
|
||||
# Yes asserts in non-product debug.
|
||||
# if (is_debug && !dart_force_product)
|
||||
if (build_cfg.enable_asserts) {
|
||||
args += [ "--enable_asserts" ]
|
||||
}
|
||||
@@ -263,17 +257,23 @@ template("flutter_dart_component") {
|
||||
manifest = _manifest
|
||||
manifest_output_name = _manifest_output_name
|
||||
|
||||
_convert_kernel_target_name =
|
||||
"${_kernel_target_name}_convert_kernel_manifest"
|
||||
_convert_kernel_manifest_file =
|
||||
# TODO(richkadel): This is prefixed by "dartlang/", which is not found.
|
||||
# Is the current toolchain set incorrectly somewhere?
|
||||
string_replace(
|
||||
"${target_gen_dir}/${_convert_kernel_target_name}_kernel_manifest.json",
|
||||
"dartlang/",
|
||||
"")
|
||||
if (!build_cfg.is_aot) {
|
||||
_convert_kernel_target_name =
|
||||
"${_kernel_target_name}_convert_kernel_manifest"
|
||||
_convert_kernel_manifest_file =
|
||||
# TODO(richkadel): This is prefixed by "dartlang/", which is not found.
|
||||
# Is the current toolchain set incorrectly somewhere?
|
||||
string_replace(
|
||||
"${target_gen_dir}/${_convert_kernel_target_name}_kernel_manifest.json",
|
||||
"dartlang/",
|
||||
"")
|
||||
|
||||
resources_in_json_files = [ rebase_path(_convert_kernel_manifest_file) ]
|
||||
# TODO(richkadel): Adds the json resource names in the manifest to the
|
||||
# collection of `json_of_resources` files, read by
|
||||
# `prepare_package_inputs.py`. These resources are computed (only known)
|
||||
# at some point during the build/compile phase.
|
||||
resources_in_json_files = [ rebase_path(_convert_kernel_manifest_file) ]
|
||||
}
|
||||
}
|
||||
|
||||
group(target_name) {
|
||||
|
||||
Reference in New Issue
Block a user