# 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",
  ]
}

# 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 = "$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") {
  deprecated_bare_package_url = "//build"

  deps = [
    "//third_party/dart/runtime/bin:dart",
  ]

  binary = "dart"

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