# 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("../../webrtc.gni")
if (is_android) {
  import("//build/config/android/config.gni")
  import("//build/config/android/rules.gni")
}

rtc_source_set("arch") {
  sources = [ "arch.h" ]
}

rtc_source_set("asm_defines") {
  sources = [ "asm_defines.h" ]
}

rtc_library("file_wrapper") {
  sources = [
    "file_wrapper.cc",
    "file_wrapper.h",
  ]
  deps = [
    "..:checks",
    "..:criticalsection",
    "..:safe_conversions",
  ]
}

rtc_source_set("ignore_warnings") {
  sources = [ "ignore_warnings.h" ]
}

rtc_source_set("inline") {
  sources = [ "inline.h" ]
}

rtc_source_set("unused") {
  sources = [ "unused.h" ]
}

rtc_source_set("assume") {
  sources = [ "assume.h" ]
}

rtc_source_set("rtc_export") {
  sources = [
    "rtc_export.h",
    "rtc_export_template.h",
  ]
}

rtc_source_set("no_unique_address") {
  sources = [ "no_unique_address.h" ]
}

if (is_mac || is_ios) {
  rtc_library("cocoa_threading") {
    sources = [
      "cocoa_threading.h",
      "cocoa_threading.mm",
    ]
    deps = [ "..:checks" ]
    frameworks = [ "Foundation.framework" ]
  }

  rtc_library("gcd_helpers") {
    sources = [
      "gcd_helpers.h",
      "gcd_helpers.m",
    ]
    include_dirs = [ "../.." ]
  }
}

rtc_source_set("thread_registry") {
  sources = [ "thread_registry.h" ]
  deps = [
    "..:rtc_base_approved",
    "../synchronization:mutex",
  ]
  if (is_android && !build_with_chromium) {
    sources += [ "thread_registry.cc" ]
    deps += [ "../../sdk/android:native_api_stacktrace" ]
    absl_deps = [ "//third_party/abseil-cpp/absl/base:core_headers" ]
  }
}

rtc_source_set("warn_current_thread_is_deadlocked") {
  sources = [ "warn_current_thread_is_deadlocked.h" ]
  deps = []
  if (is_android && !build_with_chromium) {
    sources += [ "warn_current_thread_is_deadlocked.cc" ]
    deps += [
      "..:logging",
      "../../sdk/android:native_api_stacktrace",
    ]
  }
}
