# Copyright (c) 2014 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("//build/config/android/config.gni")
import("../build/webrtc.gni")

static_library("system_wrappers") {
  sources = [
    "include/aligned_array.h",
    "include/aligned_malloc.h",
    "include/atomic32.h",
    "include/clock.h",
    "include/cpu_features_wrapper.h",
    "include/cpu_info.h",
    "include/critical_section_wrapper.h",
    "include/data_log.h",
    "include/data_log_c.h",
    "include/data_log_impl.h",
    "include/event_wrapper.h",
    "include/field_trial.h",
    "include/file_wrapper.h",
    "include/fix_interlocked_exchange_pointer_win.h",
    "include/logging.h",
    "include/metrics.h",
    "include/rtp_to_ntp.h",
    "include/rw_lock_wrapper.h",
    "include/sleep.h",
    "include/sort.h",
    "include/static_instance.h",
    "include/stl_util.h",
    "include/stringize_macros.h",
    "include/timestamp_extrapolator.h",
    "include/trace.h",
    "include/utf_util_win.h",
    "source/aligned_malloc.cc",
    "source/atomic32_mac.cc",
    "source/atomic32_win.cc",
    "source/clock.cc",
    "source/condition_variable_event_win.cc",
    "source/condition_variable_event_win.h",
    "source/cpu_features.cc",
    "source/cpu_info.cc",
    "source/data_log_c.cc",
    "source/event.cc",
    "source/event_timer_posix.cc",
    "source/event_timer_posix.h",
    "source/event_timer_win.cc",
    "source/event_timer_win.h",
    "source/file_impl.cc",
    "source/file_impl.h",
    "source/logging.cc",
    "source/rtp_to_ntp.cc",
    "source/rw_lock.cc",
    "source/rw_lock_posix.cc",
    "source/rw_lock_posix.h",
    "source/rw_lock_win.cc",
    "source/rw_lock_win.h",
    "source/rw_lock_winxp_win.cc",
    "source/rw_lock_winxp_win.h",
    "source/sleep.cc",
    "source/sort.cc",
    "source/timestamp_extrapolator.cc",
    "source/trace_impl.cc",
    "source/trace_impl.h",
    "source/trace_posix.cc",
    "source/trace_posix.h",
    "source/trace_win.cc",
    "source/trace_win.h",
  ]

  configs += [ "..:common_config" ]

  public_configs = [ "..:common_inherited_config" ]

  if (rtc_enable_data_logging) {
    sources += [ "source/data_log.cc" ]
  } else {
    sources += [ "source/data_log_no_op.cc" ]
  }

  defines = []
  libs = []
  deps = [
    "..:webrtc_common",
  ]

  if (is_android) {
    sources += [
      "include/logcat_trace_context.h",
      "source/logcat_trace_context.cc",
    ]

    defines += [ "WEBRTC_THREAD_RR" ]

    deps += [ ":cpu_features_android" ]

    libs += [ "log" ]
  }

  if (is_linux) {
    defines += [ "WEBRTC_THREAD_RR" ]

    if (!build_with_chromium) {
      deps += [ ":cpu_features_linux" ]
    }

    libs += [ "rt" ]
  }

  if (!is_mac && !is_ios) {
    sources += [ "source/atomic32_posix.cc" ]
  }

  if (is_ios || is_mac) {
    defines += [ "WEBRTC_THREAD_RR" ]
  }

  if (is_ios) {
    sources += [ "source/atomic32_mac.cc" ]
  }

  if (is_win) {
    libs += [ "winmm.lib" ]

    cflags = [
      "/wd4267",  # size_t to int truncation.
      "/wd4334",  # Ignore warning on shift operator promotion.
    ]
  }

  deps += [ "../base:rtc_base_approved" ]
}

source_set("field_trial_default") {
  sources = [
    "include/field_trial_default.h",
    "source/field_trial_default.cc",
  ]

  configs += [ "..:common_config" ]
  public_configs = [ "..:common_inherited_config" ]
}

source_set("metrics_default") {
  sources = [
    "source/metrics_default.cc",
  ]

  configs += [ "..:common_config" ]
  public_configs = [ "..:common_inherited_config" ]
}

source_set("system_wrappers_default") {
  configs += [ "..:common_config" ]
  public_configs = [ "..:common_inherited_config" ]

  deps = [
    ":field_trial_default",
    ":metrics_default",
    ":system_wrappers",
  ]
}

if (is_android) {
  source_set("cpu_features_android") {
    sources = [
      "source/cpu_features_android.c",
    ]

    configs += [ "..:common_config" ]
    public_configs = [ "..:common_inherited_config" ]
    deps = [
      "//third_party/android_tools:cpu_features",
    ]
  }
}

if (is_linux) {
  source_set("cpu_features_linux") {
    sources = [
      "source/cpu_features_linux.c",
    ]

    configs += [ "..:common_config" ]
    public_configs = [ "..:common_inherited_config" ]
  }
}
