# Copyright 2017 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/chrome_build.gni")
import("//build/config/ios/rules.gni")
import("//remoting/build/config/remoting_build.gni")

source_set("audio") {
  sources = [
    "audio_playback_sink_ios.cc",
    "audio_playback_sink_ios.h",
    "audio_player_ios.h",
    "audio_player_ios.mm",
    "audio_player_ios_wrapper.h",
    "audio_stream_consumer_proxy.cc",
    "audio_stream_consumer_proxy.h",
  ]

  deps = [
    "//base",
    "//remoting/base",
    "//remoting/client/audio",
  ]

  public_deps = [
    "//remoting/proto",
  ]

  libs = [ "AudioToolbox.framework" ]

  configs += [ "//build/config/compiler:enable_arc" ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "audio_playback_sink_ios_unittest.cc",
  ]
  deps = [
    ":audio",
    "//remoting/client/audio:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]

  configs += [ "//build/config/compiler:enable_arc" ]
}
