# 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("../../sdk_args.gni")
import("../../utils/compile_platform.gni")
import("../application_snapshot.gni")
import("../create_timestamp.gni")

create_timestamp_file("dart2js_files_stamp") {
  path = rebase_path("../../pkg/compiler/lib")
  output = "$target_gen_dir/dart2js_files.stamp"
}

create_timestamp_file("runtime_lib_files_stamp") {
  path = rebase_path("../../runtime/lib")
  output = "$target_gen_dir/runtime_lib_files.stamp"
}

create_timestamp_file("dartdoc_files_stamp") {
  path = rebase_path("../../sdk/lib/_internal/dartdoc")
  output = "$target_gen_dir/dartdoc_files.stamp"
}

prebuilt_dart_action("dart2js_create_snapshot_entry") {
  deps = [
    ":dart2js_files_stamp",
    ":dartdoc_files_stamp",
    ":runtime_lib_files_stamp",
  ]

  output_dir = rebase_path(target_gen_dir)

  script = "create_snapshot_entry.dart"

  inputs = [
    "$target_gen_dir/dart2js_files.stamp",
    "../../tools/make_version.py",
    "../../tools/VERSION",
  ]

  outputs = [ "$target_gen_dir/dart2js.dart" ]

  packages = "../../.dart_tool/package_config.json"

  args = [ "--output_dir=$output_dir" ]
}

sdk_root = "../../sdk"

application_snapshot("dart2js") {
  deps = [
    ":compile_dart2js_platform",
    ":compile_dart2js_platform_unsound",
    ":dart2js_create_snapshot_entry",
  ]
  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",
  ]
  vm_args = []
  main_dart = "$target_gen_dir/dart2js.dart"
  training_args = [
    "--packages=" +
        rebase_path("../../.dart_tool/package_config.json", root_build_dir),
    "--libraries-spec=" +
        rebase_path("$sdk_root/lib/libraries.json", root_build_dir),

    # Specifying the platform explicitly elides running the CFE on the sdk
    # sources.
    "--platform-binaries=" + rebase_path("$root_out_dir/", root_build_dir),

    rebase_path("../../pkg/compiler/lib/src/util/memory_compiler.dart"),
  ]
}

compile_platform("compile_dart2js_platform_unsound") {
  single_root_scheme = "org-dartlang-sdk"
  single_root_base = rebase_path("$sdk_root/")
  libraries_specification_uri = "org-dartlang-sdk:///lib/libraries.json"

  outputs = [
    "$root_out_dir/dart2js_platform_unsound.dill",
    "$root_out_dir/dart2js_outline_unsound.dill",
  ]

  args = [
    "--target=dart2js",
    "--no-defines",
    "dart:core",
  ]
}
compile_platform("compile_dart2js_platform") {
  single_root_scheme = "org-dartlang-sdk"
  single_root_base = rebase_path("$sdk_root/")
  libraries_specification_uri = "org-dartlang-sdk:///lib/libraries.json"

  outputs = [
    "$root_out_dir/dart2js_platform.dill",
    "$root_out_dir/dart2js_outline.dill",
  ]

  args = [
    "--target=dart2js",
    "--no-defines",
    "dart:core",
    "--nnbd-strong",
  ]
}
compile_platform("compile_dart2js_server_platform_unsound") {
  single_root_scheme = "org-dartlang-sdk"
  single_root_base = rebase_path("$sdk_root/")
  libraries_specification_uri = "org-dartlang-sdk:///lib/libraries.json"

  outputs = [
    "$root_out_dir/dart2js_server_platform_unsound.dill",
    "$root_out_dir/dart2js_server_outline_unsound.dill",
  ]

  args = [
    "--target=dart2js_server",
    "--no-defines",
    "dart:core",
  ]
}
compile_platform("compile_dart2js_server_platform") {
  single_root_scheme = "org-dartlang-sdk"
  single_root_base = rebase_path("$sdk_root/")
  libraries_specification_uri = "org-dartlang-sdk:///lib/libraries.json"

  outputs = [
    "$root_out_dir/dart2js_server_platform.dill",
    "$root_out_dir/dart2js_server_outline.dill",
  ]

  args = [
    "--target=dart2js_server",
    "--no-defines",
    "dart:core",
    "--nnbd-strong",
  ]
}
