# 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.

if (is_fuchsia_host || is_fuchsia) {
  import("//build/dart/dart_library.gni")
  import("//build/dart/dart_tool.gni")

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

    sources = [
      "server.dart",
    ]

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

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

    sources = []

    deps = [
      ":frontend_server",
    ]
  }
} else {
  import("//third_party/dart/utils/application_snapshot.gni")

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

    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("../flutter_kernel_transformers"),
                    ],
                    "list lines")

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

    inputs = frontend_server_files
  }
}
