# Copyright (c) 2019 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("../../../webrtc.gni")

rtc_static_library("ns") {
  visibility = [ "*" ]
  configs += [ "..:apm_debug_dump" ]
  sources = [
    "fast_math.cc",
    "fast_math.h",
    "histograms.cc",
    "histograms.h",
    "noise_estimator.cc",
    "noise_estimator.h",
    "noise_suppressor.cc",
    "noise_suppressor.h",
    "ns_common.h",
    "ns_config.h",
    "ns_fft.cc",
    "ns_fft.h",
    "prior_signal_model.cc",
    "prior_signal_model.h",
    "prior_signal_model_estimator.cc",
    "prior_signal_model_estimator.h",
    "quantile_noise_estimator.cc",
    "quantile_noise_estimator.h",
    "signal_model.cc",
    "signal_model.h",
    "signal_model_estimator.cc",
    "signal_model_estimator.h",
    "speech_probability_estimator.cc",
    "speech_probability_estimator.h",
    "suppression_params.cc",
    "suppression_params.h",
    "wiener_filter.cc",
    "wiener_filter.h",
  ]

  defines = []
  if (rtc_build_with_neon && current_cpu != "arm64") {
    suppressed_configs += [ "//build/config/compiler:compiler_arm_fpu" ]
    cflags = [ "-mfpu=neon" ]
  }

  deps = [
    "..:apm_logging",
    "..:audio_buffer",
    "..:high_pass_filter",
    "../../../api:array_view",
    "../../../common_audio:common_audio_c",
    "../../../common_audio/third_party/ooura:fft_size_128",
    "../../../common_audio/third_party/ooura:fft_size_256",
    "../../../rtc_base:checks",
    "../../../rtc_base:safe_minmax",
    "../../../rtc_base/system:arch",
    "../../../system_wrappers",
    "../../../system_wrappers:field_trial",
    "../../../system_wrappers:metrics",
    "../utility:cascaded_biquad_filter",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

if (rtc_include_tests) {
  rtc_source_set("ns_unittests") {
    testonly = true

    configs += [ "..:apm_debug_dump" ]
    sources = [ "noise_suppressor_unittest.cc" ]

    deps = [
      ":ns",
      "..:apm_logging",
      "..:audio_buffer",
      "..:audio_processing",
      "..:high_pass_filter",
      "../../../api:array_view",
      "../../../rtc_base:checks",
      "../../../rtc_base:safe_minmax",
      "../../../rtc_base:stringutils",
      "../../../rtc_base/system:arch",
      "../../../system_wrappers",
      "../../../test:test_support",
      "../utility:cascaded_biquad_filter",
    ]
    absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]

    defines = []

    if (rtc_enable_protobuf) {
      sources += []
    }

    if (!build_with_chromium) {
      deps += [ "..:audio_processing_unittests" ]
    }
  }
}
