Files
sdk/utils/dartdevc/BUILD.gn
T
asiva 393468dc89 This is a trial submit of the unfork CL, it will be reverted immediately.
This commit is being done so we can roll it into Flutter and run some device lab testing to see the effect this CL will have on Flutter.

[BUILD] - Initial CL to unfork the NNBD Dart SDK

- Flips the flag from --nnbd to --no-nnbd so that by default it builds
  the NNBD version
- using the --no-nnbd flag results in the SDK being built in a
  directory which has the 'Legacy' suffix added to it
  (e.g: out/DebugX64Legacy)
- the '--enable-experiment=non-nullable' flag still needs to be passed
  in during execution so that CFE runs in that mode. This is different
  from the 'null_safety' flag

Change-Id: I83c813aee2a5b61ad876d8a7b0988705bb24c839
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/144082
Reviewed-by: Siva Annamalai <asiva@google.com>
2020-04-20 03:46:06 +00:00

399 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("../../sdk_args.gni")
import("../../utils/compile_platform.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"
# TODO(sigmund): rename to ddc_outline.dill to be consistent with the naming
# convention from other tools.
sdk_outline_dill = "$root_out_dir/ddc_sdk.dill"
sdk_full_dill = "$root_out_dir/ddc_platform.dill"
if (dont_use_nnbd) {
libraries_specification_path = "sdk/lib/libraries.json"
} else {
libraries_specification_path = "sdk_nnbd/lib/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_outline_dill),
"-k",
"-o",
"dartdevc.js",
]
if (dont_use_nnbd) {
training_args += [ rebase_path("../../pkg/dev_compiler/bin/dartdevc.dart") ]
} else {
training_args += [
"--enable-experiment=non-nullable",
# TODO(sigmund): restore training with dartdevc.dart. Currently blocked by
# some regressions in type-promotion in the CFE when nnbd is enabled.
# The following test file is pretty simple and has no imports, so it
# should be easier to compile while we bootstrap NNBD.
rebase_path("../../tests/language_2/abstract/equal_test.dart"),
]
}
deps = [
":dartdevc_kernel_sdk",
":dartdevc_platform",
]
inputs = [ sdk_outline_dill ]
}
# TODO(#38701) Cleanup after merging the forked SDK into mainline.
if (dont_use_nnbd) {
sdk_root = "../../sdk"
libraries_specification_path = "sdk/lib/libraries.json"
} else {
sdk_root = "../../sdk_nnbd"
libraries_specification_path = "sdk_nnbd/lib/libraries.json"
}
sdk_lib_files = exec_script("../../tools/list_dart_files.py",
[
"absolute",
rebase_path("$sdk_root/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)
prebuilt_dart_action(target_name) {
deps = [ "../compiler:compile_dart2js_platform" ]
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",
"--no-source-maps",
"--platform-binaries=" + rebase_path("$root_out_dir"),
]
}
}
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") {
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"
inputs = sdk_lib_files
# 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 = [
"--libraries",
rebase_path("$sdk_root/lib/libraries.json"),
"--target",
"dartdevc",
"--out",
rebase_path("$patched_sdk_dir/"),
]
# TODO(#38701) Cleanup after merging the forked SDK into mainline.
if (dont_use_nnbd) {
args += [ "--no-nnbd" ]
}
}
# Builds everything needed to run dartdevc tests using test.dart.
group("dartdevc_test") {
deps = [
":dartdevc",
":dartdevc_kernel_sdk",
":dartdevc_test_kernel_pkg",
"../..: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_kernel_sdk",
":dartdevc_test_kernel_pkg",
]
}
group("dartdevc_test_kernel_local") {
deps = [
":dartdevc_kernel_sdk",
":dartdevc_test_kernel_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("$sdk_root/lib/_internal/js_dev_runtime")
output = "$target_gen_dir/dartdevc_sdk_patch_stamp.stamp"
}
# Compiles to JavaScript any package used from tests.
# TODO(sigmund): generate a js bundle or a module that load these indirectly so
# we can stop referring to this list of packages explicitly in the test_runner.
group("dartdevc_test_kernel_pkg") {
deps = [
":async_helper_js",
":collection_js",
":expect_js",
":js_js",
":matcher_js",
":meta_js",
":path_js",
":stack_trace_js",
]
}
template("dartdevc_kernel_compile") {
assert(defined(invoker.package),
"Need 'package' in $target_name (the name of the package)")
# Other optional invoker parameters:
# * extra_libraries: entrypoints to include in the module as
# "package:package_name/library_name.dart" (the rule implicitly adds
# the default import "package:package_name/package_name.dart").
# * package_dependencies: the name of other packages this package depends
# on. When providing `name`, a separate `dartdevc_kernel_compile` target
# named `${name}_js` must exist.
# * args: additional args to pass to dartdevc
prebuilt_dart_action(target_name) {
script = "../../pkg/dev_compiler/bin/dartdevc.dart"
module = invoker.package
outdir = rebase_path("$target_gen_dir")
sdk_path = rebase_path(sdk_outline_dill)
deps = [
":dartdevc_files_stamp",
":dartdevc_platform",
# TODO(sigmund): depend only on the compiler and the actual files in the
# package
"../../pkg:pkg_files_stamp",
]
inputs = [
sdk_outline_dill,
"$target_gen_dir/dartdevc_files.stamp",
"$root_gen_dir/pkg_files.stamp",
]
outputs = [
"$target_gen_dir/pkg_kernel/$module.dill",
"$target_gen_dir/pkg_kernel/$module.js",
]
args = [
"-k",
"--dart-sdk-summary=$sdk_path",
"-o$outdir/pkg_kernel/$module.js",
"package:$module/$module.dart",
]
if (defined(invoker.extra_libraries)) {
foreach(lib, invoker.extra_libraries) {
args += [ "package:$module/$lib.dart" ]
}
}
if (defined(invoker.package_dependencies)) {
foreach(dep, invoker.package_dependencies) {
deps += [ ":${dep}_js" ]
args += [ "-s$outdir/pkg_kernel/$dep.dill" ]
}
}
if (defined(invoker.args)) {
args += invoker.args
}
# TODO(38701): Cleanup after merging the forked SDK into mainline.
if (!dont_use_nnbd) {
args += [ "--enable-experiment=non-nullable" ]
}
}
}
dartdevc_kernel_compile("async_helper_js") {
package = "async_helper"
}
dartdevc_kernel_compile("collection_js") {
package = "collection"
}
dartdevc_kernel_compile("expect_js") {
package = "expect"
extra_libraries = [ "minitest" ]
}
dartdevc_kernel_compile("js_js") {
package = "js"
extra_libraries = [ "js_util" ]
}
dartdevc_kernel_compile("matcher_js") {
package = "matcher"
package_dependencies = [ "stack_trace" ]
}
dartdevc_kernel_compile("meta_js") {
package = "meta"
}
dartdevc_kernel_compile("path_js") {
package = "path"
}
dartdevc_kernel_compile("stack_trace_js") {
package = "stack_trace"
package_dependencies = [ "path" ]
}
compile_platform("dartdevc_platform") {
single_root_scheme = "org-dartlang-sdk"
single_root_base = rebase_path("../../")
libraries_specification_uri =
"org-dartlang-sdk:///$libraries_specification_path"
outputs = [
sdk_full_dill,
sdk_outline_dill,
]
args = [
"--target=dartdevc",
"dart:core",
]
# TODO(38701): Cleanup after merging the forked SDK into mainline.
if (!dont_use_nnbd) {
args += [ "--enable-experiment=non-nullable" ]
}
}
# Compiles the DDC SDK's kernel summary and JS code.
prebuilt_dart_action("dartdevc_kernel_sdk") {
deps = [
":dartdevc_files_stamp",
":dartdevc_platform",
"../../pkg:pkg_files_stamp",
]
inputs = [
"$target_gen_dir/dartdevc_files.stamp",
"$root_gen_dir/pkg_files.stamp",
sdk_full_dill,
]
outputs = [
"$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/compile_dartdevc_sdk.dart"
args = [
"--multi-root-scheme",
"org-dartlang-sdk",
"--multi-root-output-path",
rebase_path("$target_gen_dir/../../../"),
"--modules",
"amd",
"-o",
rebase_path("$target_gen_dir/kernel/amd/dart_sdk.js"),
"--modules",
"common",
"-o",
rebase_path("$target_gen_dir/kernel/common/dart_sdk.js"),
"--modules",
"es6",
"-o",
rebase_path("$target_gen_dir/kernel/es6/dart_sdk.js"),
"--modules",
"legacy",
"-o",
rebase_path("$target_gen_dir/kernel/legacy/dart_sdk.js"),
rebase_path("$sdk_full_dill"),
]
# TODO(38701): Cleanup after merging the forked SDK into mainline.
if (!dont_use_nnbd) {
args += [ "--enable-experiment=non-nullable" ]
}
}