# 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 = [
    # TODO(https://fxbug.dev/70570): Remove this when we're on protoc 3.14.0 or higher.
    "//third_party/golibs:github.com/golang/protobuf",
    "//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",
  ]

  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",
    "//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",
  ]
}
