# Copyright (c) 2016 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")
import("//build/config/android/config.gni")
import("//build/config/android/rules.gni")

group("android") {
  if (!build_with_chromium && is_android) {
    public_deps = [
      ":libjingle_peerconnection_datachannelonly_so",
      ":libjingle_peerconnection_jni",
      ":libjingle_peerconnection_so",
      ":libwebrtc",
      ":native_api",
    ]
  }
}

config("libjingle_peerconnection_jni_warnings_config") {
  # The warnings below are enabled by default. Since GN orders compiler flags
  # for a target before flags from configs, the only way to disable such
  # warnings is by having them in a separate config, loaded from the target.
  if (!is_win) {
    cflags = [
      "-Wno-sign-compare",
      "-Wno-unused-variable",
    ]
  }
}

generate_jni("generated_base_jni") {
  sources = [
    "api/org/webrtc/NetworkMonitor.java",
    "api/org/webrtc/NetworkMonitorAutoDetect.java",
    "src/java/org/webrtc/Histogram.java",
    "src/java/org/webrtc/JniCommon.java",
  ]
  jni_package = ""
  jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
}

generate_jar_jni("generated_external_classes_jni") {
  classes = [
    "java/lang/Integer.class",
    "java/lang/Double.class",
    "java/lang/Long.class",
    "java/lang/Iterable.class",
    "java/util/Iterator.class",
    "java/lang/Boolean.class",
    "java/math/BigInteger.class",
    "java/util/Map.class",
    "java/util/LinkedHashMap.class",
    "java/util/ArrayList.class",
    "java/lang/Enum.class",
  ]
  jni_package = ""
  jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
}

# Internal code that is needed by native_api_jni. The code cannot be placed in
# base_jni because native_api_jni depends on the code (and base_jni depends on
# native_api_jni).
rtc_source_set("internal_jni") {
  sources = [
    "src/jni/jvm.cc",
    "src/jni/jvm.h",
  ]

  deps = [
    "../../rtc_base:checks",
  ]
}

rtc_source_set("base_jni") {
  visibility = [ "*" ]
  sources = [
    "src/jni/androidhistogram.cc",
    "src/jni/androidnetworkmonitor.cc",
    "src/jni/androidnetworkmonitor.h",
    "src/jni/class_loader.h",
    "src/jni/classreferenceholder.h",
    "src/jni/jni_common.cc",
    "src/jni/jni_helpers.cc",
    "src/jni/jni_helpers.h",
    "src/jni/pc/audio.h",
    "src/jni/pc/media.h",
    "src/jni/pc/video.h",
  ]

  deps = [
    ":generated_base_jni",
    ":internal_jni",
    ":native_api_jni",
    "../../api:libjingle_peerconnection_api",
    "../../api:optional",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base",
    "../../rtc_base:rtc_base_approved",
    "../../system_wrappers:metrics_api",
  ]
}

rtc_static_library("audio_jni") {
  sources = [
    "src/jni/pc/audio.cc",
  ]

  deps = [
    ":base_jni",
    "../../api/audio_codecs:builtin_audio_decoder_factory",
    "../../api/audio_codecs:builtin_audio_encoder_factory",
    "../../modules/audio_processing:audio_processing",
    "../../rtc_base:rtc_base_approved",
  ]
}

rtc_source_set("native_api_audio_device_module") {
  visibility = [ "*" ]

  sources = [
    "native_api/audio_device_module/audio_device_android.cc",
    "native_api/audio_device_module/audio_device_android.h",
  ]

  deps = [
    ":base_jni",
    ":java_audio_device_module",
    ":opensles_audio_device_module",
    "../../modules/audio_device:audio_device",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base_approved",
    "../../system_wrappers",
    "../../system_wrappers:metrics_api",
  ]
  if (rtc_enable_android_aaudio) {
    deps += [ ":aaudio_audio_device_module" ]
  }
}

rtc_source_set("audio_device_module_base") {
  visibility = [ "*" ]

  sources = [
    "src/jni/audio_device/audio_common.h",
    "src/jni/audio_device/audio_device_module.cc",
    "src/jni/audio_device/audio_device_module.h",
  ]

  deps = [
    ":base_jni",
    ":generated_audio_device_module_base_jni",
    ":native_api_jni",
    "../../api:optional",
    "../../modules/audio_device:audio_device_buffer",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base_approved",
    "../../system_wrappers:metrics_api",
  ]
}

if (rtc_enable_android_aaudio) {
  rtc_source_set("aaudio_audio_device_module") {
    visibility = [ "*" ]
    defines = [ "AUDIO_DEVICE_INCLUDE_ANDROID_AAUDIO" ]
    sources = [
      "src/jni/audio_device/aaudio_player.cc",
      "src/jni/audio_device/aaudio_player.h",
      "src/jni/audio_device/aaudio_recorder.cc",
      "src/jni/audio_device/aaudio_recorder.h",
      "src/jni/audio_device/aaudio_wrapper.cc",
      "src/jni/audio_device/aaudio_wrapper.h",
    ]
    libs = [ "aaudio" ]
    deps = [
      ":audio_device_module_base",
      ":base_jni",
      "../../api:array_view",
      "../../api:optional",
      "../../modules/audio_device:audio_device",
      "../../modules/audio_device:audio_device_buffer",
      "../../rtc_base:checks",
      "../../rtc_base:rtc_base",
      "../../rtc_base:rtc_base_approved",
      "../../system_wrappers",
    ]
  }
}

rtc_source_set("opensles_audio_device_module") {
  visibility = [ "*" ]
  sources = [
    "src/jni/audio_device/opensles_common.cc",
    "src/jni/audio_device/opensles_common.h",
    "src/jni/audio_device/opensles_player.cc",
    "src/jni/audio_device/opensles_player.h",
    "src/jni/audio_device/opensles_recorder.cc",
    "src/jni/audio_device/opensles_recorder.h",
  ]
  libs = [ "OpenSLES" ]
  deps = [
    ":audio_device_module_base",
    ":base_jni",
    "../../api:array_view",
    "../../api:optional",
    "../../modules/audio_device:audio_device",
    "../../modules/audio_device:audio_device_buffer",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base_approved",
  ]
}

rtc_source_set("java_audio_device_module") {
  visibility = [ "*" ]

  sources = [
    "src/jni/audio_device/audio_record_jni.cc",
    "src/jni/audio_device/audio_record_jni.h",
    "src/jni/audio_device/audio_track_jni.cc",
    "src/jni/audio_device/audio_track_jni.h",
  ]
  deps = [
    ":audio_device_module_base",
    ":base_jni",
    ":generated_java_audio_device_module_native_jni",
    "../../api:optional",
    "../../modules/audio_device:audio_device",
    "../../modules/audio_device:audio_device_buffer",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base_approved",
    "../../system_wrappers:metrics_api",
  ]
}

rtc_static_library("null_audio_jni") {
  sources = [
    "src/jni/pc/null_audio.cc",
  ]

  deps = [
    ":base_jni",
  ]
}

generate_jni("generated_audio_device_module_base_jni") {
  sources = [
    "src/java/org/webrtc/audio/WebRtcAudioManager.java",
  ]
  jni_package = ""
  jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
}

generate_jni("generated_java_audio_device_module_native_jni") {
  sources = [
    "src/java/org/webrtc/audio/WebRtcAudioRecord.java",
    "src/java/org/webrtc/audio/WebRtcAudioTrack.java",
  ]
  jni_package = ""
  jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
}

generate_jni("generated_video_jni") {
  sources = [
    "api/org/webrtc/EncodedImage.java",
    "api/org/webrtc/MediaCodecVideoDecoder.java",
    "api/org/webrtc/MediaCodecVideoEncoder.java",
    "api/org/webrtc/VideoCodecInfo.java",
    "api/org/webrtc/VideoCodecStatus.java",
    "api/org/webrtc/VideoDecoder.java",
    "api/org/webrtc/VideoDecoderFactory.java",
    "api/org/webrtc/VideoDecoderFallback.java",
    "api/org/webrtc/VideoEncoder.java",
    "api/org/webrtc/VideoEncoderFactory.java",
    "api/org/webrtc/VideoEncoderFallback.java",
    "api/org/webrtc/VideoFrame.java",
    "api/org/webrtc/VideoRenderer.java",
    "api/org/webrtc/VideoSink.java",
    "api/org/webrtc/VideoSource.java",
    "api/org/webrtc/VideoTrack.java",
    "api/org/webrtc/YuvHelper.java",
    "src/java/org/webrtc/EglBase14.java",
    "src/java/org/webrtc/NV12Buffer.java",
    "src/java/org/webrtc/NV21Buffer.java",
    "src/java/org/webrtc/VideoDecoderWrapper.java",
    "src/java/org/webrtc/VideoEncoderWrapper.java",
    "src/java/org/webrtc/WrappedNativeI420Buffer.java",
    "src/java/org/webrtc/WrappedNativeVideoDecoder.java",
    "src/java/org/webrtc/WrappedNativeVideoEncoder.java",
  ]
  if (rtc_use_builtin_sw_codecs) {
    sources += [ "api/org/webrtc/HardwareVideoEncoderFactory.java" ]  # TODO(andersc): This currently depends on SoftwareVideoEncoderFactory
  }
  jni_package = ""
  jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
}

rtc_static_library("video_jni") {
  sources = []
  deps = []

  sources += [
    "src/jni/androidvideotracksource.cc",
    "src/jni/androidvideotracksource.h",
    "src/jni/encodedimage.cc",
    "src/jni/encodedimage.h",
    "src/jni/jni_generator_helper.h",
    "src/jni/nv12buffer.cc",
    "src/jni/nv21buffer.cc",
    "src/jni/pc/video.cc",
    "src/jni/video_renderer.cc",
    "src/jni/videocodecinfo.cc",
    "src/jni/videocodecinfo.h",
    "src/jni/videocodecstatus.cc",
    "src/jni/videocodecstatus.h",
    "src/jni/videodecoderfactorywrapper.cc",
    "src/jni/videodecoderfactorywrapper.h",
    "src/jni/videodecoderfallback.cc",
    "src/jni/videodecoderwrapper.cc",
    "src/jni/videodecoderwrapper.h",
    "src/jni/videoencoderfactorywrapper.cc",
    "src/jni/videoencoderfactorywrapper.h",
    "src/jni/videoencoderfallback.cc",
    "src/jni/videoencoderwrapper.cc",
    "src/jni/videoencoderwrapper.h",
    "src/jni/videoframe.cc",
    "src/jni/videoframe.h",
    "src/jni/videosink.cc",
    "src/jni/videosink.h",
    "src/jni/videotrack.cc",
    "src/jni/wrapped_native_i420_buffer.cc",
    "src/jni/wrapped_native_i420_buffer.h",
    "src/jni/wrappednativecodec.cc",
    "src/jni/wrappednativecodec.h",
    "src/jni/yuvhelper.cc",
  ]

  configs += [ ":libjingle_peerconnection_jni_warnings_config" ]

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

  if (is_win) {
    cflags += [
      "/wd4245",  # conversion from "int" to "size_t", signed/unsigned mismatch.
      "/wd4389",  # signed/unsigned mismatch.
    ]
  }

  if (rtc_use_builtin_sw_codecs) {
    sources += [
      "src/jni/androidmediacodeccommon.h",
      "src/jni/androidmediadecoder.cc",
      "src/jni/androidmediadecoder_jni.h",
      "src/jni/androidmediaencoder.cc",
      "src/jni/androidmediaencoder_jni.h",
      "src/jni/hardwarevideoencoderfactory.cc",
    ]

    deps += [
      ":vp8_jni",
      ":vp9_jni",
      "../../media:rtc_internal_video_codecs",
    ]
  }
  deps += [
    ":base_jni",
    ":generated_video_jni",
    ":native_api_jni",
    "../..:webrtc_common",
    "../../api:libjingle_peerconnection_api",
    "../../api/video:video_frame",
    "../../api/video_codecs:video_codecs_api",
    "../../common_video:common_video",
    "../../media:rtc_audio_video",
    "../../media:rtc_h264_profile_id",
    "../../media:rtc_media_base",
    "../../media:rtc_software_fallback_wrappers",
    "../../modules:module_api",
    "../../modules/utility:utility",
    "../../modules/video_coding:codec_globals_headers",
    "../../modules/video_coding:video_codec_interface",
    "../../modules/video_coding:video_coding_utility",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base",
    "../../rtc_base:rtc_base_approved",
    "../../rtc_base:rtc_task_queue",
    "../../rtc_base:sequenced_task_checker",
    "../../rtc_base:weak_ptr",
    "../../rtc_base/memory:aligned_malloc",
    "../../system_wrappers:field_trial_api",
    "//third_party/libyuv",
  ]
}

rtc_static_library("null_video_jni") {
  sources = [
    "src/jni/pc/null_video.cc",
  ]

  deps = [
    ":base_jni",
  ]
}

generate_jni("generated_vp8_jni") {
  sources = [
    "src/java/org/webrtc/VP8Decoder.java",
    "src/java/org/webrtc/VP8Encoder.java",
  ]

  jni_package = ""
  jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
}

rtc_static_library("vp8_jni") {
  sources = [
    "src/jni/vp8codec.cc",
  ]

  deps = [
    ":base_jni",
    ":generated_vp8_jni",
    "../../modules/video_coding:webrtc_vp8",
  ]
}

generate_jni("generated_vp9_jni") {
  sources = [
    "src/java/org/webrtc/VP9Decoder.java",
    "src/java/org/webrtc/VP9Encoder.java",
  ]

  jni_package = ""
  jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
}

rtc_static_library("vp9_jni") {
  sources = [
    "src/jni/vp9codec.cc",
  ]

  deps = [
    ":base_jni",
    ":generated_vp9_jni",
    "../../modules/video_coding:webrtc_vp9",
  ]
}

rtc_static_library("media_jni") {
  sources = [
    "src/jni/pc/media.cc",
  ]

  deps = [
    ":base_jni",
    "../../api:callfactory_api",
    "../../api/video_codecs:video_codecs_api",
    "../../call:call_interfaces",
    "../../logging:rtc_event_log_api",
    "../../media:rtc_audio_video",
    "../../modules/audio_device:audio_device",
    "../../modules/audio_processing:audio_processing",
  ]
}

rtc_static_library("null_media_jni") {
  sources = [
    "src/jni/pc/null_media.cc",
  ]

  deps = [
    ":base_jni",
  ]
}

generate_jni("generated_peerconnection_jni") {
  sources = [
    "api/org/webrtc/AudioTrack.java",
    "api/org/webrtc/CallSessionFileRotatingLogSink.java",
    "api/org/webrtc/DataChannel.java",
    "api/org/webrtc/DtmfSender.java",
    "api/org/webrtc/IceCandidate.java",
    "api/org/webrtc/MediaConstraints.java",
    "api/org/webrtc/MediaSource.java",
    "api/org/webrtc/MediaStream.java",
    "api/org/webrtc/MediaStreamTrack.java",
    "api/org/webrtc/PeerConnection.java",
    "api/org/webrtc/PeerConnectionFactory.java",
    "api/org/webrtc/RTCStats.java",
    "api/org/webrtc/RTCStatsCollectorCallback.java",
    "api/org/webrtc/RTCStatsReport.java",
    "api/org/webrtc/RtpParameters.java",
    "api/org/webrtc/RtpReceiver.java",
    "api/org/webrtc/RtpSender.java",
    "api/org/webrtc/RtpTransceiver.java",
    "api/org/webrtc/SdpObserver.java",
    "api/org/webrtc/SessionDescription.java",
    "api/org/webrtc/StatsObserver.java",
    "api/org/webrtc/StatsReport.java",
    "api/org/webrtc/TurnCustomizer.java",
  ]
  jni_package = ""
  jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
}

rtc_static_library("peerconnection_jni") {
  # Do not depend on this target externally unless you absolute have to. It is
  # made public because we don't have a proper NDK yet. Header APIs here are not
  # considered public and are subject to change.
  visibility = [ "*" ]

  sources = [
    "src/jni/androidnetworkmonitor_jni.h",
    "src/jni/pc/androidnetworkmonitor.h",
    "src/jni/pc/audiotrack.cc",
    "src/jni/pc/callsessionfilerotatinglogsink.cc",
    "src/jni/pc/datachannel.cc",
    "src/jni/pc/datachannel.h",
    "src/jni/pc/dtmfsender.cc",
    "src/jni/pc/icecandidate.cc",
    "src/jni/pc/icecandidate.h",
    "src/jni/pc/logging.cc",
    "src/jni/pc/mediaconstraints.cc",
    "src/jni/pc/mediaconstraints.h",
    "src/jni/pc/mediasource.cc",
    "src/jni/pc/mediastream.cc",
    "src/jni/pc/mediastream.h",
    "src/jni/pc/mediastreamtrack.cc",
    "src/jni/pc/mediastreamtrack.h",
    "src/jni/pc/ownedfactoryandthreads.cc",
    "src/jni/pc/ownedfactoryandthreads.h",
    "src/jni/pc/peerconnection.cc",
    "src/jni/pc/peerconnection.h",
    "src/jni/pc/peerconnectionfactory.cc",
    "src/jni/pc/peerconnectionfactory.h",
    "src/jni/pc/rtcstatscollectorcallbackwrapper.cc",
    "src/jni/pc/rtcstatscollectorcallbackwrapper.h",
    "src/jni/pc/rtpparameters.cc",
    "src/jni/pc/rtpparameters.h",
    "src/jni/pc/rtpreceiver.cc",
    "src/jni/pc/rtpreceiver.h",
    "src/jni/pc/rtpsender.cc",
    "src/jni/pc/rtpsender.h",
    "src/jni/pc/rtptransceiver.cc",
    "src/jni/pc/rtptransceiver.h",
    "src/jni/pc/sdpobserver.cc",
    "src/jni/pc/sdpobserver.h",
    "src/jni/pc/sessiondescription.cc",
    "src/jni/pc/sessiondescription.h",
    "src/jni/pc/statsobserver.cc",
    "src/jni/pc/statsobserver.h",
    "src/jni/pc/turncustomizer.cc",
    "src/jni/pc/turncustomizer.h",
  ]

  configs += [ ":libjingle_peerconnection_jni_warnings_config" ]

  if (is_clang) {
    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
    suppressed_configs += [
      "//build/config/clang:extra_warnings",
      "//build/config/clang:find_bad_constructs",
    ]
  }

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

  if (is_win) {
    cflags += [
      "/wd4245",  # conversion from "int" to "size_t", signed/unsigned mismatch.
      "/wd4389",  # signed/unsigned mismatch.
    ]
  }

  deps = [
    ":base_jni",
    ":generated_external_classes_jni",
    ":generated_peerconnection_jni",
    ":native_api_jni",
    "../..:webrtc_common",
    "../../api:libjingle_peerconnection_api",
    "../../api/video_codecs:video_codecs_api",
    "../../logging:rtc_event_log_api",
    "../../logging:rtc_event_log_impl_base",
    "../../media:rtc_data",
    "../../media:rtc_media_base",
    "../../modules/audio_device:audio_device",
    "../../modules/utility:utility",
    "../../pc:peerconnection",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base",
    "../../rtc_base:rtc_base_approved",
    "../../rtc_base:rtc_task_queue",
    "../../rtc_base:stringutils",
    "../../system_wrappers:field_trial_api",
  ]
}

rtc_static_library("libjingle_peerconnection_jni") {
  visibility = [ "*" ]
  allow_poison = [
    "audio_codecs",  # TODO(bugs.webrtc.org/8396): Remove.
    "software_video_codecs",  # TODO(bugs.webrtc.org/7925): Remove.
  ]
  public_deps = [
    ":audio_jni",
    ":base_jni",
    ":java_audio_device_module_jni",
    ":media_jni",
    ":peerconnection_jni",
    ":video_jni",
    "../../pc:create_pc_factory",
  ]
}

generate_jni("generated_metrics_jni") {
  sources = [
    "api/org/webrtc/Metrics.java",
  ]
  jni_package = ""
  jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
}

rtc_static_library("libjingle_peerconnection_metrics_default_jni") {
  visibility = [ "*" ]
  sources = [
    "src/jni/androidmetrics.cc",
  ]

  configs += [ ":libjingle_peerconnection_jni_warnings_config" ]

  deps = [
    ":base_jni",
    ":generated_metrics_jni",
    ":native_api_jni",
    ":peerconnection_jni",
    "../../pc:peerconnection",
    "../../system_wrappers:field_trial_default",
    "../../system_wrappers:metrics_api",
    "../../system_wrappers:metrics_default",
    "../../system_wrappers:runtime_enabled_features_default",
  ]
}

# The modular build targets can be used to build WebRTC with different
# functionalities. The users can choose either the real implemenation or the
# null implementation of the audio/video modules based on their requirments.
rtc_shared_library("libjingle_peerconnection_datachannelonly_so") {
  sources = [
    "src/jni/jni_onload.cc",
  ]

  suppressed_configs += [ "//build/config/android:hide_all_but_jni_onload" ]
  configs += [ "//build/config/android:hide_all_but_jni" ]

  deps = [
    ":base_jni",
    ":libjingle_peerconnection_metrics_default_jni",
    ":null_audio_jni",
    ":null_media_jni",
    ":null_video_jni",
    ":peerconnection_jni",
    "../../pc:peerconnection",
    "../../rtc_base:rtc_base",
    "../../rtc_base:rtc_base_approved",
  ]
  output_extension = "so"
}

rtc_shared_library("libjingle_peerconnection_so") {
  sources = [
    "src/jni/jni_onload.cc",
  ]

  suppressed_configs += [ "//build/config/android:hide_all_but_jni_onload" ]
  configs += [ "//build/config/android:hide_all_but_jni" ]

  deps = [
    ":libjingle_peerconnection_jni",
    ":libjingle_peerconnection_metrics_default_jni",
    "../../pc:libjingle_peerconnection",
    "../../rtc_base:rtc_base",
  ]
  output_extension = "so"
}

dist_jar("libwebrtc") {
  _target_dir_name = get_label_info(":$target_name", "dir")
  output = "${root_out_dir}/lib.java${_target_dir_name}/${target_name}.jar"
  direct_deps_only = true
  use_unprocessed_jars = true
  requires_android = true
  no_build_hooks = true

  deps = [
    ":audio_api_java",
    ":base_java",
    ":camera_java",
    ":filevideo_java",
    ":hwcodecs_java",
    ":java_audio_device_module_java",
    ":libjingle_peerconnection_java",
    ":libjingle_peerconnection_metrics_default_java",
    ":peerconnection_java",
    ":screencapturer_java",
    ":surfaceviewrenderer_java",
    ":video_api_java",
    ":video_java",
    "../../modules/audio_device:audio_device_java",
    "../../rtc_base:base_java",
  ]

  if (rtc_use_builtin_sw_codecs) {
    deps += [ ":swcodecs_java" ]
  }
}

# TODO(sakal): Extract files from this target to releveant subtargets, video, audio etc.
rtc_android_library("base_java") {
  java_files = [
    "api/org/webrtc/RefCounted.java",
    "src/java/org/webrtc/CalledByNative.java",
    "src/java/org/webrtc/CalledByNativeUnchecked.java",
    "src/java/org/webrtc/Histogram.java",
    "src/java/org/webrtc/JniCommon.java",
    "src/java/org/webrtc/JniHelper.java",
    "src/java/org/webrtc/JNINamespace.java",
    "src/java/org/webrtc/NativeClassQualifiedName.java",
    "src/java/org/webrtc/RefCountDelegate.java",
    "src/java/org/webrtc/WebRtcClassLoader.java",
  ]

  deps = [
    "//rtc_base:base_java",
  ]
}

rtc_android_library("video_api_java") {
  java_files = [
    "api/org/webrtc/EncodedImage.java",
    "api/org/webrtc/VideoCapturer.java",
    "api/org/webrtc/VideoCodecInfo.java",
    "api/org/webrtc/VideoCodecStatus.java",
    "api/org/webrtc/VideoDecoder.java",
    "api/org/webrtc/VideoDecoderFactory.java",
    "api/org/webrtc/VideoEncoder.java",
    "api/org/webrtc/VideoEncoderFactory.java",
    "api/org/webrtc/VideoFrame.java",
    "api/org/webrtc/VideoRenderer.java",  # TODO(sakal): Remove
    "api/org/webrtc/VideoSink.java",
  ]

  # TODO(sakal): These should be moved to video_java but cannot because of dependencies.
  java_files += [
    "api/org/webrtc/EglBase.java",
    "api/org/webrtc/GlShader.java",
    "api/org/webrtc/GlTextureFrameBuffer.java",
    "api/org/webrtc/GlUtil.java",
    "api/org/webrtc/JavaI420Buffer.java",
    "api/org/webrtc/RendererCommon.java",
    "api/org/webrtc/SurfaceTextureHelper.java",
    "api/org/webrtc/TextureBufferImpl.java",
    "api/org/webrtc/YuvConverter.java",
    "api/org/webrtc/YuvHelper.java",
    "src/java/org/webrtc/EglBase10.java",
    "src/java/org/webrtc/EglBase14.java",
  ]

  deps = [
    ":base_java",
    "//rtc_base:base_java",
  ]
}

rtc_android_library("audio_api_java") {
  java_files = [ "api/org/webrtc/audio/AudioDeviceModule.java" ]

  deps = [
    ":base_java",
    "//rtc_base:base_java",
  ]
}

rtc_android_library("java_audio_device_module_java") {
  java_files = [
    "api/org/webrtc/audio/JavaAudioDeviceModule.java",
    "src/java/org/webrtc/audio/VolumeLogger.java",
    "src/java/org/webrtc/audio/WebRtcAudioEffects.java",
    "src/java/org/webrtc/audio/WebRtcAudioManager.java",
    "src/java/org/webrtc/audio/WebRtcAudioRecord.java",
    "src/java/org/webrtc/audio/WebRtcAudioTrack.java",
    "src/java/org/webrtc/audio/WebRtcAudioUtils.java",
  ]

  deps = [
    ":audio_api_java",
    ":base_java",
    "//rtc_base:base_java",
  ]
}

# JNI target for java_audio_device_module_java
rtc_source_set("java_audio_device_module_jni") {
  sources = [
    "src/jni/audio_device/java_audio_device_module.cc",
  ]

  deps = [
    ":base_jni",
    ":generated_java_audio_jni",
    ":java_audio_device_module",
  ]
}

generate_jni("generated_java_audio_jni") {
  sources = [
    "api/org/webrtc/audio/JavaAudioDeviceModule.java",
  ]
  jni_package = ""
  jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
}

rtc_android_library("video_java") {
  java_files = [
    "api/org/webrtc/EglRenderer.java",
    "api/org/webrtc/GlRectDrawer.java",
    "api/org/webrtc/VideoDecoderFallback.java",
    "api/org/webrtc/VideoEncoderFallback.java",
    "api/org/webrtc/VideoFrameDrawer.java",
    "src/java/org/webrtc/NV21Buffer.java",
    "src/java/org/webrtc/VideoDecoderWrapper.java",
    "src/java/org/webrtc/VideoEncoderWrapper.java",
    "src/java/org/webrtc/WrappedNativeI420Buffer.java",
    "src/java/org/webrtc/WrappedNativeVideoDecoder.java",
    "src/java/org/webrtc/WrappedNativeVideoEncoder.java",
  ]

  deps = [
    ":base_java",
    ":video_api_java",
    "//rtc_base:base_java",
  ]
}

rtc_android_library("camera_java") {
  java_files = [
    "api/org/webrtc/Camera1Capturer.java",
    "api/org/webrtc/Camera1Enumerator.java",
    "api/org/webrtc/Camera2Capturer.java",
    "api/org/webrtc/Camera2Enumerator.java",
    "api/org/webrtc/CameraEnumerationAndroid.java",
    "api/org/webrtc/CameraEnumerator.java",
    "api/org/webrtc/CameraVideoCapturer.java",
    "src/java/org/webrtc/Camera1Session.java",
    "src/java/org/webrtc/Camera2Session.java",
    "src/java/org/webrtc/CameraCapturer.java",
    "src/java/org/webrtc/CameraSession.java",
  ]

  deps = [
    ":base_java",
    ":video_api_java",
    ":video_java",
    "//rtc_base:base_java",
  ]
}

rtc_android_library("screencapturer_java") {
  java_files = [ "api/org/webrtc/ScreenCapturerAndroid.java" ]

  deps = [
    ":video_api_java",
    ":video_java",
    "//rtc_base:base_java",
  ]
}

rtc_android_library("surfaceviewrenderer_java") {
  java_files = [
    "api/org/webrtc/SurfaceEglRenderer.java",
    "api/org/webrtc/SurfaceViewRenderer.java",
  ]

  deps = [
    ":video_api_java",
    ":video_java",
    "//rtc_base:base_java",
  ]
}

rtc_android_library("filevideo_java") {
  java_files = [
    "api/org/webrtc/VideoFileRenderer.java",
    "api/org/webrtc/FileVideoCapturer.java",
  ]

  deps = [
    ":base_java",
    ":video_api_java",
    ":video_java",
    "//rtc_base:base_java",
  ]
}

if (rtc_use_builtin_sw_codecs) {
  rtc_android_library("swcodecs_java") {
    java_files = [
      "api/org/webrtc/SoftwareVideoDecoderFactory.java",
      "api/org/webrtc/SoftwareVideoEncoderFactory.java",
      "src/java/org/webrtc/VP8Encoder.java",
      "src/java/org/webrtc/VP8Decoder.java",
      "src/java/org/webrtc/VP9Encoder.java",
      "src/java/org/webrtc/VP9Decoder.java",
    ]

    deps = [
      ":base_java",
      ":video_api_java",
      ":video_java",
      "//rtc_base:base_java",
    ]
  }
}

rtc_android_library("hwcodecs_java") {
  java_files = [
    "src/java/org/webrtc/BaseBitrateAdjuster.java",
    "src/java/org/webrtc/BitrateAdjuster.java",
    "src/java/org/webrtc/DynamicBitrateAdjuster.java",
    "src/java/org/webrtc/FramerateBitrateAdjuster.java",
    "src/java/org/webrtc/HardwareVideoDecoder.java",
    "src/java/org/webrtc/HardwareVideoEncoder.java",
    "src/java/org/webrtc/MediaCodecUtils.java",
    "src/java/org/webrtc/NV12Buffer.java",
    "src/java/org/webrtc/VideoCodecType.java",
  ]

  deps = [
    ":base_java",
    ":video_api_java",
    ":video_java",
    "//rtc_base:base_java",
  ]

  if (rtc_use_builtin_sw_codecs) {
    java_files += [
      "api/org/webrtc/HardwareVideoDecoderFactory.java",  # TODO(andersc): make this not depend on SoftwareVideoDecoderFactory
      "api/org/webrtc/HardwareVideoEncoderFactory.java",  # TODO(andersc): make this not depend on SoftwareVideoEncoderFactory
    ]

    deps += [ ":swcodecs_java" ]
  }
}

rtc_android_library("peerconnection_java") {
  java_files = [
    "api/org/webrtc/audio/LegacyAudioDeviceModule.java",
    "api/org/webrtc/AudioProcessingFactory.java",
    "api/org/webrtc/AudioSource.java",
    "api/org/webrtc/AudioTrack.java",
    "api/org/webrtc/CallSessionFileRotatingLogSink.java",
    "api/org/webrtc/DataChannel.java",
    "api/org/webrtc/DtmfSender.java",
    "api/org/webrtc/FecControllerFactoryFactoryInterface.java",
    "api/org/webrtc/IceCandidate.java",
    "api/org/webrtc/MediaCodecVideoDecoder.java",
    "api/org/webrtc/MediaCodecVideoEncoder.java",
    "api/org/webrtc/MediaConstraints.java",
    "api/org/webrtc/MediaSource.java",
    "api/org/webrtc/MediaStream.java",
    "api/org/webrtc/MediaStreamTrack.java",
    "api/org/webrtc/NativeLibraryLoader.java",
    "api/org/webrtc/NativePeerConnectionFactory.java",
    "api/org/webrtc/NetworkMonitor.java",  # TODDO(sakal): Break dependencies and move to base_java.
    "api/org/webrtc/NetworkMonitorAutoDetect.java",  # TODDO(sakal): Break dependencies and move to base_java.
    "api/org/webrtc/PeerConnection.java",
    "api/org/webrtc/PeerConnectionFactory.java",
    "api/org/webrtc/RTCStats.java",
    "api/org/webrtc/RTCStatsCollectorCallback.java",
    "api/org/webrtc/RTCStatsReport.java",
    "api/org/webrtc/RtpParameters.java",
    "api/org/webrtc/RtpReceiver.java",
    "api/org/webrtc/RtpSender.java",
    "api/org/webrtc/RtpTransceiver.java",
    "api/org/webrtc/SdpObserver.java",
    "api/org/webrtc/SessionDescription.java",
    "api/org/webrtc/StatsObserver.java",
    "api/org/webrtc/StatsReport.java",
    "api/org/webrtc/TurnCustomizer.java",
    "api/org/webrtc/VideoSource.java",
    "api/org/webrtc/VideoTrack.java",
    "src/java/org/webrtc/NativeLibrary.java",
  ]

  deps = [
    ":audio_api_java",
    ":base_java",
    ":video_api_java",
    ":video_java",  # TODO(sakal): Remove dependency.
    "//modules/audio_device:audio_device_java",
    "//rtc_base:base_java",
  ]
}

# Old target that pulls in everything. This will be going away in the future,
# clients should depend on individual video_java etc. targets instead.
rtc_android_library("libjingle_peerconnection_java") {
  java_files = [ "src/java/org/webrtc/Empty.java" ]

  deps = [
    ":audio_api_java",
    ":base_java",
    ":camera_java",
    ":filevideo_java",
    ":hwcodecs_java",
    ":java_audio_device_module_java",
    ":peerconnection_java",
    ":screencapturer_java",
    ":surfaceviewrenderer_java",
    ":video_api_java",
    ":video_java",
    "//modules/audio_device:audio_device_java",
    "//rtc_base:base_java",
  ]

  if (rtc_use_builtin_sw_codecs) {
    deps += [ ":swcodecs_java" ]

    java_files += [
      "api/org/webrtc/DefaultVideoDecoderFactory.java",
      "api/org/webrtc/DefaultVideoEncoderFactory.java",
    ]
  }
}

rtc_android_library("libjingle_peerconnection_metrics_default_java") {
  java_files = [ "api/org/webrtc/Metrics.java" ]

  deps = [
    ":base_java",
    ":libjingle_peerconnection_java",
    "../../rtc_base:base_java",
  ]
}

if (rtc_include_tests) {
  rtc_instrumentation_test_apk("libjingle_peerconnection_android_unittest") {
    apk_name = "libjingle_peerconnection_android_unittest"
    android_manifest = "instrumentationtests/AndroidManifest.xml"

    java_files = [
      "instrumentationtests/src/org/webrtc/Camera1CapturerUsingByteBufferTest.java",
      "instrumentationtests/src/org/webrtc/Camera1CapturerUsingTextureTest.java",
      "instrumentationtests/src/org/webrtc/Camera2CapturerTest.java",
      "instrumentationtests/src/org/webrtc/CameraVideoCapturerTestFixtures.java",
      "instrumentationtests/src/org/webrtc/DefaultVideoEncoderFactoryTest.java",
      "instrumentationtests/src/org/webrtc/EglRendererTest.java",
      "instrumentationtests/src/org/webrtc/FileVideoCapturerTest.java",
      "instrumentationtests/src/org/webrtc/GlRectDrawerTest.java",
      "instrumentationtests/src/org/webrtc/HardwareVideoDecoderTest.java",
      "instrumentationtests/src/org/webrtc/HardwareVideoEncoderTest.java",
      "instrumentationtests/src/org/webrtc/MediaCodecVideoEncoderTest.java",
      "instrumentationtests/src/org/webrtc/NetworkMonitorTest.java",
      "instrumentationtests/src/org/webrtc/PeerConnectionFactoryTest.java",
      "instrumentationtests/src/org/webrtc/PeerConnectionTest.java",
      "instrumentationtests/src/org/webrtc/RendererCommonTest.java",
      "instrumentationtests/src/org/webrtc/SurfaceTextureHelperTest.java",
      "instrumentationtests/src/org/webrtc/SurfaceViewRendererOnMeasureTest.java",
      "instrumentationtests/src/org/webrtc/VideoFileRendererTest.java",
      "instrumentationtests/src/org/webrtc/WebRtcJniBootTest.java",
      "instrumentationtests/src/org/webrtc/YuvHelperTest.java",
    ]

    data = [
      "../../sdk/android/instrumentationtests/src/org/webrtc/capturetestvideo.y4m",
    ]

    deps = [
      ":base_java",
      ":libjingle_peerconnection_java",
      ":libjingle_peerconnection_metrics_default_java",
      ":video_api_java",
      "//base:base_java",
      "//base:base_java_test_support",
      "//rtc_base:base_java",
      "//third_party/android_support_test_runner:rules_java",
      "//third_party/android_support_test_runner:runner_java",
      "//third_party/junit",
    ]

    shared_libraries = [ "../../sdk/android:libjingle_peerconnection_so" ]
  }
}

# The native API is currently experimental and may change without notice.
group("native_api") {
  deps = [
    ":native_api_audio_device_module",
    ":native_api_base",
    ":native_api_codecs",
    ":native_api_jni",
    ":native_api_peerconnection",
    ":native_api_video",
  ]
}

rtc_static_library("native_api_base") {
  visibility = [ "*" ]
  sources = [
    "native_api/base/init.cc",
    "native_api/base/init.h",
    "native_api/base/networkmonitor.cc",
    "native_api/base/networkmonitor.h",
  ]

  deps = [
    ":base_jni",
    ":native_api_jni",
    "//rtc_base:checks",
    "//rtc_base:rtc_base",
  ]
}

generate_jni("generated_native_api_jni") {
  sources = [
    "src/java/org/webrtc/JniHelper.java",
    "src/java/org/webrtc/WebRtcClassLoader.java",
  ]
  jni_package = ""
  jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
}

# JNI helpers that are also needed from internal JNI code. Cannot depend on any
# other JNI targets than internal_jni.
rtc_static_library("native_api_jni") {
  visibility = [ "*" ]
  sources = [
    "native_api/jni/class_loader.cc",
    "native_api/jni/class_loader.h",
    "native_api/jni/java_types.cc",
    "native_api/jni/java_types.h",
    "native_api/jni/jvm.cc",
    "native_api/jni/jvm.h",
    "native_api/jni/scoped_java_ref.h",
    "src/jni/jni_generator_helper.cc",
    "src/jni/jni_generator_helper.h",
  ]

  public = [
    "native_api/jni/class_loader.h",
    "native_api/jni/java_types.h",
    "native_api/jni/jvm.h",
    "native_api/jni/scoped_java_ref.h",
  ]

  deps = [
    ":generated_external_classes_jni",
    ":generated_native_api_jni",
    ":internal_jni",
    "//api:optional",
    "//rtc_base:checks",
    "//rtc_base:rtc_base_approved",
  ]
}

# API for wrapping Java VideoDecoderFactory/VideoEncoderFactory classes to C++
# objects.
rtc_static_library("native_api_codecs") {
  visibility = [ "*" ]
  allow_poison = [
    "audio_codecs",  # TODO(bugs.webrtc.org/8396): Remove.
    "software_video_codecs",  # TODO(bugs.webrtc.org/7925): Remove.
  ]
  sources = [
    "native_api/codecs/wrapper.cc",
    "native_api/codecs/wrapper.h",
  ]

  deps = [
    ":base_jni",
    ":video_jni",
    "//api/video_codecs:video_codecs_api",
    "//rtc_base:checks",
    "//rtc_base:rtc_base_approved",
  ]
}

# API for creating Java PeerConnectionFactory from C++ equivalents.
rtc_static_library("native_api_peerconnection") {
  visibility = [ "*" ]
  sources = [
    "native_api/peerconnection/peerconnectionfactory.cc",
    "native_api/peerconnection/peerconnectionfactory.h",
  ]

  if (is_clang) {
    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
    suppressed_configs += [
      "//build/config/clang:extra_warnings",
      "//build/config/clang:find_bad_constructs",
    ]
  }

  deps = [
    ":base_jni",
    ":peerconnection_jni",
    "//api:libjingle_peerconnection_api",
    "//api/video_codecs:video_codecs_api",
    "//rtc_base:rtc_base",
  ]
}

# API for creating C++ wrapper implementations of api/mediastreaminterface.h
# video interfaces from their Java equivalents.
rtc_static_library("native_api_video") {
  visibility = [ "*" ]
  allow_poison = [
    "audio_codecs",  # TODO(bugs.webrtc.org/8396): Remove.
    "software_video_codecs",  # TODO(bugs.webrtc.org/7925): Remove.
  ]
  sources = [
    "native_api/video/wrapper.cc",
    "native_api/video/wrapper.h",
  ]
  deps = [
    ":native_api_jni",
    ":video_jni",
    "//api:libjingle_peerconnection_api",
    "//api/video:video_frame",
    "//rtc_base:rtc_base_approved",
  ]
}

generate_jni("generated_native_unittests_jni") {
  testonly = true

  sources = [
    "native_unittests/org/webrtc/ApplicationContextProvider.java",
    "native_unittests/org/webrtc/BuildInfo.java",
    "native_unittests/org/webrtc/JavaTypesTestHelper.java",
    "native_unittests/org/webrtc/PeerConnectionFactoryInitializationHelper.java",
  ]
  jni_package = ""
  jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
}

rtc_android_library("native_unittests_java") {
  testonly = true

  java_files = [
    "native_unittests/org/webrtc/ApplicationContextProvider.java",
    "native_unittests/org/webrtc/BuildInfo.java",
    "native_unittests/org/webrtc/JavaTypesTestHelper.java",
    "native_unittests/org/webrtc/PeerConnectionFactoryInitializationHelper.java",
  ]

  deps = [
    ":libjingle_peerconnection_java",
    "//third_party/android_support_test_runner:runner_java",
  ]
}

rtc_source_set("native_unittests") {
  testonly = true

  sources = [
    "native_unittests/audio_device/audio_device_unittest.cc",
    "native_unittests/java_types_unittest.cc",
    "native_unittests/peerconnection/peerconnectionfactory_unittest.cc",
    "native_unittests/test_jni_onload.cc",
  ]

  data = [
    "../../resources/audio_device/audio_short44.pcm",
    "../../resources/audio_device/audio_short48.pcm",
  ]

  if (is_clang) {
    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
    suppressed_configs += [
      "//build/config/clang:extra_warnings",
      "//build/config/clang:find_bad_constructs",
    ]
  }

  deps = [
    ":audio_device_module_base",
    ":audio_jni",
    ":base_jni",
    ":generated_native_unittests_jni",
    ":media_jni",
    ":native_api_audio_device_module",
    ":native_api_base",
    ":native_api_jni",
    ":native_api_peerconnection",
    ":native_unittests_java",
    ":opensles_audio_device_module",
    ":video_jni",
    "../../system_wrappers:system_wrappers",
    "//api/audio_codecs:builtin_audio_decoder_factory",
    "//api/audio_codecs:builtin_audio_encoder_factory",
    "//media:rtc_audio_video",
    "//media:rtc_internal_video_codecs",
    "//media:rtc_media_base",
    "//modules/audio_device:audio_device",
    "//modules/audio_device:mock_audio_device",
    "//modules/audio_processing:audio_processing",
    "//modules/utility:utility",
    "//pc:libjingle_peerconnection",
    "//rtc_base:checks",
    "//rtc_base:rtc_base_approved",
    "//test:fileutils",
    "//test:test_support",
    "//testing/gtest",
  ]
}
