# 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("../../build/webrtc.gni")

config("audio_device_config") {
  include_dirs = [
    "../interface",
    "include",
    "dummy",  # Contains dummy audio device implementations.
  ]
}

source_set("audio_device") {
  sources = [
    "audio_device_buffer.cc",
    "audio_device_buffer.h",
    "audio_device_config.h",
    "audio_device_generic.cc",
    "audio_device_generic.h",
    "dummy/audio_device_dummy.cc",
    "dummy/audio_device_dummy.h",
    "dummy/file_audio_device.cc",
    "dummy/file_audio_device.h",
    "fine_audio_buffer.cc",
    "fine_audio_buffer.h",
    "include/audio_device.h",
    "include/audio_device_defines.h",
  ]

  include_dirs = []
  if (is_linux) {
    include_dirs += [ "linux" ]
  }
  if (is_ios) {
    include_dirs += [ "ios" ]
  }
  if (is_mac) {
    include_dirs += [ "mac" ]
  }
  if (is_win) {
    include_dirs += [ "win" ]
  }
  if (is_android) {
    include_dirs += [ "android" ]
  }
  defines = []
  if (rtc_include_internal_audio_device) {
    defines += [ "WEBRTC_INCLUDE_INTERNAL_AUDIO_DEVICE" ]
    sources += [
      "android/audio_device_template.h",
      "android/audio_manager.cc",
      "android/audio_manager.h",
      "android/audio_record_jni.cc",
      "android/audio_record_jni.h",
      "android/audio_track_jni.cc",
      "android/audio_track_jni.h",
      "android/opensles_common.cc",
      "android/opensles_common.h",
      "android/opensles_player.cc",
      "android/opensles_player.h",
      "audio_device_impl.cc",
      "audio_device_impl.h",
      "ios/audio_device_ios.h",
      "ios/audio_device_ios.mm",
      "linux/alsasymboltable_linux.cc",
      "linux/alsasymboltable_linux.h",
      "linux/audio_device_alsa_linux.cc",
      "linux/audio_device_alsa_linux.h",
      "linux/audio_mixer_manager_alsa_linux.cc",
      "linux/audio_mixer_manager_alsa_linux.h",
      "linux/latebindingsymboltable_linux.cc",
      "linux/latebindingsymboltable_linux.h",
      "mac/audio_device_mac.cc",
      "mac/audio_device_mac.h",
      "mac/audio_mixer_manager_mac.cc",
      "mac/audio_mixer_manager_mac.h",
      "mac/portaudio/pa_memorybarrier.h",
      "mac/portaudio/pa_ringbuffer.c",
      "mac/portaudio/pa_ringbuffer.h",
      "win/audio_device_core_win.cc",
      "win/audio_device_core_win.h",
      "win/audio_device_wave_win.cc",
      "win/audio_device_wave_win.h",
      "win/audio_mixer_manager_win.cc",
      "win/audio_mixer_manager_win.h",
    ]
    if (is_linux) {
      defines += [ "LINUX_ALSA" ]

      libs = [
        "dl",
        "X11",
      ]

      if (rtc_include_pulse_audio) {
        sources += [
          "linux/audio_device_pulse_linux.cc",
          "linux/audio_device_pulse_linux.h",
          "linux/audio_mixer_manager_pulse_linux.cc",
          "linux/audio_mixer_manager_pulse_linux.h",
          "linux/pulseaudiosymboltable_linux.cc",
          "linux/pulseaudiosymboltable_linux.h",
        ]

        defines += [ "LINUX_PULSE" ]
      }
    }
    if (is_mac) {
      libs = [
        "AudioToolbox.framework",
        "CoreAudio.framework",
      ]
    }
    if (is_ios) {
      cflags += [ "-fobjc-arc" ]  # CLANG_ENABLE_OBJC_ARC = YES.

      libs = [
        "AudioToolbox.framework",
        "AVFoundation.framework",
        "Foundation.framework",
      ]
    }
    if (is_win) {
      libs = [
        # Required for the built-in WASAPI AEC.
        "dmoguids.lib",
        "wmcodecdspuuid.lib",
        "amstrmid.lib",
        "msdmo.lib",
      ]
    }
  } else {
    defines = [ "WEBRTC_DUMMY_AUDIO_BUILD" ]
  }

  if (!build_with_chromium) {
    sources += [
      # Do not link these into Chrome since they contain static data.
      "dummy/file_audio_device_factory.cc",
      "dummy/file_audio_device_factory.h",
    ]
  }

  configs += [ "../..:common_config" ]
  public_configs = [
    "../..:common_inherited_config",
    ":audio_device_config",
  ]

  if (is_clang) {
    # Suppress warnings from Chrome's Clang plugins.
    # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
    configs -= [ "//build/config/clang:find_bad_constructs" ]
  }

  deps = [
    "../..:webrtc_common",
    "../../base:rtc_base_approved",
    "../../common_audio",
    "../../system_wrappers",
    "../utility",
  ]
}
