# 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_info.h",
    "interface/cpu_features_wrapper.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_ptr.h",
    "interface/scoped_refptr.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_posix.cc",
    "source/condition_variable_posix.h",
    "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/cpu_info.cc",
    "source/cpu_features.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_posix.cc",
    "source/event_posix.h",
    "source/event_tracer.cc",
    "source/event_win.cc",
    "source/event_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_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/set_thread_name_win.h",
    "source/sleep.cc",
    "source/sort.cc",
    "source/tick_util.cc",
    "source/thread.cc",
    "source/thread_posix.cc",
    "source/thread_posix.h",
    "source/thread_win.cc",
    "source/thread_win.h",
    "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" ]

  if (is_clang) {
    # Suppress warnings from Chrome's Clang plugins.
    # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
    configs -= [ "//build/config/clang:find_bad_constructs" ]
  }

  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 = []

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

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

  if (is_clang) {
    # Suppress warnings from Chrome's Clang plugins.
    # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
    configs -= [ "//build/config/clang:find_bad_constructs" ]
  }

  deps = [
    ":system_wrappers",
  ]
}

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

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

  if (is_clang) {
    # Suppress warnings from Chrome's Clang plugins.
    # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
    configs -= [ "//build/config/clang:find_bad_constructs" ]
  }

  deps = [
    ":system_wrappers",
  ]
}

source_set("system_wrappers_default") {

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

  if (is_clang) {
    # Suppress warnings from Chrome's Clang plugins.
    # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
    configs -= [ "//build/config/clang:find_bad_constructs" ]
  }

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

    if (is_android_webview_build) {
      libs += [ "cpufeatures.a" ]
    } else {
      deps = [ "//third_party/android_tools:cpu_features" ]
    }
  }
}
