ab4f9351b1
The name has always been annoying because it did not add strong typing. And now there aren't variants of the VM platform to distinguish. Leave a copy at the old name to not immediately break illegal uses. TEST=ci Cq-Include-Trybots: luci.dart.try:flutter-analyze-try,flutter-frontend-try,flutter-linux-try Change-Id: Ie76fa7f16940aa1ba8d582eb5197f0ae55dc8938 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/429828 Reviewed-by: Johnni Winther <johnniwinther@google.com> Reviewed-by: Nicholas Shahan <nshahan@google.com> Commit-Queue: Ryan Macnak <rmacnak@google.com>
352 lines
12 KiB
Plaintext
352 lines
12 KiB
Plaintext
# Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
|
|
# for details. All rights reserved. Use of this source code is governed by a
|
|
# BSD-style license that can be found in the LICENSE file.
|
|
|
|
import("//build_overrides/build.gni")
|
|
import("//third_party/protobuf/proto_library.gni")
|
|
import("../../build/executable_suffix.gni")
|
|
import("../../sdk/lib/async/async_sources.gni")
|
|
import("../../sdk/lib/collection/collection_sources.gni")
|
|
import("../../sdk/lib/concurrent/concurrent_sources.gni")
|
|
import("../../sdk/lib/convert/convert_sources.gni")
|
|
import("../../sdk/lib/core/core_sources.gni")
|
|
import("../../sdk/lib/developer/developer_sources.gni")
|
|
import("../../sdk/lib/ffi/ffi_sources.gni")
|
|
import("../../sdk/lib/internal/internal_sources.gni")
|
|
import("../../sdk/lib/isolate/isolate_sources.gni")
|
|
import("../../sdk/lib/math/math_sources.gni")
|
|
import("../../sdk/lib/mirrors/mirrors_sources.gni")
|
|
import("../../sdk/lib/typed_data/typed_data_sources.gni")
|
|
import("../../sdk/lib/vmservice/vmservice_sources.gni")
|
|
import("../../sdk_args.gni")
|
|
import("../../utils/compile_platform.gni")
|
|
import("../bin/cli_sources.gni")
|
|
import("../bin/io_sources.gni")
|
|
import("../configs.gni")
|
|
import("../lib/async_sources.gni")
|
|
import("../lib/concurrent_sources.gni")
|
|
import("../lib/convert_sources.gni")
|
|
import("../lib/core_sources.gni")
|
|
import("../lib/developer_sources.gni")
|
|
import("../lib/ffi_sources.gni")
|
|
import("../lib/isolate_sources.gni")
|
|
import("../lib/math_sources.gni")
|
|
import("../lib/mirrors_sources.gni")
|
|
import("../lib/profiler_sources.gni")
|
|
import("../lib/typed_data_sources.gni")
|
|
import("../lib/vmservice_sources.gni")
|
|
import("../runtime_args.gni")
|
|
import("compiler/compiler_sources.gni")
|
|
import("ffi/ffi_sources.gni")
|
|
import("heap/heap_sources.gni")
|
|
import("regexp/regexp_sources.gni")
|
|
import("vm_sources.gni")
|
|
|
|
config("libdart_vm_config") {
|
|
if (is_fuchsia) {
|
|
libs = [ "zircon" ]
|
|
} else if (is_win) {
|
|
libs = [
|
|
"advapi32.lib",
|
|
"shell32.lib",
|
|
"ntdll.lib",
|
|
]
|
|
if (target_os != "winuwp") {
|
|
libs += [ "dbghelp.lib" ]
|
|
}
|
|
} else {
|
|
libs = [ "dl" ]
|
|
if (!is_android) {
|
|
libs += [ "pthread" ]
|
|
}
|
|
|
|
# Clang with libc++ does not require an explicit atomic library reference.
|
|
# (similar to https://github.com/flutter/buildroot/blob/master/build/config/compiler/BUILD.gn#L562)
|
|
if (!is_clang) {
|
|
libs += [ "atomic" ]
|
|
}
|
|
}
|
|
}
|
|
|
|
# This is a modified copy of Perfetto's template of the same name defined in
|
|
# //third_party/perfetto/gn/proto_library.gni.
|
|
# This is equivalent to the proto_library template (generation of .h/.cc from
|
|
# .proto files) but enables generation using the protozero plugin.
|
|
# The generated files will have the .pbzero.{cc,h} suffix, as opposed to the
|
|
# .pb.{cc,h} of the official proto library.
|
|
template("protozero_library") {
|
|
proto_library(target_name) {
|
|
if (!defined(perfetto_root_path)) {
|
|
perfetto_root_path = "//third_party/perfetto/"
|
|
}
|
|
|
|
generate_cc = false
|
|
generate_python = false
|
|
generator_plugin_label =
|
|
perfetto_root_path + "src/protozero/protoc_plugin:protozero_plugin"
|
|
generator_plugin_suffix = ".pbzero"
|
|
|
|
if (defined(invoker.deps)) {
|
|
deps = invoker.deps
|
|
} else {
|
|
deps = []
|
|
}
|
|
|
|
forward_variables_from(invoker,
|
|
[
|
|
"defines",
|
|
"generator_plugin_options",
|
|
"include_dirs",
|
|
"proto_in_dir",
|
|
"proto_out_dir",
|
|
"sources",
|
|
"testonly",
|
|
"visibility",
|
|
"generate_descriptor",
|
|
"propagate_imports_configs",
|
|
"import_dirs",
|
|
])
|
|
}
|
|
}
|
|
|
|
_perfetto_proto_definition_sources = [
|
|
"protos/perfetto/common/builtin_clock.proto",
|
|
"protos/perfetto/trace/clock_snapshot.proto",
|
|
"protos/perfetto/trace/interned_data/interned_data.proto",
|
|
"protos/perfetto/trace/profiling/profile_common.proto",
|
|
"protos/perfetto/trace/profiling/profile_packet.proto",
|
|
"protos/perfetto/trace/trace.proto",
|
|
"protos/perfetto/trace/trace_packet.proto",
|
|
"protos/perfetto/trace/track_event/debug_annotation.proto",
|
|
"protos/perfetto/trace/track_event/process_descriptor.proto",
|
|
"protos/perfetto/trace/track_event/thread_descriptor.proto",
|
|
"protos/perfetto/trace/track_event/track_descriptor.proto",
|
|
"protos/perfetto/trace/track_event/track_event.proto",
|
|
]
|
|
|
|
# This target is not a dependency of any other GN target. It is required to make
|
|
# ./protos/tools/compile_perfetto_protos.dart work though.
|
|
protozero_library("perfetto_protos_protozero") {
|
|
proto_in_dir = "."
|
|
proto_out_dir = "//runtime/vm"
|
|
generator_plugin_options = "wrapper_namespace=pbzero"
|
|
sources = _perfetto_proto_definition_sources
|
|
}
|
|
|
|
proto_library("perfetto_protos_dart") {
|
|
generate_cc = false
|
|
generate_python = false
|
|
generator_plugin_script = "protos/tools/protoc_gen_dart_wrapper"
|
|
generator_plugin_suffixes = [ ".pb.dart" ]
|
|
|
|
proto_in_dir = "."
|
|
proto_out_dir = "//pkg/vm_service_protos/lib/src"
|
|
|
|
sources = _perfetto_proto_definition_sources
|
|
}
|
|
|
|
# This config needs to be propagated to all targets that depend on
|
|
# ":libprotozero".
|
|
config("libprotozero_config") {
|
|
if (!defined(perfetto_root_path)) {
|
|
perfetto_root_path = "//third_party/perfetto/"
|
|
}
|
|
|
|
include_dirs = [
|
|
"$perfetto_root_path/include",
|
|
"$root_gen_dir/$perfetto_root_path/build_config",
|
|
]
|
|
}
|
|
|
|
# This target includes Perfetto's protozero target, which we need to serialize
|
|
# proto messages. This target also propagates ":libprotozero_config".
|
|
source_set("libprotozero") {
|
|
if (!defined(perfetto_root_path)) {
|
|
perfetto_root_path = "//third_party/perfetto/"
|
|
}
|
|
|
|
public_configs = [ ":libprotozero_config" ]
|
|
deps = [ "$perfetto_root_path/src/protozero:protozero" ]
|
|
}
|
|
|
|
library_for_all_configs("libdart_vm") {
|
|
target_type = "source_set"
|
|
extra_product_deps = []
|
|
extra_nonproduct_deps = []
|
|
if (dart_support_perfetto) {
|
|
extra_nonproduct_deps += [ ":libprotozero" ]
|
|
}
|
|
extra_deps = [
|
|
"//third_party/icu:icui18n",
|
|
"//third_party/icu:icuuc",
|
|
]
|
|
extra_precompiler_deps = [
|
|
# The Mach-O writer uses BoringSSL's SHA256 function for code signatures.
|
|
"//third_party/boringssl",
|
|
]
|
|
if (is_fuchsia) {
|
|
extra_deps += [
|
|
"$fuchsia_sdk/fidl/fuchsia.intl",
|
|
"$fuchsia_sdk/pkg/async",
|
|
"$fuchsia_sdk/pkg/async-default",
|
|
"$fuchsia_sdk/pkg/async-loop",
|
|
"$fuchsia_sdk/pkg/async-loop-default",
|
|
"$fuchsia_sdk/pkg/inspect",
|
|
"$fuchsia_sdk/pkg/inspect_component_cpp",
|
|
"$fuchsia_sdk/pkg/sys_cpp",
|
|
"$fuchsia_sdk/pkg/trace-engine",
|
|
]
|
|
}
|
|
public_configs = [ ":libdart_vm_config" ]
|
|
sources = vm_sources + rebase_path(compiler_api_sources, ".", "./compiler/") +
|
|
rebase_path(disassembler_sources, ".", "./compiler/") +
|
|
rebase_path(ffi_sources, ".", "./ffi/") +
|
|
rebase_path(heap_sources, ".", "./heap/") +
|
|
rebase_path(regexp_sources, ".", "./regexp/")
|
|
if (is_android) {
|
|
# Android specific workaround for a kernel bug. This source file can't
|
|
# go into vm_sources list because it will break Windows build which
|
|
# uses different assembler syntax.
|
|
sources += [ "thread_interrupter_android_arm.S" ]
|
|
}
|
|
if (!is_win) {
|
|
sources += [ "simulator_arm64_trampolines.S" ]
|
|
}
|
|
include_dirs = [ ".." ]
|
|
}
|
|
|
|
library_for_all_configs_with_compiler("libdart_compiler") {
|
|
target_type = "source_set"
|
|
public_configs = [ ":libdart_vm_config" ]
|
|
sources = rebase_path(compiler_sources, ".", "./compiler/")
|
|
include_dirs = [ ".." ]
|
|
|
|
extra_nonproduct_deps = []
|
|
if (dart_support_perfetto) {
|
|
extra_nonproduct_deps += [ ":libprotozero" ]
|
|
}
|
|
extra_deps = []
|
|
if (is_fuchsia) {
|
|
extra_deps += [ "$fuchsia_sdk/pkg/trace-engine" ]
|
|
}
|
|
}
|
|
|
|
library_for_all_configs("libdart_lib") {
|
|
target_type = "source_set"
|
|
extra_nonproduct_deps = []
|
|
if (dart_support_perfetto) {
|
|
extra_nonproduct_deps += [ ":libprotozero" ]
|
|
}
|
|
extra_deps = []
|
|
if (is_fuchsia) {
|
|
extra_deps += [ "$fuchsia_sdk/pkg/trace-engine" ]
|
|
}
|
|
include_dirs = [ ".." ]
|
|
allsources = async_runtime_cc_files + concurrent_runtime_cc_files +
|
|
core_runtime_cc_files + developer_runtime_cc_files +
|
|
ffi_runtime_cc_files + isolate_runtime_cc_files +
|
|
math_runtime_cc_files + mirrors_runtime_cc_files +
|
|
typed_data_runtime_cc_files + vmservice_runtime_cc_files
|
|
|
|
sources = [ "bootstrap.cc" ] + rebase_path(allsources, ".", "../lib")
|
|
snapshot_sources = []
|
|
}
|
|
|
|
template("gen_vm_platform") {
|
|
assert(defined(invoker.output_postfix),
|
|
"Must define output postfix (e.g., '_strong'")
|
|
is_product_flag = dart_runtime_mode == "release"
|
|
if (defined(invoker.product_mode)) {
|
|
is_product_flag = invoker.product_mode
|
|
}
|
|
compile_platform(target_name) {
|
|
output_postfix = invoker.output_postfix
|
|
if (defined(invoker.add_implicit_vm_platform_dependency)) {
|
|
add_implicit_vm_platform_dependency =
|
|
invoker.add_implicit_vm_platform_dependency
|
|
}
|
|
single_root_scheme = "org-dartlang-sdk"
|
|
single_root_base = rebase_path("../../")
|
|
libraries_specification_uri = "org-dartlang-sdk:///sdk/lib/libraries.json"
|
|
outputs = [
|
|
"$root_out_dir/vm_platform" + output_postfix + ".dill",
|
|
"$root_out_dir/vm_outline" + output_postfix + ".dill",
|
|
]
|
|
args = [ "dart:core" ]
|
|
args += [
|
|
"-Ddart.vm.product=$is_product_flag",
|
|
"-Ddart.isVM=true",
|
|
]
|
|
if (defined(invoker.exclude_source) && invoker.exclude_source) {
|
|
args += [ "--exclude-source" ]
|
|
}
|
|
outline = "vm_outline" + output_postfix + ".dill"
|
|
}
|
|
}
|
|
|
|
gen_vm_platform("vm_platform") {
|
|
add_implicit_vm_platform_dependency = false
|
|
exclude_source = false
|
|
output_postfix = ""
|
|
}
|
|
|
|
gen_vm_platform("vm_platform_product") {
|
|
add_implicit_vm_platform_dependency = false
|
|
exclude_source = false
|
|
output_postfix = "_product"
|
|
|
|
# In Debug mode we use debug binaries for dart2native.
|
|
# (see also the "dart_product_config" config)
|
|
product_mode = !is_debug
|
|
}
|
|
|
|
gen_vm_platform("vm_platform_stripped") {
|
|
add_implicit_vm_platform_dependency = false
|
|
exclude_source = true
|
|
output_postfix = "_stripped"
|
|
}
|
|
|
|
group("kernel_platform_files") {
|
|
public_deps = [
|
|
":vm_platform",
|
|
":vm_platform_stripped",
|
|
]
|
|
}
|
|
|
|
executable("offsets_extractor") {
|
|
# The timeline cannot be accessed from the generated executable, so we define
|
|
# DART_DISABLE_TIMELINE to strip out the timeline source code. The precise
|
|
# reason why we do this is to avoid missing header errors, as the Perfetto
|
|
# proto headers are not built as a dependency of this target, but are
|
|
# transitively included in this target when DART_DISABLE_TIMELINE is not
|
|
# defined.
|
|
defines = [ "DART_DISABLE_TIMELINE" ]
|
|
configs += [
|
|
"..:dart_arch_config",
|
|
"..:dart_config",
|
|
"..:dart_maybe_product_config",
|
|
":libdart_vm_config",
|
|
]
|
|
sources = [ "compiler/offsets_extractor.cc" ]
|
|
include_dirs = [ ".." ]
|
|
}
|
|
|
|
executable("offsets_extractor_aotruntime") {
|
|
# The timeline cannot be accessed from the generated executable, so we define
|
|
# DART_DISABLE_TIMELINE to strip out the timeline source code. The precise
|
|
# reason why we do this is to avoid missing header errors, as the Perfetto
|
|
# proto headers are not built as a dependency of this target, but are
|
|
# transitively included in this target when DART_DISABLE_TIMELINE is not
|
|
# defined.
|
|
defines = [ "DART_DISABLE_TIMELINE" ]
|
|
configs += [
|
|
"..:dart_arch_config",
|
|
"..:dart_config",
|
|
"..:dart_aotruntime_config",
|
|
"..:dart_maybe_product_config",
|
|
":libdart_vm_config",
|
|
]
|
|
sources = [ "compiler/offsets_extractor.cc" ]
|
|
include_dirs = [ ".." ]
|
|
}
|