Files
sdk/utils/dartdevc/BUILD.gn
T
Ivan Naydonov ed6c557d1a Add cli parameters to kernel_sdk.dart to get all paths explicitly
To allow ddc sdk kernel generation internally, add a way to provide
paths to dependent files explicitly, instead of assuming relative from
Platform.script.

Also remove .packages file parameter. We don't have this file internally
and sdk shouldn't depend on any of packages anyway, so it just work
without this option.

Change-Id: Iec892cbb640d35e64d107c6af36d214632815bae
Reviewed-on: https://dart-review.googlesource.com/c/77485
Commit-Queue: Sigmund Cherem <sigmund@google.com>
Reviewed-by: Jenny Messerly <jmesserly@google.com>
Auto-Submit: Ivan Naydonov <inayd@google.com>
2018-10-09 22:15:06 +00:00

370 lines
11 KiB
Plaintext

# 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("../../build/dart/dart_action.gni")
import("../application_snapshot.gni")
import("../create_timestamp.gni")
patched_sdk_dir = "$target_gen_dir/patched_sdk"
sdk_summary = "$target_gen_dir/ddc_sdk.sum"
sdk_dill = "$target_gen_dir/kernel/ddc_sdk.dill"
application_snapshot("dartdevc") {
main_dart = "../../pkg/dev_compiler/bin/dartdevc.dart"
training_args = [
"--dart-sdk",
rebase_path("../../sdk"),
"--dart-sdk-summary",
rebase_path(sdk_summary),
"--library-root",
rebase_path("../../pkg/dev_compiler"),
"-o",
"dartdevc.js",
rebase_path("../../pkg/dev_compiler/bin/dartdevc.dart"),
]
deps = [
":dartdevc_sdk",
]
inputs = [ sdk_summary ]
}
application_snapshot("dartdevk") {
main_dart = "../../pkg/dev_compiler/bin/dartdevk.dart"
training_args = [
"--dart-sdk-summary",
rebase_path(sdk_dill),
"-o",
"dartdevk.js",
rebase_path("../../pkg/dev_compiler/bin/dartdevk.dart"),
]
deps = [
":dartdevc_sdk",
":dartdevk_sdk",
]
inputs = [ sdk_dill ]
}
sdk_lib_files = exec_script("../../tools/list_dart_files.py",
[
"absolute",
rebase_path("../../sdk/lib"),
],
"list lines")
compiler_files = exec_script("../../tools/list_dart_files.py",
[
"absolute",
rebase_path("../../pkg/compiler"),
],
"list lines")
dev_compiler_files = exec_script("../../tools/list_dart_files.py",
[
"absolute",
rebase_path("../../pkg/dev_compiler"),
],
"list lines")
template("dart2js_compile") {
assert(defined(invoker.main), "Must specify the main file")
main = invoker.main
assert(defined(invoker.out), "Must specify the out file")
out = invoker.out
abs_main = rebase_path(main)
abs_output = rebase_path(out)
dart_action(target_name) {
deps = [
"../compiler:compile_dart2js_platform",
]
# dart_action() needs kernel service snapshot to run in Dart 2 mode.
# This can't be added as a dependency to dart_action() itself as it will
# create a circular dependency.
deps += [ "../../utils/kernel-service:kernel-service" ]
inputs = sdk_lib_files + compiler_files + dev_compiler_files + [
"$root_out_dir/dart2js_platform.dill",
"$root_out_dir/dart2js_outline.dill",
]
outputs = [
out,
]
script = "../../pkg/compiler/lib/src/dart2js.dart"
packages = "../../.packages"
args = [
"$abs_main",
"-m",
"-o$abs_output",
]
}
}
dart2js_compile("dartdevc_web") {
main = rebase_path("../../pkg/dev_compiler/web/main.dart")
out = "$root_out_dir/dev_compiler/build/web/ddc_web_compiler.js"
}
dart2js_compile("stack_trace_mapper") {
main = rebase_path("../../pkg/dev_compiler/web/stack_trace_mapper.dart")
out = "$root_out_dir/dev_compiler/build/web/dart_stack_trace_mapper.js"
}
# Apply dev_compiler's patch files to create the Dart version of the dartdevc
# SDK.
prebuilt_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 = [
":dartdevc_files_stamp",
":dartdevc_sdk_patch_stamp",
# The patch script uses several packages, including analyzer, so consider
# it dirty if any of those change.
"../../pkg:pkg_files_stamp",
]
script = "../../pkg/dev_compiler/tool/patch_sdk.dart"
# The main SDK library sources.
inputs = sdk_lib_files
# dev_compiler's additional sources and patch files.
inputs += exec_script("../../tools/list_dart_files.py",
[
"absolute",
rebase_path("../../pkg/dev_compiler/tool/input_sdk"),
],
"list lines")
# Arbitrarily use the version file as a token file to check against to see if
# the sources have changed.
# TODO(rnystrom): List the outputs more precisely?
outputs = [
"$patched_sdk_dir/version",
]
args = [
rebase_path("../../"),
rebase_path("../../pkg/dev_compiler/tool/input_sdk"),
rebase_path(patched_sdk_dir),
]
}
# Compiles the Dart core libraries and DDC runtime to an analyzer summary and
# JS.
prebuilt_dart_action("dartdevc_sdk") {
deps = [
":dartdevc_files_stamp",
":dartdevc_patch_sdk",
"../../pkg:pkg_files_stamp",
]
script = "../../pkg/dev_compiler/tool/build_sdk.dart"
inputs = [
"../../pkg/dev_compiler/tool/build_sdk.dart",
# Since the entire patched SDK is built in one step, if any file changes,
# they all will. Instead of listing them all as outputs of
# dartdevc_patch_sdk (which would require something like a depfile), just
# use version as the token file whose timestamp we track.
# TODO(rnystrom): Do something better?
"$patched_sdk_dir/version",
# If dev_compiler itself changes, it can affect the generated SDK.
"$target_gen_dir/dartdevc_files.stamp",
# Likewise, the packages dev_compiler depends on may affect its output.
"$root_gen_dir/pkg_files.stamp",
]
outputs = [
sdk_summary,
"$target_gen_dir/js/amd/dart_sdk.js",
"$target_gen_dir/js/amd/dart_sdk.js.map",
"$target_gen_dir/js/common/dart_sdk.js",
"$target_gen_dir/js/common/dart_sdk.js.map",
"$target_gen_dir/js/es6/dart_sdk.js",
"$target_gen_dir/js/es6/dart_sdk.js.map",
"$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",
"--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.
group("dartdevc_test") {
deps = [
":dartdevc",
":dartdevc_sdk",
":dartdevk_sdk",
":dartdevc_test_pkg",
":dartdevk",
"../../sdk:create_sdk",
]
}
# Builds everything needed to run dartdevc and dartdevk tests locally using
# test.dart without --use-sdk. This is the same as dartdevc_test, but skips
# things rely on building the Dart VM and create_sdk.
group("dartdevc_test_local") {
deps = [
":dartdevc_sdk",
":dartdevk_sdk",
":dartdevc_test_pkg",
]
}
create_timestamp_file("dartdevc_files_stamp") {
path = rebase_path("../../pkg/dev_compiler/lib")
output = "$target_gen_dir/dartdevc_files.stamp"
}
create_timestamp_file("dartdevc_sdk_patch_stamp") {
path = rebase_path("../../pkg/dev_compiler/tool/input_sdk")
output = "$target_gen_dir/dartdevc_sdk_patch_stamp.stamp"
}
# Compiles the packages used by the tests to JS with dartdevc so that they are
# available for loading by the tests.
prebuilt_dart_action("dartdevc_test_pkg") {
deps = [
":dartdevc_files_stamp",
":dartdevc_sdk",
":dartdevk_sdk",
"../../pkg:pkg_files_stamp",
]
inputs = [
sdk_dill,
sdk_summary,
"$target_gen_dir/dartdevc_files.stamp",
"$root_gen_dir/pkg_files.stamp",
]
outputs = [
"$target_gen_dir/pkg/async_helper.js",
"$target_gen_dir/pkg/async_helper.sum",
"$target_gen_dir/pkg/collection.js",
"$target_gen_dir/pkg/collection.sum",
"$target_gen_dir/pkg/expect.js",
"$target_gen_dir/pkg/expect.sum",
"$target_gen_dir/pkg/js.js",
"$target_gen_dir/pkg/js.sum",
"$target_gen_dir/pkg/matcher.js",
"$target_gen_dir/pkg/matcher.sum",
"$target_gen_dir/pkg/meta.js",
"$target_gen_dir/pkg/meta.sum",
"$target_gen_dir/pkg/path.js",
"$target_gen_dir/pkg/path.sum",
"$target_gen_dir/pkg/stack_trace.js",
"$target_gen_dir/pkg/stack_trace.sum",
# TODO(rnystrom): Remove this when unittest is no longer used. Also remove
# any of the above packages that are only here because unittest uses them.
"$target_gen_dir/pkg/unittest.js",
"$target_gen_dir/pkg/unittest.sum",
"$target_gen_dir/pkg_kernel/async_helper.dill",
"$target_gen_dir/pkg_kernel/async_helper.js",
"$target_gen_dir/pkg_kernel/collection.dill",
"$target_gen_dir/pkg_kernel/collection.js",
"$target_gen_dir/pkg_kernel/expect.dill",
"$target_gen_dir/pkg_kernel/expect.js",
"$target_gen_dir/pkg_kernel/js.dill",
"$target_gen_dir/pkg_kernel/js.js",
"$target_gen_dir/pkg_kernel/matcher.dill",
"$target_gen_dir/pkg_kernel/matcher.js",
"$target_gen_dir/pkg_kernel/meta.dill",
"$target_gen_dir/pkg_kernel/meta.js",
"$target_gen_dir/pkg_kernel/path.dill",
"$target_gen_dir/pkg_kernel/path.js",
"$target_gen_dir/pkg_kernel/stack_trace.dill",
"$target_gen_dir/pkg_kernel/stack_trace.js",
# TODO(rnystrom): Remove this when unittest is no longer used. Also remove
# any of the above packages that are only here because unittest uses them.
"$target_gen_dir/pkg_kernel/unittest.dill",
"$target_gen_dir/pkg_kernel/unittest.js",
]
script = "../../pkg/dev_compiler/tool/build_pkgs.dart"
args = [
"--analyzer-sdk",
rebase_path(sdk_summary),
"--kernel-sdk",
rebase_path(sdk_dill),
"--output",
rebase_path("$target_gen_dir"),
]
}
# Compiles the DDC SDK's kernel summary and JS code.
prebuilt_dart_action("dartdevk_sdk") {
deps = [
"../../pkg:pkg_files_stamp",
":dartdevc_files_stamp",
":dartdevc_sdk_patch_stamp",
]
inputs = [
"../../pkg/dev_compiler/tool/kernel_sdk.dart",
"$target_gen_dir/dartdevc_files.stamp",
"$root_gen_dir/pkg_files.stamp",
]
outputs = [
sdk_dill,
"$target_gen_dir/kernel/amd/dart_sdk.js",
"$target_gen_dir/kernel/amd/dart_sdk.js.map",
"$target_gen_dir/kernel/common/dart_sdk.js",
"$target_gen_dir/kernel/common/dart_sdk.js.map",
"$target_gen_dir/kernel/es6/dart_sdk.js",
"$target_gen_dir/kernel/es6/dart_sdk.js.map",
"$target_gen_dir/kernel/legacy/dart_sdk.js",
"$target_gen_dir/kernel/legacy/dart_sdk.js.map",
]
script = "../../pkg/dev_compiler/tool/kernel_sdk.dart"
args = [
"--output",
rebase_path(sdk_dill),
"--libraries",
rebase_path("//sdk/lib/libraries.json"),
]
}