# 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")

config("system_wrappers_inherited_config") {
  include_dirs = [
    "interface",
  ]
}

static_library("system_wrappers") {
  sources = [
    "interface/aligned_malloc.h",
    "interface/atomic32.h",
    "interface/clock.h",
    "interface/compile_assert.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/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_annotations.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" ]
  }

  direct_dependent_configs = [
    "..:common_inherited_config",
    ":system_wrappers_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.
    ]
  }

  include_dirs = [
    "source/spreadsortlib",
  ]

  deps += [
    "../base:webrtc_base",
  ]
}

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

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

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

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