# 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") declare_args() { # Enables DDC canary features during compilation to JavaScript. ddc_canary = false } patched_sdk_dir = "$target_gen_dir/patched_sdk" sdk_summary = "$target_gen_dir/ddc_sdk.sum" sdk_outline_sound_dill = "$root_out_dir/ddc_outline.dill" sdk_full_sound_dill = "$root_out_dir/ddc_platform.dill" sdk_outline_unsound_dill = "$root_out_dir/ddc_outline_unsound.dill" sdk_full_unsound_dill = "$root_out_dir/ddc_platform_unsound.dill" application_snapshot("dartdevc") { main_dart = "../../pkg/dev_compiler/bin/dartdevc.dart" training_args = [ "--dart-sdk-summary", rebase_path(sdk_outline_sound_dill), "-o", "dartdevc.js", rebase_path("../../pkg/dev_compiler/bin/dartdevc.dart"), ] if (ddc_canary) { training_args += [ "--canary" ] } deps = [ ":dartdevc_platform_sound" ] inputs = [ sdk_outline_sound_dill ] } sdk_root = "../../sdk" 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 = invoker.deps + [ "../compiler:compile_dart2js_platform", "../compiler:compile_dart2js_platform_unsound", ] inputs = [ "$root_out_dir/dart2js_platform.dill", "$root_out_dir/dart2js_platform_unsound.dill", "$root_out_dir/dart2js_outline.dill", "$root_out_dir/dart2js_outline_unsound.dill", ] outputs = [ out ] script = "../../pkg/compiler/lib/src/dart2js.dart" packages = "../../.dart_tool/package_config.json" vm_args = [ "-Dsdk_hash=$sdk_hash" ] args = [ "$abs_main", "-m", "--invoker=gn_build", "-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" deps = [ ":dartdevc_files_stamp" ] } # Builds everything needed to run dartdevc tests using test.dart. group("dartdevc_test") { deps = [ ":dartdevc", ":dartdevc_kernel_sdk", ":dartdevc_sound_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", ] } 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", ":async_helper_sound_js", ":expect_js", ":expect_sound_js", ":js_js", ":js_sound_js", ":meta_js", ":meta_sound_js", ] } template("dartdevc_kernel_compile") { assert(defined(invoker.package), "Need 'package' in $target_name (the name of the package)") assert(defined(invoker.sound_null_safety), "Need 'sound_null_safety' in $target_name.") if (invoker.sound_null_safety) { platform_dep = ":dartdevc_platform_sound" sdk_outline = sdk_outline_sound_dill js_gen_dir = "$target_gen_dir/pkg_sound" } else { platform_dep = ":dartdevc_platform_unsound" sdk_outline = sdk_outline_unsound_dill js_gen_dir = "$target_gen_dir/pkg_kernel" } # 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 out_dir = rebase_path("$js_gen_dir") sdk_path = rebase_path(sdk_outline) deps = [ ":dartdevc_files_stamp", platform_dep, ] inputs = [ sdk_outline, "$target_gen_dir/dartdevc_files.stamp", ] outputs = [ "$js_gen_dir/$module.dill", "$js_gen_dir/$module.js", ] vm_args = [ "-Dsdk_hash=$sdk_hash" ] args = [ "--dart-sdk-summary=$sdk_path", "-o$out_dir/$module.js", "package:$module/$module.dart", ] if (ddc_canary) { args += [ "--canary" ] } 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$out_dir/$dep.dill" ] } } if (defined(invoker.args)) { args += invoker.args } if (invoker.sound_null_safety) { args += [ "--sound-null-safety" ] } else { args += [ "--no-sound-null-safety" ] } } } dartdevc_kernel_compile("async_helper_js") { package = "async_helper" sound_null_safety = false } dartdevc_kernel_compile("async_helper_sound_js") { package = "async_helper" sound_null_safety = true } dartdevc_kernel_compile("expect_js") { package = "expect" extra_libraries = [ "minitest" ] sound_null_safety = false } dartdevc_kernel_compile("expect_sound_js") { package = "expect" extra_libraries = [ "minitest" ] sound_null_safety = true } dartdevc_kernel_compile("js_js") { package = "js" extra_libraries = [ "js_util" ] sound_null_safety = false } dartdevc_kernel_compile("js_sound_js") { package = "js" extra_libraries = [ "js_util" ] sound_null_safety = true } dartdevc_kernel_compile("meta_js") { package = "meta" sound_null_safety = false } dartdevc_kernel_compile("meta_sound_js") { package = "meta" sound_null_safety = true } template("compile_dartdevc_platform") { assert(defined(invoker.sound_null_safety), "Need 'sound_null_safety' in $target_name.") compile_platform(target_name) { single_root_scheme = "org-dartlang-sdk" single_root_base = rebase_path("$sdk_root/") libraries_specification_uri = "org-dartlang-sdk:///lib/libraries.json" args = [ "--target=dartdevc", "dart:core", ] if (invoker.sound_null_safety) { args += [ "--nnbd-strong" ] outputs = [ sdk_full_sound_dill, sdk_outline_sound_dill, ] } else { args += [ "--nnbd-weak" ] outputs = [ sdk_full_unsound_dill, sdk_outline_unsound_dill, ] } } } compile_dartdevc_platform("dartdevc_platform_unsound") { sound_null_safety = false } compile_dartdevc_platform("dartdevc_platform_sound") { sound_null_safety = true } # Compiles the DDC SDK's JS code from the platform .dill. template("dartdevc_sdk_js") { assert(defined(invoker.sound_null_safety), "Need 'sound_null_safety' in $target_name.") if (invoker.sound_null_safety) { platform_dep = ":dartdevc_platform_sound" platform_input = sdk_full_sound_dill js_gen_dir = "$target_gen_dir/sound" } else { platform_dep = ":dartdevc_platform_unsound" platform_input = sdk_full_unsound_dill js_gen_dir = "$target_gen_dir/kernel" } prebuilt_dart_action(target_name) { deps = [ ":dartdevc_files_stamp", platform_dep, ] 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/legacy/dart_sdk.js", "$js_gen_dir/legacy/dart_sdk.js.map", ] vm_args = [ "-Dsdk_hash=$sdk_hash" ] script = "../../pkg/dev_compiler/bin/dartdevc.dart" args = [ "--multi-root-scheme", "org-dartlang-sdk", "--multi-root-output-path", # This path is intended to point to a version of source files used to # generate the SDK JavaScript modules. # The intention is that the source map locations can be linked to the # orignal source files while running SDK test suites. # 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", "legacy", "-o", rebase_path("$js_gen_dir/legacy/dart_sdk.js"), rebase_path("$platform_input"), ] if (invoker.sound_null_safety) { args += [ "--sound-null-safety" ] } else { args += [ "--no-sound-null-safety" ] } if (ddc_canary) { args += [ "--canary" ] } } } dartdevc_sdk_js("dartdevc_kernel_sdk") { sound_null_safety = false } dartdevc_sdk_js("dartdevc_sound_sdk") { sound_null_safety = true }