# 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/arm.gni")
import("//third_party/protobuf/proto_library.gni")
import("../../build/webrtc.gni")

declare_args() {
  # Outputs some low-level debug files.
  aec_debug_dump = false

  # Disables the usual mode where we trust the reported system delay
  # values the AEC receives. The corresponding define is set appropriately
  # in the code, but it can be force-enabled here for testing.
  aec_untrusted_delay_for_testing = false
}

source_set("audio_processing") {
  sources = [
    "aec/aec_core.cc",
    "aec/aec_core.h",
    "aec/aec_core_optimized_methods.h",
    "aec/aec_rdft.cc",
    "aec/aec_rdft.h",
    "aec/aec_resampler.cc",
    "aec/aec_resampler.h",
    "aec/echo_cancellation.cc",
    "aec/echo_cancellation.h",
    "aecm/aecm_core.cc",
    "aecm/aecm_core.h",
    "aecm/echo_control_mobile.cc",
    "aecm/echo_control_mobile.h",
    "agc/agc.cc",
    "agc/agc.h",
    "agc/agc_manager_direct.cc",
    "agc/agc_manager_direct.h",
    "agc/gain_map_internal.h",
    "agc/legacy/analog_agc.c",
    "agc/legacy/analog_agc.h",
    "agc/legacy/digital_agc.c",
    "agc/legacy/digital_agc.h",
    "agc/legacy/gain_control.h",
    "agc/loudness_histogram.cc",
    "agc/loudness_histogram.h",
    "agc/utility.cc",
    "agc/utility.h",
    "audio_buffer.cc",
    "audio_buffer.h",
    "audio_processing_impl.cc",
    "audio_processing_impl.h",
    "beamformer/array_util.cc",
    "beamformer/array_util.h",
    "beamformer/complex_matrix.h",
    "beamformer/covariance_matrix_generator.cc",
    "beamformer/covariance_matrix_generator.h",
    "beamformer/matrix.h",
    "beamformer/nonlinear_beamformer.cc",
    "beamformer/nonlinear_beamformer.h",
    "common.h",
    "echo_cancellation_impl.cc",
    "echo_cancellation_impl.h",
    "echo_control_mobile_impl.cc",
    "echo_control_mobile_impl.h",
    "gain_control_for_experimental_agc.cc",
    "gain_control_for_experimental_agc.h",
    "gain_control_impl.cc",
    "gain_control_impl.h",
    "high_pass_filter_impl.cc",
    "high_pass_filter_impl.h",
    "include/audio_processing.h",
    "intelligibility/intelligibility_enhancer.cc",
    "intelligibility/intelligibility_enhancer.h",
    "intelligibility/intelligibility_utils.cc",
    "intelligibility/intelligibility_utils.h",
    "level_controller/biquad_filter.cc",
    "level_controller/biquad_filter.h",
    "level_controller/down_sampler.cc",
    "level_controller/down_sampler.h",
    "level_controller/gain_applier.cc",
    "level_controller/gain_applier.h",
    "level_controller/gain_selector.cc",
    "level_controller/gain_selector.h",
    "level_controller/lc_constants.h",
    "level_controller/level_controller.cc",
    "level_controller/level_controller.h",
    "level_controller/noise_level_estimator.cc",
    "level_controller/noise_level_estimator.h",
    "level_controller/noise_spectrum_estimator.cc",
    "level_controller/noise_spectrum_estimator.h",
    "level_controller/peak_level_estimator.cc",
    "level_controller/peak_level_estimator.h",
    "level_controller/saturating_gain_estimator.cc",
    "level_controller/saturating_gain_estimator.h",
    "level_controller/signal_classifier.cc",
    "level_controller/signal_classifier.h",
    "level_estimator_impl.cc",
    "level_estimator_impl.h",
    "logging/apm_data_dumper.cc",
    "logging/apm_data_dumper.h",
    "noise_suppression_impl.cc",
    "noise_suppression_impl.h",
    "render_queue_item_verifier.h",
    "rms_level.cc",
    "rms_level.h",
    "splitting_filter.cc",
    "splitting_filter.h",
    "three_band_filter_bank.cc",
    "three_band_filter_bank.h",
    "transient/common.h",
    "transient/daubechies_8_wavelet_coeffs.h",
    "transient/dyadic_decimator.h",
    "transient/moving_moments.cc",
    "transient/moving_moments.h",
    "transient/transient_detector.cc",
    "transient/transient_detector.h",
    "transient/transient_suppressor.cc",
    "transient/transient_suppressor.h",
    "transient/wpd_node.cc",
    "transient/wpd_node.h",
    "transient/wpd_tree.cc",
    "transient/wpd_tree.h",
    "typing_detection.cc",
    "typing_detection.h",
    "utility/block_mean_calculator.cc",
    "utility/block_mean_calculator.h",
    "utility/delay_estimator.cc",
    "utility/delay_estimator.h",
    "utility/delay_estimator_internal.h",
    "utility/delay_estimator_wrapper.cc",
    "utility/delay_estimator_wrapper.h",
    "vad/common.h",
    "vad/gmm.cc",
    "vad/gmm.h",
    "vad/noise_gmm_tables.h",
    "vad/pitch_based_vad.cc",
    "vad/pitch_based_vad.h",
    "vad/pitch_internal.cc",
    "vad/pitch_internal.h",
    "vad/pole_zero_filter.cc",
    "vad/pole_zero_filter.h",
    "vad/standalone_vad.cc",
    "vad/standalone_vad.h",
    "vad/vad_audio_proc.cc",
    "vad/vad_audio_proc.h",
    "vad/vad_audio_proc_internal.h",
    "vad/vad_circular_buffer.cc",
    "vad/vad_circular_buffer.h",
    "vad/voice_activity_detector.cc",
    "vad/voice_activity_detector.h",
    "vad/voice_gmm_tables.h",
    "voice_detection_impl.cc",
    "voice_detection_impl.h",
  ]

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

  defines = []
  deps = [
    "../..:webrtc_common",
    "../audio_coding:isac",
  ]

  if (aec_debug_dump) {
    defines += [ "WEBRTC_AEC_DEBUG_DUMP=1" ]
  } else {
    defines += [ "WEBRTC_AEC_DEBUG_DUMP=0" ]
  }

  if (aec_untrusted_delay_for_testing) {
    defines += [ "WEBRTC_UNTRUSTED_DELAY" ]
  }

  if (rtc_enable_protobuf) {
    defines += [ "WEBRTC_AUDIOPROC_DEBUG_DUMP" ]
    deps += [ ":audioproc_debug_proto" ]
  }

  if (rtc_prefer_fixed_point) {
    defines += [ "WEBRTC_NS_FIXED" ]
    sources += [
      "ns/noise_suppression_x.c",
      "ns/noise_suppression_x.h",
      "ns/nsx_core.c",
      "ns/nsx_core.h",
      "ns/nsx_defines.h",
    ]
    if (current_cpu == "mipsel") {
      sources += [ "ns/nsx_core_mips.c" ]
    } else {
      sources += [ "ns/nsx_core_c.c" ]
    }
  } else {
    defines += [ "WEBRTC_NS_FLOAT" ]
    sources += [
      "ns/defines.h",
      "ns/noise_suppression.c",
      "ns/noise_suppression.h",
      "ns/ns_core.c",
      "ns/ns_core.h",
      "ns/windows_private.h",
    ]
  }

  if (current_cpu == "x86" || current_cpu == "x64") {
    deps += [ ":audio_processing_sse2" ]
  }

  if (rtc_build_with_neon) {
    deps += [ ":audio_processing_neon" ]
  }

  if (current_cpu == "mipsel") {
    sources += [ "aecm/aecm_core_mips.cc" ]
    if (mips_float_abi == "hard") {
      sources += [
        "aec/aec_core_mips.cc",
        "aec/aec_rdft_mips.cc",
      ]
    }
  } else {
    sources += [ "aecm/aecm_core_c.cc" ]
  }

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

  if (is_clang) {
    # Suppress warnings from the Chromium Clang plugins (bugs.webrtc.org/163).
    configs -= [ "//build/config/clang:find_bad_constructs" ]
  }

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

if (rtc_enable_protobuf) {
  proto_library("audioproc_debug_proto") {
    sources = [
      "debug.proto",
    ]

    proto_out_dir = "webrtc/modules/audio_processing"
  }
}

if (current_cpu == "x86" || current_cpu == "x64") {
  source_set("audio_processing_sse2") {
    sources = [
      "aec/aec_core_sse2.cc",
      "aec/aec_rdft_sse2.cc",
    ]

    if (is_posix) {
      cflags = [ "-msse2" ]
    }

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

    if (aec_debug_dump) {
      defines = [ "WEBRTC_AEC_DEBUG_DUMP=1" ]
    } else {
      defines = [ "WEBRTC_AEC_DEBUG_DUMP=0" ]
    }
  }
}

if (rtc_build_with_neon) {
  source_set("audio_processing_neon") {
    sources = [
      "aec/aec_core_neon.cc",
      "aec/aec_rdft_neon.cc",
      "aecm/aecm_core_neon.cc",
      "ns/nsx_core_neon.c",
    ]

    if (current_cpu != "arm64") {
      # Enable compilation for the NEON instruction set. This is needed
      # since //build/config/arm.gni only enables NEON for iOS, not Android.
      # This provides the same functionality as webrtc/build/arm_neon.gypi.
      configs -= [ "//build/config/compiler:compiler_arm_fpu" ]
      cflags = [ "-mfpu=neon" ]
    }

    # Disable LTO on NEON targets due to compiler bug.
    # TODO(fdegans): Enable this. See crbug.com/408997.
    if (rtc_use_lto) {
      cflags -= [
        "-flto",
        "-ffat-lto-objects",
      ]
    }

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

    deps = [
      "../../common_audio",
    ]

    if (aec_debug_dump) {
      defines = [ "WEBRTC_AEC_DEBUG_DUMP=1" ]
    } else {
      defines = [ "WEBRTC_AEC_DEBUG_DUMP=0" ]
    }
  }
}

if (rtc_include_tests) {
  source_set("audioproc_test_utils") {
    testonly = true
    sources = [
      "test/test_utils.cc",
      "test/test_utils.h",
    ]

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

    if (is_clang) {
      # Suppress warnings from the Chromium Clang plugins (bugs.webrtc.org/163).
      configs -= [ "//build/config/clang:find_bad_constructs" ]
    }

    deps = [
      "../../base:rtc_base_approved",
      "../../common_audio",
    ]
  }

  if (rtc_enable_protobuf) {
    proto_library("audioproc_unittest_proto") {
      sources = [
        "test/unittest.proto",
      ]
      proto_out_dir = "webrtc/modules/audio_processing"
    }

    source_set("audioproc_protobuf_utils") {
      sources = [
        "test/protobuf_utils.cc",
        "test/protobuf_utils.h",
      ]

      deps = [
        ":audioproc_unittest_proto",
      ]
    }
  }
}
