# Copyright 2015 The Chromium 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("../mojo_edk.gni")

mojo_edk_source_set("util") {
  sources = [
    "make_unique.h",
    "ref_counted.h",
    "ref_counted_internal.h",
    "ref_ptr.h",
    "ref_ptr_internal.h",
    "scoped_file.h",
  ]

  mojo_edk_configs = [ "mojo/edk/system:system_config" ]

  mojo_sdk_public_deps = [ "mojo/public/cpp/system" ]
}

mojo_edk_source_set("unittests") {
  testonly = true
  mojo_edk_visibility = [ "mojo/edk/system:mojo_system_unittests" ]

  sources = [
    "ref_counted_unittest.cc",
  ]

  mojo_sdk_deps = [ "mojo/public/cpp/system" ]

  deps = [
    ":util",
    "//testing/gtest",
  ]
}

mojo_edk_source_set("perftests") {
  testonly = true
  mojo_edk_visibility = [ "mojo/edk/system:mojo_system_perftests" ]

  sources = [
    "ref_counted_perftest.cc",
  ]

  deps = [
    ":util",
    "//testing/gtest",
  ]

  mojo_edk_deps = [
    "mojo/edk/system/test",
    "mojo/edk/system/test:perf",
  ]
}
