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

###############################################################################
# AGGREGATE LIBRARIES

source_set("lib") {
}

source_set("tests") {
  testonly = true
  deps = [
    ":datagram_stream_test",
    ":linearizer_test",
    ":receive_mode_test",
  ]
}

###############################################################################

# datagram_stream
source_set("datagram_stream") {
  sources = [
    "datagram_stream.cc",
    "datagram_stream.h",
  ]
  deps = [
    ":linearizer",
    ":receive_mode",
    "//garnet/lib/overnet/environment:timer",
    "//garnet/lib/overnet/environment:trace",
    "//garnet/lib/overnet/labels:reliability_and_ordering",
    "//garnet/lib/overnet/labels:seq_num",
    "//garnet/lib/overnet/packet_protocol",
    "//garnet/lib/overnet/routing:router",
    "//garnet/lib/overnet/vocabulary:internal_list",
    "//garnet/lib/overnet/vocabulary:slice",
  ]
}

source_set("datagram_stream_test") {
  testonly = true
  sources = [
    "datagram_stream_test.cc",
  ]
  deps = [
    ":datagram_stream",
    "//garnet/lib/overnet/testing:test_timer",
    "//garnet/lib/overnet/testing:trace_cout",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

# linearizer
source_set("linearizer") {
  sources = [
    "linearizer.cc",
    "linearizer.h",
  ]
  deps = [
    "//garnet/lib/overnet/environment:trace",
    "//garnet/lib/overnet/vocabulary:callback",
    "//garnet/lib/overnet/vocabulary:optional",
    "//garnet/lib/overnet/vocabulary:slice",
    "//garnet/lib/overnet/vocabulary:status",
  ]
}

source_set("linearizer_fuzzer_helpers") {
  sources = [
    "linearizer_fuzzer_helpers.h",
  ]
  deps = [
    ":linearizer",
    "//garnet/lib/overnet/vocabulary:optional",
  ]
}

source_set("linearizer_test") {
  testonly = true
  sources = [
    "linearizer_test.cc",
  ]
  deps = [
    ":linearizer",
    ":linearizer_fuzzer_helpers",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

# receive_mode
source_set("receive_mode") {
  sources = [
    "receive_mode.cc",
    "receive_mode.h",
  ]
  deps = [
    "//garnet/lib/overnet/labels:reliability_and_ordering",
    "//garnet/lib/overnet/vocabulary:callback",
    "//garnet/lib/overnet/vocabulary:optional",
    "//garnet/lib/overnet/vocabulary:status",
  ]
}

source_set("receive_mode_fuzzer_helpers") {
  sources = [
    "receive_mode_fuzzer_helpers.h",
  ]
  deps = [
    ":receive_mode",
  ]
}

source_set("receive_mode_test") {
  testonly = true
  sources = [
    "receive_mode_test.cc",
  ]
  deps = [
    ":receive_mode",
    ":receive_mode_fuzzer_helpers",
    "//third_party/googletest:gtest",
  ]
}
