# 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("//build/fuchsia/sdk.gni")
import("//flutter/impeller/tools/impeller.gni")
import("//flutter/shell/gpu/gpu.gni")

shell_gpu_configuration("tester_gpu_configuration") {
  enable_software = true
  enable_gl = true
  enable_vulkan = true
  enable_metal = false
}

executable("testing") {
  output_name = "flutter_tester"

  public_configs = [
    "//flutter:config",
    "//flutter:export_dynamic_symbols",
  ]

  sources = [ "tester_main.cc" ]
  libs = []
  if (is_win) {
    libs += [
      "psapi.lib",
      "user32.lib",
      "FontSub.lib",
      "shlwapi.lib",
    ]
  }

  deps = [
    "//flutter/assets",
    "//flutter/common",
    "//flutter/flow",
    "//flutter/fml",
    "//flutter/lib/snapshot",
    "//flutter/shell/common",
    "//flutter/shell/gpu:gpu_surface_software",
    "//flutter/skia",
    "//flutter/third_party/tonic",
    "//third_party/dart/runtime:libdart_jit",
    "//third_party/dart/runtime/bin:dart_io_api",
  ]

  if (impeller_supports_rendering) {
    deps += [
      ":tester_gpu_configuration",
      "//flutter/impeller",
      "//third_party/swiftshader",
    ]
  }

  metadata = {
    entitlement_file_path = [ "flutter_tester" ]
  }
}
