# Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

import("//third_party/google_benchmark/buildconfig.gni")
import("../../webrtc.gni")
if (is_android) {
  import("//build/config/android/config.gni")
  import("//build/config/android/rules.gni")
}

rtc_library("yield") {
  sources = [
    "yield.cc",
    "yield.h",
  ]
  deps = []
}

rtc_source_set("mutex") {
  sources = [
    "mutex.h",
    "mutex_critical_section.h",
    "mutex_pthread.h",
  ]
  if (rtc_use_absl_mutex) {
    sources += [ "mutex_abseil.h" ]
  }

  deps = [
    ":yield",
    "..:checks",
    "..:macromagic",
    "..:platform_thread_types",
    "../system:no_unique_address",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/base:core_headers" ]
  if (rtc_use_absl_mutex) {
    absl_deps += [ "//third_party/abseil-cpp/absl/synchronization" ]
  }
}

rtc_library("sequence_checker_internal") {
  visibility = [ "../../api:sequence_checker" ]
  sources = [
    "sequence_checker_internal.cc",
    "sequence_checker_internal.h",
  ]
  deps = [
    ":mutex",
    "..:checks",
    "..:macromagic",
    "..:platform_thread_types",
    "..:stringutils",
    "../../api/task_queue",
    "../system:rtc_export",
  ]
}

rtc_library("yield_policy") {
  sources = [
    "yield_policy.cc",
    "yield_policy.h",
  ]
  deps = [ "..:checks" ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
  ]
}

if (rtc_include_tests) {
  if (enable_google_benchmarks) {
    rtc_library("synchronization_unittests") {
      testonly = true
      sources = [
        "mutex_unittest.cc",
        "yield_policy_unittest.cc",
      ]
      deps = [
        ":mutex",
        ":yield",
        ":yield_policy",
        "..:checks",
        "..:macromagic",
        "..:platform_thread",
        "..:rtc_base",
        "..:rtc_event",
        "..:threading",
        "../../test:test_support",
        "//third_party/google_benchmark",
      ]
    }

    rtc_library("mutex_benchmark") {
      testonly = true
      sources = [ "mutex_benchmark.cc" ]
      deps = [
        ":mutex",
        "../system:unused",
        "//third_party/google_benchmark",
      ]
    }
  }
}
