# 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_info.h",
    "include/event_wrapper.h",
    "include/file_wrapper.h",
    "include/ntp_time.h",
    "include/rtp_to_ntp_estimator.h",
    "include/rw_lock_wrapper.h",
    "include/sleep.h",
    "include/timestamp_extrapolator.h",
    "source/aligned_malloc.cc",
    "source/atomic32_win.cc",
    "source/clock.cc",
    "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/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/sleep.cc",
    "source/timestamp_extrapolator.cc",
  ]

  defines = []
  libs = []
  deps = [
    "..:webrtc_common",
  ]
  public_deps = [
    ":cpu_features_api",
    ":field_trial_api",
    ":metrics_api",
  ]

  if (is_android) {
    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.

    # Windows needs ../rtc_base:rtc_base due to include of
    # webrtc/rtc_base/win32.h in source/clock.cc.
    # TODO(kjellander): Remove (bugs.webrtc.org/6828)
    deps += [ "../rtc_base:rtc_base" ]
  }

  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 += [ "../rtc_base:rtc_base_approved" ]
}

rtc_source_set("cpu_features_api") {
  sources = [
    "include/cpu_features_wrapper.h",
  ]
  deps = [
    "..:webrtc_common",
  ]
}

rtc_source_set("asm_defines") {
  sources = [
    "include/asm_defines.h",
  ]
}

rtc_source_set("field_trial_api") {
  sources = [
    "include/field_trial.h",
  ]
}

rtc_source_set("metrics_api") {
  sources = [
    "include/metrics.h",
  ]
  deps = [
    "..:webrtc_common",
    "../rtc_base:rtc_base_approved",
  ]
}

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

rtc_static_library("metrics_default") {
  sources = [
    "include/metrics_default.h",
    "source/metrics_default.cc",
  ]
  deps = [
    ":metrics_api",
    "../rtc_base:rtc_base_approved",
  ]
}

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",
    ]
    deps = [
      ":cpu_features_api",
    ]
  }
}

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/event_timer_posix_unittest.cc",
      "source/metrics_default_unittest.cc",
      "source/metrics_unittest.cc",
      "source/ntp_time_unittest.cc",
      "source/rtp_to_ntp_estimator_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",
      "..:webrtc_common",
      "../rtc_base:rtc_base_approved",
      "../test:test_main",
      "//testing/gtest",
    ]

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

      shard_timeout = 900
    }
  }
}
