# 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.

if (is_android) {
  import("//build/config/android/config.gni")
  import("//build/config/android/rules.gni")
}
import("../webrtc.gni")

rtc_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/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/ntp_time.h",
    "include/rtp_to_ntp_estimator.h",
    "include/rw_lock_wrapper.h",
    "include/sleep.h",
    "include/static_instance.h",
    "include/stringize_macros.h",
    "include/timestamp_extrapolator.h",
    "include/trace.h",
    "include/utf_util_win.h",
    "source/aligned_malloc.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/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/logging.cc",
    "source/rtp_to_ntp_estimator.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/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",
  ]

  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_linux || is_android) {
    sources += [ "source/atomic32_non_darwin_unix.cc" ]
  }

  if (is_ios || is_mac) {
    defines += [ "WEBRTC_THREAD_RR" ]
    sources += [ "source/atomic32_darwin.cc" ]
  }

  # TODO(jschuh): Bug 1348: fix this warning.
  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

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

    cflags = [ "/wd4334" ]  # Ignore warning on shift operator promotion.
  }

  if (is_win && is_clang) {
    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
    suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
  }

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

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

rtc_static_library("metrics_default") {
  sources = [
    "include/metrics_default.h",
    "source/metrics_default.cc",
  ]
}

group("system_wrappers_default") {
  deps = [
    ":field_trial_default",
    ":metrics_default",
    ":system_wrappers",
  ]
}

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

    deps = [
      "//third_party/android_tools:cpu_features",
    ]
  }
}

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

if (rtc_include_tests) {
  rtc_test("system_wrappers_unittests") {
    testonly = true
    sources = [
      "source/aligned_array_unittest.cc",
      "source/aligned_malloc_unittest.cc",
      "source/clock_unittest.cc",
      "source/condition_variable_unittest.cc",
      "source/critical_section_unittest.cc",
      "source/event_timer_posix_unittest.cc",
      "source/logging_unittest.cc",
      "source/metrics_default_unittest.cc",
      "source/metrics_unittest.cc",
      "source/ntp_time_unittest.cc",
      "source/rtp_to_ntp_estimator_unittest.cc",
      "source/stringize_macros_unittest.cc",
    ]
    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

    if (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }

    deps = [
      ":metrics_default",
      ":system_wrappers",
      "../test:test_main",
      "//testing/gtest",
    ]

    if (is_android) {
      deps += [ "//testing/android/native_test:native_test_support" ]

      shard_timeout = 900
    }
  }
}
