# 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/runtime/bin/vmservice/vmservice_sources.gni")
import("$flutter_root/common/config.gni")
import("$flutter_root/testing/testing.gni")

source_set("test_font") {
  sources = [
    "test_font_data.cc",
    "test_font_data.h",
  ]
  deps = [ "//third_party/skia" ]
  public_configs = [ "$flutter_root:config" ]
  defines = []
  if (flutter_runtime_mode == "debug" || current_toolchain == host_toolchain) {
    # Though the test font data is small, we dont want to add to the binary size
    # on the device (in profile and release modes). We only add the same on the
    # host test shells and the debug device shell.
    defines += [ "EMBED_TEST_FONT_DATA=1" ]
  }
}

# Picks the libdart implementation based on the Flutter runtime mode.
group("libdart") {
  public_deps = []

  if (!(is_fuchsia && using_fuchsia_sdk)) {
    if (flutter_runtime_mode == "profile" ||
        flutter_runtime_mode == "release") {
      public_deps +=
          [ "//third_party/dart/runtime:libdart_precompiled_runtime" ]
    } else {
      public_deps += [
        "$flutter_root/lib/snapshot",
        "//third_party/dart/runtime:libdart_jit",
      ]
    }
  }
}

source_set("runtime") {
  sources = [
    "dart_isolate.cc",
    "dart_isolate.h",
    "dart_service_isolate.cc",
    "dart_service_isolate.h",
    "dart_snapshot.cc",
    "dart_snapshot.h",
    "dart_vm.cc",
    "dart_vm.h",
    "dart_vm_data.cc",
    "dart_vm_data.h",
    "dart_vm_lifecycle.cc",
    "dart_vm_lifecycle.h",
    "embedder_resources.cc",
    "embedder_resources.h",
    "ptrace_ios.cc",
    "ptrace_ios.h",
    "runtime_controller.cc",
    "runtime_controller.h",
    "runtime_delegate.cc",
    "runtime_delegate.h",
    "service_protocol.cc",
    "service_protocol.h",
    "skia_concurrent_executor.cc",
    "skia_concurrent_executor.h",
    "start_up.cc",
    "start_up.h",
  ]

  deps = [
    ":test_font",
    "$flutter_root/assets",
    "$flutter_root/common",
    "$flutter_root/flow",
    "$flutter_root/fml",
    "$flutter_root/lib/io",
    "$flutter_root/lib/ui",
    "$flutter_root/third_party/txt",
    "//third_party/dart/runtime:dart_api",
    "//third_party/dart/runtime/bin:dart_io_api",
    "//third_party/skia",
    "//third_party/tonic",
  ]

  public_deps = [ "//third_party/rapidjson" ]

  public_configs = [ "$flutter_root:config" ]

  if (flutter_runtime_mode != "release" && !is_fuchsia) {
    # Only link in Observatory in non-release modes on non-Fuchsia. Fuchsia
    # instead puts Observatory into the runner's package.
    deps += [
      "//third_party/dart/runtime/observatory:embedded_observatory_archive",
    ]
  }
}

test_fixtures("runtime_fixtures") {
  dart_main = "fixtures/runtime_test.dart"
}

source_set("runtime_unittests_common") {
  visibility = [ ":*" ]

  testonly = true

  sources = [
    "runtime_test.cc",
    "runtime_test.h",
  ]

  public_deps = [
    ":libdart",
    ":runtime",
    ":runtime_fixtures",
    "$flutter_root/common",
    "$flutter_root/fml",
    "$flutter_root/lib/snapshot",
    "$flutter_root/shell/common",
    "$flutter_root/testing:dart",
    "//third_party/skia",
    "//third_party/tonic",
  ]
}

executable("runtime_unittests") {
  testonly = true

  configs += [ "$flutter_root:export_dynamic_symbols" ]

  sources = [
    "dart_isolate_unittests.cc",
    "dart_lifecycle_unittests.cc",
    "dart_service_isolate_unittests.cc",
    "dart_vm_unittests.cc",
  ]

  deps = [ ":runtime_unittests_common" ]
}