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

visibility = [ "$cobalt_root/*" ]

import("//build/go/go_library.gni")
import("//third_party/protobuf/proto_library.gni")

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

_registry_protos = [
  "aggregation_window",
  "annotations",
  "cobalt_registry",
  "metric_definition",
  "project",
  "report_definition",
  "window_size",
]

proto_library("cobalt_registry_proto") {
  proto_in_dir = "$cobalt_root"

  sources = []

  foreach(name, _registry_protos) {
    sources += [ "${name}.proto" ]
  }

  import_protobuf_full = true
  generate_python = false
  generate_go = true
  cc_generator_options = "lite"

  extra_configs = [
    ":proto_config",
    "$cobalt_root:cobalt_config",
  ]

  visibility += [ "//src/cobalt/bin/testapp:cobalt_testapp" ]
}

go_library("cobalt_registry_proto_go") {
  name = "config"
  source_dir = "$root_gen_dir/go-proto-gen/src/$cobalt_root/src/registry"
  non_go_deps = [ ":cobalt_registry_proto" ]
  sources = []

  foreach(name, _registry_protos) {
    sources += [ "${name}.pb.go" ]
  }
  deps = [ "//third_party/golibs:google.golang.org/protobuf" ]
}

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

  public_configs = [
    "$cobalt_root:cobalt_config",
    "$cobalt_root/src/registry:proto_config",
  ]

  deps = [ "$cobalt_root/src/public/lib:registry_identifiers" ]
  public_deps = [
    "$cobalt_root/src:logging",
    "$cobalt_root/src/registry:cobalt_registry_proto",
    "//third_party/abseil-cpp/absl/strings",
  ]
}

source_set("project_configs_test") {
  testonly = true
  sources = [ "project_configs_test.cc" ]
  deps = [
    ":project_configs",
    "$cobalt_root/src/public/lib:registry_identifiers",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/googletest:gtest",
  ]
  configs += [ "$cobalt_root:cobalt_config" ]
}

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

  configs += [ "$cobalt_root:cobalt_config" ]
}
source_set("packed_event_codes_test") {
  testonly = true

  sources = [ "packed_event_codes_test.cc" ]

  deps = [
    ":packed_event_codes",
    "//third_party/googletest:gtest",
  ]

  configs += [ "$cobalt_root:cobalt_config" ]
}

group("tests") {
  testonly = true

  deps = [
    ":packed_event_codes_test",
    ":project_configs_test",
  ]
}
