# 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}}",
  ]
}
