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

source_set("rng") {
  sources = [
    "random.h",
  ]
}

source_set("system") {
  sources = [
    "system_random.h",
  ]

  public_deps = [
    ":rng",
    "//zircon/public/lib/zx",
  ]
}

source_set("testing") {
  testonly = true

  sources = [
    "test_random.cc",
    "test_random.h",
  ]

  public_deps = [
    ":rng",
  ]
}

source_set("unittests") {
  testonly = true
  sources = [
    "system_random_unittest.cc",
    "test_random_unittest.cc",
  ]

  deps = [
    ":system",
    ":testing",
    "//garnet/public/lib/gtest",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}
