blob: c6e913d9d6ccb61221363be9ff268863ce03ae6f [file] [log] [blame]
# 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/prebuilt_dart_sdk.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",
"--unsafe-force-compile",
rebase_path("../../pkg/dev_compiler/bin/dartdevc.dart"),
]
deps = [
":dartdevc_sdk",
]
inputs = exec_script("../../tools/list_dart_files.py",
[
"absolute",
rebase_path("../../pkg/dev_compiler/bin"),
],
"list lines")
inputs += [ sdk_summary ]
}
application_snapshot("dartdevk") {
main_dart = "../../pkg/dev_compiler/bin/dartdevk.dart"
# TODO(vsm): Train this on real input.
training_args = [
"--dart-sdk-summary",
rebase_path(sdk_dill),
"-o",
"dartdevk.js",
rebase_path("../../pkg/dev_compiler/test/codegen/sunflower/sunflower.dart"),
]
deps = [
":dartdevc_sdk",
":dartdevc_sdk_kernel_summary",
]
inputs = exec_script("../../tools/list_dart_files.py",
[
"absolute",
rebase_path("../../pkg/dev_compiler/bin"),
],
"list lines")
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)
compiled_action(target_name) {
tool = "../../runtime/bin:dart"
inputs = sdk_lib_files + compiler_files + dev_compiler_files
outputs = [
out,
]
dot_packages = rebase_path("../../.packages")
compiler = rebase_path("../../pkg/compiler/lib/src/dart2js.dart")
args = [
"--packages=$dot_packages",
compiler,
"--packages=$dot_packages",
"$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.
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",
# The patch script uses several packages, including analyzer, so consider
# it dirty if any of those change.
"../../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",
]
# 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 = []
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"),
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.
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"),
]
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",
]
}
# Builds everything needed to run dartdevc and dartdevk tests using test.dart.
group("dartdevc_test") {
deps = [
":dartdevc",
":dartdevk",
":dartdevc_sdk",
":dartdevc_sdk_kernel_summary",
":dartdevc_test_pkg",
"../../sdk:create_sdk",
]
}
create_timestamp_file("dartdevc_files_stamp") {
path = rebase_path("../../pkg/dev_compiler/lib")
output = "$target_gen_dir/dartdevc_files.stamp"
}
# Compiles the packages used by the tests to JS with dartdevc so that they are
# available for loading by the tests.
compiled_action("dartdevc_test_pkg") {
tool = "../../runtime/bin:dart"
deps = [
":dartdevc_files_stamp",
":dartdevc_sdk",
":dartdevc_sdk_kernel_summary",
"../../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.dill",
"$target_gen_dir/pkg/async_helper.js",
"$target_gen_dir/pkg/async_helper.sum",
"$target_gen_dir/pkg/collection.dill",
"$target_gen_dir/pkg/collection.js",
"$target_gen_dir/pkg/collection.sum",
"$target_gen_dir/pkg/expect.dill",
"$target_gen_dir/pkg/expect.js",
"$target_gen_dir/pkg/expect.sum",
"$target_gen_dir/pkg/js.dill",
"$target_gen_dir/pkg/js.js",
"$target_gen_dir/pkg/js.sum",
"$target_gen_dir/pkg/matcher.dill",
"$target_gen_dir/pkg/matcher.js",
"$target_gen_dir/pkg/matcher.sum",
"$target_gen_dir/pkg/meta.dill",
"$target_gen_dir/pkg/meta.js",
"$target_gen_dir/pkg/meta.sum",
"$target_gen_dir/pkg/path.dill",
"$target_gen_dir/pkg/path.js",
"$target_gen_dir/pkg/path.sum",
"$target_gen_dir/pkg/stack_trace.dill",
"$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.dill",
"$target_gen_dir/pkg/unittest.js",
"$target_gen_dir/pkg/unittest.sum",
]
args = [
rebase_path("../../pkg/dev_compiler/tool/build_pkgs.dart"),
"--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.
compiled_action("dartdevc_sdk_kernel_summary") {
tool = "../../runtime/bin:dart"
deps = [
":dartdevc_files_stamp",
]
inputs = [
"$target_gen_dir/dartdevc_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",
]
args = [
rebase_path("../../pkg/dev_compiler/tool/kernel_sdk.dart"),
rebase_path(sdk_dill),
]
}