# Copyright 2016 The Fuchsia 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/package.gni")

action_foreach("generate_schemas") {
  visibility = [ ":*" ]
  
  script = "//src/media/audio/audio_core/schema/make_schema_header.py"

  outputs = [
    "$target_gen_dir/schema/{{source_name_part}}.inl",
  ]

  args = [
    "{{source}}",
    rebase_path("$target_gen_dir") + "/schema/{{source_name_part}}.inl",
  ]

  sources = [
    "schema/audio_device_settings_schema.jsx",
  ]
}

package("audio_core") {
  deps = [
    "//src/media/audio/audio_core:audio_core_bin",
    "//src/media/audio/audio_core/audiofx",
  ]

  binaries = [
    {
      name = "audio_core"
    },
  ]

  loadable_modules = [
    {
      # This audio processing library is hosted in the audio_core process.
      name = "audiofx.so"
    },
  ]

  meta = [
    {
      path = rebase_path("meta/audio_core.cmx")
      dest = "audio_core.cmx"
    },
  ]
}

executable("audio_core_bin") {
  output_name = "audio_core"

  sources = [
    "audio_capturer_impl.cc",
    "audio_capturer_impl.h",
    "audio_core_impl.cc",
    "audio_core_impl.h",
    "audio_device.cc",
    "audio_device.h",
    "audio_device_manager.cc",
    "audio_device_manager.h",
    "audio_device_settings.cc",
    "audio_device_settings.h",
    "audio_driver.cc",
    "audio_driver.h",
    "audio_input.cc",
    "audio_input.h",
    "audio_link.cc",
    "audio_link.h",
    "audio_link_packet_source.cc",
    "audio_link_packet_source.h",
    "audio_link_ring_buffer_source.cc",
    "audio_link_ring_buffer_source.h",
    "audio_object.cc",
    "audio_object.h",
    "audio_output.cc",
    "audio_output.h",
    "audio_packet_ref.cc",
    "audio_packet_ref.h",
    "audio_plug_detector.cc",
    "audio_plug_detector.h",
    "audio_renderer_format_info.cc",
    "audio_renderer_format_info.h",
    "audio_renderer_impl.cc",
    "audio_renderer_impl.h",
    "driver_output.cc",
    "driver_output.h",
    "driver_ring_buffer.cc",
    "driver_ring_buffer.h",
    "driver_utils.cc",
    "driver_utils.h",
    "fwd_decls.h",
    "main.cc",
    "pending_flush_token.cc",
    "pending_flush_token.h",
    "standard_output_base.cc",
    "standard_output_base.h",
    "throttle_output.cc",
    "throttle_output.h",
    "utils.cc",
    "utils.h",
  ]

  deps = [
    ":generate_schemas",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/media/timeline:no_converters",
    "//sdk/fidl/fuchsia.media",
    "//sdk/lib/media/audio/cpp",
    "//sdk/lib/sys/cpp:cpp",
    "//src/lib/fxl",
    "//src/media/audio/audio_core/mixer:audio_mixer_lib",
    "//src/media/audio/lib/wav_writer:wav_writer",
    "//third_party/rapidjson",
    "//zircon/public/fidl/fuchsia-hardware-audio",
    "//zircon/public/fidl/fuchsia-scheduler",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/audio-proto-utils",
    "//zircon/public/lib/dispatcher-pool",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/fzl",
    "//zircon/public/lib/zx",
  ]

  public_deps = [
    "//zircon/public/lib/fit",
  ]
}

group("tests") {
  testonly = true

  data_deps = [
    "mixer:audio_mixer_tests",
    "test",
    "//sdk/lib/media/audio_dfx/cpp:audio_dfx_tests"
  ]
}
