# Copyright 2013 The Flutter 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("//third_party/dart/utils/application_snapshot.gni")

# TODO(kaushikiska@): Leaving this here to make it a soft-transition
# Remove this once we no longer need engine sources in fuchsia/topaz.
if (is_fuchsia_host || is_fuchsia) {
  import("//build/dart/dart_library.gni")
  import("//build/dart/dart_tool.gni")

  dart_library("flutter_frontend_server") {
    disable_analysis = true
    package_name = "flutter_frontend_server"

    sources = [
      "server.dart",
    ]

    deps = [
      "//third_party/dart-pkg/pub/args",
      "//third_party/dart-pkg/pub/cli_util",
      "//third_party/dart-pkg/pub/path",
      "//third_party/dart-pkg/pub/source_maps",
      "//third_party/dart-pkg/pub/usage",
      "//third_party/dart/pkg/analyzer",
      "//third_party/dart/pkg/build_integration",
      "//third_party/dart/pkg/dev_compiler",
      "//third_party/dart/pkg/front_end",
      "//third_party/dart/pkg/frontend_server",
      "//third_party/dart/pkg/kernel",
      "//third_party/dart/pkg/vm",
    ]
  }

  dart_tool("frontend_server_tool") {
    main_dart = "bin/starter.dart"
    source_dir = "."
    disable_analysis = true
    output_name = "frontend_server"

    sources = []

    deps = [
      ":flutter_frontend_server",
    ]
  }
}

frontend_server_files =
    exec_script("//third_party/dart/tools/list_dart_files.py",
                [
                  "absolute",
                  rebase_path("."),
                ],
                "list lines")

frontend_server_files +=
    exec_script("//third_party/dart/tools/list_dart_files.py",
                [
                  "absolute",
                  rebase_path("../../third_party/dart/pkg"),
                ],
                "list lines")

application_snapshot("frontend_server") {
  main_dart = "bin/starter.dart"
  deps = [
    "//flutter/lib/snapshot:kernel_platform_files",
  ]
  dot_packages = rebase_path(".dart_tool/package_config.json")
  flutter_patched_sdk = rebase_path("$root_out_dir/flutter_patched_sdk")
  training_args = [
    "--train",
    "--sdk-root=$flutter_patched_sdk",
    rebase_path(main_dart),
  ]

  inputs = frontend_server_files
}
