# 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_unsound_dill),
    "--no-sound-null-safety",
    "-o",
    "dartdevc.js",
    rebase_path("../../pkg/dev_compiler/bin/dartdevc.dart"),
  ]

  if (ddc_canary) {
    training_args += [ "--canary" ]
  }

  deps = [
    ":dartdevc_kernel_sdk",
    ":dartdevc_platform_unsound",
  ]

  inputs = [ sdk_outline_unsound_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",
      "-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
}
