# 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 = [
    "interface/aligned_array.h",
    "interface/aligned_malloc.h",
    "interface/atomic32.h",
    "interface/clock.h",
    "interface/condition_variable_wrapper.h",
    "interface/cpu_features_wrapper.h",
    "interface/cpu_info.h",
    "interface/critical_section_wrapper.h",
    "interface/data_log.h",
    "interface/data_log_c.h",
    "interface/data_log_impl.h",
    "interface/event_tracer.h",
    "interface/event_wrapper.h",
    "interface/field_trial.h",
    "interface/file_wrapper.h",
    "interface/fix_interlocked_exchange_pointer_win.h",
    "interface/logging.h",
    "interface/metrics.h",
    "interface/ref_count.h",
    "interface/rtp_to_ntp.h",
    "interface/rw_lock_wrapper.h",
    "interface/scoped_vector.h",
    "interface/sleep.h",
    "interface/sort.h",
    "interface/static_instance.h",
    "interface/stl_util.h",
    "interface/stringize_macros.h",
    "interface/thread_wrapper.h",
    "interface/tick_util.h",
    "interface/timestamp_extrapolator.h",
    "interface/trace.h",
    "interface/trace_event.h",
    "interface/utf_util_win.h",
    "source/aligned_malloc.cc",
    "source/atomic32_mac.cc",
    "source/atomic32_win.cc",
    "source/clock.cc",
    "source/condition_variable.cc",
    "source/condition_variable_event_win.cc",
    "source/condition_variable_event_win.h",
    "source/condition_variable_native_win.cc",
    "source/condition_variable_native_win.h",
    "source/condition_variable_posix.cc",
    "source/condition_variable_posix.h",
    "source/cpu_features.cc",
    "source/cpu_info.cc",
    "source/critical_section.cc",
    "source/critical_section_posix.cc",
    "source/critical_section_posix.h",
    "source/critical_section_win.cc",
    "source/critical_section_win.h",
    "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/event_tracer.cc",
    "source/file_impl.cc",
    "source/file_impl.h",
    "source/logging.cc",
    "source/rtp_to_ntp.cc",
    "source/rw_lock.cc",
    "source/rw_lock_generic.cc",
    "source/rw_lock_generic.h",
    "source/rw_lock_posix.cc",
    "source/rw_lock_posix.h",
    "source/rw_lock_win.cc",
    "source/rw_lock_win.h",
    "source/sleep.cc",
    "source/sort.cc",
    "source/thread.cc",
    "source/thread_posix.cc",
    "source/thread_posix.h",
    "source/thread_win.cc",
    "source/thread_win.h",
    "source/tick_util.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 += [
      "interface/logcat_trace_context.h",
      "source/logcat_trace_context.cc",
    ]

    defines += [
      "WEBRTC_THREAD_RR",

      # TODO(leozwang): Investigate CLOCK_REALTIME and CLOCK_MONOTONIC
      # support on Android. Keep WEBRTC_CLOCK_TYPE_REALTIME for now,
      # remove it after I verify that CLOCK_MONOTONIC is fully functional
      # with condition and event functions in system_wrappers.
      "WEBRTC_CLOCK_TYPE_REALTIME",
    ]

    deps += [ ":cpu_features_android" ]

    libs += [ "log" ]
  }

  if (is_linux) {
    defines += [
      "WEBRTC_THREAD_RR",
      # TODO(andrew): can we select this automatically?
      # Define this if the Linux system does not support CLOCK_MONOTONIC.
      #"WEBRTC_CLOCK_TYPE_REALTIME",
    ]

    libs += [ "rt" ]
  }

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

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

  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 = [
    "interface/field_trial_default.h",
    "source/field_trial_default.cc",
  ]

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

  deps = [
    ":system_wrappers",
  ]
}

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

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

  deps = [
    ":system_wrappers",
  ]
}

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

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

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