# Copyright 2017 The Chromium 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("//services/catalog/public/tools/catalog.gni")
import("//services/service_manager/public/cpp/service.gni")
import("//services/service_manager/public/service_manifest.gni")

service("viz") {
  sources = [
    "main.cc",
  ]
  configs = [ "//build/config/compiler:wexit_time_destructors" ]
  deps = [
    ":lib",
    "//services/service_manager/public/cpp",
    "//skia",
  ]
}

source_set("lib") {
  sources = [
    "service.cc",
    "service.h",
  ]

  configs += [ "//build/config/compiler:wexit_time_destructors" ]

  deps = [
    "//base",
    "//components/viz/service",
    "//components/viz/service/main",
    "//mojo/public/cpp/system",
    "//services/service_manager/public/cpp",
    "//services/viz/privileged/interfaces",
  ]
}

service_manifest("manifest") {
  name = "viz"
  source = "manifest.json"
}

service_manifest("unittests_manifest") {
  name = "viz_service_unittests"
  source = "test_manifest.json"
}

catalog("tests_catalog") {
  testonly = true
  embedded_services = [ ":unittests_manifest" ]
  standalone_services = [ ":manifest" ]
}
