# Copyright 2018 The Fuchsia Authors. 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.gni")
import("//build/dart/dart_tool.gni")
import("//build/package.gni")
import("//build/sdk/sdk_atom.gni")

dart_tool("kernel_compiler") {
  main_dart = "compiler.dart"

  force_prebuilt_dart = true

  source_dir = "."
  sources = [
    "compiler.dart",
  ]

  deps = [
    "//third_party/dart-pkg/pub/args",
    "//third_party/dart/pkg/build_integration",
    "//third_party/dart/pkg/front_end",
    "//third_party/dart/pkg/kernel",
    "//third_party/dart/pkg/vm",
  ]
}

dart_tool("build_test_bootstrap") {
  main_dart = "build_test_bootstrap.dart"
  source_dir = "."

  deps = [
    "//third_party/dart-pkg/git/flutter/packages/flutter_tools",
    "//third_party/dart-pkg/pub/args",
    "//third_party/dart-pkg/pub/crypto",
  ]
}

# TODO(alainv): Move that to dart_tool.gni to make it more generic.
sdk_atom("kernel_compiler_sdk") {
  id = "sdk://tools/dart_kernel_compiler"
  category = "partner"

  meta = {
    schema = "host_tool"
    dest = "tools/dart_kernel_compiler-meta.json"
    value = {
      type = "host_tool"
      name = "dart_kernel_compiler"
      root = "tools"
      files = [
        "tools/dart",
        "tools/dart_prebuilts/dart_runner/platform_strong.dill",
        "tools/dart_prebuilts/flutter_runner/platform_strong.dill",
        "tools/dart_prebuilts/kernel_compiler.snapshot",
        "tools/dart_prebuilts/frontend_server_tool.snapshot",
      ]
    }
  }

  dart_target_gen_dir =
      get_label_info(":bogus($host_toolchain)", "target_gen_dir")
  kernel_compiler_path = "$dart_target_gen_dir/kernel_compiler.snapshot"
  frontend_server_tool_gen_dir = get_label_info(
          "//third_party/flutter/frontend_server:frontend_server_tool_snapshot($host_toolchain)",
          "target_gen_dir")

  files = [
    {
      source = "$kernel_compiler_path"
      dest = "tools/dart_prebuilts/kernel_compiler.snapshot"
    },
    {
      source = prebuilt_dart
      dest = "tools/dart"
    },
    {
      source = prebuilt_gen_snapshot
      dest = "tools/dart_prebuilts/gen_snapshot.${current_cpu}"
    },
    {
      source = prebuilt_gen_snapshot_product
      dest = "tools/dart_prebuilts/gen_snapshot_product.${current_cpu}"
    },
    {
      source = "$root_out_dir/dart_runner_patched_sdk/platform_strong.dill"
      dest = "tools/dart_prebuilts/dart_runner/platform_strong.dill"
    },
    {
      source = "$root_out_dir/flutter_runner_patched_sdk/platform_strong.dill"
      dest = "tools/dart_prebuilts/flutter_runner/platform_strong.dill"
    },
    {
      source = "$frontend_server_tool_gen_dir/frontend_server_tool.snapshot"
      dest = "tools/dart_prebuilts/frontend_server_tool.snapshot"
    },
  ]

  non_sdk_deps = [
    ":kernel_compiler_snapshot($host_toolchain)",
    "//third_party/flutter/frontend_server:frontend_server_tool_snapshot($host_toolchain)",
    "//topaz/runtime/dart_runner/kernel:kernel_platform_files",
    "//topaz/runtime/flutter_runner/kernel:kernel_platform_files",
  ]
}

package("dart") {
  deps = [
    "//third_party/dart/runtime/bin:dart",
  ]

  binary = "dart"

  meta = [
    {
      path = rebase_path("meta/dart.cmx")
      dest = "dart.cmx"
    },
  ]
}
