[infra] Use dart_action() instead of python scripts

This change shifts logic for invoking Dart scripts during the build
from a couple of python scripts to a new template called dart_action().

Change-Id: Ic0818122cd7317cbd22a7255d880fe8f87271b7e
Reviewed-on: https://dart-review.googlesource.com/39260
Commit-Queue: Zach Anderson <zra@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
This commit is contained in:
Zachary Anderson 2018-02-06 21:51:13 +00:00 committed by commit-bot@chromium.org
parent 079a4b08f5
commit e842c9b0b5
9 changed files with 151 additions and 266 deletions

View file

@ -74,7 +74,7 @@ if (host_os == "win") {
_host_executable_suffix = ""
}
_dart_root = rebase_path("..")
_dart_root = get_path_info("..", "abspath")
template("compiled_action") {
assert(defined(invoker.tool), "tool must be defined for $target_name")
@ -120,6 +120,10 @@ template("compiled_action") {
deps += invoker.deps
}
if (defined(invoker.depfile)) {
depfile = invoker.depfile
}
# The script takes as arguments the binary to run, and then the arguments
# to pass it.
args = [
@ -173,6 +177,10 @@ template("compiled_action_foreach") {
deps += invoker.deps
}
if (defined(invoker.depfile)) {
depfile = invoker.depfile
}
# The script takes as arguments the binary to run, and then the arguments
# to pass it.
args = [

92
build/dart_action.gni Normal file
View file

@ -0,0 +1,92 @@
# 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("compiled_action.gni")
import("executable_suffix.gni")
import("prebuilt_dart_sdk.gni")
_dart_root = get_path_info("..", "abspath")
# A template for running Dart scripts during the build. This should *not* be
# used for generating snapshots. It uses the dart binary from the prebuilt
# Dart SDK if one is available, and dart_bootstrap otherwise.
#
# Parameters:
# script:
# The un-rebased path to the Dart script.
#
# args:
# 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
# visibility
template("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),
"dart_action doesn't take a sources arg. Use inputs instead.")
if (prebuilt_dart_exe_works) {
action(target_name) {
forward_variables_from(invoker, [
"inputs",
"outputs",
"deps",
"visibility",
"depfile",
])
script = "$_dart_root/build/gn_run_binary.py"
prebuilt_dart_binary =
"$_dart_root/tools/sdks/$host_os/dart-sdk/bin/dart$executable_suffix"
inputs += [ invoker.script ]
if (defined(invoker.packages)) {
inputs += [ invoker.packages ]
}
args = [
"compiled_action",
rebase_path(prebuilt_dart_binary),
]
if (defined(invoker.packages)) {
args += [
"--packages=" + rebase_path(invoker.packages),
]
}
args += [ rebase_path(invoker.script) ] + invoker.args
}
} else {
compiled_action(target_name) {
forward_variables_from(invoker, [
"inputs",
"outputs",
"deps",
"visibility",
"depfile",
])
inputs += [ invoker.script ]
if (defined(invoker.packages)) {
inputs += [ invoker.packages ]
}
tool = "runtime/bin:dart_bootstrap"
args = []
if (defined(invoker.packages)) {
args += [
"--packages=" + rebase_path(invoker.packages),
]
}
args += [ rebase_path(invoker.script) ] + invoker.args
}
}
}

View file

@ -1,63 +0,0 @@
#!/usr/bin/env python
# Copyright (c) 2016, 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 argparse
import os
import subprocess
import sys
import utils
usage = """patch_sdk.py [options]"""
def DisplayBootstrapWarning():
print """\
WARNING: Your system cannot run the checked-in Dart SDK. Using the
bootstrap Dart executable will make debug builds slow.
Please see the Wiki for instructions on replacing the checked-in Dart SDK.
https://github.com/dart-lang/sdk/wiki/The-checked-in-SDK-in-tools
"""
def BuildArguments():
result = argparse.ArgumentParser(usage=usage)
result.add_argument("-q", "--quiet",
help="emit no output",
default=False,
action="store_true")
result.add_argument("--dart-executable",
help="dart executable",
default=None)
result.add_argument("--script",
help="patch script to run",
default=None)
return result
def main():
# Parse the options.
parser = BuildArguments()
(options, args) = parser.parse_known_args()
if utils.CheckedInSdkCheckExecutable():
options.dart_executable = utils.CheckedInSdkExecutable()
elif options.dart_executable is not None:
if not options.quiet:
DisplayBootstrapWarning()
options.dart_executable = os.path.abspath(options.dart_executable)
else:
print >> sys.stderr, 'ERROR: cannot locate dart executable'
return -1
if options.script is not None:
dart_file = options.script
else:
dart_file = os.path.join(os.path.dirname(__file__), 'patch_sdk.dart')
subprocess.check_call([options.dart_executable, dart_file] + args)
return 0
if __name__ == '__main__':
sys.exit(main())

View file

@ -1,60 +0,0 @@
#!/usr/bin/env python
# Copyright (c) 2017, 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 argparse
import os
import subprocess
import sys
import utils
usage = """run_dart.py [--dart=<path>] <script> args..."""
def DisplayBootstrapWarning():
print """\
WARNING: Your system cannot run the checked-in Dart SDK. Using the
bootstrap Dart executable will make debug builds slow.
Please see the Wiki for instructions on replacing the checked-in Dart SDK.
https://github.com/dart-lang/sdk/wiki/The-checked-in-SDK-in-tools
"""
def BuildArguments():
result = argparse.ArgumentParser(usage=usage)
result.add_argument("--dart",
help="dart executable",
default=None)
result.add_argument("-q", "--quiet",
help="emit no output",
default=False,
action="store_true")
return result
def main():
# Parse the options.
parser = BuildArguments()
(options, args) = parser.parse_known_args()
if utils.CheckedInSdkCheckExecutable():
options.dart = utils.CheckedInSdkExecutable()
elif options.dart is not None:
DisplayBootstrapWarning()
options.dart = os.path.abspath(options.dart)
else:
print >> sys.stderr, 'ERROR: cannot locate dart executable'
return -1
if options.quiet:
# Pipe output to /dev/null. See https://stackoverflow.com/a/14736249/9457.
out = open(os.devnull, 'w')
else:
out = None
return subprocess.call([options.dart] + args,
stdout=out, stderr=out)
if __name__ == '__main__':
sys.exit(main())

View file

@ -56,7 +56,7 @@ template("application_snapshot") {
]
abs_depfile = rebase_path(depfile)
abs_output = rebase_path(output)
abs_output = rebase_path(output, root_build_dir)
args = [
"--deterministic",

View file

@ -2,8 +2,7 @@
# 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/compiled_action.gni")
import("../../build/prebuilt_dart_sdk.gni")
import("../../build/dart_action.gni")
import("../application_snapshot.gni")
group("dartanalyzer") {
@ -48,42 +47,16 @@ template("generate_summary") {
assert(defined(invoker.type), "Must specify the summary type")
type = invoker.type
assert(type == "spec" || type == "strong")
action(target_name) {
if (!prebuilt_dart_exe_works) {
deps = [ "../../runtime/bin:dart_bootstrap($dart_host_toolchain)" ]
}
script = "../../tools/run_dart.py"
args = []
if (!prebuilt_dart_exe_works) {
dart_out_dir = get_label_info(
"../../runtime/bin:dart_bootstrap($dart_host_toolchain)",
"root_out_dir")
dart_bootstrap =
rebase_path("$dart_out_dir/dart_bootstrap$executable_suffix")
args += [
"--dart",
dart_bootstrap,
]
}
dart_action(target_name) {
script = "../../pkg/analyzer/tool/summary/build_sdk_summaries.dart"
packages = "../../.packages"
inputs = sdk_lib_files + analyzer_files
output = "$root_gen_dir/$type.sum"
outputs = [
output,
]
dot_packages = rebase_path("../../.packages")
build_sdk_summaries =
rebase_path("../../pkg/analyzer/tool/summary/build_sdk_summaries.dart")
args += [
"--quiet",
"--packages=$dot_packages",
build_sdk_summaries,
args = [
"build-$type",
rebase_path(output),
rebase_path("../../sdk"),

View file

@ -2,6 +2,7 @@
# 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/dart_action.gni")
import("../../build/prebuilt_dart_sdk.gni")
import("../application_snapshot.gni")
import("../create_timestamp.gni")
@ -127,7 +128,7 @@ dart2js_compile("stack_trace_mapper") {
# Apply dev_compiler's patch files to create the Dart version of the dartdevc
# SDK.
action("dartdevc_patch_sdk") {
dart_action("dartdevc_patch_sdk") {
# TODO(rnystrom): Unfork DDC's patch_sdk.dart script with the
# tools/patch_sdk.dart and then change this to use generate_patch_sdk().
deps = [
@ -138,20 +139,10 @@ action("dartdevc_patch_sdk") {
"../../pkg:pkg_files_stamp",
]
if (!prebuilt_dart_exe_works) {
deps += [ "../../runtime/bin:dart_bootstrap($dart_host_toolchain)" ]
}
script = "../../tools/patch_sdk.py"
# We list the `patch_sdk.dart` tool here because the [script] (which is
# implicitly an input) will call it.
inputs = [
"../../pkg/dev_compiler/tool/patch_sdk.dart",
]
script = "../../pkg/dev_compiler/tool/patch_sdk.dart"
# The main SDK library sources.
inputs += sdk_lib_files
inputs = sdk_lib_files
# dev_compiler's additional sources and patch files.
inputs += exec_script("../../tools/list_dart_files.py",
@ -168,22 +159,7 @@ action("dartdevc_patch_sdk") {
"$patched_sdk_dir/version",
]
args = []
if (!prebuilt_dart_exe_works) {
dart_out_dir = get_label_info(
"../../runtime/bin:dart_bootstrap($dart_host_toolchain)",
"root_out_dir")
dart_bootstrap =
rebase_path("$dart_out_dir/dart_bootstrap$executable_suffix")
args += [
"--dart-executable",
dart_bootstrap,
]
}
args += [
"--script",
rebase_path("../../pkg/dev_compiler/tool/patch_sdk.dart"),
args = [
rebase_path("../../"),
rebase_path("../../pkg/dev_compiler/tool/input_sdk"),
rebase_path(patched_sdk_dir),
@ -192,56 +168,14 @@ action("dartdevc_patch_sdk") {
# Compiles the Dart core libraries and DDC runtime to an analyzer summary and
# JS.
action("dartdevc_sdk") {
dart_action("dartdevc_sdk") {
deps = [
":dartdevc_files_stamp",
":dartdevc_patch_sdk",
"../../pkg:pkg_files_stamp",
]
if (!prebuilt_dart_exe_works) {
deps += [ "../../runtime/bin:dart_bootstrap($dart_host_toolchain)" ]
}
script = "../../tools/run_dart.py"
args = []
if (!prebuilt_dart_exe_works) {
dart_out_dir = get_label_info(
"../../runtime/bin:dart_bootstrap($dart_host_toolchain)",
"root_out_dir")
dart_bootstrap =
rebase_path("$dart_out_dir/dart_bootstrap$executable_suffix")
args += [
"--dart",
dart_bootstrap,
]
}
args += [
"--quiet",
rebase_path("../../pkg/dev_compiler/tool/build_sdk.dart"),
"--dart-sdk",
rebase_path(patched_sdk_dir),
"--dart-sdk-summary=build",
"--summary-out",
rebase_path(sdk_summary),
"--source-map",
"--source-map-comment",
"--inline-source-map",
"--modules=amd",
"-o",
rebase_path("$target_gen_dir/js/amd/dart_sdk.js"),
"--modules=es6",
"-o",
rebase_path("$target_gen_dir/js/es6/dart_sdk.js"),
"--modules=common",
"-o",
rebase_path("$target_gen_dir/js/common/dart_sdk.js"),
"--modules=legacy",
"-o",
rebase_path("$target_gen_dir/js/legacy/dart_sdk.js"),
]
script = "../../pkg/dev_compiler/tool/build_sdk.dart"
inputs = [
"../../pkg/dev_compiler/tool/build_sdk.dart",
@ -271,6 +205,29 @@ action("dartdevc_sdk") {
"$target_gen_dir/js/legacy/dart_sdk.js",
"$target_gen_dir/js/legacy/dart_sdk.js.map",
]
args = [
"--dart-sdk",
rebase_path(patched_sdk_dir),
"--dart-sdk-summary=build",
"--summary-out",
rebase_path(sdk_summary),
"--source-map",
"--source-map-comment",
"--inline-source-map",
"--modules=amd",
"-o",
rebase_path("$target_gen_dir/js/amd/dart_sdk.js"),
"--modules=es6",
"-o",
rebase_path("$target_gen_dir/js/es6/dart_sdk.js"),
"--modules=common",
"-o",
rebase_path("$target_gen_dir/js/common/dart_sdk.js"),
"--modules=legacy",
"-o",
rebase_path("$target_gen_dir/js/legacy/dart_sdk.js"),
]
}
# Builds everything needed to run dartdevc and dartdevk tests using test.dart.

View file

@ -2,13 +2,13 @@
# 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/dart_action.gni")
import("../build/dart_host_sdk_toolchain.gni")
import("../build/prebuilt_dart_sdk.gni")
_dart_root = get_path_info("..", "abspath")
# Template to generate a patched_sdk folder. This invokes the tools/patch_sdk.py
# script and sets up the right dependencies.
# Template to generate a patched_sdk folder.
#
# This template expects four arguments:
# - mode: vm or dart2js (whether to build an sdk for the vm or for dart2js)
@ -21,26 +21,15 @@ template("generate_patched_sdk") {
assert(defined(invoker.patched_sdk_dir),
"Need patched_sdk_dir in $target_name")
assert(defined(invoker.mode), "Need mode in $target_name")
action(target_name) {
if (defined(invoker.deps)) {
deps = invoker.deps
} else {
deps = []
}
if (!prebuilt_dart_exe_works) {
deps += [ "$_dart_root/runtime/bin:dart_bootstrap($dart_host_toolchain)" ]
}
dart_action(target_name) {
forward_variables_from(invoker, [
"deps",
])
script = "$_dart_root/tools/patch_sdk.py"
depfile = "$root_out_dir/${target_name}_patched_sdk.d"
# We list the `patch_sdk.dart` tool here because the [script] (which is
# implicitly an input) will call it.
inputs = [
"$_dart_root/tools/patch_sdk.dart",
]
depfile = "$root_out_dir/${target_name}.d"
script = "$_dart_root/tools/patch_sdk.dart"
if (defined(invoker.outputs)) {
outputs = invoker.outputs
@ -53,19 +42,7 @@ template("generate_patched_sdk") {
]
}
args = [ "--quiet" ]
if (!prebuilt_dart_exe_works) {
dart_out_dir = get_label_info(
"$_dart_root/runtime/bin:dart_bootstrap($dart_host_toolchain)",
"root_out_dir")
dart_bootstrap =
rebase_path("$dart_out_dir/dart_bootstrap$executable_suffix")
args += [
"--dart-executable",
dart_bootstrap,
]
}
args += [
args = [
invoker.mode,
rebase_path("$_dart_root/sdk"),
rebase_path(invoker.input_patches_dir),

View file

@ -2,6 +2,7 @@
# 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/dart_action.gni")
import("../../build/dart_host_sdk_toolchain.gni")
import("../application_snapshot.gni")
@ -23,18 +24,17 @@ copy("copy_kernel_service_snapshot") {
":kernel-service",
]
sources = [
rebase_path("$root_gen_dir/kernel-service.dart.snapshot"),
"$root_gen_dir/kernel-service.dart.snapshot",
]
outputs = [
"$root_out_dir/kernel-service.dart.snapshot",
]
}
compiled_action("kernel_service_dill") {
dart_action("kernel_service_dill") {
deps = [
"../../runtime/vm:vm_legacy_platform",
]
tool = "../../runtime/bin:dart_bootstrap"
kernel_service_script = "../../pkg/vm/bin/kernel_service.dart"
gen_kernel_script = "../../pkg/vm/bin/gen_kernel.dart"
@ -47,11 +47,12 @@ compiled_action("kernel_service_dill") {
"$root_gen_dir/kernel_service.dill",
]
script = gen_kernel_script
# TODO: Switch over to vm_platform_strong.dill and remove the
# flags --no-strong-mode once https://github.com/dart-lang/sdk/issues/31623
# is fixed.
args = [
rebase_path(gen_kernel_script),
"--packages=file:///" + rebase_path("../../.packages"),
"--platform=file:///" + rebase_path("$root_out_dir/vm_platform.dill"),
"--no-aot",