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

assert(is_fuchsia)

import("//build/fuchsia/sdk.gni")
import("//flutter/common/config.gni")
import("//flutter/testing/testing.gni")

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

template("make_utils") {
  source_set(target_name) {
    sources = [
      "$target_gen_dir/build_info.cc",
      "build_info.h",
      "files.cc",
      "files.h",
      "handle_exception.cc",
      "handle_exception.h",
      "inlines.h",
      "logging.h",
      "mapped_resource.cc",
      "mapped_resource.h",
      "root_inspect_node.cc",
      "root_inspect_node.h",
      "tempfs.cc",
      "tempfs.h",
      "vmo.cc",
      "vmo.h",
      "vmservice_object.cc",
      "vmservice_object.h",
    ]

    deps = invoker.deps + [
             ":generate_build_info_cc_file",
             "$fuchsia_sdk_root/fidl:fuchsia.feedback",
             "$fuchsia_sdk_root/fidl:fuchsia.mem",
             "$fuchsia_sdk_root/pkg:async-loop",
             "$fuchsia_sdk_root/pkg:async-loop-cpp",
             "$fuchsia_sdk_root/pkg:async-loop-default",
             "$fuchsia_sdk_root/pkg:fdio",
             "$fuchsia_sdk_root/pkg:memfs",
             "$fuchsia_sdk_root/pkg:sys_cpp",
             "$fuchsia_sdk_root/pkg:sys_inspect_cpp",
             "$fuchsia_sdk_root/pkg:syslog",
             "$fuchsia_sdk_root/pkg:trace",
             "$fuchsia_sdk_root/pkg:vfs_cpp",
             "$fuchsia_sdk_root/pkg:zx",
             "//flutter/third_party/tonic",
           ]

    public_configs = [ ":utils_config" ]
  }
}

action("generate_build_info_cc_file") {
  inputs = [
    "build_info_in.cc",
    "//flutter/.git/logs/HEAD",
    "//fuchsia/sdk/$host_os/meta/manifest.json",
    "//third_party/dart/.git/logs/HEAD",
  ]
  outputs = [ "$target_gen_dir/build_info.cc" ]

  script = "//flutter/tools/fuchsia/make_build_info.py"
  args = [
    "--input",
    rebase_path("build_info_in.cc", root_build_dir),
    "--output",
    rebase_path(outputs[0], root_build_dir),
    "--buildroot",
    rebase_path("//", root_build_dir),
  ]
}

make_utils("utils") {
  deps = [ "//third_party/dart/runtime/bin:elf_loader" ]
}

test_fixtures("utils_fixtures") {
  fixtures = []
}

executable("dart_utils_unittests") {
  testonly = true

  output_name = "dart_utils_unittests"

  sources = [ "build_info_unittests.cc" ]

  libs = [
    # This is needed for //third_party/googletest for linking zircon symbols.
    "$fuchsia_sdk_path/arch/$target_cpu/sysroot/lib/libzircon.so",
  ]

  deps = [
    ":utils",
    ":utils_fixtures",
    "$fuchsia_sdk_root/pkg:sys_inspect_cpp",
    "//flutter/testing",
    "//third_party/dart/runtime:libdart_jit",
    "//third_party/dart/runtime/bin:dart_io_api",
  ]
}

make_utils("utils_product") {
  deps = [ "//third_party/dart/runtime/bin:elf_loader_product" ]
}
