[ddc] Break out builds of ddc module format
Build all ddc module format outputs in separate invocations of the
compiler. This allows for DDC to detect `--modules=ddc` and
`--canary` and enable library bundles. This alternate "ddc" format
is where hot reload is being developed and tested. When ready, it
will become the only supported module format.
Change-Id: I932237c15d710d92db327177a8d6ca59d21a0a23
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/378545
Reviewed-by: Srujan Gaddam <srujzs@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
diff --git a/utils/ddc/BUILD.gn b/utils/ddc/BUILD.gn
index 7689613..c8b08b2 100644
--- a/utils/ddc/BUILD.gn
+++ b/utils/ddc/BUILD.gn
@@ -114,8 +114,10 @@
group("ddc_canary_test_local") {
deps = [
":ddc_canary_sdk",
+ ":ddc_canary_sdk_ddc_module",
":ddc_canary_test_pkg",
":ddc_canary_unsound_sdk",
+ ":ddc_canary_unsound_sdk_ddc_module",
]
}
@@ -149,14 +151,22 @@
# Compiles to JavaScript using DDC (canary) all packages imported in tests.
group("ddc_canary_test_pkg") {
deps = [
+ ":async_helper_canary_ddc_js",
":async_helper_canary_js",
+ ":async_helper_canary_unsound_ddc_js",
":async_helper_canary_unsound_js",
":ddc_test_pkg_outline",
+ ":expect_canary_ddc_js",
":expect_canary_js",
+ ":expect_canary_unsound_ddc_js",
":expect_canary_unsound_js",
+ ":js_canary_ddc_js",
":js_canary_js",
+ ":js_canary_unsound_ddc_js",
":js_canary_unsound_js",
+ ":meta_canary_ddc_js",
":meta_canary_js",
+ ":meta_canary_unsound_ddc_js",
":meta_canary_unsound_js",
]
}
@@ -179,6 +189,8 @@
"Need 'package' in $target_name (the name of the package)")
assert(defined(invoker.sound_null_safety),
"Need 'sound_null_safety' in $target_name.")
+ assert(defined(invoker.canary), "Need 'canary' in $target_name.")
+ assert(defined(invoker.modules), "Need 'modules' in $target_name.")
# Determine one of four possible directories for the JavaScript output to be
# generated:
@@ -214,7 +226,7 @@
prebuilt_dart_action(target_name) {
script = "../../pkg/dev_compiler/bin/dartdevc.dart"
- module = invoker.package
+ package_name = invoker.package
out_dir = rebase_path("$js_gen_dir")
sdk_path = rebase_path(sdk_outline)
pkg_root = rebase_path("$root_build_dir/../../pkg")
@@ -229,29 +241,32 @@
"$target_gen_dir/ddc_files.stamp",
]
- outputs = [
- "$js_gen_dir/amd/$module.js",
- "$js_gen_dir/amd/$module.js.map",
- "$js_gen_dir/ddc/$module.js",
- "$js_gen_dir/ddc/$module.js.map",
- ]
+ outputs = []
+ args = []
+ foreach(module, invoker.modules) {
+ outputs += [
+ "$js_gen_dir/$module/$package_name.js",
+ "$js_gen_dir/$module/$package_name.js.map",
+ ]
+
+ args += [
+ "--modules=$module",
+ "-o$out_dir/$module/$package_name.js",
+ ]
+ }
vm_args = [ "-Dsdk_hash=$sdk_hash" ]
- args = [
+ args += [
"--no-summarize",
"--multi-root-output-path=$pkg_root",
"--dart-sdk-summary=$sdk_path",
- "--modules=amd",
- "-o$out_dir/amd/$module.js",
- "--modules=ddc",
- "-o$out_dir/ddc/$module.js",
- "package:$module/$module.dart",
+ "package:$package_name/$package_name.dart",
]
if (defined(invoker.extra_libraries)) {
foreach(lib, invoker.extra_libraries) {
- args += [ "package:$module/$lib.dart" ]
+ args += [ "package:$package_name/$lib.dart" ]
}
}
@@ -349,24 +364,48 @@
ddc_compile("async_helper_stable_js") {
package = "async_helper"
canary = false
+ modules = [
+ "amd",
+ "ddc",
+ ]
sound_null_safety = true
}
ddc_compile("async_helper_canary_js") {
package = "async_helper"
canary = true
+ modules = [ "amd" ]
+ sound_null_safety = true
+}
+
+ddc_compile("async_helper_canary_ddc_js") {
+ package = "async_helper"
+ canary = true
+ modules = [ "ddc" ]
sound_null_safety = true
}
ddc_compile("async_helper_stable_unsound_js") {
package = "async_helper"
canary = false
+ modules = [
+ "amd",
+ "ddc",
+ ]
sound_null_safety = false
}
ddc_compile("async_helper_canary_unsound_js") {
package = "async_helper"
canary = true
+ modules = [ "amd" ]
+ sound_null_safety = false
+}
+
+ddc_compile("async_helper_canary_unsound_ddc_js") {
+ package = "async_helper"
+ canary = true
+ modules = [ "ddc" ]
sound_null_safety = false
}
@@ -386,6 +425,10 @@
package = "expect"
extra_libraries = [ "minitest" ]
canary = false
+ modules = [
+ "amd",
+ "ddc",
+ ]
sound_null_safety = true
}
@@ -393,6 +436,15 @@
package = "expect"
extra_libraries = [ "minitest" ]
canary = true
+ modules = [ "amd" ]
+ sound_null_safety = true
+}
+
+ddc_compile("expect_canary_ddc_js") {
+ package = "expect"
+ extra_libraries = [ "minitest" ]
+ canary = true
+ modules = [ "ddc" ]
sound_null_safety = true
}
@@ -400,6 +452,10 @@
package = "expect"
extra_libraries = [ "minitest" ]
canary = false
+ modules = [
+ "amd",
+ "ddc",
+ ]
sound_null_safety = false
}
@@ -407,6 +463,15 @@
package = "expect"
extra_libraries = [ "minitest" ]
canary = true
+ modules = [ "amd" ]
+ sound_null_safety = false
+}
+
+ddc_compile("expect_canary_unsound_ddc_js") {
+ package = "expect"
+ extra_libraries = [ "minitest" ]
+ canary = true
+ modules = [ "ddc" ]
sound_null_safety = false
}
@@ -426,6 +491,10 @@
package = "js"
extra_libraries = [ "js_util" ]
canary = false
+ modules = [
+ "amd",
+ "ddc",
+ ]
sound_null_safety = true
}
@@ -433,12 +502,26 @@
package = "js"
extra_libraries = [ "js_util" ]
canary = true
+ modules = [ "amd" ]
sound_null_safety = true
}
+
+ddc_compile("js_canary_ddc_js") {
+ package = "js"
+ extra_libraries = [ "js_util" ]
+ canary = true
+ modules = [ "ddc" ]
+ sound_null_safety = true
+}
+
ddc_compile("js_stable_unsound_js") {
package = "js"
extra_libraries = [ "js_util" ]
canary = false
+ modules = [
+ "amd",
+ "ddc",
+ ]
sound_null_safety = false
}
@@ -446,6 +529,15 @@
package = "js"
extra_libraries = [ "js_util" ]
canary = true
+ modules = [ "amd" ]
+ sound_null_safety = false
+}
+
+ddc_compile("js_canary_unsound_ddc_js") {
+ package = "js"
+ extra_libraries = [ "js_util" ]
+ canary = true
+ modules = [ "ddc" ]
sound_null_safety = false
}
@@ -462,24 +554,48 @@
ddc_compile("meta_stable_js") {
package = "meta"
canary = false
+ modules = [
+ "amd",
+ "ddc",
+ ]
sound_null_safety = true
}
ddc_compile("meta_canary_js") {
package = "meta"
canary = true
+ modules = [ "amd" ]
+ sound_null_safety = true
+}
+
+ddc_compile("meta_canary_ddc_js") {
+ package = "meta"
+ canary = true
+ modules = [ "ddc" ]
sound_null_safety = true
}
ddc_compile("meta_stable_unsound_js") {
package = "meta"
canary = false
+ modules = [
+ "amd",
+ "ddc",
+ ]
sound_null_safety = false
}
ddc_compile("meta_canary_unsound_js") {
package = "meta"
canary = true
+ modules = [ "amd" ]
+ sound_null_safety = false
+}
+
+ddc_compile("meta_canary_unsound_ddc_js") {
+ package = "meta"
+ canary = true
+ modules = [ "ddc" ]
sound_null_safety = false
}
@@ -527,6 +643,8 @@
template("ddc_compile_sdk") {
assert(defined(invoker.sound_null_safety),
"Need 'sound_null_safety' in $target_name.")
+ assert(defined(invoker.canary), "Need 'canary' in $target_name.")
+ assert(defined(invoker.modules), "Need 'modules' in $target_name.")
# Determine one of four possible directories for the JavaScript output to be
# generated:
@@ -559,22 +677,28 @@
inputs = [ platform_input ]
- outputs = [
- "$js_gen_dir/amd/dart_sdk.js",
- "$js_gen_dir/amd/dart_sdk.js.map",
- "$js_gen_dir/common/dart_sdk.js",
- "$js_gen_dir/common/dart_sdk.js.map",
- "$js_gen_dir/es6/dart_sdk.js",
- "$js_gen_dir/es6/dart_sdk.js.map",
- "$js_gen_dir/ddc/dart_sdk.js",
- "$js_gen_dir/ddc/dart_sdk.js.map",
- ]
+ outputs = []
+ args = []
+
+ foreach(module, invoker.modules) {
+ outputs += [
+ "$js_gen_dir/$module/dart_sdk.js",
+ "$js_gen_dir/$module/dart_sdk.js.map",
+ ]
+
+ args += [
+ "--modules",
+ "$module",
+ "-o",
+ rebase_path("$js_gen_dir/$module/dart_sdk.js"),
+ ]
+ }
vm_args = [ "-Dsdk_hash=$sdk_hash" ]
script = "../../pkg/dev_compiler/bin/dartdevc.dart"
- args = [
+ args += [
"--multi-root-scheme",
"org-dartlang-sdk",
"--multi-root-output-path",
@@ -586,22 +710,6 @@
# These JavaScript files and source maps are no longer packaged into the
# released SDK.
rebase_path("$target_gen_dir/../../../dart-sdk"),
- "--modules",
- "amd",
- "-o",
- rebase_path("$js_gen_dir/amd/dart_sdk.js"),
- "--modules",
- "common",
- "-o",
- rebase_path("$js_gen_dir/common/dart_sdk.js"),
- "--modules",
- "es6",
- "-o",
- rebase_path("$js_gen_dir/es6/dart_sdk.js"),
- "--modules",
- "ddc",
- "-o",
- rebase_path("$js_gen_dir/ddc/dart_sdk.js"),
rebase_path("$platform_input"),
]
@@ -619,20 +727,66 @@
ddc_compile_sdk("ddc_stable_sdk") {
canary = false
+ modules = [
+ "amd",
+ "common",
+ "es6",
+ "ddc",
+ ]
sound_null_safety = true
}
ddc_compile_sdk("ddc_stable_unsound_sdk") {
canary = false
+ modules = [
+ "amd",
+ "common",
+ "es6",
+ "ddc",
+ ]
sound_null_safety = false
}
ddc_compile_sdk("ddc_canary_sdk") {
canary = true
+ modules = [
+ "amd",
+ "common",
+ "es6",
+ ]
+ sound_null_safety = true
+}
+
+# Compiles the DDC SDK JavaScript modules from the platform .dill file in the
+# "ddc" module format only.
+#
+# This allows for them to be built individually (only passing one `--modules`
+# flag value) so that when also passing the `--canary` flag it will trigger
+# DDC to enable the option for the new library bundle format.
+ddc_compile_sdk("ddc_canary_sdk_ddc_module") {
+ canary = true
+ modules = [ "ddc" ]
sound_null_safety = true
}
ddc_compile_sdk("ddc_canary_unsound_sdk") {
canary = true
+ modules = [
+ "amd",
+ "common",
+ "es6",
+ ]
+ sound_null_safety = false
+}
+
+# Compiles the DDC SDK JavaScript modules from the platform .dill file in the
+# "ddc" module format only.
+#
+# This allows for them to be built individually (only passing one `--modules`
+# flag value) so that when also passing the `--canary` flag it will trigger
+# DDC to enable the option for the new library bundle format.
+ddc_compile_sdk("ddc_canary_unsound_sdk_ddc_module") {
+ canary = true
+ modules = [ "ddc" ]
sound_null_safety = false
}