# Copyright 2018 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("//build_overrides/build.gni")

if (build_with_chromium) {
  visibility = [
    "//third_party/webrtc/*",
    "//third_party/abseil-cpp/*",
    "//third_party/googletest:gtest",
  ]
} else {
  visibility = [ "*" ]
}

source_set("graphcycles_internal") {
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    "//third_party/abseil-cpp:absl_default_cflags_cc",
  ]
  public_configs = [ "//third_party/abseil-cpp:absl_include_config" ]
  sources = [
    "internal/graphcycles.cc",
  ]
  public = [
    "internal/graphcycles.h",
  ]
  deps = [
    "../base",
    "../base:base_internal",
    "../base:core_headers",
    "../base:malloc_internal",
  ]
  visibility = []
  visibility += [ "../*" ]
}

source_set("synchronization") {
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    "//third_party/abseil-cpp:absl_default_cflags_cc",
  ]
  public_configs = [ "//third_party/abseil-cpp:absl_include_config" ]
  sources = [
    "barrier.cc",
    "blocking_counter.cc",
    "internal/create_thread_identity.cc",
    "internal/per_thread_sem.cc",
    "internal/waiter.cc",
    "notification.cc",
    "mutex.cc"
  ]
  public = [
    "barrier.h",
    "blocking_counter.h",
    "internal/create_thread_identity.h",
    "internal/kernel_timeout.h",
    "internal/mutex_nonprod.inc",
    "internal/per_thread_sem.h",
    "internal/waiter.h",
    "mutex.h",
    "notification.h",
  ]
  deps = [
    ":graphcycles_internal",
    "../base",
    "../base:base_internal",
    "../base:config",
    "../base:core_headers",
    "../base:dynamic_annotations",
    "../base:malloc_internal",
    "../debugging:stacktrace",
    "../debugging:symbolize",
    "../time",
  ]
}

source_set("thread_pool") {
  testonly = true
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    "//third_party/abseil-cpp:absl_default_cflags_cc",
  ]
  public_configs = [ "//third_party/abseil-cpp:absl_include_config" ]
  public = [
    "internal/thread_pool.h",
  ]
  deps = [
    ":synchronization",
    "../base:core_headers",
  ]
}

source_set("per_thread_sem_test_common") {
  testonly = true
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    "//third_party/abseil-cpp:absl_test_cflags_cc",
  ]
  public_configs = [ "//third_party/abseil-cpp:absl_include_config" ]
  sources = [
    "internal/per_thread_sem_test.cc",
  ]
  deps = [
    ":synchronization",
    "../base",
    "../strings",
    "../time",
    "//testing/gtest",
  ]
}
