# 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_kernel_sdk",
    ":dartdevc_kernel_sdk_outline",
  ]

  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)

  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("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_kernel_sdk",
    ":dartdevc_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_kernel_sdk",
    ":dartdevc_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_kernel_sdk",
    ":dartdevc_kernel_sdk_libraries_json",
    ":dartdevc_kernel_sdk_outline",
    ":dartdevc_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"),
  ]
}

prebuilt_dart_action("dartdevc_kernel_sdk_outline") {
  deps = [
    ":dartdevc_files_stamp",
    ":dartdevc_sdk_patch_stamp",
    "../../pkg:pkg_files_stamp",
  ]

  inputs = [
    "../../utils/bazel/kernel_worker.dart",
    "$target_gen_dir/dartdevc_files.stamp",
    "$root_gen_dir/pkg_files.stamp",
  ]

  outputs = [
    sdk_dill,
  ]

  script = "../../utils/bazel/kernel_worker.dart"

  args = [
    "--summary-only",
    "--target",
    "ddc",
    "--multi-root-scheme",
    "org-dartlang-sdk",
    "--multi-root",
    rebase_path("../../sdk"),
    "--libraries-file",
    "file:///" + rebase_path("../../sdk/lib/libraries.json"),
    "--output",
    rebase_path(sdk_dill),
    "--source",
    "dart:core",
  ]
}

copy("dartdevc_kernel_sdk_libraries_json") {
  sources = [
    rebase_path("../../sdk/lib/libraries.json"),
  ]
  outputs = [
    sdk_libraries_json,
  ]
}

# Compiles the DDC SDK's kernel summary and JS code.
prebuilt_dart_action("dartdevc_kernel_sdk") {
  deps = [
    ":dartdevc_files_stamp",
    ":dartdevc_sdk_patch_stamp",
    "../../pkg:pkg_files_stamp",
  ]

  inputs = [
    "$target_gen_dir/dartdevc_files.stamp",
    "$root_gen_dir/pkg_files.stamp",
  ]

  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/bin/dartdevc.dart"

  args = [
    "-k",
    "--compile-sdk",
    "dart:core",
    "--no-summarize",
    "--multi-root-scheme",
    "org-dartlang-sdk",
    "--multi-root",
    "file:///" + rebase_path("../../sdk"),
    "--multi-root-output-path",
    rebase_path("$target_gen_dir/../../"),
    "--libraries-file",
    "org-dartlang-sdk:///lib/libraries.json",
    "--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"),
  ]
}
