mirror of
https://github.com/dart-lang/sdk
synced 2024-11-02 10:28:02 +00:00
fd5140d491
Several people have experienced build issues traced back to target `//utils/dartanalyzer:generate_summary_strong`. The issue is triggered by the sdk_hash changing with an old kernel-service snapshot in the out/ folder. `generate_summary_strong` uses but does not explicitly depend on the kernel-service, causing the outdated dependency. This then causes 'Unexpected Kernel SDK Version' when the new dart binary tried to load the old kernel-service snapshot. Tested: 1. Clean build of create_sdk at HEAD. 2. Empty `git commit --amend` to modify commit and thus sdk hash. 3. Rebuild of create_sdk (which failed before). Cq-Include-Trybots: dart/try:analyzer-analysis-server-linux-try,analyzer-linux-release-try,analyzer-mac-release-try,analyzer-nnbd-linux-release-try,analyzer-win-release-try,benchmark-linux-try,dart-sdk-linux-try,dart-sdk-mac-try,dart-sdk-win-try,dart-sdk-win-try,flutter-analyze-try,front-end-linux-release-x64-try,pkg-linux-release-try,vm-kernel-linux-release-x64-try Change-Id: Iba07e9d0c5daa7a93870fb501d9bb57682c88a5d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/156913 Reviewed-by: Vyacheslav Egorov <vegorov@google.com> Commit-Queue: Clement Skau <cskau@google.com>
394 lines
12 KiB
Text
394 lines
12 KiB
Text
# Copyright (c) 2018, 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("../executable_suffix.gni")
|
|
import("prebuilt_dart_sdk.gni")
|
|
|
|
_is_fuchsia = defined(is_fuchsia_tree) && is_fuchsia_tree
|
|
|
|
if (_is_fuchsia) {
|
|
import("//build/dart/dart.gni")
|
|
}
|
|
|
|
# This file defines templates for running and compiling Dart code during
|
|
# Dart's build.
|
|
#
|
|
# - prebuilt_dart_action()
|
|
# Runs Dart scripts using the downloaded prebuilt Dart SDK. This is the
|
|
# preferred method of running Dart code during the build as it is much
|
|
# faster than using dart_action() in debug and cross builds.
|
|
# However, prebuilt_dart_action() should *not* be used to generate snapshots.
|
|
#
|
|
# - dart_action()
|
|
# Runs Dart scripts using the binary built for runtime/bin:dart using the
|
|
# host toolchain. It should only be used when an artifact agreeing exactly
|
|
# with the version of the Dart VM being built must be produced, for example
|
|
# an App-JIT snapshot. This will be slow in Debug builds, and very slow in
|
|
# cross builds.
|
|
#
|
|
# - gen_snapshot_action()
|
|
# Runs the binary built for runtime/bin:gen_snapshot using the host
|
|
# toolchain. It should only be used when an artifact agreeing exactly
|
|
# with the version of the Dart VM being built must be produced.
|
|
|
|
# This assigns _dart_root the GN absolute path of the Dart repo. For example,
|
|
# in a Dart checkout, this will be "//". In a client repo it might be
|
|
# "//third_party/dart".
|
|
_dart_root = get_path_info("../..", "abspath")
|
|
|
|
template("_compiled_action") {
|
|
assert(defined(invoker.tool), "tool must be defined for $target_name")
|
|
assert(defined(invoker.outputs), "outputs must be defined for $target_name")
|
|
assert(defined(invoker.args), "args must be defined for $target_name")
|
|
|
|
action(target_name) {
|
|
if (defined(invoker.visibility)) {
|
|
visibility = invoker.visibility
|
|
}
|
|
|
|
if (defined(invoker.testonly)) {
|
|
testonly = invoker.testonly
|
|
}
|
|
|
|
script = "$_dart_root/build/gn_run_binary.py"
|
|
|
|
if (defined(invoker.inputs)) {
|
|
inputs = invoker.inputs
|
|
} else {
|
|
inputs = []
|
|
}
|
|
outputs = invoker.outputs
|
|
|
|
# Construct the host toolchain version of the tool.
|
|
host_tool = invoker.tool + "($host_toolchain)"
|
|
|
|
# Get the path to the executable. Currently, this assumes that the tool
|
|
# does not specify output_name so that the target name is the name to use.
|
|
# If that's not the case, we'll need another argument to the script to
|
|
# specify this, since we can't know what the output name is (it might be in
|
|
# another file not processed yet).
|
|
host_executable = get_label_info(host_tool, "root_out_dir") + "/" +
|
|
get_label_info(host_tool, "name") + executable_suffix
|
|
|
|
# Add the executable itself as an input.
|
|
inputs += [ host_executable ]
|
|
|
|
deps = [ host_tool ]
|
|
if (defined(invoker.deps)) {
|
|
deps += invoker.deps
|
|
}
|
|
|
|
if (defined(invoker.depfile)) {
|
|
depfile = invoker.depfile
|
|
}
|
|
|
|
# The "compiled_action" argument to gn_run_binary.py indicates that
|
|
# it will exit with a non-zero status when the target program does.
|
|
args = [
|
|
"compiled_action",
|
|
rebase_path(host_executable, root_build_dir),
|
|
] + invoker.args
|
|
}
|
|
}
|
|
|
|
template("_prebuilt_tool_action") {
|
|
assert(defined(invoker.binary),
|
|
"The path to where the prebuilt binary lives must be defined")
|
|
assert(_is_fuchsia || prebuilt_dart_exe_works,
|
|
"A pre built dart executable needs to be present")
|
|
|
|
vm_args = []
|
|
if (defined(invoker.vm_args)) {
|
|
vm_args += invoker.vm_args
|
|
}
|
|
|
|
action(target_name) {
|
|
forward_variables_from(invoker,
|
|
[
|
|
"depfile",
|
|
"deps",
|
|
"outputs",
|
|
"testonly",
|
|
"visibility",
|
|
])
|
|
script = "$_dart_root/build/gn_run_binary.py"
|
|
|
|
inputs = []
|
|
if (defined(invoker.inputs)) {
|
|
inputs += invoker.inputs
|
|
}
|
|
|
|
if (defined(invoker.script)) {
|
|
inputs += [ invoker.script ]
|
|
}
|
|
if (defined(invoker.packages)) {
|
|
inputs += [ invoker.packages ]
|
|
}
|
|
|
|
args = [
|
|
"compiled_action",
|
|
rebase_path(invoker.binary),
|
|
] + vm_args
|
|
if (defined(invoker.packages)) {
|
|
args += [ "--packages=" + rebase_path(invoker.packages) ]
|
|
}
|
|
if (defined(invoker.dfe)) {
|
|
args += [ "--dfe=" + rebase_path(invoker.dfe) ]
|
|
}
|
|
if (defined(invoker.script)) {
|
|
args += [ rebase_path(invoker.script) ]
|
|
}
|
|
args += invoker.args
|
|
}
|
|
}
|
|
|
|
# A template for running Dart scripts during the build using the prebuilt Dart
|
|
# SDK. This should *not* be used for generating snapshots. It uses the dart
|
|
# binary from the prebuilt Dart SDK.
|
|
#
|
|
# Parameters:
|
|
# script:
|
|
# The un-rebased path to the Dart script.
|
|
#
|
|
# vm_args (optional):
|
|
# Arguments to pass to the Dart VM.
|
|
#
|
|
# args (optional):
|
|
# The arguments to pass to the Dart script.
|
|
#
|
|
# packages (optional):
|
|
# The un-rebased path to the .packages file.
|
|
#
|
|
# Forwarded to action() with the usual meaning:
|
|
# depfile
|
|
# deps
|
|
# inputs
|
|
# outputs
|
|
# testonly
|
|
# visibility
|
|
template("prebuilt_dart_action") {
|
|
assert(defined(invoker.script), "script must be defined for $target_name")
|
|
assert(defined(invoker.outputs), "outputs must be defined for $target_name")
|
|
assert(defined(invoker.args), "args must be defined for $target_name")
|
|
assert(!defined(invoker.sources),
|
|
"prebuilt_dart_action doesn't take a sources arg. Use inputs instead.")
|
|
|
|
_prebuilt_tool_action(target_name) {
|
|
forward_variables_from(invoker, "*")
|
|
if (_is_fuchsia) {
|
|
binary = prebuilt_dart
|
|
dfe = "$prebuilt_dart_sdk/bin/snapshots/kernel-service.dart.snapshot"
|
|
} else {
|
|
binary = "$_dart_root/tools/sdks/dart-sdk/bin/dart$executable_suffix"
|
|
dfe = "$_dart_root/tools/sdks/dart-sdk/bin/snapshots/kernel-service.dart.snapshot"
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_is_fuchsia) {
|
|
template("_prebuilt_gen_snapshot_action") {
|
|
_prebuilt_tool_action(target_name) {
|
|
forward_variables_from(invoker, "*")
|
|
binary = prebuilt_gen_snapshot
|
|
}
|
|
}
|
|
}
|
|
|
|
template("prebuilt_dart2js_action") {
|
|
assert(defined(invoker.script), "script must be defined for $target_name")
|
|
assert(defined(invoker.outputs), "outputs must be defined for $target_name")
|
|
assert(defined(invoker.args), "args must be defined for $target_name")
|
|
|
|
_prebuilt_tool_action(target_name) {
|
|
forward_variables_from(invoker, "*")
|
|
|
|
# TODO(zra): On Fuchsia use a prebuilt dart2js, or a prebuilt Observatory.
|
|
extension = ""
|
|
if (is_win) {
|
|
extension = ".bat"
|
|
}
|
|
binary = "$_dart_root/tools/sdks/dart-sdk/bin/dart2js${extension}"
|
|
}
|
|
}
|
|
|
|
# This template runs the specified tool produced by the in-progress build.
|
|
#
|
|
# Parameters:
|
|
# tool:
|
|
# The target of the tool to run.
|
|
#
|
|
# script (optional):
|
|
# The un-rebased path to the Dart script.
|
|
#
|
|
# vm_args (optional):
|
|
# Arguments to pass to the Dart VM.
|
|
#
|
|
# args (optional):
|
|
# The arguments to pass to the Dart script.
|
|
#
|
|
# packages (optional):
|
|
# The un-rebased path to the .packages file.
|
|
#
|
|
# Forwarded to action() with the usual meaning:
|
|
# depfile
|
|
# deps
|
|
# inputs
|
|
# outputs
|
|
# testonly
|
|
# visibility
|
|
template("_built_tool_action") {
|
|
assert(defined(invoker.tool), "tool must be defined for $target_name")
|
|
assert(defined(invoker.outputs), "outputs must be defined for $target_name")
|
|
assert(defined(invoker.args), "args must be defined for $target_name")
|
|
assert(!defined(invoker.sources),
|
|
"sources arg not supported for $target_name. Use inputs instead.")
|
|
|
|
vm_args = []
|
|
if (defined(invoker.vm_args)) {
|
|
vm_args += invoker.vm_args
|
|
}
|
|
|
|
_compiled_action(target_name) {
|
|
forward_variables_from(invoker,
|
|
[
|
|
"depfile",
|
|
"deps",
|
|
"inputs",
|
|
"outputs",
|
|
"tool",
|
|
"testonly",
|
|
"visibility",
|
|
])
|
|
|
|
if (!defined(invoker.inputs)) {
|
|
inputs = []
|
|
}
|
|
if (defined(invoker.script)) {
|
|
inputs += [ invoker.script ]
|
|
}
|
|
if (defined(invoker.packages)) {
|
|
inputs += [ invoker.packages ]
|
|
}
|
|
|
|
args = vm_args
|
|
if (defined(invoker.packages)) {
|
|
args += [ "--packages=" + rebase_path(invoker.packages) ]
|
|
}
|
|
if (defined(invoker.script)) {
|
|
args += [ rebase_path(invoker.script) ]
|
|
}
|
|
args += invoker.args
|
|
}
|
|
}
|
|
|
|
# This template runs the Dart VM produced by the in-progress build.
|
|
#
|
|
# Parameters:
|
|
# script:
|
|
# The un-rebased path to the Dart script.
|
|
#
|
|
# dfe (optional):
|
|
# Sets the DFE file used by Dart. If not set the VM will attempt to load it
|
|
# from a snapshot, or fall back on its built-in kernel.
|
|
#
|
|
# vm_args (optional):
|
|
# Arguments to pass to the Dart VM.
|
|
#
|
|
# args (optional):
|
|
# The arguments to pass to the Dart script.
|
|
#
|
|
# packages (optional):
|
|
# The un-rebased path to the .packages file.
|
|
#
|
|
# Forwarded to action() with the usual meaning:
|
|
# depfile
|
|
# deps
|
|
# inputs
|
|
# outputs
|
|
# testonly
|
|
# visibility
|
|
template("dart_action") {
|
|
assert(defined(invoker.script), "script must be defined for $target_name")
|
|
if (!_is_fuchsia || !use_prebuilt_dart_sdk) {
|
|
_built_tool_action(target_name) {
|
|
tool = "$_dart_root/runtime/bin:dart"
|
|
forward_variables_from(invoker,
|
|
[
|
|
"args",
|
|
"depfile",
|
|
"deps",
|
|
"inputs",
|
|
"outputs",
|
|
"packages",
|
|
"script",
|
|
"testonly",
|
|
"tool",
|
|
"visibility",
|
|
"vm_args",
|
|
])
|
|
|
|
# Dart has an implicit dependency on the kernel service so unless DFE is
|
|
# passed, we need to add this dep.
|
|
if (defined(invoker.dfe)) {
|
|
vm_args += [ "--dfe=" + rebase_path(invoker.dfe) ]
|
|
} else {
|
|
if (!defined(invoker.deps)) {
|
|
deps = []
|
|
}
|
|
deps += [ "$_dart_root/utils/kernel-service:kernel-service" ]
|
|
}
|
|
}
|
|
} else {
|
|
prebuilt_dart_action(target_name) {
|
|
forward_variables_from(invoker, "*")
|
|
}
|
|
}
|
|
}
|
|
|
|
# This template runs the gen_snapshot produced by the in-progress build.
|
|
#
|
|
# Parameters:
|
|
# vm_args (optional):
|
|
# Arguments to pass to the Dart VM.
|
|
#
|
|
# args (optional):
|
|
# The arguments to pass to the Dart script.
|
|
#
|
|
# packages (optional):
|
|
# The un-rebased path to the .packages file.
|
|
#
|
|
# Forwarded to action() with the usual meaning:
|
|
# depfile
|
|
# deps
|
|
# inputs
|
|
# outputs
|
|
# testonly
|
|
# visibility
|
|
template("gen_snapshot_action") {
|
|
assert(
|
|
!defined(invoker.script),
|
|
"script must not be defined for $target_name. If there is a script use args instead.")
|
|
if (!_is_fuchsia || !use_prebuilt_dart_sdk) {
|
|
_built_tool_action(target_name) {
|
|
tool = "$_dart_root/runtime/bin:gen_snapshot"
|
|
forward_variables_from(invoker,
|
|
[
|
|
"args",
|
|
"depfile",
|
|
"deps",
|
|
"inputs",
|
|
"outputs",
|
|
"packages",
|
|
"testonly",
|
|
"tool",
|
|
"visibility",
|
|
"vm_args",
|
|
])
|
|
}
|
|
} else {
|
|
_prebuilt_gen_snapshot_action(target_name) {
|
|
forward_variables_from(invoker, "*")
|
|
}
|
|
}
|
|
}
|