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

static_library("encoder") {
  sources = [
    "encoder.cc",
    "encoder.h",
    "envelope_maker.cc",
    "envelope_maker.h",
    "project_context.cc",
    "project_context.h",
    "observation_store.h",
    "observation_store.cc",
    "observation_store_dispatcher.h",
    "observation_store_dispatcher.cc",
    "memory_observation_store.h",
    "memory_observation_store.cc",
    "file_observation_store.h",
    "file_observation_store.cc",
    "posix_file_system.h",
    "posix_file_system.cc",
    "send_retryer.cc",
    "send_retryer.h",
    "shipping_dispatcher.cc",
    "shipping_dispatcher.h",
    "shipping_manager.cc",
    "shipping_manager.h",
    "shuffler_client.cc",
    "shuffler_client.h",
    "system_data.cc",
    "system_data.h",

    # Includes from protobuf that are not included in protobuf lite
    "//third_party/protobuf/src/google/protobuf/io/zero_copy_stream_impl.cc",
    "//third_party/protobuf/src/google/protobuf/util/delimited_message_util.cc",
  ]
  public_configs = [ "//third_party/cobalt:cobalt_config" ]

  deps = [
    "//third_party/cobalt/algorithms/forculus:forculus_encoder",
    "//third_party/cobalt/algorithms/rappor:rappor_encoder",
  ]

  public_deps = [
    ":client_secret",
    ":file_observation_store_internal_proto",
    "//garnet/public/lib/fxl",
    "//third_party/cobalt:cobalt_proto",
    "//third_party/cobalt/config:client_config",
    "//third_party/cobalt/config:cobalt_config_proto",
    "//third_party/cobalt/shuffler:shuffler_service",
    "//third_party/cobalt/third_party/clearcut:clearcut",
    "//third_party/cobalt/util:clock",
    "//third_party/cobalt/util:encrypted_message_util",
    "//third_party/grpc:grpc++",
  ]
}

proto_library("file_observation_store_internal_proto") {
  sources = [
    "file_observation_store_internal.proto",
  ]
  extra_configs = [ "//third_party/cobalt:cobalt_config" ]
  import_dirs = [
    "//third_party/protobuf/src",
    "//third_party/cobalt"
  ]
  cc_generator_options = "lite"
  generate_python = false
  deps = [
    "//third_party/cobalt:cobalt_proto",
  ]
}

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

  deps = [
    "//third_party/cobalt/util/crypto_util",
  ]
}

# Generate encoder_test_config.h from encoder_test_config.yaml.
cobalt_config_header("generate_encoder_test_config") {
  input_yaml = "encoder_test_config.yaml"
  output_file = "encoder_test_config.h"
}

# Generate envelope_maker_test_config.h from envelope_maker_test_config.yaml.
cobalt_config_header("generate_envelope_maker_test_config") {
  input_yaml = "envelope_maker_test_config.yaml"
  output_file = "envelope_maker_test_config.h"
}

# Generate shipping_manager_test_config.h from
# shipping_manager_test_config.yaml.
cobalt_config_header("generate_shipping_manager_test_config") {
  input_yaml = "shipping_manager_test_config.yaml"
  output_file = "shipping_manager_test_config.h"
}

# Generate shipping_dispatcher_test_config.h from
# shipping_dispatcher_test_config.yaml.
cobalt_config_header("generate_shipping_dispatcher_test_config") {
  input_yaml = "shipping_dispatcher_test_config.yaml"
  output_file = "shipping_dispatcher_test_config.h"
}


source_set("unittests") {
  testonly = true

  sources = [
    "client_secret_test.cc",
    "encoder_test.cc",
    "encoder_test_config.h",
    "envelope_maker_test.cc",
    "envelope_maker_test_config.h",
    "send_retryer_test.cc",
    "shipping_manager_test.cc",
    "shipping_manager_test_config.h",
    "shipping_dispatcher_test.cc",
    "shipping_dispatcher_test_config.h",
    "shuffler_client_test.cc",
    "system_data_test.cc",
  ]

  deps = [
    ":encoder",
    ":generate_encoder_test_config",
    ":generate_envelope_maker_test_config",
    ":generate_shipping_manager_test_config",
    ":generate_shipping_dispatcher_test_config",
    "//third_party/gflags",
    "//third_party/gtest",

    # Note(rudominer) We need protobuf full here for deserializing ASCII
    # protos as part of the test.
    "//third_party/protobuf:protobuf_full",
  ]

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