dart-sdk/utils/dartdevc/BUILD.gn
jonahwilliams 3e304def65 switch dartdevc to kernel and fix path in rules.
The flutter engine needs to switch to the full SDK to include web support. As written, the dartdevc rules do not work outside of the sdk repo


Bug: https://github.com/dart-lang/sdk/issues/35834
Change-Id: I3b7711cf1920d86b82ddc4f0959b447207f54751
Reviewed-on: https://dart-review.googlesource.com/c/93760
Reviewed-by: Vijay Menon <vsm@google.com>
Reviewed-by: Jenny Messerly <jmesserly@google.com>
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Vijay Menon <vsm@google.com>
2019-02-22 01:02:05 +00:00

352 lines
10 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"
sdk_libraries_json = "$target_gen_dir/libraries.json"
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),
"-k",
"-o",
"dartdevc.js",
rebase_path("../../pkg/dev_compiler/bin/dartdevc.dart"),
]
deps = [
":dartdevc_sdk",
]
inputs = [ sdk_summary ]
}
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 tests using test.dart.
group("dartdevc_test") {
deps = [
":dartdevc",
":dartdevc_sdk",
":dartdevc_kernel_sdk",
":dartdevc_test_pkg",
"../../sdk:create_sdk",
]
}
# Builds everything needed to run dartdevc 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",
":dartdevc_kernel_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",
":dartdevc_kernel_sdk",
"../../pkg:pkg_files_stamp",
]
inputs = [
sdk_dill,
sdk_libraries_json,
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("dartdevc_kernel_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,
sdk_libraries_json,
"$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"),
]
}