# Copyright 2017 The Fuchsia 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/package.gni")
import("//third_party/vulkan_loader_and_validation_layers/layers/layers.gni")

group("sketchy") {
  testonly = true
  deps = [
    ":bin",
    ":sketchy_service",
  ]
}

executable("bin") {
  output_name = "sketchy_service"

  sources = [
    "app.cc",
    "app.h",
    "buffer/appendable_buffer.cc",
    "buffer/appendable_buffer.h",
    "buffer/mesh_buffer.cc",
    "buffer/mesh_buffer.h",
    "buffer/shared_buffer.cc",
    "buffer/shared_buffer.h",
    "buffer/shared_buffer_pool.cc",
    "buffer/shared_buffer_pool.h",
    "canvas.cc",
    "canvas.h",
    "frame.cc",
    "frame.h",
    "main.cc",
    "resources/import_node.cc",
    "resources/import_node.h",
    "resources/resource.cc",
    "resources/resource.h",
    "resources/resource_map.cc",
    "resources/resource_map.h",
    "resources/stroke.cc",
    "resources/stroke.h",
    "resources/stroke_group.cc",
    "resources/stroke_group.h",
    "resources/types.h",
    "stroke/cubic_bezier.cc",
    "stroke/cubic_bezier.h",
    "stroke/divided_stroke_path.cc",
    "stroke/divided_stroke_path.h",
    "stroke/stroke_fitter.cc",
    "stroke/stroke_fitter.h",
    "stroke/stroke_manager.cc",
    "stroke/stroke_manager.h",
    "stroke/stroke_path.cc",
    "stroke/stroke_path.h",
    "stroke/stroke_tessellator.cc",
    "stroke/stroke_tessellator.h",
    "util/glm_types.h",
  ]

  deps = [
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/escher",
    "//garnet/public/lib/ui/scenic/cpp",
    "//sdk/fidl/fuchsia.ui.sketchy",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/trace-provider",
  ]

  include_dirs = [ "//third_party/glm" ]
}

package("sketchy_service") {
  deps = [
    ":bin",
  ]

  binaries = [
    {
      name = "sketchy_service"
    },
  ]

  meta = [
    {
      path = rebase_path("meta/sketchy_service.cmx")
      dest = "sketchy_service.cmx"
    },
  ]

  public_deps = vulkan_validation_layers.public_deps
  loadable_modules = vulkan_validation_layers.loadable_modules
  resources = vulkan_validation_layers.resources
}
