# 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_dill), "-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", "--no-source-maps", ] } } 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("../../sdk/lib/_internal/js_dev_runtime"), ], "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("../../sdk/lib/_internal/js_dev_runtime"), 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("../../sdk/lib/_internal/js_dev_runtime") 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"), ] }