# Copyright 2018 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")

package("signal_generator") {
  deps = [
    ":sig_gen_bin",
  ]

  binaries = [
    {
      name = "signal_generator"
      shell = true
    },
  ]
}

executable("sig_gen_bin") {
  output_name = "signal_generator"

  sources = [
    "main.cc",
    "signal_generator.cc",
    "signal_generator.h",
  ]

  deps = [
    "//garnet/lib/media/wav_writer",
    "//garnet/public/fidl/fuchsia.media",
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/fzl",
  ]
}
