# 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("//third_party/protobuf/proto_library.gni")

config("proto_config") {
  defines = [ "PROTO_LITE" ]
}

proto_library("cobalt_config_proto") {
  proto_in_dir = "//third_party/cobalt"
  sources = [
    "cobalt_config.proto",
    "encodings.proto",
    "metric_definition.proto",
    "metrics.proto",
    "project.proto",
    "report_configs.proto",
    "report_definition.proto",
    "window_size.proto",
  ]
  import_dirs = [ "//third_party/protobuf/src" ]
  generate_python = false
  generate_go = current_toolchain == host_toolchain
  cc_generator_options = "lite"

  deps = [
    "//third_party/cobalt:cobalt_proto",
  ]

  extra_configs = [
    ":proto_config",
    "//third_party/cobalt:cobalt_config",
  ]
}

static_library("client_config") {
  sources = [
    "client_config.cc",
    "client_config.h",
  ]
  configs += [ "//third_party/cobalt:cobalt_config" ]

  deps = [
    ":cobalt_config_proto",
    "//garnet/public/lib/fxl",
    "//third_party/cobalt:cobalt_proto",
  ]
}

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

  public_configs = [
    "//third_party/cobalt:cobalt_config",
    "//third_party/cobalt/config:proto_config",
  ]

  public_deps = [
    "//garnet/public/lib/fxl",
    "//third_party/cobalt/config:cobalt_config_proto",
  ]
}

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

  configs += [ "//third_party/cobalt:cobalt_config" ]
}
