# 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",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

if (rtc_include_tests) {
  rtc_library("file_wrapper_unittests") {
    testonly = true
    sources = [ "file_wrapper_unittest.cc" ]
    deps = [
      ":file_wrapper",
      "//rtc_base:checks",
      "//test:fileutils",
      "//test:test_support",
    ]
  }
}

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" ]
}

rtc_source_set("no_cfi_icall") {
  sources = [ "no_cfi_icall.h" ]

  deps = [ "..:sanitizer" ]
}

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("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",
    ]
  }
}
