# 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/flatbuffers/flatbuffers.gni")
import("../tools/impeller.gni")

config("blobcat_config") {
  configs = [ "//flutter/impeller:impeller_public_config" ]
  include_dirs = [ "$root_gen_dir/flutter" ]
}

flatbuffers("blobcat_flatbuffers") {
  flatbuffers = [ "blob.fbs" ]
  public_configs = [ ":blobcat_config" ]
  public_deps = [ "//third_party/flatbuffers" ]
}

impeller_component("blobcat_lib") {
  sources = [
    "blob_library.cc",
    "blob_library.h",
    "blob_writer.cc",
    "blob_writer.h",
  ]

  public_deps = [
    ":blobcat_flatbuffers",
    "../base",
    "//flutter/fml",
  ]
}

impeller_component("blobcat") {
  target_type = "executable"

  sources = [ "blobcat_main.cc" ]

  deps = [
    ":blobcat_lib",
    "../base",
    "//flutter/fml",
  ]
}

impeller_component("blobcat_unittests") {
  testonly = true

  sources = [ "blobcat_unittests.cc" ]

  deps = [
    ":blobcat_lib",
    "//flutter/fml",
    "//flutter/testing",
  ]
}
