# 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/*",
  ]
} else {
  visibility = [ "*" ]
}

source_set("spinlock_wait") {
  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/spinlock_akaros.inc",
    "internal/spinlock_posix.inc",
    "internal/spinlock_wait.cc",
    "internal/spinlock_win32.inc",
  ]
  public = [
    "internal/scheduling_mode.h",
    "internal/spinlock_wait.h",
  ]
  deps = [
    ":core_headers",
  ]
  visibility = []
  visibility += [ "../base:*" ]
}

source_set("config") {
  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 = [
    "config.h",
    "policy_checks.h",
  ]
}

config("clang_support_dynamic_annotations") {
  cflags_cc = [ "-D__CLANG_SUPPORT_DYN_ANNOTATION__" ]
}

source_set("dynamic_annotations") {
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    "//third_party/abseil-cpp:absl_default_cflags_cc",
  ]
  public_configs = [
    ":clang_support_dynamic_annotations",
    "//third_party/abseil-cpp:absl_include_config",
  ]
  sources = [
    "dynamic_annotations.cc",
  ]
  public = [
    "dynamic_annotations.h",
  ]
  # Abseil's dynamic annotations are only visible inside Abseil because
  # their usage is deprecated in Chromium (see README.chromium for more info).
  visibility = []
  visibility = [ "../*" ]
}

source_set("core_headers") {
  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 = [
    "attributes.h",
    "macros.h",
    "optimization.h",
    "port.h",
    "thread_annotations.h",
  ]
  deps = [
    ":config",
    ":dynamic_annotations",
  ]
}

source_set("malloc_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/low_level_alloc.cc",
  ]
  public = [
    "internal/direct_mmap.h",
    "internal/low_level_alloc.h",
  ]
  deps = [
    ":base",
    ":config",
    ":core_headers",
    ":dynamic_annotations",
    ":spinlock_wait",
  ]
  visibility = []
  visibility += [ "../*" ]
}

source_set("base_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" ]
  public = [
    "internal/hide_ptr.h",
    "internal/identity.h",
    "internal/inline_variable.h",
    "internal/invoke.h",
  ]
  visibility = []
  visibility += [ "../*" ]
}

source_set("base") {
  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/cycleclock.cc",
    "internal/raw_logging.cc",
    "internal/spinlock.cc",
    "internal/sysinfo.cc",
    "internal/thread_identity.cc",
    "internal/unscaledcycleclock.cc",
  ]
  public = [
    "call_once.h",
    "casts.h",
    "internal/atomic_hook.h",
    "internal/cycleclock.h",
    "internal/low_level_scheduling.h",
    "internal/per_thread_tls.h",
    "internal/raw_logging.h",
    "internal/spinlock.h",
    "internal/sysinfo.h",
    "internal/thread_identity.h",
    "internal/tsan_mutex_interface.h",
    "internal/unscaledcycleclock.h",
    "log_severity.h",
  ]
  deps = [
    ":base_internal",
    ":config",
    ":core_headers",
    ":dynamic_annotations",
    ":spinlock_wait",
  ]
}

source_set("throw_delegate") {
  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/throw_delegate.cc",
  ]
  public = [
    "internal/throw_delegate.h",
  ]
  deps = [
    ":base",
    ":config",
    ":core_headers",
  ]
  visibility = []
  visibility += [ "../*" ]
}

source_set("exception_testing") {
  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" ]
  public = [
    "internal/exception_testing.h",
  ]
  deps = [
    ":config",
  ]
  visibility = []
  visibility += [ "../*" ]
}

source_set("pretty_function") {
  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/pretty_function.h",
  ]
  visibility = []
  visibility += [ "../*" ]
}

# TODO(mbonadei): This target throws by design. We should probably
# just remove it.
# source_set("exception_safety_testing") {
#   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/exception_safety_testing.cc",
#   ]
#   public = [
#     "internal/exception_safety_testing.h",
#   ]
#   deps = [
#     ":base",
#     ":config",
#     ":pretty_function",
#     "../memory",
#     "../meta:type_traits",
#     "../strings",
#     "../types:optional",
#     "//testing/gtest",
#   ]
# }

source_set("spinlock_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 = [
    "spinlock_test_common.cc",
  ]
  deps = [
    ":base",
    ":core_headers",
    ":spinlock_wait",
    "../synchronization",
    "//testing/gtest",
  ]
}

source_set("endian") {
  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/endian.h",
    "internal/unaligned_access.h",
  ]
  deps = [
    ":config",
    ":core_headers",
  ]
}
