dart-sdk/runtime/vm/BUILD.gn
Filip Filmar 9f68048cae [vm] Replaces fuchsia.deprecatedtimezone
The FIDL library `fuchsia.deprecatedtimezone` is going away.  There are
different and better ways to obtain the same functionality.  This change
removes the dependency on `fuchsia.deprecatedtimezone` from the Dart SDK.
Thus setting the stage for the removal of `fuchsia.deprecatedtimezone`.

Adds inspect metrics that allow whitebox testing of the runners.  Here's
a sample `fx iquery` excerpt from a running device, showing a dart
runner exposing the same OS diagnostic metrics.

Adds support for asynchronous timezone updates, which was missing from
previous versions of this commit.

```
dart.cmx:
  metadata:
    filename = fuchsia.inspect.Tree
    component_url = fuchsia-pkg://fuchsia.com/dart_test_debug#meta/dart.cmx
    timestamp = 12241877209826
  payload:
    root:
      os:
        dst_status = 1
        get_profile_status = 0
        num_get_profile_calls = 1
        num_intl_provider_errors = 0
        num_on_change_calls = 0
        timezone_content_status = 0
        tz_data_close_status = -1
        tz_data_status = -1
```

This functionality is guarded by Fuchsia integration tests at
//src/tests/intl.

Tested:

1. (compile locally for Fuchsia and deploy)

  ```
  fx test //src/tests/intl
  ```

  This runs the specific timezone tests that should break if the
  functionality itself is broken.

2. Compile dart for Fuchsia and run tests:

   The instructions are here: 15dfcca89f

   I used the instructions above to build and run all tests from
   `dart_test_debug` package.  The tests were ran against the main
   branch (and then, the tests that failed there were filtered out),
   then the remaining tests were ran against a Dart version that
   contains this change.

See:
  - https://github.com/dart-lang/sdk/issues/42245
  - https://github.com/dart-lang/sdk/issues/39650

Prior attempts (most recent first):

- rolled back as it... didn't compile.  It turned out, when building the
  change with flutter the compilation process has some different
  settings, so the compilation of the change worked in flutter, but
  didn't in dart.  The compilation error is now fixed, and I ran
  additional tests: https://dart-review.googlesource.com/c/sdk/+/155582

- rolled back as it had a regression which was not caught by tests.
  Tests are fixed now at
  https://fuchsia-review.googlesource.com/c/fuchsia/+/409840

Fixes #39650

TEST=See "Tested" section above.
Change-Id: Idd78ea42e3ae38dca2ab4c4126e930e53ef8a793
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/185302
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2021-02-18 07:38:04 +00:00

244 lines
7.5 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/executable_suffix.gni")
import("../../sdk/lib/async/async_sources.gni")
import("../../sdk/lib/collection/collection_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/collection_sources.gni")
import("../lib/convert_sources.gni")
import("../lib/core_sources.gni")
import("../lib/developer_sources.gni")
import("../lib/ffi_sources.gni")
import("../lib/internal_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("heap/heap_sources.gni")
import("vm_sources.gni")
if (is_fuchsia) {
import("//build/fuchsia/sdk.gni")
}
config("libdart_vm_config") {
if (is_fuchsia) {
libs = [ "zircon" ]
} else if (is_win) {
libs = [
"advapi32.lib",
"shell32.lib",
]
if (target_os != "winuwp") {
libs += [ "dbghelp.lib" ]
}
} else {
libs = [ "dl" ]
if (!is_android) {
libs += [ "pthread" ]
}
}
}
library_for_all_configs("libdart_vm") {
target_type = "source_set"
extra_product_deps = [
"//third_party/icu:icui18n_hidden_visibility",
"//third_party/icu:icuuc_hidden_visibility",
]
extra_nonproduct_deps = [
"//third_party/icu:icui18n",
"//third_party/icu:icuuc",
]
if (is_fuchsia) {
if (using_fuchsia_gn_sdk) {
extra_deps = [
"$fuchsia_sdk_root/fidl/fuchsia.intl",
"$fuchsia_sdk_root/pkg/async",
"$fuchsia_sdk_root/pkg/async-default",
"$fuchsia_sdk_root/pkg/async-loop",
"$fuchsia_sdk_root/pkg/async-loop-default",
"$fuchsia_sdk_root/pkg/inspect",
"$fuchsia_sdk_root/pkg/inspect_service_cpp",
"$fuchsia_sdk_root/pkg/sys_cpp",
"$fuchsia_sdk_root/pkg/sys_inspect_cpp",
"$fuchsia_sdk_root/pkg/trace-engine",
]
} else if (using_fuchsia_sdk) {
extra_deps = [
"$fuchsia_sdk_root/fidl:fuchsia.intl",
"$fuchsia_sdk_root/pkg:async-loop",
"$fuchsia_sdk_root/pkg:async-loop-default",
"$fuchsia_sdk_root/pkg:inspect",
"$fuchsia_sdk_root/pkg:inspect_service_cpp",
"$fuchsia_sdk_root/pkg:sys_cpp",
"$fuchsia_sdk_root/pkg:sys_inspect_cpp",
"$fuchsia_sdk_root/pkg:trace-engine",
]
} else {
extra_deps = [
"//sdk/fidl/fuchsia.intl",
"//sdk/lib/sys/cpp",
"//sdk/lib/sys/inspect/cpp",
"//zircon/public/lib/fbl",
"//zircon/system/ulib/trace-engine",
]
}
}
public_configs = [ ":libdart_vm_config" ]
sources = vm_sources + rebase_path(compiler_api_sources, ".", "./compiler/") +
rebase_path(disassembler_sources, ".", "./compiler/") +
rebase_path(heap_sources, ".", "./heap/")
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 = [ ".." ]
if (is_fuchsia) {
if (using_fuchsia_gn_sdk) {
extra_deps = [ "$fuchsia_sdk_root/pkg/trace-engine" ]
} else if (using_fuchsia_sdk) {
extra_deps = [ "$fuchsia_sdk_root/pkg:trace-engine" ]
} else {
extra_deps = [
"//zircon/public/lib/fbl",
"//zircon/system/ulib/trace-engine",
]
}
}
}
library_for_all_configs("libdart_lib") {
target_type = "source_set"
if (is_fuchsia) {
if (using_fuchsia_gn_sdk) {
extra_deps = [ "$fuchsia_sdk_root/pkg/trace-engine" ]
} else if (using_fuchsia_sdk) {
extra_deps = [ "$fuchsia_sdk_root/pkg:trace-engine" ]
} else {
extra_deps = [
"//zircon/public/lib/fbl",
"//zircon/system/ulib/trace-engine",
]
}
}
include_dirs = [ ".." ]
allsources = async_runtime_cc_files + collection_runtime_cc_files +
core_runtime_cc_files + developer_runtime_cc_files +
internal_runtime_cc_files + isolate_runtime_cc_files +
math_runtime_cc_files + mirrors_runtime_cc_files +
typed_data_runtime_cc_files + vmservice_runtime_cc_files +
ffi_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",
"--nnbd-agnostic",
]
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 = "_strong"
}
gen_vm_platform("vm_platform_product") {
add_implicit_vm_platform_dependency = false
exclude_source = false
output_postfix = "_strong_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 = "_strong_stripped"
}
group("kernel_platform_files") {
public_deps = [
":vm_platform",
":vm_platform_stripped",
]
}
executable("offsets_extractor") {
configs += [
"..:dart_arch_config",
"..:dart_config",
"..:dart_maybe_product_config",
":libdart_vm_config",
]
sources = [ "compiler/offsets_extractor.cc" ]
include_dirs = [ ".." ]
}
executable("offsets_extractor_precompiled_runtime") {
configs += [
"..:dart_arch_config",
"..:dart_config",
"..:dart_precompiled_runtime_config",
"..:dart_maybe_product_config",
":libdart_vm_config",
]
sources = [ "compiler/offsets_extractor.cc" ]
include_dirs = [ ".." ]
}