# Copyright (c) 2017 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")

group("py_quality_assessment") {
  testonly = true
  deps = [
    ":scripts",
    ":unit_tests",
  ]
}

copy("scripts") {
  testonly = true
  sources = [
    "README.md",
    "apm_quality_assessment.py",
    "apm_quality_assessment.sh",
    "apm_quality_assessment_boxplot.py",
    "apm_quality_assessment_export.py",
    "apm_quality_assessment_gencfgs.py",
    "apm_quality_assessment_optimize.py",
  ]
  outputs = [ "$root_build_dir/py_quality_assessment/{{source_file_part}}" ]
  deps = [
    ":apm_configs",
    ":lib",
    ":output",
    "../../../../resources/audio_processing/test/py_quality_assessment:probing_signals",
    "../../../../rtc_tools:audioproc_f",
  ]
}

copy("apm_configs") {
  testonly = true
  sources = [ "apm_configs/default.json" ]
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  outputs = [
    "$root_build_dir/py_quality_assessment/apm_configs/{{source_file_part}}",
  ]
}  # apm_configs

copy("lib") {
  testonly = true
  sources = [
    "quality_assessment/__init__.py",
    "quality_assessment/annotations.py",
    "quality_assessment/audioproc_wrapper.py",
    "quality_assessment/collect_data.py",
    "quality_assessment/data_access.py",
    "quality_assessment/echo_path_simulation.py",
    "quality_assessment/echo_path_simulation_factory.py",
    "quality_assessment/eval_scores.py",
    "quality_assessment/eval_scores_factory.py",
    "quality_assessment/evaluation.py",
    "quality_assessment/exceptions.py",
    "quality_assessment/export.py",
    "quality_assessment/export_unittest.py",
    "quality_assessment/external_vad.py",
    "quality_assessment/input_mixer.py",
    "quality_assessment/input_signal_creator.py",
    "quality_assessment/results.css",
    "quality_assessment/results.js",
    "quality_assessment/signal_processing.py",
    "quality_assessment/simulation.py",
    "quality_assessment/test_data_generation.py",
    "quality_assessment/test_data_generation_factory.py",
  ]
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  outputs = [ "$root_build_dir/py_quality_assessment/quality_assessment/{{source_file_part}}" ]
  deps = [ "../../../../resources/audio_processing/test/py_quality_assessment:noise_tracks" ]
}

copy("output") {
  testonly = true
  sources = [ "output/README.md" ]
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  outputs =
      [ "$root_build_dir/py_quality_assessment/output/{{source_file_part}}" ]
}

group("unit_tests") {
  testonly = true
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  deps = [
    ":apm_vad",
    ":fake_polqa",
    ":lib_unit_tests",
    ":scripts_unit_tests",
    ":vad",
  ]
}

rtc_executable("fake_polqa") {
  testonly = true
  sources = [ "quality_assessment/fake_polqa.cc" ]
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  output_dir = "${root_out_dir}/py_quality_assessment/quality_assessment"
  deps = [
    "../../../../rtc_base:checks",
    "../../../../rtc_base:rtc_base_approved",
  ]
}

rtc_executable("vad") {
  testonly = true
  sources = [ "quality_assessment/vad.cc" ]
  deps = [
    "../../../../common_audio",
    "../../../../rtc_base:rtc_base_approved",
    "//third_party/abseil-cpp/absl/flags:flag",
    "//third_party/abseil-cpp/absl/flags:parse",
  ]
}

rtc_executable("apm_vad") {
  testonly = true
  sources = [ "quality_assessment/apm_vad.cc" ]
  deps = [
    "../..",
    "../../../../common_audio",
    "../../../../rtc_base:rtc_base_approved",
    "../../vad",
    "//third_party/abseil-cpp/absl/flags:flag",
    "//third_party/abseil-cpp/absl/flags:parse",
  ]
}

rtc_executable("sound_level") {
  testonly = true
  sources = [ "quality_assessment/sound_level.cc" ]
  deps = [
    "../..",
    "../../../../common_audio",
    "../../../../rtc_base:rtc_base_approved",
    "//third_party/abseil-cpp/absl/flags:flag",
    "//third_party/abseil-cpp/absl/flags:parse",
  ]
}

copy("lib_unit_tests") {
  testonly = true
  sources = [
    "quality_assessment/annotations_unittest.py",
    "quality_assessment/echo_path_simulation_unittest.py",
    "quality_assessment/eval_scores_unittest.py",
    "quality_assessment/fake_external_vad.py",
    "quality_assessment/input_mixer_unittest.py",
    "quality_assessment/signal_processing_unittest.py",
    "quality_assessment/simulation_unittest.py",
    "quality_assessment/test_data_generation_unittest.py",
  ]
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  outputs = [ "$root_build_dir/py_quality_assessment/quality_assessment/{{source_file_part}}" ]
}

copy("scripts_unit_tests") {
  testonly = true
  sources = [ "apm_quality_assessment_unittest.py" ]
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  outputs = [ "$root_build_dir/py_quality_assessment/{{source_file_part}}" ]
}
