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

sdk_atom("gen_snapshot_sdk") {
  id = "sdk://tools/gen_snapshot"
  category = "partner"

  files_content = [
    "tools/gen_snapshot.${current_cpu}",
    "tools/gen_snapshot_product.${current_cpu}",
  ]

  meta = {
    schema = "host_tool"
    dest = "tools/gen_snapshot-meta.json"
    value = {
      type = "host_tool"
      name = "gen_snapshot"
      root = "tools"
      target_files = {}
      if (target_cpu == "arm64") {
        target_files.arm64 = files_content
      } else if (target_cpu == "x64") {
        target_files.x64 = files_content
      } else {
        assert(false, "Unknown CPU type: $target_cpu")
      }
    }
  }

  files = [
    {
      source = prebuilt_gen_snapshot
      dest = "tools/gen_snapshot.${current_cpu}"
    },
    {
      source = prebuilt_gen_snapshot_product
      dest = "tools/gen_snapshot_product.${current_cpu}"
    },
  ]
}

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

  binary = "dart"

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