blob: 97f848d35f1a9177c453754309affb470f88847b [file] [log] [blame]
# Copyright 2014 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.
# embedder specific template rules.
import("embedder.gni")
import("//mojo/dart/packages/mojo/sources.gni")
import("//mojo/dart/packages/mojo/sdk_ext_sources.gni")
group("embedder") {
deps = [
":dart_controller_no_snapshot",
":generate_snapshot_file",
"//mojo/dart/embedder/snapshotter",
]
}
source_set("dart_controller_no_snapshot") {
sources = [
"$target_gen_dir/dart_embedder_patch_resources.cc",
"$target_gen_dir/dart_embedder_service_isolate_resources.cc",
"builtin.cc",
"builtin.h",
"builtin_natives.cc",
"common.cc",
"common.h",
"dart_controller.cc",
"dart_controller.h",
"io/filter.cc",
"io/filter.h",
"io/internet_address.h",
"io/internet_address_posix.cc",
"mojo_dart_state.h",
"mojo_io_natives.cc",
"mojo_io_natives.h",
"vmservice.cc",
"vmservice.h",
]
deps = [
":dart_embedder_packages",
":generate_dart_embedder_patch_resources_cc",
":generate_dart_embedder_service_isolate_resources_cc",
"//base",
"//base:i18n",
"//dart/runtime:libdart",
"//dart/runtime/bin:libdart_embedder_noio",
"//dart/runtime/observatory:embedded_observatory_archive",
"//mojo/message_pump",
"//mojo/public/c/system",
"//mojo/public/cpp/environment",
"//mojo/public/cpp/system",
"//mojo/public/platform/dart:mojo_internal_impl",
"//mojo/services/files/interfaces",
"//mojo/services/network/interfaces",
"//third_party/zlib",
"//tonic",
]
defines = []
if (is_debug) {
defines += [ "DEBUG" ]
} else {
defines += [ "NDEBUG" ]
}
}
dart_embedder_resources("generate_dart_embedder_patch_resources_cc") {
inputs = [
"//mojo/dart/embedder/core/natives_patch.dart",
"//mojo/dart/embedder/io/file_patch.dart",
"//mojo/dart/embedder/io/filter_patch.dart",
"//mojo/dart/embedder/io/internet_address_patch.dart",
"//mojo/dart/embedder/io/mojo_patch.dart",
"//mojo/dart/embedder/io/platform_patch.dart",
"//mojo/dart/embedder/io/process_patch.dart",
"//mojo/dart/embedder/io/socket_patch.dart",
"//mojo/dart/embedder/io/server_socket_patch.dart",
]
root_prefix = "//mojo/dart/embedder/"
output = "$target_gen_dir/dart_embedder_patch_resources.cc"
table_name = "dart_embedder_patch"
}
group("dart_embedder_packages") {
deps = [
":dart_embedder_package_application",
":dart_embedder_package_bindings",
":dart_embedder_package_bindings_types",
":dart_embedder_package_files_service",
":dart_embedder_package_network",
":dart_embedder_package_network_service",
":dart_embedder_package_sdk",
]
}
dart_embedder_package("dart_embedder_package_application") {
package = "mojo/public/interfaces/application"
destination = "mojo/mojo"
}
dart_embedder_package("dart_embedder_package_bindings") {
package = "mojo/public/interfaces/bindings"
destination = "mojo/mojo"
}
dart_embedder_package("dart_embedder_package_bindings_types") {
package = "mojo/public/interfaces/bindings"
destination = "mojo/mojo/bindings/types"
is_bindings_types = true
}
dart_embedder_package("dart_embedder_package_network") {
package = "mojo/public/interfaces/network"
destination = "mojo/mojo"
}
dart_embedder_package("dart_embedder_package_network_service") {
package = "mojo/services/network/interfaces"
destination = "mojo_services/mojo"
}
dart_embedder_package("dart_embedder_package_files_service") {
package = "mojo/services/files/interfaces"
destination = "mojo_services/mojo/files"
}
action_foreach("dart_embedder_package_sdk") {
sources = rebase_path(package_mojo_sources + dart_mojo_internal_sdk_sources,
"",
"//mojo/dart/packages/mojo")
outputs = [
"$root_gen_dir/dart_embedder_packages/{{source_root_relative_dir}}/{{source_file_part}}",
]
script = rebase_path(
"//mojo/dart/embedder/tools/dart_rewrite_embedder_package_imports.py")
args = [
rebase_path("{{source}}", "", root_build_dir),
rebase_path(
"$root_gen_dir/dart_embedder_packages/{{source_root_relative_dir}}/{{source_file_part}}"),
]
}
vmservice_sources_gypi =
exec_script(
"//build/gypi_to_gn.py",
[ rebase_path("//dart/runtime/bin/vmservice/vmservice_sources.gypi") ],
"scope",
[ rebase_path("//dart/runtime/bin/vmservice/vmservice_sources.gypi") ])
dart_embedder_resources("generate_dart_embedder_service_isolate_resources_cc") {
inputs = rebase_path(vmservice_sources_gypi.sources,
"",
"//dart/runtime/bin/vmservice/")
root_prefix = "//dart/runtime/bin/"
output = "$target_gen_dir/dart_embedder_service_isolate_resources.cc"
table_name = "dart_embedder_service_isolate"
}
action("generate_snapshot_bin") {
deps = [
":dart_embedder_packages",
"//dart/runtime/bin:gen_snapshot($host_toolchain)",
]
inputs = [
"snapshot.dart",
"//dart/runtime/tools/create_snapshot_bin.py",
"//mojo/dart/embedder/builtin.dart",
"//mojo/dart/embedder/packages.dart",
]
inputs += rebase_path(dart_mojo_internal_sdk_sources, "", "../packages/mojo")
vm_isolate_snapshot = "$target_gen_dir/vm_isolate_snapshot.bin"
isolate_snapshot = "$target_gen_dir/isolate_snapshot.bin"
outputs = [
vm_isolate_snapshot,
isolate_snapshot,
]
gen_snapshot_dir =
get_label_info("//dart/runtime/bin:gen_snapshot($host_toolchain)",
"root_out_dir")
script = "//dart/runtime/tools/create_snapshot_bin.py"
builtin_path = rebase_path("//mojo/dart/embedder/builtin.dart")
internal_path = rebase_path("//mojo/dart/packages/mojo/sdk_ext/internal.dart")
io_path = rebase_path("//dart/sdk/lib/io/io.dart")
embedder_packages_path = rebase_path("//mojo/dart/embedder/packages.dart")
embedder_package_application_path = rebase_path(
"$root_gen_dir/dart_embedder_packages/mojo/dart/packages/mojo/lib/application.dart")
embedder_package_bindings_path = rebase_path(
"$root_gen_dir/dart_embedder_packages/mojo/dart/packages/mojo/lib/bindings.dart")
embedder_package_core_path = rebase_path(
"$root_gen_dir/dart_embedder_packages/mojo/dart/packages/mojo/lib/core.dart")
url_mappings_script =
rebase_path("//mojo/dart/embedder/tools/dart_embedder_url_mappings.py")
application_mojoms = rebase_path("//mojo/public/interfaces/application")
bindings_mojoms = rebase_path("//mojo/public/interfaces/bindings")
network_mojoms = rebase_path("//mojo/public/interfaces/network")
network_service_mojoms = rebase_path("//mojo/services/network/interfaces")
files_mojoms = rebase_path("//mojo/services/files/interfaces")
# This script generates --url_mapping command line arguments for all
# generated mojom.dart bindings files. See HACKING.md for more information.
embedder_mojom_url_mappings =
exec_script(url_mappings_script,
[
# File system path containing target imports.
rebase_path("$root_gen_dir/dart_embedder_packages"),
# Embedder package directories.
"$application_mojoms,mojo/mojo",
"$bindings_mojoms,mojo/mojo",
"$network_mojoms,mojo/mojo",
"$network_service_mojoms,mojo_services/mojo",
"$files_mojoms,mojo_services/mojo/files",
],
"list lines")
args = [
"--executable",
rebase_path("$gen_snapshot_dir/gen_snapshot"),
"--package_root",
rebase_path("$root_gen_dir/dart-gen"),
"--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",
current_os,
"--url_mapping=dart:mojo.builtin,$builtin_path",
"--url_mapping=dart:mojo.internal,$internal_path",
"--url_mapping=dart:io,$io_path",
# Embedder packages
"--url_mapping=dart:embedder_private_packages,$embedder_packages_path",
"--url_mapping=dart:_mojo/application.dart,$embedder_package_application_path",
"--url_mapping=dart:_mojo/bindings.dart,$embedder_package_bindings_path",
"--url_mapping=dart:_mojo/core.dart,$embedder_package_core_path",
] + embedder_mojom_url_mappings
}
action("generate_snapshot_file") {
deps = [
":generate_snapshot_bin",
]
inputs = [
"//dart/runtime/tools/create_snapshot_file.py",
"//mojo/dart/embedder/snapshot.cc.tmpl",
"$target_gen_dir/vm_isolate_snapshot.bin",
"$target_gen_dir/isolate_snapshot.bin",
]
output = "$root_gen_dir/dart_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("//mojo/dart/embedder/snapshot.cc.tmpl"),
"--output",
rebase_path(output),
]
}
source_set("dart_snapshot_cc") {
sources = [
"$root_gen_dir/dart_snapshot.cc",
]
deps = [
":generate_snapshot_file",
]
}