mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
This file doesn't belong in the SDK because it is an implementation detail of the Sky engine. Instead, this CL moves the code for dart:sky.internals into the snapshot. This CL is a step towards merging dart:sky.internals with dart:sky, which also resides in the snapshot. R=eseidel@chromium.org Review URL: https://codereview.chromium.org/1200953007.
413 lines
11 KiB
Plaintext
413 lines
11 KiB
Plaintext
# Copyright 2015 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("//sky/engine/bindings/bindings.gni")
|
|
import("//sky/engine/core/core.gni")
|
|
|
|
source_set("bindings") {
|
|
sources = [
|
|
"builtin.cc",
|
|
"builtin.h",
|
|
"builtin_natives.cc",
|
|
"builtin_natives.h",
|
|
"builtin_sky.cc",
|
|
"builtin_sky.h",
|
|
"custom/dart_element_custom.cc",
|
|
"dart_callback.cc",
|
|
"dart_callback.h",
|
|
"dart_event_listener.cc",
|
|
"dart_event_listener.h",
|
|
"exception_messages.cc",
|
|
"exception_messages.h",
|
|
"exception_state.cc",
|
|
"exception_state.h",
|
|
"exception_state_placeholder.cc",
|
|
"exception_state_placeholder.h",
|
|
"mojo_natives.cc",
|
|
"mojo_natives.h",
|
|
"nullable.h",
|
|
"scheduled_action.cc",
|
|
"scheduled_action.h",
|
|
]
|
|
|
|
defines = [ "DART_IO_SECURE_SOCKET_DISABLED" ]
|
|
|
|
deps = [
|
|
"//base",
|
|
"//dart/runtime/bin:embedded_dart_io",
|
|
"//dart/runtime:libdart",
|
|
"//mojo/public/c/system",
|
|
"//mojo/public/cpp/system",
|
|
"//sky/engine/core:prerequisites",
|
|
"//sky/engine/platform:platform",
|
|
"//sky/engine/tonic",
|
|
"//sky/engine/wtf",
|
|
":generated_bindings",
|
|
":snapshot_cc",
|
|
]
|
|
include_dirs = [
|
|
"..",
|
|
"$root_build_dir",
|
|
rebase_path("//dart/runtime"),
|
|
]
|
|
}
|
|
|
|
action("generate_snapshot_bin") {
|
|
deps = [
|
|
"//dart/runtime/bin:gen_snapshot($host_toolchain)",
|
|
":generate_dart_sky",
|
|
]
|
|
inputs = [
|
|
"//dart/runtime/tools/create_snapshot_bin.py",
|
|
"//mojo/public/dart/sdk_ext/internal.dart",
|
|
"//mojo/public/dart/sdk_ext/src/handle_watcher.dart",
|
|
"//mojo/public/dart/sdk_ext/src/natives.dart",
|
|
"//mojo/public/dart/sdk_ext/src/timer_queue.dart",
|
|
"//sky/engine/bindings/builtin_natives.dart",
|
|
"//sky/engine/bindings/sky_internals.dart",
|
|
"snapshot.dart",
|
|
]
|
|
vm_isolate_snapshot = "$target_gen_dir/vm_isolate_snapshot.bin"
|
|
isolate_snapshot = "$target_gen_dir/isolate_snapshot.bin"
|
|
outputs = [
|
|
vm_isolate_snapshot,
|
|
isolate_snapshot,
|
|
]
|
|
|
|
dart_mojo_internal_path =
|
|
rebase_path("//mojo/public/dart/sdk_ext/internal.dart")
|
|
dart_sky_builtin_natives_path =
|
|
rebase_path("//sky/engine/bindings/builtin_natives.dart")
|
|
dart_sky_internals_path =
|
|
rebase_path("//sky/engine/bindings/sky_internals.dart")
|
|
dart_sky_path = rebase_path("$bindings_output_dir/dart_sky.dart")
|
|
|
|
gen_snapshot_dir =
|
|
get_label_info("//dart/runtime/bin:gen_snapshot($host_toolchain)",
|
|
"root_out_dir")
|
|
script = "//dart/runtime/tools/create_snapshot_bin.py"
|
|
|
|
args = [
|
|
"--executable",
|
|
rebase_path("$gen_snapshot_dir/gen_snapshot"),
|
|
"--package_root",
|
|
rebase_path("$root_gen_dir"),
|
|
"--script",
|
|
rebase_path("snapshot.dart"),
|
|
"--vm_output_bin",
|
|
rebase_path(vm_isolate_snapshot, root_build_dir),
|
|
"--output_bin",
|
|
rebase_path(isolate_snapshot, root_build_dir),
|
|
"--target_os",
|
|
target_os,
|
|
"--url_mapping=dart:mojo.internal,$dart_mojo_internal_path",
|
|
"--url_mapping=dart:sky,$dart_sky_path",
|
|
"--url_mapping=dart:sky.internals,$dart_sky_internals_path",
|
|
"--url_mapping=dart:sky_builtin_natives,$dart_sky_builtin_natives_path",
|
|
]
|
|
}
|
|
|
|
action("generate_snapshot_file") {
|
|
deps = [
|
|
":generate_snapshot_bin",
|
|
]
|
|
inputs = [
|
|
"//dart/runtime/tools/create_snapshot_file.py",
|
|
"snapshot.cc.tmpl",
|
|
"$target_gen_dir/vm_isolate_snapshot.bin",
|
|
"$target_gen_dir/isolate_snapshot.bin",
|
|
]
|
|
output = "$target_gen_dir/snapshot.cc"
|
|
outputs = [
|
|
output,
|
|
]
|
|
|
|
script = "//dart/runtime/tools/create_snapshot_file.py"
|
|
args = [
|
|
"--vm_input_bin",
|
|
rebase_path("$target_gen_dir/vm_isolate_snapshot.bin"),
|
|
"--input_bin",
|
|
rebase_path("$target_gen_dir/isolate_snapshot.bin"),
|
|
"--input_cc",
|
|
rebase_path("snapshot.cc.tmpl"),
|
|
"--output",
|
|
rebase_path(output),
|
|
]
|
|
}
|
|
|
|
source_set("snapshot_cc") {
|
|
sources = [
|
|
"$target_gen_dir/snapshot.cc",
|
|
]
|
|
|
|
deps = [
|
|
":generate_snapshot_file",
|
|
]
|
|
}
|
|
|
|
action("compute_interfaces_info_individual") {
|
|
sources = core_idl_files + core_dependency_idl_files
|
|
script = "$bindings_scripts_dir/compute_interfaces_info_individual.py"
|
|
output_file = "$bindings_output_dir/InterfacesInfoIndividual.pickle"
|
|
|
|
# TODO(eseidel): This is no longer needed, could pass these as args.
|
|
file_list = "$target_gen_dir/${target_name}_file_list.txt"
|
|
write_file(file_list, rebase_path(sources, root_build_dir))
|
|
|
|
# TODO(eseidel): Use depfile instead of this manual list.
|
|
inputs = [ "$bindings_scripts_dir/utilities.py" ] + sources
|
|
|
|
outputs = [
|
|
file_list,
|
|
output_file,
|
|
]
|
|
|
|
args = [
|
|
# TODO(eseidel): Remove component-dir, it is meaningless in sky.
|
|
"--component-dir",
|
|
"ignored",
|
|
"--idl-files-list",
|
|
rebase_path(file_list, root_build_dir),
|
|
"--interfaces-info-file",
|
|
rebase_path(output_file, root_build_dir),
|
|
|
|
# TODO(eseidel): only-if-changed is always true, remove
|
|
"--write-file-only-if-changed=1",
|
|
]
|
|
}
|
|
|
|
interfaces_info_individual_path =
|
|
"$bindings_output_dir/InterfacesInfoIndividual.pickle"
|
|
|
|
interfaces_info_overall_path =
|
|
"$bindings_output_dir/InterfacesInfoOverall.pickle"
|
|
|
|
action("compute_interfaces_info_overall") {
|
|
script = "$bindings_scripts_dir/compute_interfaces_info_overall.py"
|
|
|
|
inputs = [
|
|
interfaces_info_individual_path,
|
|
]
|
|
outputs = [
|
|
interfaces_info_overall_path,
|
|
]
|
|
|
|
args = [
|
|
# TODO(eseidel): only-if-changed is always true, remove
|
|
"--write-file-only-if-changed=1",
|
|
"--",
|
|
]
|
|
args += rebase_path(inputs, root_build_dir)
|
|
args += rebase_path(outputs, root_build_dir)
|
|
|
|
deps = [
|
|
":compute_interfaces_info_individual",
|
|
]
|
|
}
|
|
|
|
# This separate pre-caching step is required to use lex/parse table
|
|
# caching in PLY, since PLY itself does not check if the cache is
|
|
# valid, and thus may end up using a stale cache if this step hasn"t
|
|
# been run to update it.
|
|
#
|
|
# This action"s dependencies *is* the cache validation.
|
|
#
|
|
# GYP version: scripts.gyp:cached_lex_yacc_tables
|
|
action("cached_lex_yacc_tables") {
|
|
script = "scripts/blink_idl_parser.py"
|
|
|
|
inputs = idl_lexer_parser_files
|
|
outputs = [
|
|
"$bindings_output_dir/lextab.py",
|
|
"$bindings_output_dir/parsetab.pickle",
|
|
]
|
|
|
|
args = [ rebase_path(bindings_output_dir, root_build_dir) ]
|
|
}
|
|
|
|
# Runs the idl_compiler script over a list of sources.
|
|
#
|
|
# Parameters:
|
|
# sources = list of IDL files to compile
|
|
# output_dir = string containing the directory to put the output files.
|
|
template("idl_compiler") {
|
|
output_dir = invoker.output_dir
|
|
|
|
action_foreach(target_name) {
|
|
# TODO(brettw) GYP adds a "-S before the script name to skip "import site" to
|
|
# speed up startup. Figure out if we need this and do something similar (not
|
|
# really expressible in GN now).
|
|
script = "$bindings_scripts_dir/compiler.py"
|
|
|
|
inputs = idl_lexer_parser_files + idl_compiler_files
|
|
inputs += [
|
|
"scripts/templates/attributes_cpp.template",
|
|
"scripts/templates/callback_interface_cpp.template",
|
|
"scripts/templates/callback_interface_dart.template",
|
|
"scripts/templates/callback_interface_h.template",
|
|
"scripts/templates/interface_base_cpp.template",
|
|
"scripts/templates/interface_cpp.template",
|
|
"scripts/templates/interface_dart.template",
|
|
"scripts/templates/interface_h.template",
|
|
"scripts/templates/methods_cpp.template",
|
|
]
|
|
inputs += [
|
|
"$bindings_output_dir/lextab.py",
|
|
"$bindings_output_dir/parsetab.pickle",
|
|
|
|
# "$bindings_output_dir/cached_jinja_templates.stamp",
|
|
"//sky/engine/bindings/IDLExtendedAttributes.txt",
|
|
|
|
# If the dependency structure or public interface info (e.g.,
|
|
# [ImplementedAs]) changes, we rebuild all files, since we"re not
|
|
# computing dependencies file-by-file in the build.
|
|
# This data is generally stable.
|
|
interfaces_info_overall_path,
|
|
]
|
|
|
|
# Further, if any dependency (partial interface or implemented
|
|
# interface) changes, rebuild everything, since every IDL potentially
|
|
# depends on them, because we"re not computing dependencies
|
|
# file-by-file.
|
|
# FIXME: This is too conservative, and causes excess rebuilds:
|
|
# compute this file-by-file. http://crbug.com/341748
|
|
# This should theoretically just be the IDL files passed in.
|
|
inputs += core_dependency_idl_files
|
|
|
|
sources = invoker.sources
|
|
outputs = [
|
|
"$output_dir/Dart{{source_name_part}}.cpp",
|
|
"$output_dir/Dart{{source_name_part}}.h",
|
|
"$output_dir/{{source_name_part}}.dart",
|
|
]
|
|
|
|
args = [
|
|
"--output-dir",
|
|
rebase_path(output_dir, root_build_dir),
|
|
"--interfaces-info",
|
|
rebase_path(interfaces_info_overall_path, root_build_dir),
|
|
"--write-file-only-if-changed=1", # Always true for Ninja.
|
|
"{{source}}",
|
|
]
|
|
|
|
deps = [
|
|
":compute_interfaces_info_overall",
|
|
":cached_lex_yacc_tables",
|
|
|
|
# ":cached_jinja_templates",
|
|
]
|
|
}
|
|
}
|
|
|
|
idl_compiler("compile_idls") {
|
|
sources = core_idl_files
|
|
output_dir = bindings_output_dir
|
|
}
|
|
|
|
action("generate_dart_globals") {
|
|
sources = core_idl_files
|
|
script = "$bindings_scripts_dir/compiler.py"
|
|
|
|
file_list = "$target_gen_dir/${target_name}_file_list.txt"
|
|
write_file(file_list, rebase_path(sources, root_build_dir))
|
|
|
|
inputs = sources + idl_compiler_files
|
|
inputs += [
|
|
"scripts/templates/global_cpp.template",
|
|
"scripts/templates/global_h.template",
|
|
]
|
|
|
|
outputs = [
|
|
file_list,
|
|
"$bindings_output_dir/DartGlobal.h",
|
|
"$bindings_output_dir/DartGlobal.cpp",
|
|
]
|
|
|
|
args = [
|
|
"--output-directory",
|
|
rebase_path(bindings_output_dir, root_build_dir),
|
|
"--generate-globals",
|
|
rebase_path(bindings_output_dir, root_build_dir),
|
|
rebase_path(file_list, root_build_dir),
|
|
]
|
|
|
|
deps = [
|
|
":compile_idls",
|
|
]
|
|
}
|
|
|
|
copy("copy_core_dart_files") {
|
|
sources = core_dart_files
|
|
outputs = [
|
|
"$bindings_output_dir/Custom{{source_file_part}}",
|
|
]
|
|
}
|
|
|
|
action("generate_dart_sky") {
|
|
sources = core_idl_files + core_dart_files
|
|
script = "$bindings_scripts_dir/compiler.py"
|
|
|
|
file_list = "$target_gen_dir/${target_name}_file_list.txt"
|
|
write_file(file_list, rebase_path(sources, root_build_dir))
|
|
|
|
inputs =
|
|
sources + idl_compiler_files + [ "scripts/templates/dart_blink.template" ]
|
|
|
|
outputs = [
|
|
file_list,
|
|
"$bindings_output_dir/dart_sky.dart",
|
|
]
|
|
|
|
args = [
|
|
"--output-directory",
|
|
rebase_path(bindings_output_dir, root_build_dir),
|
|
"--generate-dart-blink",
|
|
rebase_path(bindings_output_dir, root_build_dir),
|
|
rebase_path(file_list, root_build_dir),
|
|
]
|
|
|
|
deps = [
|
|
":copy_core_dart_files",
|
|
":compile_idls",
|
|
]
|
|
}
|
|
|
|
source_set("generated_bindings") {
|
|
deps = [
|
|
"//base",
|
|
"//dart/runtime:libdart",
|
|
"//dart/runtime/vm:libdart_platform",
|
|
"//gpu/command_buffer/client:gles2_c_lib",
|
|
"//mojo/application",
|
|
"//mojo/common",
|
|
"//mojo/public/c/system",
|
|
"//mojo/public/cpp/bindings",
|
|
"//mojo/public/cpp/system",
|
|
"//mojo/public/cpp/utility",
|
|
"//mojo/public/interfaces/application",
|
|
"//mojo/services/keyboard/public/interfaces",
|
|
"//mojo/services/navigation/public/interfaces",
|
|
"//mojo/services/view_manager/public/cpp",
|
|
"//skia",
|
|
"//sky/engine/core:core_names",
|
|
"//sky/engine/wtf",
|
|
"//third_party/angle:translator",
|
|
"//third_party/iccjpeg",
|
|
"//third_party/libpng",
|
|
"//third_party/ots",
|
|
"//third_party/qcms",
|
|
"//third_party/zlib",
|
|
"//url",
|
|
":generate_dart_globals",
|
|
]
|
|
|
|
include_dirs = [
|
|
"..",
|
|
"$root_build_dir",
|
|
]
|
|
|
|
sources = get_target_outputs(":compile_idls")
|
|
sources += get_target_outputs(":generate_dart_globals")
|
|
}
|