# Copyright 2019 The Chromium OS 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("//common-mk/mojom_bindings_generator.gni")
import("//common-mk/pkg_config.gni")

group("all") {
  deps = [ ":midis" ]
  if (use.test) {
    deps += [ ":midis_testrunner" ]
  }
  if (use.fuzzer) {
    deps += [ ":midis_seq_handler_fuzzer" ]
  }
}

generate_mojom_bindings("midis_mojo_bindings") {
  sources = [ "mojo/midis.mojom" ]
}

pkg_config("midis_common_pkg_deps") {
  pkg_deps = [
    "alsa",
    "libbrillo",
    "libchrome",
    "libmojo",
  ]
}

static_library("midis_common") {
  sources = [
    # Files included from Chrome //src/media/midi checkout.
    # This directory is placed in platform2 as platform2/media/midi.
    "../media/midi/message_util.cc",
    "../media/midi/midi_message_queue.cc",
    "client.cc",
    "client_tracker.cc",
    "device.cc",
    "device_tracker.cc",
    "ports.cc",
    "seq_handler.cc",
    "subdevice_client_fd_holder.cc",
  ]
  all_dependent_configs = [ ":midis_common_pkg_deps" ]
  deps = [ ":midis_mojo_bindings" ]
}

executable("midis") {
  sources = [
    "daemon.cc",
    "main.cc",
  ]
  libs = [ "dl" ]
  deps = [ ":midis_common" ]
}

if (use.test) {
  executable("midis_testrunner") {
    sources = [
      "tests/client_test.cc",
      "tests/client_tracker_test.cc",
      "tests/device_tracker_test.cc",
      "tests/seq_handler_test.cc",
      "tests/test_helper.cc",
    ]
    configs += [ "//common-mk:test" ]
    deps = [
      ":midis_common",
      "../common-mk/testrunner:testrunner",
    ]
  }
}

# Fuzzer target.
if (use.fuzzer) {
  executable("midis_seq_handler_fuzzer") {
    sources = [ "seq_handler_fuzzer.cc" ]
    configs += [ "//common-mk/common_fuzzer:common_fuzzer" ]
    deps = [ ":midis_common" ]
  }
}
