# 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("$flutter_root/common/config.gni")

if (is_fuchsia) {
  import("//build/fuchsia/sdk.gni")
}

# Whether to build the dartdevc sdk, libraries, and source files
# required for the flutter web sdk.
declare_args() {
  full_dart_sdk = false
}

group("flutter") {
  testonly = true

  public_deps = [
    "$flutter_root/lib/snapshot:generate_snapshot_bin",
    "$flutter_root/lib/snapshot:kernel_platform_files",
    "$flutter_root/shell/platform/embedder:flutter_engine",
    "$flutter_root/sky",
  ]

  if (current_toolchain == host_toolchain) {
    public_deps += [ "$flutter_root/shell/testing" ]
  }

  if (is_fuchsia && using_fuchsia_sdk) {
    public_deps += [ "$flutter_root/shell/platform/fuchsia" ]
  }

  if (!is_fuchsia && !is_fuchsia_host) {
    if (current_toolchain == host_toolchain) {
      public_deps += [
        "$flutter_root/frontend_server",
        "//third_party/dart:create_sdk",
      ]

      if (full_dart_sdk) {
        public_deps += [ "$flutter_root/web_sdk" ]
      }
    }
  }

  # If on the host, compile all unittests targets.
  if (current_toolchain == host_toolchain) {
    if (is_mac) {
      public_deps +=
          [ "$flutter_root/shell/platform/darwin:flutter_channels_unittests" ]
    }

    public_deps += [
      "$flutter_root/flow:flow_unittests",
      "$flutter_root/fml:fml_unittests",
      "$flutter_root/runtime:runtime_unittests",
      "$flutter_root/shell/common:shell_unittests",
      "$flutter_root/shell/platform/common/cpp/client_wrapper:client_wrapper_unittests",
      "$flutter_root/shell/platform/embedder:embedder_unittests",
      "$flutter_root/shell/platform/glfw/client_wrapper:client_wrapper_glfw_unittests",
      "$flutter_root/third_party/txt:txt_unittests",
    ]

    if (!is_win) {
      public_deps += [
        "$flutter_root/fml:fml_benchmarks",
        "$flutter_root/shell/common:shell_benchmarks",
        "$flutter_root/third_party/txt:txt_benchmarks",
      ]
    }
  }
}

config("config") {
  include_dirs = [ ".." ]
}

config("export_dynamic_symbols") {
  if (is_linux) {
    inputs = [
      "$flutter_root/common/exported_symbols.sym",
    ]
    ldflags = [ "-Wl,--dynamic-list=" + rebase_path(inputs[0], root_build_dir) ]
  }
}

group("dist") {
  testonly = true

  deps = [
    "$flutter_root/sky/dist",
  ]
}
