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

group("rtc_tools") {
  # This target shall build all targets in tools/.
  testonly = true

  deps = [
    ":command_line_parser",
    ":frame_analyzer",
    ":video_quality_analysis",
  ]
  if (!build_with_chromium) {
    deps += [
      ":frame_editor",
      ":psnr_ssim_analyzer",
      ":rgba_to_i420_converter",
    ]
    if (rtc_include_internal_audio_device) {
      deps += [ ":force_mic_volume_max" ]
    }
    if (rtc_enable_protobuf) {
      deps += [ ":chart_proto" ]
    }
  }

  if (rtc_include_tests) {
    deps += [
      ":activity_metric",
      ":tools_unittests",
    ]
    if (rtc_enable_protobuf) {
      deps += [
        ":event_log_visualizer",
        ":rtp_analyzer",
        ":unpack_aecdump",
        "network_tester",
      ]
    }
  }
}

rtc_static_library("command_line_parser") {
  sources = [
    "simple_command_line_parser.cc",
    "simple_command_line_parser.h",
  ]
  deps = [
    "../rtc_base:gtest_prod",
    "../rtc_base:rtc_base_approved",
  ]
}

rtc_static_library("video_quality_analysis") {
  sources = [
    "frame_analyzer/video_quality_analysis.cc",
    "frame_analyzer/video_quality_analysis.h",
  ]
  deps = [
    "../common_video",
    "../test:perf_test",
    "//third_party/libyuv",
  ]
}

rtc_executable("frame_analyzer") {
  visibility = [ "*" ]
  sources = [
    "frame_analyzer/frame_analyzer.cc",
  ]

  deps = [
    ":command_line_parser",
    ":video_quality_analysis",
    "../test:perf_test",
    "//build/win:default_exe_manifest",
  ]
}

# Only expose the targets needed by Chromium (e.g. frame_analyzer) to avoid
# building a lot of redundant code as part of Chromium builds.
if (!build_with_chromium) {
  rtc_executable("psnr_ssim_analyzer") {
    sources = [
      "psnr_ssim_analyzer/psnr_ssim_analyzer.cc",
    ]

    deps = [
      ":command_line_parser",
      ":video_quality_analysis",
      "//build/win:default_exe_manifest",
    ]
  }

  rtc_static_library("reference_less_video_analysis_lib") {
    sources = [
      "frame_analyzer/reference_less_video_analysis_lib.cc",
      "frame_analyzer/reference_less_video_analysis_lib.h",
    ]

    deps = [
      ":video_quality_analysis",
    ]
  }

  rtc_executable("reference_less_video_analysis") {
    sources = [
      "frame_analyzer/reference_less_video_analysis.cc",
    ]

    deps = [
      ":command_line_parser",
      ":reference_less_video_analysis_lib",
      "//build/win:default_exe_manifest",
    ]
  }

  rtc_executable("rgba_to_i420_converter") {
    visibility = [ "*" ]
    sources = [
      "converter/converter.cc",
      "converter/converter.h",
      "converter/rgba_to_i420_converter.cc",
    ]

    deps = [
      ":command_line_parser",
      "../common_video",
      "//build/win:default_exe_manifest",
      "//third_party/libyuv",
    ]
  }

  rtc_static_library("frame_editing_lib") {
    sources = [
      "frame_editing/frame_editing_lib.cc",
      "frame_editing/frame_editing_lib.h",
    ]

    # TODO(jschuh): Bug 1348: fix this warning.
    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 = [
      "..:webrtc_common",
      "../:typedefs",
      "../common_video",
    ]
  }

  rtc_executable("frame_editor") {
    sources = [
      "frame_editing/frame_editing.cc",
    ]

    deps = [
      ":command_line_parser",
      ":frame_editing_lib",
      "//build/win:default_exe_manifest",
    ]
  }

  # It doesn't make sense to build this tool without the ADM enabled.
  if (rtc_include_internal_audio_device) {
    rtc_executable("force_mic_volume_max") {
      sources = [
        "force_mic_volume_max/force_mic_volume_max.cc",
      ]

      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 = [
        "../modules/audio_device",
        "../modules/audio_device:audio_device_impl",
        "../system_wrappers:system_wrappers_default",
        "//build/win:default_exe_manifest",
      ]
    }
  }

  if (rtc_enable_protobuf) {
    proto_library("chart_proto") {
      sources = [
        "event_log_visualizer/chart.proto",
      ]
      proto_out_dir = "rtc_tools/event_log_visualizer"
    }

    rtc_static_library("event_log_visualizer_utils") {
      visibility = [ "*" ]
      sources = [
        "event_log_visualizer/analyzer.cc",
        "event_log_visualizer/analyzer.h",
        "event_log_visualizer/plot_base.cc",
        "event_log_visualizer/plot_base.h",
        "event_log_visualizer/plot_protobuf.cc",
        "event_log_visualizer/plot_protobuf.h",
        "event_log_visualizer/plot_python.cc",
        "event_log_visualizer/plot_python.h",
        "event_log_visualizer/triage_notifications.h",
      ]
      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" ]
      }
      defines = [ "ENABLE_RTC_EVENT_LOG" ]
      deps = [
        ":chart_proto",
        "../:webrtc_common",
        "../call:call_interfaces",
        "../call:video_stream_api",
        "../logging:rtc_event_log_api",
        "../logging:rtc_event_log_impl_base",
        "../logging:rtc_event_log_parser",
        "../logging:rtc_stream_config",
        "../modules:module_api",
        "../modules/audio_coding:ana_debug_dump_proto",
        "../modules/audio_coding:audio_network_adaptor",
        "../modules/audio_coding:neteq_tools",
        "../modules/rtp_rtcp:rtp_rtcp_format",
        "../rtc_base:checks",
        "../rtc_base:rtc_base_approved",
        "../rtc_base:rtc_numerics",

        # TODO(kwiberg): Remove this dependency.
        "../api/audio_codecs:audio_codecs_api",
        "../modules/congestion_controller",
        "../modules/congestion_controller:delay_based_bwe",
        "../modules/congestion_controller:estimators",
        "../modules/pacing",
        "../modules/rtp_rtcp",
        "../system_wrappers:system_wrappers_default",
        "//build/config:exe_and_shlib_deps",
      ]
    }
  }
}

if (rtc_include_tests) {
  if (rtc_enable_protobuf) {
    rtc_executable("event_log_visualizer") {
      testonly = true
      sources = [
        "event_log_visualizer/main.cc",
      ]

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

      defines = [ "ENABLE_RTC_EVENT_LOG" ]
      deps = [
        ":event_log_visualizer_utils",
        "../logging:rtc_event_log_parser",
        "../rtc_base:protobuf_utils",
        "../rtc_base:rtc_base_approved",
        "../system_wrappers:field_trial_default",
        "../test:field_trial",
        "../test:fileutils",
        "../test:test_support",
      ]
    }
  }

  rtc_executable("activity_metric") {
    testonly = true
    sources = [
      "agc/activity_metric.cc",
    ]

    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 = [
      "../modules:module_api",
      "../modules/audio_processing",
      "../modules/audio_processing/vad",
      "../rtc_base:rtc_base_approved",
      "../rtc_base:safe_minmax",
      "../system_wrappers:metrics_default",
      "../test:test_support",
      "//build/win:default_exe_manifest",
      "//testing/gtest",
    ]
  }

  tools_unittests_resources = [
    "../resources/foreman_cif.yuv",
    "../resources/reference_less_video_test_file.y4m",
    "../resources/video_quality_analysis_frame.txt",
  ]

  if (is_ios) {
    bundle_data("tools_unittests_bundle_data") {
      testonly = true
      sources = tools_unittests_resources
      outputs = [
        "{{bundle_resources_dir}}/{{source_file_part}}",
      ]
    }
  }

  rtc_test("tools_unittests") {
    testonly = true

    sources = [
      "frame_analyzer/reference_less_video_analysis_unittest.cc",
      "frame_analyzer/video_quality_analysis_unittest.cc",
      "frame_editing/frame_editing_unittest.cc",
      "sanitizers_unittest.cc",
      "simple_command_line_parser_unittest.cc",
    ]

    # TODO(jschuh): Bug 1348: fix this warning.
    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 = [
      ":command_line_parser",
      ":frame_editing_lib",
      ":reference_less_video_analysis_lib",
      ":video_quality_analysis",
      "../common_video:common_video",
      "../rtc_base",
      "../rtc_base:checks",
      "../test:fileutils",
      "../test:test_main",
      "//testing/gtest",
    ]

    if (rtc_enable_protobuf) {
      deps += [ "network_tester:network_tester_unittests" ]
    }

    data = tools_unittests_resources
    if (is_android) {
      deps += [ "//testing/android/native_test:native_test_support" ]
      shard_timeout = 900
    }
    if (is_ios) {
      deps += [ ":tools_unittests_bundle_data" ]
    }
  }

  if (rtc_enable_protobuf) {
    copy("rtp_analyzer") {
      sources = [
        "py_event_log_analyzer/misc.py",
        "py_event_log_analyzer/pb_parse.py",
        "py_event_log_analyzer/rtp_analyzer.py",
        "py_event_log_analyzer/rtp_analyzer.sh",
      ]
      outputs = [
        "$root_build_dir/{{source_file_part}}",
      ]
      deps = [
        "../logging:rtc_event_log_proto",
      ]
    }  # rtp_analyzer

    rtc_executable("unpack_aecdump") {
      visibility = [ "*" ]
      testonly = true
      sources = [
        "unpack_aecdump/unpack.cc",
      ]

      deps = [
        "..:webrtc_common",
        "../:typedefs",
        "../common_audio",
        "../modules/audio_processing",
        "../modules/audio_processing:audioproc_debug_proto",
        "../modules/audio_processing:audioproc_debug_proto",
        "../modules/audio_processing:audioproc_protobuf_utils",
        "../modules/audio_processing:audioproc_test_utils",
        "../rtc_base:protobuf_utils",
        "../rtc_base:rtc_base_approved",
        "../system_wrappers:system_wrappers_default",
      ]
    }  # unpack_aecdump
  }
}
