blob: 446da6e3b837d80315db83e5689b7ae2564d8751 [file] [log] [blame]
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("$flutter_root/lib/ui/dart_ui.gni")
import("//third_party/dart/runtime/bin/io_sources.gni")
import("//third_party/dart/runtime/lib/async_sources.gni")
import("//third_party/dart/runtime/lib/collection_sources.gni")
import("//third_party/dart/runtime/lib/convert_sources.gni")
import("//third_party/dart/runtime/lib/core_sources.gni")
import("//third_party/dart/runtime/lib/developer_sources.gni")
import("//third_party/dart/runtime/lib/internal_sources.gni")
import("//third_party/dart/runtime/lib/isolate_sources.gni")
import("//third_party/dart/runtime/lib/math_sources.gni")
import("//third_party/dart/runtime/lib/mirrors_sources.gni")
import("//third_party/dart/runtime/lib/typed_data_sources.gni")
import("//third_party/dart/utils/generate_patch_sdk.gni")
if (is_fuchsia) {
import("//build/dart/toolchain.gni")
import("//topaz/public/dart-pkg/fuchsia/sdk_ext.gni")
import("//topaz/public/dart-pkg/zircon/sdk_ext.gni")
import("//topaz/public/lib/ui/flutter/sdk_ext/sdk_ext.gni")
}
bindings_output_dir = "$root_gen_dir/sky/bindings"
copy("generate_dart_ui") {
sources = dart_ui_files
outputs = [
"$bindings_output_dir/dart_ui/{{source_file_part}}",
]
}
if (is_fuchsia) {
action("generate_package_map") {
dart_deps = [
"//third_party/dart-pkg/git/flutter/packages/flutter:flutter",
"//topaz/public/lib/app/dart:dart",
"//topaz/public/lib/fidl/dart",
]
dot_packages_file = "$target_gen_dir/snapshot.packages"
outputs = [
dot_packages_file
]
deps = []
foreach(dep, dart_deps) {
deps += [ "$dep($dart_toolchain)" ]
}
depfile = "$dot_packages_file.d"
script = "//build/dart/gen_dot_packages.py"
args = [
"--out",
rebase_path(dot_packages_file, root_build_dir),
"--source-dir",
rebase_path("."),
"--root-build-dir",
rebase_path(root_build_dir),
"--root-gen-dir",
rebase_path(dart_root_gen_dir),
"--package-name",
"snapshot_root",
"--depfile",
rebase_path(depfile),
"--deps",
] + dart_deps
}
}
action("generate_snapshot_bin") {
if (is_fuchsia) {
snapshot_dart = "snapshot_fuchsia.dart"
# TODO(rmacnak): Fuchsia cross builds use the wrong Dart target
# architecture, and have added steps that depend on this error for
# reasonable build times (e.g., invoking the analyzer).
if (target_cpu == host_cpu) {
snapshot_kind = "core-jit"
} else {
snapshot_kind = "core"
}
} else {
snapshot_dart = "snapshot.dart"
snapshot_kind = "core"
}
deps = [
":generate_dart_ui",
"//third_party/dart/runtime/bin:gen_snapshot($host_toolchain)",
]
depfile = "$target_gen_dir/core_snapshot.d"
inputs = [
"//third_party/dart/runtime/tools/create_snapshot_bin.py",
snapshot_dart,
] + dart_ui_files
if (is_fuchsia) {
deps += [ ":generate_package_map" ]
inputs += [ "fuchsia_compilation_trace.txt" ]
}
vm_snapshot_data = "$target_gen_dir/vm_isolate_snapshot.bin"
vm_snapshot_instructions = "$target_gen_dir/vm_snapshot_instructions.bin"
isolate_snapshot_data = "$target_gen_dir/isolate_snapshot.bin"
isolate_snapshot_instructions =
"$target_gen_dir/isolate_snapshot_instructions.bin"
outputs = [
vm_snapshot_data,
vm_snapshot_instructions,
isolate_snapshot_data,
isolate_snapshot_instructions,
]
rebased_dart_ui_path = rebase_path(dart_ui_path)
gen_snapshot_dir =
get_label_info("//third_party/dart/runtime/bin:gen_snapshot($host_toolchain)",
"root_out_dir")
script = "//third_party/dart/runtime/tools/create_snapshot_bin.py"
args = [
"--executable",
rebase_path("$gen_snapshot_dir/gen_snapshot"),
"--script",
rebase_path(snapshot_dart),
"--snapshot_kind",
snapshot_kind,
"--vm_flag",
"--await_is_keyword",
"--vm_flag",
"--enable_mirrors=false",
"--vm_output_bin",
rebase_path(vm_snapshot_data, root_build_dir),
"--vm_instructions_output_bin",
rebase_path(vm_snapshot_instructions, root_build_dir),
"--isolate_output_bin",
rebase_path(isolate_snapshot_data, root_build_dir),
"--isolate_instructions_output_bin",
rebase_path(isolate_snapshot_instructions, root_build_dir),
"--url_mapping=dart:ui,$rebased_dart_ui_path",
"--vm_flag",
"--dependencies=" + rebase_path(depfile),
]
if (is_debug) {
args += [
"--vm_flag",
"--enable_asserts",
"--vm_flag",
"--enable_type_checks",
"--vm_flag",
"--error_on_bad_type",
"--vm_flag",
"--error_on_bad_override",
]
}
if (is_fuchsia) {
inputs += zircon_sdk_ext_files + mozart_dart_sdk_ext_files
zircon_path = rebase_path(zircon_sdk_ext_lib)
fuchsia_path = rebase_path(fuchsia_sdk_ext_lib)
mozart_internal_path = rebase_path(mozart_dart_sdk_ext_lib)
args += [
"--url_mapping=dart:zircon,$zircon_path",
"--url_mapping=dart:fuchsia,$fuchsia_path",
"--url_mapping=dart:mozart.internal,$mozart_internal_path",
"--packages",
rebase_path("$target_gen_dir/snapshot.packages"),
"--load_compilation_trace",
rebase_path("fuchsia_compilation_trace.txt"),
]
}
}
# Generates an assembly file defining a given symbol with the bytes from a
# binary file. Places the symbol in a text section if 'executable' is true,
# otherwise places the symbol in a read-only data section.
template("bin_to_assembly") {
assert(defined(invoker.deps), "Must define deps")
assert(defined(invoker.input), "Must define input binary file")
assert(defined(invoker.output), "Must define output assembly file")
assert(defined(invoker.symbol), "Must define symbol name")
assert(defined(invoker.executable), "Must define boolean executable")
action(target_name) {
deps = invoker.deps
script = "//third_party/dart/runtime/tools/bin_to_assembly.py"
args = [
"--input",
rebase_path(invoker.input),
"--output",
rebase_path(invoker.output),
"--symbol_name",
invoker.symbol,
"--target_os",
current_os,
]
if (invoker.executable) {
args += [ "--executable" ]
}
inputs = [
script,
invoker.input,
]
outputs = [
invoker.output,
]
}
}
bin_to_assembly("vm_snapshot_data_assembly") {
deps = [
":generate_snapshot_bin",
]
input = "$target_gen_dir/vm_isolate_snapshot.bin"
output = "$target_gen_dir/vm_snapshot_data.S"
symbol = "kDartVmSnapshotData"
executable = false
}
bin_to_assembly("vm_snapshot_instructions_assembly") {
deps = [
":generate_snapshot_bin",
]
input = "$target_gen_dir/vm_snapshot_instructions.bin"
output = "$target_gen_dir/vm_snapshot_instructions.S"
symbol = "kDartVmSnapshotInstructions"
executable = true
}
bin_to_assembly("isolate_snapshot_data_assembly") {
deps = [
":generate_snapshot_bin",
]
input = "$target_gen_dir/isolate_snapshot.bin"
output = "$target_gen_dir/isolate_snapshot_data.S"
symbol = "kDartIsolateCoreSnapshotData"
executable = false
}
bin_to_assembly("isolate_snapshot_instructions_assembly") {
deps = [
":generate_snapshot_bin",
]
input = "$target_gen_dir/isolate_snapshot_instructions.bin"
output = "$target_gen_dir/isolate_snapshot_instructions.S"
symbol = "kDartIsolateCoreSnapshotInstructions"
executable = true
}
source_set("snapshot") {
deps = [
":isolate_snapshot_data_assembly",
":isolate_snapshot_instructions_assembly",
":vm_snapshot_data_assembly",
":vm_snapshot_instructions_assembly",
]
sources = [
"$target_gen_dir/isolate_snapshot_data.S",
"$target_gen_dir/isolate_snapshot_instructions.S",
"$target_gen_dir/vm_snapshot_data.S",
"$target_gen_dir/vm_snapshot_instructions.S",
]
}
# Generate flutter_patched_sdk
template("process_library_source") {
assert(defined(invoker.libsources), "Need libsources in $target_name")
assert(defined(invoker.output), "Need output in $target_name")
action(target_name) {
deps = [
":generate_dart_ui",
]
visibility = [ ":*" ] # Only targets in this file can see this.
libsources = invoker.libsources
script = invoker.script
inputs = invoker.inputs + libsources
outputs = [
invoker.output,
]
args = invoker.args + rebase_path(libsources, root_build_dir)
}
}
template("concatenate_patch") {
assert(defined(invoker.libsources), "Need a sources in $target_name")
assert(defined(invoker.output), "Need an output in $target_name")
process_library_source(target_name) {
libsources = invoker.libsources
inputs = []
output = invoker.output
script = "//third_party/dart/runtime/tools/concatenate_patches.py"
args = [
"--output",
rebase_path(output, root_build_dir),
]
}
}
template("generate_vm_patched_sdk") {
assert(defined(invoker.libraries), "Need libraries in $target_name")
concatenation_target_names = []
# Concatenate vm library patches.
foreach(library, invoker.libraries) {
name = library[0]
target_output = "$target_gen_dir/patches/${name}_patch.dart"
concatenate_patch("concatenate_${name}_patch") {
libsources = rebase_path(library[1], ".", library[2])
output = target_output
}
concatenation_target_names += [ ":concatenate_${name}_patch" ]
}
# Build the patched sdk out of the concatenated patches and the special
# libraries.
generate_patched_sdk(target_name) {
mode = "flutter"
deps = concatenation_target_names + ["//third_party/dart/runtime/vm:kernel_platform_files"]
input_patches_dir = "$target_gen_dir/patches"
patched_sdk_dir = "flutter_patched_sdk"
outputs = [
"$root_out_dir/${patched_sdk_dir}/lib/libraries.json",
]
}
}
generate_vm_patched_sdk("flutter_patched_sdk") {
libraries = [
[
"async",
async_runtime_sources,
"//third_party/dart/runtime/lib",
],
[
"collection",
collection_runtime_sources,
"//third_party/dart/runtime/lib",
],
[
"convert",
convert_runtime_sources,
"//third_party/dart/runtime/lib",
],
[
"core",
core_runtime_sources,
"//third_party/dart/runtime/lib",
],
[
"developer",
developer_runtime_sources,
"//third_party/dart/runtime/lib",
],
[
"internal",
internal_runtime_sources,
"//third_party/dart/runtime/lib",
],
[
"io",
io_runtime_sources,
"//third_party/dart/runtime/bin",
],
[
"isolate",
isolate_runtime_sources,
"//third_party/dart/runtime/lib",
],
[
"math",
math_runtime_sources,
"//third_party/dart/runtime/lib",
],
[
"mirrors",
mirrors_runtime_sources,
"//third_party/dart/runtime/lib",
],
[
"typed_data",
typed_data_runtime_sources,
"//third_party/dart/runtime/lib",
],
]
}
action("compile_platform") {
script = "//third_party/dart/tools/compile_platform.py"
sources = [
"$root_out_dir/flutter_patched_sdk/lib/libraries.json",
]
outputs = [
"$root_out_dir/flutter_patched_sdk/platform.dill",
"$root_out_dir/flutter_patched_sdk/vm_outline.dill",
]
inputs = []
deps = [
":flutter_patched_sdk",
]
depfile = "$root_out_dir/flutter_patched_sdk/platform.dill.d"
args = [
"--target=flutter",
"dart:core"
] + rebase_path(sources, root_build_dir) +
rebase_path(outputs, root_build_dir)
}
group("kernel_platform_files") {
public_deps = [
":compile_platform",
]
}